Sonderdruck von - Resilient Software Design Patterns Thorsten Maier, OIO Orientation in Objects GmbH

Die Seite wird erstellt Niklas-Maximilian Göbel
 
WEITER LESEN
Sonderdruck von - Resilient Software Design Patterns Thorsten Maier, OIO Orientation in Objects GmbH
Java aktuell
Ausgabe 01/2018

                                                                                                                                                          iJUG
                                                                                                                                                          Verbund
                                                                                                                                                         www.ijug.eu
Java aktuell

                                                                                  Resilient
                                                                       Die Programmiersprache Go
                                                                       Einfaches Deployment, hohe
                                                                                                  Software
                                                                                                   Continous Delivery
                                                                                                                     Design
                                                                                                   Grundlagen des Jenkins-
                                                                                                                            Patterns
                                                                                                                            Praktische Erfahrungen
                                                                                                                            Crypto 101 für eine
                                                                                        Thorsten Maier, OIO Orientation in Objects GmbH
                                                                       Performance                 Pipeline-Plug-ins           sichere Verschlüsselung
                                                                                          - Artikel auf S. 55 - 59 im Originalheft -

                                                                           Die Zukunft von
 Praxis. Wissen. Networking. Das Magazin für Entwickler

                                                                               Java EE
                                                                            r d r u c k v o n
                                                                      Sonde
                                                                                    www.oio.de

      D: 4,90 EUR | CH: 9,80 CHF | A: 5,60 EUR | Benelux: 5,80 EUR
Sonderdruck von - Resilient Software Design Patterns Thorsten Maier, OIO Orientation in Objects GmbH
Fazit   Ihr Expertenhaus für Java und JavaScript.
Dieser Artikel wird noch keinen Entwickler zum Grafikdesigner ma-
chen. Aber der Autor hofft, er konnte hier einen ersten Eindruck und
                        Rent-a-Team
einen Einstieg geben. Wenn     das ein oder andere Missverständnis                        Aus unserem Schulungsprogramm:
in der Kommunikation mit Grafikdesignern in Zukunft leichter aus-
zuräumen ist oder es gar nicht erst auftritt,Architektur-
                                                                                          Resilient Software Design mit Java            Java Performance
                                               sind wir einen großen                      1 Tag: 19.03. / 02.07.2018     €   695,-      2 Tage: 05.03. / 18.06.2018   € 1.255,-

       Agile     Software                      beratung zu schaf-
Schritt weiter, um gemeinsam eine bessere Anwendung                                       Apache Kafka                                  ECMAScript mit TypeScript

              Factory
                                                                                          2 Tage: 15.02. / 29.05.2018    € 1.255,-      3 Tage: 11.06. / 24.09.2018   € 1.685,-
fen. Vielleicht möchte sich ja auch der eine oder andere tiefer mit                       Einführung in das Spring Framework            JavaScript Intensiveinstieg
                                                                                          3 Tage: 16.04. / 25.06.2018    € 1.685,-      2 Tage: 08.02. / 17.05.2018   € 1.195,-
diesem Thema beschäftigen. schlüsselfertige                                                                               Alexander (Sascha) Klein
                                                                                          Java 9 Update                                 Angular
                                                                                          1 Tag: 07.03. / 20.06.2018    alexander.klein@codecentric.de
                                                                                                                         € 695,-      3 Tage: 12.03. / 25.06.2018     € 1.685,-
                                    Realisierung                                          Java EE 8 Power Workshop                      Progressive Web Apps
                                                                                          5 Tage: 19.02. / 04.06.2018    € 2.490,-      1 Tag: 23.03. / 06.07.2018    €   695,-

                                                                                                  Alexander (Sascha) Klein ist Niederlassungsleiter der codecentric
                                         Continuous Delivery                                      AG am Standort Stuttgart. Er ist seit etwa zwanzig Jahren im Java-
                  Software-                                                               Viele weitere Seminare finden Sie unter www.oio.de.
                                                                                                  Umfeld
                                                                                          Alle Preise        alssich
                                                                                                      verstehen  Entwickler,
                                                                                                                     zzgl. gesetzl.Architekt  und Coach tätig. Seine Interessen-
                                                                                                                                    Mehrwertsteuer.
                  Sanierung                                                                       gebiete
                                                                                          Alle Seminare  sindsind
                                                                                                              auch UI-Entwicklung,        Ergonomie, DSLs
                                                                                                                   als Inhouse- oder Individualschulungen        und Produktivität in
                                                                                                                                                          möglich.

                                                                                                  der Software-Entwicklung. Er ist bekennender Groovy-Jünger und
                                                                                                  Committer beim)Open-Source-Projekt
                                                                                                                           Schulung )                  Griffon.)
                                                                                                                                                   ) Beratung         ) Entwicklung )

               OIO - Orientation in Objects GmbH I Weinheimer Str. 68 I 68309 Mannheim I Tel. +49 621 71839-0 I Fax +49 621 71839-50 I info@oio.de I www.oio.de

Resilient Software Design Patterns
Thorsten Maier, Orientation in Objects GmbH

Dieser Artikel beschreibt ausgewählte Entwurfsmuster zur Erstellung einer Software, die möglichst
widerstandsfähig (resilient) gegenüber dem Ausfall einzelner Teilsysteme ist. Die vorgestellten Muster sind
anhand einer kurzen Beispiel-Implementierung konkretisiert.

