Variation des Ambassador Pattern von CoreOS

2 Kommentare

In diesem Artikel möchte ich die konzeptionellen Änderungen am Ambassador Pattern erläutern, die sich im gemeinsamen Microservices Projekt der LeanIX GmbH und der codecentric AG ergeben haben.

Docker bietet mit dem Konzept Docker Link die Möglichkeit, zwei Container miteinander per Netzwerk kommunizieren zu lassen. Dabei werden IP und exportierte Ports des Zielcontainers als Umgebungsvariablen im nutzenden Container zur Verfügung gestellt. Der Container, der den Link erzeugt, kann in seiner Konfiguration auf diese Umgebungsvariablen zugreifen und muss nicht IP und Port direkt verwenden.

Diese Möglichkeit besteht allerdings nur, wenn sich die Docker-Container auf dem gleichen Server befinden. Möchte man sie über mehrere Server verteilt verbinden, ist die einfachste Variante, die Docker-Container direkt über IP und Port zu verbinden:
 
Docker IP connect

Dies ist prinzipiell möglich, setzt aber eine sehr statische Umgebung voraus. Sollten sich IP oder Port des Zielcontainers ändern, müsste auch der zugreifende Container angepasst und neu gestartet werden.

Um auch in dynamischeren Umgebungen die Servergrenzen überwinden zu können, eignet sich das Ambassador Pattern. Die Flexibilität wird dabei in zwei Schritten erreicht: Es werden zwei zusätzliche Container, die Ambassadors eingefügt, die die Netzwerkkommunikation stellvertretend übernehmen. Der zweite Aspekt ist, dass die Ambassador Container ihre Konfiguration ändern können, ohne neu gestartet werden zu müssen. Die ursprünglichen Container greifen dabei wieder über einen Docker Link auf die Ambassador Container zu. Ich möchte in diesem Artikel nicht weiter auf die Details des Originalpatterns eingehen, sondern die Unterschiede erläutern, die wir in einem Projekt umgesetzt haben.

Zuerst einmal werfen wir einen Blick auf die beiden zusätzlichen Container. Viele Blogartikel im Internet erläutern den Aufbau des Ambassador Pattern wie folgt:
 
Docker Ambassador

Der Simple Ambassador auf Server #2 übernimmt lediglich die Bereitstellung des Ports und reicht eingehende Verbindungen direkt an den DB Container weiter. Dieser Ambassador ermöglicht keine weitere Flexibilität oder Vereinfachung. Um dem KISS-Prinzip zu folgen, wird dieser Container gestrichen:
 
Docker Ambassador simple

In manchen Artikeln wird der Simple Ambassador auch noch dazu verwendet, um mit etcd zu sprechen. Diese Aufgabe ist in einem eigenen Container besser aufgehoben bzw. kann auch von systemd, upstart oder ähnlichen Diensten übernommen werden. Um Funktionen zu kapseln, sollten die Ambassador Container nur die Aufgabe übernehmen, für die sie gedacht sind: Netzwerkkommunikation.

Eine weitere Änderung, die im Projekt gegenüber dem Originalpattern vorgenommen wurde, ist die Vorbereitung auf Skalierung. Im Original wird das Pattern mit einer 1:1-Beziehung zwischen Applikations- und Ambassador-Container dargestellt. Es gibt sogar Implementierungen des Patterns, die auch technisch nur eine 1:1-Beziehung ermöglichen. Verwendet man für den Dynamic Ambassador aber einen HAProxy, so kann man den Ambassador auch für dynamische Skalierung verwenden:
 
Docker Ambassador LB

Es spielt dabei keine Rolle ob die Container auf einen oder mehrere Server verteilt sind. Dieses Konzept erlaubt an jeder Stelle einer Anwendung eine Skalierung und liefert somit eine sehr hohe Flexibilität und Ausnutzung der vorhandenen Serverressourcen.

Beide Änderungen am Originalpattern erlauben LeanIX somit die Komplexität ihrer Anwendung niedrig zu halten und an jeder Stelle nach Bedarf skalieren zu können.

Über die LeanIX GmbH:

LeanIX bietet eine innovative Lösung für das Enterprise Architecture Management (EAM) als Software-as-a-Service in der Public-Cloud oder im Rechenzentrum des Kunden. Die web-basierte Plattform besticht gegenüber traditionellen Ansätzen durch eine intuitive Benutzeroberfläche, ein flexibles Reporting und offene APIs. Dadurch lässt sich leanIX mit minimalem Trainingsaufwand schnell im Unternehmen einführen und nach kurzer Zeit Mehrwert generieren. Sowohl kleine bis mittlere als auch große Unternehmen aus verschiedenen Branchen vertrauen auf die Lösung, wie z.B. Axel Springer, Helvetia, RWE, Vaillant und Trusted Shops. Unabhängig von der Unternehmensgröße werden immer mehr Unternehmen als Kunden gewonnen, die bisher Berührungsängste mit dem Thema EAM hatten oder frustriert sind von schwerfälligen Tools. Gegründet wurde die LeanIX GmbH 2012 von Jörg G. Beyer und André Christ. Der Sitz der Gesellschaft befindet sich in Bonn, unterstützt von einem breiten Partnernetzwerk in Europa, Australien und Amerika.

Über die codecentric AG:

Als Experte für individuelle Software-Entwicklungen ist die codecentric AG der Vordenker für agile Software-Entwicklung und innovative Technologien in Deutschland. Rund 280 Mitarbeiter an dreizehn europäischen Standorten entwickeln Software-Lösungen der Zukunft. Dafür kombiniert codecentric das Know-how der besten IT-Architekten und Software-Entwickler mit dem Praxiswissen aus zahlreichen Projekten in den Bereichen Continuous Delivery, Big Data, Performance Solutions, Agile und Enterprise Development. Für optimale Java Performance, Skalierbarkeit und Stabilität haben codecentric-Kunden Zugriff auf umfassende Risiko-Management-, Troubleshooting-, Java-Optimierungs- und Performance-Management-Services nebst Werkzeugen.

Christian Zunker

Christian Zunker arbeitet als System Engineer im Bereich Hosting der codecentric AG. Dort beschäftigt er sich mit der Entwicklung und dem Betrieb von verteilten Systemen.

Share on FacebookGoogle+Share on LinkedInTweet about this on TwitterShare on RedditDigg thisShare on StumbleUpon

Kommentare

  • 13. August 2015 von Johannes Stelzer

    Hi,

    klingt für mich nach einem reverse proxy oder siehst Du da einen unterschied?

    Viele Grüße
    Johannes

    • Christian Zunker

      14. August 2015 von Christian Zunker

      Hi Johannes,

      das stimmt. Das Grundprinzip ähnelt sehr einem Reverse Proxy. Der Begriff ist bei den meisten Menschen aber mit einem HTTP Reverse Proxy verbunden. Das Konzept des Ambassador ist allgemeiner einsetzbar. Dazu kommt die Dynamik über etcd. Details dazu findest du im Folgeartikel.

      Viele Grüße
      Christian

Kommentieren

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.