Software-Systeme werden immer komplexer. Eine klare Strukturierung                       und der Ausfall eines einzelnen Subsystems wird immer wahrschein-
und damit einhergehend eine Modularisierung ist die wichtigste Grund-                    licher. Ein Ausfall kann beispielsweise durch einen Programmierfehler
voraussetzung, um komplexe Systeme auch langfristig warten zu kön-                       bei einem Versionsupdate, die Störung des Netzwerks oder aber auch
nen. Mit steigender Komplexität steigt auch die Zahl der einzelnen Teile,                durch die Überlastung der Datenbank entstehen.

Java aktuell 01/18                                                                                                                                                                      55
Sonderdruck von - Resilient Software Design Patterns Thorsten Maier, OIO Orientation in Objects GmbH
Abbildung 1: Asynchrone Kommunikation

Traditionell haben wir versucht, die Verfügbarkeit einer Software-      JmsTemplate jmsTemplate = context.getBean(JmsTemplate.
Lösung durch eine möglichst hohe Verfügbarkeit der einzelnen Teile      class);
                                                                        jmsTemplate.convertAndSend("coffeeOrderQueue", new
zu maximieren. Ab einer gewissen Anzahl von Einzelteilen ist dieses     CoffeeOrder("horsten", "Cappuccino"));
Vorgehen allerdings extrem aufwendig, da sich die Wahrscheinlich-
keit für einen Ausfall mit jedem Teil erhöht.                          Listing 1

Warum entwickeln wir unsere Software zukünftig nicht unter der
Annahme, dass der Ausfall eines Teilsystems nicht die Ausnahme,         @JmsListener(destination = "coffeeOrderQueue")
sondern der Normalfall ist? Statt wie bisher zu versuchen, einen        public void receiveMessage(CoffeeOrder coffeeOrder) {
                                                                          System.out.println("Received ");
Fehler um jeden Preis zu verhindern, versuchen wir stattdessen,         }
möglichst gut auf die auftretenden Fehler und Ausfälle zu reagieren.
Genau das ist die Grundidee des Resilience Software Design. Wir        Listing 2
entwerfen ein Software-System, das möglichst widerstandsfähig
gegenüber Fehlern ist. Dabei helfen uns verschiedene wiederkeh-
rende Muster.                                                          Wahrscheinlichkeit ohnehin nicht alle Datensätze in einer sinnvollen
                                                                       Zeit verarbeiten kann.
Grundprinzipien
Betrachten wir zunächst das grundsätzliche Vorgehen für den Ent-       Um die Verfügbarkeit des Gesamtsystems weiter zu erhöhen, kön-
wurf eines widerstandsfähigen Systems. Grundlage sind dabei die        nen die lose gekoppelten Teile zudem redundant ausgelegt sein.
vier wesentlichen Prinzipien des Resilience Software Designs:          Da in einer widerstandsfähigen Anwendung ohnehin alle Prozesse
                                                                       mit dem Ausfall der anderen Prozesse und somit der kurzzeitigen
•   Isolation                                                          Nichtverfügbarkeit rechnen, ist die lastverteilte Umschaltung zwi-
•   Lose Kopplung                                                      schen mehreren redundanten Kopien der logische nächste Schritt.
•   Redundanz                                                          Zu guter Letzt ist mit einem Fallback-Verhalten auf der Seite des
•   Fallback                                                           Aufrufers sichergestellt, dass zumindest ein wesentlicher Teil der
                                                                       Funktionalität auch dann noch aufrechterhalten werden kann, wenn
Eine widerstandsfähige Anwendung kann nur entstehen, falls wir         trotz Redundanz Teilsysteme vollständig ausfallen.
möglichst isolierte Fehlereinheiten entwerfen, die auch in einer in-
stabilen Umgebung ihren Dienst möglichst lange aufrechterhalten.       Design-Muster
In jeder Fehlereinheit gelten alle umliegenden Teile per Definition    Nachdem wir uns die abstrakte Vorgehensweise für die Erstellung
als instabil; daher sollte die Kommunikation nach außen auf ein        einer widerstandsfähigen Anwendung angeschaut haben, folgt eine
Mindestmaß reduziert werden. Ist eine Kommunikation notwendig,         Auswahl der wichtigsten Muster zur Umsetzung dieses Konzepts.
so sollte jede Einheit jederzeit mit einem Kommunikationsfehler        Diese lassen sich grob in zwei Kommunikationsarten einteilen: Wir
rechnen und eine geeignete Reaktion vorsehen. Die angenomme-           unterscheiden zwischen asynchroner und synchroner Kommuni-
ne Instabilität der Subsysteme bedeutet außerdem, dass bei einem       kation. Asynchrone Aufrufe führen an sich bereits zu einer wider-
Aufruf von außen alle Aufrufparameter validiert werden müssen.         standsfähigen Anwendung. Bei synchroner Kommunikation kann
Daraus potenziell entstehende Fehler lassen sich so möglichst früh     man die Widerstandsfähigkeit mit Mustern wie Verzeichnisdienst,
unterbinden.                                                           Circuit Breaker oder clientseitigem Load-Balancing erhöhen.

Damit das Gesamtsystem trotz der Trennung in abgeschottete             Alle Konzepte dieses Artikels sind mit einem kurzen Code-Beispiel
Einheiten seine Aufgabe erfüllen kann, sind definierte Schnittstel-    verdeutlicht. Für die technische Umsetzung bietet sich Spring [1] an,
len zwischen den Teilen von entscheidender Bedeutung. Das Ziel         da in diesem Framework sowie den zahlreichen Erweiterungen be-
der Schnittstellen ist die lose Kopplung der Teile, um deren Unab-     reits all die vorgestellten Konzepte integriert wurden.
hängigkeit zu bewahren. Sie sollten möglichst freundlich mit ihren
Aufrufern umgehen, sodass das Auftreten von Fehlern im Client          Asynchrone Kommunikation
möglichst unwahrscheinlich wird. Falls beispielsweise eine grafi-      Vergleichbar mit den Schotten im Schiffsbau soll die Trennung zwi-
sche Benutzeroberfläche mehrere Millionen Datensätze aus einer         schen den isolierten Teilsystemen dafür sorgen, dass niemals das
Datenbank-Tabelle anfordert, sollte die Menge der ausgelieferten       System als Ganzes, sondern höchstens einzelne Teile funktionsun-
Datensätze entgegen dem Willen des Aufrufers auf einen sinnvollen      fähig werden. Diese geforderte Isolation kann im einfachsten Fall
Wert beschränkt werden. Nur so kann die Reaktionsfähigkeit des         erreicht werden, indem Sender und Empfänger lediglich indirekt
Gesamtsystems gewährleistet werden, da der Aufrufer mit hoher          über Nachrichten kommunizieren (siehe Abbildung 1).

56
                                                                                                                                        iii
                                                                                                                                          iii
                                                                                                                                      iii

                                                                                                                          www.ijug.eu
                                                                                                                                        iii
Sonderdruck von - Resilient Software Design Patterns Thorsten Maier, OIO Orientation in Objects GmbH
Abbildung 2: Widerstandsfähige synchrone Kommunikation

Die Nachrichten werden in der Queue zwischengespeichert und so-         zwar nicht unmöglich, aber durchaus anspruchsvoll ist.
mit kann der Sender unmittelbar nach dem Versand einer Nachricht
mit seiner Arbeit fortfahren; er muss nicht auf die Verfügbarkeit ei-   Bei genauerer Analyse der Anwendungsfälle einer Anwendung soll-
nes Empfängers warten. Gleichzeitig ist auch der Empfänger nicht        te man diese transaktionale Denkweise allerdings hinterfragen. Oft
auf die Verfügbarkeit des Senders angewiesen und kann die Nach-         ist es ausreichend, wenn die Konsistenz der Daten nicht sofort, son-
richt zu einem für ihn passenden Zeitpunkt verarbeiten.                 dern erst zu einem späteren Zeitpunkt hergestellt werden kann. Im
                                                                        Gegensatz zu „Strict Consistency“, bei der die Konsistenz am Ende
Kommen wir zur konkreten Implementierung. Der Versand einer             jeder Aktion sichergestellt wird, reicht es bei „Eventual Consistency“,
asynchronen Nachricht in eine Queue wird bei Spring durch die Klas-     dass die Daten schlussendlich in naher Zukunft konsistent sind.
se „JmsTemplate“ unterstützt (siehe Listing 1). Als Empfänger für die
Nachrichten einer Queue kann man sich mit der Annotation „@Jms-         „Eventual Consistency“ lässt sich mithilfe asynchroner Kommunika-
Listener“ registrieren (siehe Listing 2).                               tion sicherstellen, während für „Strict Consistency“ auf synchrone
                                                                        Kommunikation gesetzt werden muss. Im Blog-Artikel „Starbucks
Obwohl die Vorteile der asynchronen Kommunikation über Queues           Does Not Use Two-Phase Commit“ [2] ist diese Thematik anhand
den meisten bekannt sein dürften, wird diese Art der Kommunikati-       einer Kaffeebestellung sehr anschaulich erläutert. Zusammenfas-
on dennoch in traditionellen Systemen verhältnismäßig selten ein-       send ist beschrieben, dass aus Gründen der Durchsatzoptimierung
gesetzt. Ein Grund dafür ist die unter Software-Entwicklern weit-       und der Fehlertoleranz ein asynchroner Kommunikationsansatz
verbreitete „transaktionale Denkweise“. Damit ist gemeint, dass wir     mit einer Becherwarteschlange beim Bestellvorgang eines Kaffees
darauf bedacht sind, unseren Datenbestand zu jedem beliebigen           deutliche Vorteile bietet.
Zeitpunkt konsistent zu halten, und dass wir dies über Transakti-
onen sicherstellen müssen. Genau dies lässt sich mit asynchro-          Was können wir daraus lernen? Wir sollten für jeden Anwendungs-
ner Kommunikation über mehrere Prozesse hinweg allerdings nur           fall analysieren, ob „Eventual Consistency“ gegebenenfalls aus-
schwer erreichen, denn wir müssten unsere Transaktionsgrenze            reichend ist. Dann können wir durch den Einsatz von asynchroner
über die beteiligten Prozesse hinweg aufspannen, was technisch          Kommunikation ein deutlich widerstandsfähigeres Gesamtsystem
                                                                        entwerfen.

                                                                        Widerstandsfähige synchrone Kommunikation
 @SpringBootApplication                                                 Selbstverständlich ist es nicht immer möglich, auf asynchrone Kom-
 @EnableEurekaServer
 public class Application {
                                                                        munikation zu setzen. Daher müssen wir in diesen Fällen auf syn-
   public static void main(String[] args) {                             chrone Aufrufe zurückgreifen. Der entscheidende Nachteil im Sinne
      SpringApplication.run(Application.class, args);                   einer widerstandsfähigen Anwendung ist dabei, dass für eine erfolg-
   }
 }                                                                      reiche Kommunikation beide Partner gleichzeitig kommunikations-
                                                                        bereit sein müssen. Dies wiederum ist in einem System, in dem wir
Listing 3                                                               alle Kommunikationspartner per Definition als unzuverlässig ein-
                                                                        stufen, nicht immer gegeben. Wir benötigen daher Mechanismen,
                                                            mit denen wir auch diese Art der Kommunikation widerstandsfähig
   org.springframework.cloud                         gegen Ausfälle machen können.
   spring-cloud-starter-eureka
 
                                                                        Abbildung 2 zeigt den schematischen Aufbau einer fehlertoleranten
Listing 4                                                               synchronen Kommunikation. Dienst 1 möchte mit Dienst 2 kommu-

Java aktuell 01/18                                                                                                                        57
Sonderdruck von - Resilient Software Design Patterns Thorsten Maier, OIO Orientation in Objects GmbH
nizieren. Die Widerstandsfähigkeit wird hierbei durch den Einsatz          @HystrixCommand(fallbackMethod = "fallback")
                                                                           public String readString() {
eines Verzeichnisdienstes, eines Circuit Breakers und eines client-          return remoteServiceCall();
seitigen Load-Balancer erreicht.                                           }

                                                                           public String fallback() {
Verzeichnisdienst                                                            return "Fallback result";
Der Verzeichnisdienst sorgt dafür, dass Dienst 1 nicht wissen muss,        }
wo Dienst 2 gerade ausgeführt wird. Soll eine Kommunikation auf-
gebaut werden, wendet sich Dienst 1 über den clientseitigen Load-         Listing 5
Balancer – der im Anschluss noch vorgestellt wird – an den Ver-
zeichnisdienst und ruft von dort eine oder auch mehrere Instanzen
von Dienst 2 ab. Auch wenn Dienst 2 seit der letzten Kommunika-           reagiert, kann der Circuit Breaker diese Fehlersituation erkennen
tion umgezogen ist oder durch eine andere Instanz ersetzt wurde,          und eine Fallback-Antwort an den Aufrufer liefern. Für die prakti-
kann der anschließende, entfernte Aufruf trotzdem fehlerfrei aus-         sche Umsetzung dieses Konzepts bedienen wir uns wieder einer
geführt werden.                                                           von Netflix zur Verfügung gestellten Open-Source-Bibliothek na-
                                                                          mens Hystrix [5]. Listing 5 zeigt, wie wir damit eine solche Sicherung
Mit Eureka [3] können wir auf einen fertigen Verzeichnisdienst zu-        per Annotation konfigurieren können.
rückgreifen, der bei Netflix zum Einsatz kommt und somit bereits
gezeigt hat, dass er auch für sehr große Systeme bestens geeignet         Die Annotation „@HystrixCommand“ erstellt automatisch einen
ist. Mit Spring Cloud Netflix können wir Eureka auf einfache Art und      Proxy, der zur Absicherung des entfernten Methodenaufrufs einge-
Weise in unsere bestehende Infrastruktur einbinden. Listing 3 zeigt die   setzt wird. Falls der Aufruf „remoteServiceCall()“ nach einem konfi-
Erstellung eines Verzeichnisdienst-Servers als Spring-Anwendung.          gurierbaren Timeout (Default: 1 Sekunde) kein Ergebnis liefert, wird
                                                                          automatisch die Methode „fallback“ aufgerufen und deren Rückgabe-
Die einzelnen Dienste registrieren sich anschließend automatisch          wert an den Aufrufer geliefert. Die mit dieser Annotation konfigurierte
während des Startvorgangs beim Eureka-Verzeichnisdienst. Damit            Sicherung verwaltet einen internen Zustand und verfügt somit über
dies funktioniert, muss lediglich die passende Eureka-Client-Imple-       eine gewisse Intelligenz. Abbildung 3 zeigt die möglichen Zustände
mentierung im Klassenpfad des Dienstes vorhanden sein. Listing 4          und die zugehörigen Zustandsübergänge.
zeigt die entsprechende Maven-Dependency.
                                                                          Im Zustand „Geschlossen“ werden alle Aufrufe an den entfernten
Circuit Breaker                                                           Dienst weitergeleitet und dessen Reaktion abgewartet. Falls mehr
Durch den Einsatz eines Verzeichnisdienstes erreichen wir eine            als 50 Prozent der letzten 20 Aufrufe länger als eine Sekunde ge-
Ortstransparenz für entfernte Dienste. Problematisch ist dies al-         dauert haben, springt die Sicherung auf und wechselt in den Zu-
lerdings, wenn ein solcher Dienst unmittelbar nach dem Auffinden          stand „Offen“. Dieser Zustandsübergang findet bewusst nicht bei
ausfällt oder umzieht. Für diesen Fall benötigen wir einen zweiten        der ersten Überschreitung des Timeouts statt, damit einzelne Aus-
Sicherungsmechanismus. Zwischen den beiden Diensten kann zu-              reißer keine Auswirkung auf das Verhalten des Systems haben.
sätzlich ein sogenannter „Circuit Breaker“ [4] eingesetzt werden.
Dieser überwacht die Kommunikation zwischen beiden Kommuni-               Im Zustand „Offen“ wird versucht, den entfernten Dienst nicht un-
kationsseiten und entbindet den Aufrufer somit von der Fehlerbe-          nötig mit Aufrufen zu belasten; daher werden fünf Sekunden lang
handlung. Falls der entfernte Dienst zu spät oder überhaupt nicht         alle Anfrage mit dem Fallback-Wert beantwortet. Nach dieser War-

Abbildung 3: Hystrix-Zustände

58
                                                                                                                                             iii
                                                                                                                                               iii
                                                                                                                                           iii

                                                                                                                               www.ijug.eu
                                                                                                                                             iii
Sonderdruck von - Resilient Software Design Patterns Thorsten Maier, OIO Orientation in Objects GmbH
Wir suchen Dich!

		Spannende                         Aufgaben zu vergeben für

      * Java Senior Consultant (m/w)

      * Java Consultant (m/w)

      * Atlassian Consultant (m/w)

Mach mit im Expertenhaus für die Softwareentwicklung mit Java und
JavaScript in Mannheim.

Anspruchsvolle Entwicklungprojekte, täglicher Austausch mit anderen
Technologie-Begeisterten, unser hausinternes Schulungsprogramm
und vieles mehr erwarten Dich.

Auch java-erfahrene Studentinnen und Studenten sind bei uns immer
willkommen.

               Nutze Deine Chance.
          Werde Teil des bunten OIO-Teams.

   Nähere Infos an unserem OOP-Stand 2.11.

                                                      ) Schulung )           ) Beratung )   ) Entwicklung )

           OIO - Orientation in Objects GmbH I Weinheimer Str. 68 I 68309 Mannheim
           Tel. +49 621 71839-0 I Fax +49 621 71839-50 I info@oio.de I www.oio.de
tezeit findet ein automatischer Übergang in den Zustand „Halbof-           Durch die ständige Analyse der Antwortzeiten reguliert sich das
fen“ statt. Nun stellt ein erneuter Zugriff auf den entfernten Dienst      System selbstständig und kann daher auf eine zentrale Steuerung
fest, ob dieser wieder verfügbar ist. Ist dies der Fall, wird die Siche-   verzichten.
rung geschlossen; andernfalls erneut geöffnet und es findet nach
weiteren fünf Sekunden Wartezeit der nächste Testaufruf statt. Die         Fazit
Default-Werte für die Timeouts sowie für den prozentualen Anteil           Eine Anwendung ist mithilfe der in diesem Artikel gezeigten Muster
der erlaubten Timeout-Überschreitungen lassen sich per Konfigu-            widerstandsfähig gegenüber Fehlern. Am einfachsten gelingt dies
ration anpassen.                                                           durch den Umstieg auf asynchrone Kommunikation, da hierdurch
                                                                           automatisch isolierte und nur lose miteinander gekoppelte Teilsys-
Clientseitiges Load-Balancing                                              teme entstehen. Aber auch synchrone Kommunikation kann wie ge-
Durch den Einsatz des Verzeichnisdienstes und des Circuit Brea-            zeigt unter Einsatz eines Verzeichnisdienstes, eines Circuit Breaker
ker konnten wir bereits eine gewisse Ausfallsicherheit erreichen.          und durch clientseitiges Load-Balancing resilient gemacht werden.
Allerdings können wir damit noch nicht auf unterschiedliche Last-
anforderungen reagieren. Die Last kann auf mehrere redundante              Neben den hier beschriebenen wichtigsten Mustern gibt es viele
Instanzen des entfernten Dienstes verteilt werden. Ist er zustands-        weitere, die uns bei der Implementierung eines möglichst stabilen
los implementiert, lässt er sich problemlos mehrfach starten. Klas-        Systems helfen können. Dazu gehören beispielsweise ein Konfi-
sischerweise hat man eine solche Lastverteilung durch die Zwi-             gurationsserver, ein API Gateway und ein externer HTTP-Session-
schenschaltung eines getrennten Load-Balancer erreicht. Bei vielen         Speicher. Zu bedenken ist allerdings wie immer, dass jedes neu ver-
einzelnen Diensten führt dies allerdings zu einem hohen Konfigu-           wendete Muster Einarbeitungs- und Implementierungsaufwände
rationsaufwand. Daher wollen wir uns hierzu eine leichtgewichti-           zur Folge hat und dass wir uns daher in jeder Anwendung auf ein
ge und dennoch widerstandsfähige Alternative anschauen. Dabei              Neues für die richtigen Muster entscheiden müssen.
verwenden wir einen im Aufrufer eingebauten, clientseitigen Load-
Balancer. Dieser ruft sich vom Verzeichnisdienst alle zur Verfügung        Weitere Informationen
stehenden Instanzen des Dienstes ab und verteilt dann selbststän-          [1] http://projects.spring.io/spring-framework
                                                                           [2] http://www.enterpriseintegrationpatterns.com/ramblings/18_starbucks.html
dig die Aufrufe an die vorhandenen Instanzen. Listing 6 zeigt den          [3] https://github.com/Netflix/eureka
Einsatz dieses Konzepts bei einem weiteren Netflix-Projekt mit dem         [4] https://martinfowler.com/bliki/CircuitBreaker.html
Namen Ribbon [6].                                                          [5] https://github.com/Netflix/Hystrix
                                                                           [6] https://github.com/Netflix/ribbon

 „RestTemplate“ ist eine Hilfsklasse von Spring, mit der per HTTP-
Aufrufen ein Rest-Service abgefragt werden kann. Die beiden Anno-
tationen „@LoadBalanced“ und „@RibbonClient“ sorgen nun dafür,
dass alle Instanzen von „dienst2“ über den Verzeichnisdienst abge-
rufen werden und der Aufruf der URL „http://dienst2/“ automatisch
auf diese Instanzen verteilt wird. Wann welche Instanz aufgerufen
wird, lässt sich über den konfigurierbaren Load-Balancer-Algorith-
mus beeinflussen.

Die „RoundRobinRule“ verteilt die Anfragen beispielsweise reihum;
„RandomRule“ wählt dagegen bei jedem Aufruf zufällig eine Instanz
aus. Am interessantesten für den Einstieg ist allerdings die „Weigh-
tedResponseTimeRule“. Dabei werden die Antwortzeiten der ver-
schiedenen Instanzen analysiert und die Aufrufhäufigkeiten diesen
Zeiten angepasst. Die schnellste Instanz bekommt verhältnismäßig
die meisten Aufrufe. Aber auch langsame Instanzen werden hin und
wieder aufgerufen, um die schnellen Instanzen nicht zu überlasten.

                                                                                                          Thorsten Maier
 @RibbonClient(name = "dienst2")                                                                      Thorsten.Maier@oio.de
 public class Application {
   @LoadBalanced
   @Bean                                                                         Thorsten Maier arbeitet bei OIO Orientation in Objects GmbH in
   RestTemplate restTemplate() {                                                 Mannheim. Er erschließt kontinuierlich bessere Wege, Software
      return new RestTemplate();                                                 zu entwickeln, indem er selbst als leidenschaftlicher Software-
   }                                                                             Entwickler mit Java und JavaScript unterwegs ist und anderen als
                                                                                 Berater, Trainer und Autor dabei hilft. Trotz seiner Begeisterung für
   public String remoteServiceCall() {
      return restTemplate().getForObject("http://di-
                                                                                 Neues sind ihm Menschen stets wichtiger als Technologien. Sein
 enst2/", String.class);                                                         Hauptaugenmerk liegt daher auf der Frage, wie sich modernste
   }                                                                             Technologien in gewachsene Umgebungen einbinden lassen und
 }                                                                               wann man besser auf Bestehendes zurückgreifen sollte.

Listing 6

Java aktuell 01/18                                                                                                                                       59
) Seminarprogramm )
                                                                                               1. Halbjahr 2018

 Java Seminare                                                                                                                                     Open Source Seminare
 Entscheider                                                                                                                                       Software Entwicklungsumgebung

          Java für                           Java im Web                     NoSQL mit Java im                    Enterprise Java für                 Versionsverwaltung                                                      Versionsverwaltung                      Reporting mit
                                                                                                                                                                                               Git kompakt
         Entscheider                        für Architekten                     Überblick                            Architekten                        mit Subversion                                                              mit Git                           Eclipse BIRT
   Dauer: 1 Tag / Preis: € 805,-       Dauer: 2 Tage / Preis: € 1.460,-   Dauer: 2 Tage / Preis: € 1.460,-     Dauer: 2 Tage / Preis: € 1.460,-      Dauer: 1 Tag / Preis: € 695,-       Dauer: 1 Tag / Preis: € 695,-      Dauer: 2 Tage / Preis: € 1.255,-    Dauer: 2 Tage / Preis: € 1.255,-
 Termine: 05.02. / 14.05. / 10.09..   Termine: 21.02. / 06.06. / 19.09.   Termine: 08.03 / 21.06. / 11.10.    Termine: 19.02. / 04.06. / 17.09.            Termine: a. A..             Termine: 08.03. / 21.06. / 11.10.            Termine: a. A..            Termine: 22.02. / 07.06. / 20.09.

 Grundlagen                                                                                                   Vertiefung                                 Das Buildtool                            Gradle                                                           Selenium - Test
                                                                                                                                                                                                                              Jenkins Grundlagen
                                                                                                                                                         Apache Maven                        für Java Builds                                                    von Webanwendungen
          Java für
                                        Einführung in Groovy                          Kotlin                   Refactoring Workshop
       Programmierer                                                                                                                                 Dauer: 1 Tag / Preis: € 695,-       Dauer: 1 Tag / Preis: € 695,-       Dauer: 1 Tag / Preis: € 805,-      Dauer: 2 Tage / Preis: € 1.255,-
                                                                                                                                                      Termine: 08.05. / 04.10.         Termine: 09.03. / 22.06. / 12.10.      Termine: 07.05. / 05.10.         Termine: 01.03. / 14.06. / 27.09.
  Dauer: 5 Tage / Preis: € 2.125,-    Dauer: 3 Tage / Preis: € 1.685,-    Dauer: 2 Tage / Preis: € 1.195,-    Dauer: 2 Tage / Preis: € 1.195,-
 Termine: 05.02. / 14.05. / 10.09.      Termine: 18.04. / 29.10.            Termine: 09.07. / 01.10.            Termine: 01.03. / 27.09.
                                                                                                                                                   Server / Frameworks

                                                                                                                                                   Entwicklung und Betrieb                 Einführung in das
                                             Testen von                       Clean Code und                                                                                                                                       Spring Boot                 Cloud Native mit Spring
        Effective Java                                                                                        Design Patterns mit Java                  mit Wildfly 10                     Spring Framework
                                          Java Programmen                 Software Craftsmanship
                                                                                                                                                   Dauer: 3 Tage / Preis: € 2.055,-     Dauer: 3 Tage / Preis: € 1.685,-   Dauer: 2 Tage / Preis: € 1.255,-    Dauer: 2 Tage / Preis: € 1.255,-
  Dauer: 2 Tage / Preis: € 1.195,-     Dauer: 3 Tage / Preis: € 1.685,-   Dauer: 4 Tage / Preis: € 2.170,-    Dauer: 2 Tage / Preis: € 1.120,-
                                                                                                                                                     Termine: 18.04. / 03.09.          Termine: 12.03. / 25.06. / 15.10.   Termine: 08.02. / 17.05. / 13.09.   Termine: 15.03. / 28.06. / 18.10.
    Termine: 12.02. / 04.10.          Termine: 26.02. / 11.06. / 24.09.           Termine: a. A.                Termine: 14.06. / 22.11.

                                                                                                                                                            Docker
     Java 8 Update -                                                          Reaktive Program-                   Resilient Software                                                      Einführung in GWT                    GWT Architekturen                   Das Vaadin Toolkit
                                             Java 9 Update                                                                                            für Java-Entwickler
   Lambda und Streams                                                         mierung mit Java                     Design mit Java
                                                                                                                                                    Dauer: 1 Tag / Preis: € 695,-      Dauer: 2 Tage / Preis: € 1.255,-     Dauer: 2 Tage / Preis: € 1.460,-    Dauer: 3 Tage / Preis: € 1.685,-
  Dauer: 2 Tage / Preis: € 1.255,-      Dauer: 1 Tag / Preis: € 695,-       Dauer: 1 Tag / Preis: € 695,-       Dauer: 1 Tag / Preis: € 695,-
                                                                                                                                                   Termine: 07.03. / 20.06. / 10.10.     Termine: 09.04. / 17.12.             Termine: 11.04. / 19.12.         Termine: 19.02. / 04.06. / 17.09.
 Termine: 05.03. / 18.06. / 08.10.    Termine: 07.03. / 20.06. / 10.10.   Termine: 22.03. / 05.07. / 25.10.   Termine: 19.03. / 02.07. / 22.10.

 Java Enterprise                                                                                                                                          Apache Camel                    Apache Cassandra                        Apache Kafka

         Java EE 8                             Enterprise                                                        JavaFX für moderne                Dauer: 2 Tage / Preis: € 1.255,-    Dauer: 2 Tage / Preis: € 1.255,-     Dauer: 2 Tage / Preis: € 1.255,-
                                                                              Java Performance
      Power Workshop                           JavaBeans                                                             GUI-Clients                     Termine: 15.03. / 18.10.            Termine: 28.06. / 06.12.          Termine: 08.02. / 17.05. / 13.09.
 Dauer: 5 Tage / Preis: € 2.490,-     Dauer: 3 Tage / Preis: € 1.685,-     Dauer: 2 Tage / Preis: € 1.255,-   Dauer: 4 Tage / Preis: € 2.170,-
 Termine: 19.02. / 04.06. / 17.09.            Termine: a. A.              Termine: 05.03. / 18.06. / 08.10.     Termine: 12.02. / 17.12.

   Java Persistence API                  Java Persistence                                                       CDI - Dependency In-
                                                                              JavaServer Faces
    (JPA) mit Hibernate                 Performance Tuning                                                    jection Standard für Java
  Dauer: 3 Tage / Preis: € 1.685,-
 Termine: 26.02. / 11.06. / 24.09.
                                      Dauer: 2 Tage / Preis: € 1.460,-
                                      Termine: 07.03. / 20.06. / 10.10.
                                                                           Dauer: 3 Tage / Preis: € 1.685,-
                                                                          Termine: 12.03. / 25.06. / 15.10.
                                                                                                                Dauer: 1 Tag / Preis: € 695,-
                                                                                                                      Termine: a. A.
                                                                                                                                                   XML Seminare
                                                                                                                                                   Grundlagen                                                              Vertiefung

          Java EE                           Web Services                            OSGi                             Microservices                             XML                                 XML                            XSL und                          Transformation
     Batch Applications                  mit SOAP und Java                     Service Platform                        mit Java                             Einführung                            Schema                      Formatting Objects                 und Styling mit XSLT
  Dauer: 2 Tage / Preis: € 1.255,-    Dauer: 3 Tage / Preis: € 1.685,-    Dauer: 2 Tage / Preis: € 1.460,-     Dauer: 2 Tage / Preis: € 1.460,-     Dauer: 3 Tage / Preis: € 1.575,-   Dauer: 2 Tage / Preis: € 1.195,-     Dauer: 2 Tage / Preis: € 1.120,-    Dauer: 2 Tage / Preis: € 1.195,-
    Termine: 16.04. / 06.09.            Termine: 23.04. / 17.12.            Termine: 23.04. / 01.10.          Termine: 05.03. / 18.06. / 08.10.    Termine: 12.03. / 25.06. / 15.10.      Termine: 25.04. / 29.10.                  Termine: a. A.             Termine: 15.03. / 28.06. / 18.10.

 Seminare zur Web-Programmierung                                                                                                                   Seminare zur Methodik und Prozessen
 Programmierung                                                                                                                                    Methodik                                                                                                    Soft Skills

          JavaScript                           JavaScript                         ECMAScript                                                                                                                                                                            Soft Skills
                                                                                                                         Angular                        SAFe® for Teams                      Leading SAFe®
       Intensiveinstieg                       Engineering                        mit Typescript                                                                                                                                                                     für Agile Projekte
  Dauer: 2 Tage / Preis: € 1.195,-     Dauer: 2 Tage / Preis: € 1.195,-    Dauer: 3 Tage / Preis: € 1.685,-   Dauer: 3 Tage / Preis: € 1.685,-      Dauer: 2 Tage / Preis: € 1.590,-   Dauer: 2 Tage / Preis: € 1.590,-                                         Dauer: 2 Tage / Preis: € 1.460,-
 Termine: 08.02. / 17.05. / 13.09.    Termine: 01.03. / 14.06. / 27.09.   Termine: 26.03. / 11.06. / 24.09.   Termine: 12.03. / 25.06. / 15.10.             Termine: a. A.               Termine: 09.04. / 01.10.                                                 Termine: 11.04. / 01.10.

   jQuery als JavaScript                                                                                           Webentwicklung                             Scrum                             Extreme                                                             Persönlichkeits-
                                       Progressive Web Apps                    Node.js kompakt                                                                                                                              Domain Driven Design
        Framework                                                                                                    mit React                               Jumpstart                        Programming                                                             entwicklung
  Dauer: 3 Tage / Preis: € 1.685,-      Dauer: 1 Tag / Preis: € 695,-     Dauer: 2 Tage / Preis: € 1.260,-     Dauer: 2 Tage / Preis: € 1.255,-      Dauer: 1 Tag / Preis: € 805,-       Dauer: 1 Tag / Preis: € 805,-       Dauer: 1 Tag / Preis: € 695,-      Dauer: 2 Tage / Preis: € 1.460,-
          Termine: a. A.              Termine: 23.03. / 06.07. / 26.10.           Termine: a. A.              Termine: 15.03. / 28.06. / 18.10.    Termine: 21.03. / 04.07. / 24.10.           Termine: a. A.              Termine: 20.03. / 03.07. / 23.10.      Termine: 01.02. / 03.09.

 Design
                                                                                                                                                          User Stories                           Kanban                     Kaikaku und Kaizen in                      Zeit- und
                                                                                                                                                        effektiv erstellen                      Jumpstart                  der Softwareentwicklung                Selbstmanagement
  Modernes Webdesign                                                        Modernes Webdesign                    Web Components
                                            HTML 5 Update
  mit HTML 5 und CSS 3                                                           mit CSS 3                          Grundlagen                       Dauer: 1 Tag / Preis: € 805,-       Dauer: 1 Tag / Preis: € 805,-       Dauer: 1 Tag / Preis: € 695,-       Dauer: 1 Tag / Preis: € 805,-
                                                                                                                                                   Termine: 19.03. / 02.07. / 22.10.   Termine: 22.03. / 05.07. / 25.10.           Termine: a. A.                 Termine: 02.05. / 25.10.
  Dauer: 3 Tage / Preis: € 1.685,-      Dauer: 1 Tag / Preis: € 695,-      Dauer: 2 Tage / Preis: € 1.120,-    Dauer: 3 Tage / Preis: € 1.770,-
 Termine: 05.02. / 14.05. / 10.09.    Termine: 05.02. / 14.05. / 10.09.   Termine: 06.02. / 15.05. / 11.09.            Termine: a. A.

                                                                                                                                                                                        Architektur-Katas zum                     Grundlagen                     Führen und Managen
                                                                                                                                                       UML für Analytiker
                                                                                                                                                                                        Training agiler Teams                 Projektmanagement                   von Projektteams
                                                                                                                                                    Dauer: 3 Tage / Preis: € 1.685,-     Dauer: 1 Tag / Preis: € 805,-      Dauer: 2 Tage / Preis: € 1.460,-    Dauer: 2 Tage / Preis: € 1.460,-
                                                                                                                                                            Termine: a. A.             Termine: 23.02. / 08.06. / 21.09.       Termine: 07.05. / 11.09.           Termine: 26.04. / 20.12.

 Entscheider Seminare
                                                                                                                                                   Werkzeuge
 Architekten
                                                                                                                                                           Confluence                        Confluence -                      Bitbucket Server -
        Java im Web                      NoSQL mit Java im                           Cloud                     Architektur-Katas zum                      für Anwender                 Fachliche Administration                  Enterprise Git
       für Architekten                      Überblick                           für Entscheider                Training agiler Teams
                                                                                                                                                     Dauer: 1 Tag / Preis: € 805,-       Dauer: 1 Tag / Preis: € 805,-     Dauer: 2 Tage / Preis: € 1.460,-
  Dauer: 2 Tage / Preis: € 1.460,-    Dauer: 2 Tage / Preis: € 1.460,-      Dauer: 1 Tag / Preis: € 805,-       Dauer: 1 Tag / Preis: € 805,-
                                                                                                                                                   Termine: 20.03. / 03.07. / 23.10.   Termine: 21.03. / 04.07. / 24.10.   Termine: 20.03. / 03.07. / 23.10.
 Termine: 21.02. / 06.06. / 19.09.    Termine: 08.03 / 21.06. / 11.10.       Termine: 26.04. / 07.09.         Termine: 23.02. / 08.06. / 21.09.

                                                                                                                                                       Jira Plattform -                       Jira Software                             Jira
     Enterprise Java für                     Microservices                                                                                         Fachliche Administration                 für agile Projekte                     for Business
                                                                                   REST APIs
        Architekten                         für Architekten
                                                                                                                                                     Dauer: 1 Tag / Preis: € 805,-       Dauer: 1 Tag / Preis: € 805,-       Dauer: 1 Tag / Preis: € 805,-
  Dauer: 2 Tage / Preis: € 1.460,-     Dauer: 2 Tage / Preis: € 1.460,-     Dauer: 1 Tag / Preis: € 805,-
                                                                                                                                                   Termine: 22.03. / 05.07. / 25.10.   Termine: 23.03. / 06.07. / 26.10.   Termine: 19.03. / 02.07. / 22.10.
 Termine: 19.02. / 04.06. / 17.09.    Termine: 06.02. / 15.05. / 11.09.      Termine: 08.03. / 11.10.

 Projektleiter

          Java für                      Führen und Managen                       Grundlagen                   Open Source Compliance                    Alle Seminare sind auch als Inhouse- oder Individualschulungen möglich.
         Entscheider                     von Projektteams                    Projektmanagement                 Management kompakt
   Dauer: 1 Tag / Preis: € 805,-      Dauer: 2 Tage / Preis: € 1.460,-    Dauer: 2 Tage / Preis: € 1.460,-      Dauer: 1 Tag / Preis: € 805,-
                                                                                                                                                       * Alle Preise verstehen sich zzgl. gesetzl. Mehrwertsteuer. Änderungen vorbehalten.
 Termine: 05.02. / 14.05. / 10.09.      Termine: 26.04. / 20.12.             Termine: 07.05. / 11.09.         Termine: 02.03. / 04.05. / 28.09..

© Orientation in Objects GmbH ‫ ׀‬Weinheimer Str. 68 ‫ ׀‬68309 Mannheim ‫ ׀‬Tel. +49 621 71839-0 ‫ ׀‬Fax +49 621 71839-50 ‫ ׀‬info@oio.de ‫ ׀‬www.oio.de
Sie können auch lesen