Aktuelle Applikation im Web oder Serviceumfeld in der Cloud oder on premises nutzen oftmals einen Container Orchestrierungsansatz. Einerseits werden somit Container eingesetzt, um Applikationen zu betreiben, andererseits wird das Deployment durch ein Orchestration Framework unterstützt. Die führenden Ansätze sind Docker Swarm, Kubernetes und Mesos (Marathon). Details zu den Ansätzen sind hier zu finden. Alle Frameworks können in der Cloud, als auch im eigenen Rechenzentrum eingesetzt werden. Alle Komponenten stammen im Normalfall aus dem Open Source Umfeld.

Loadbalancing Allgemein

Beim Loadbalancing kann man im ersten Schritt abhängig von der Applikation zwischen Client und Server Loadbalancing unterscheiden. Beim Client Loadbalancing sorgt sich der Client um die Connection und wechselt im Zweifelsfall den Server, beim Server Loadbalancing sorgt die Serverseite dafür, dass der Client auf den richtigen Server geroutet wird. Das clientseitige Loadbalancing kommt oft bei Datenbank oder Messageapplikationen zum Einsatz, wie z.B. Cassandra oder Kafka. Serverseitig wird fast bei allen Webapplikation geroutet. Im weiteren Verlauf soll es das Serverseitige Loadbalancing im Rahmen von Container-Plattformen dargestellt werden.

Container Loadbalancing

Aufgrund der Möglichkeiten der Container-Plattformen ergeben sich unterschiedliche Möglichkeiten im Loadbalancing. Diese Möglichkeiten müssen schon bei kleinen Umgebungen betrachtet werden.

  • Benutzung eines externene Loadbalancers
  • Buildin Proxy
  • einsetzen eines Softwareloadbalancers, basierend auf DNS
  • einsetzen eines Softwareloadbalancers, basierend auf der Serviceregistry
  • Verwendung einer virtuellen IP Adresse
2017_01_cont_orch_uebersicht

Loadbalancing Überblick mit Container

External Loadbalancing

Beim externen Loadbabalancing übernimmt die Lastverteilung eine separate, vom Provider gestellte Hardware. Die Konfiguration muss dort angepasst werden. Ein externer Loadbalancer bietet meist die höchste Funktionalität und Stabilität, die Konfiguration ist aufwendig.

Buildin Proxy

Gerade Kubernetes und Docker Swarm werden mit einem Proxy auf jedem Knoten (Node, Worker Node) installiert. Der Proxy kennt alle Services und routet die Anfragen weiter. Es kann auch ein Routing von einem Node zum nächsten Node erfolgen. Die Konfiguration erfolgt im Rahmen des Applikationsdeployments und ist sehr einfach. Ein Sizing des Loadbalancings ist nur bedingt möglich. Das Proxy Routing greift direkt auf die Service Registry und ist somit immer aktuell.

Softwareloadbalancer DNS

Eine sehr einfache Möglichkeit des Loadbalancings, ist die Verwendung einer separaten Applikation, z.B. eines Apache HTTP Servers, welchen man in einem Container deployed. Das Routing wird auf Basis von DNS durchgeführt. Diese Möglichkeit existiert vor allem bei Kubernetes und Mesos/Marathon. Hier werden die DNS Einträge an eine Loadbalancing App weitergeleitet. Nachteil der Verwendung des DNS Protokoll ist, das vor allem Verluste von Containern nur zeitverzögert weitergereicht werden. Für Applikation mit vielen Container keine gute Wahl, wenn nicht applikationsseitig entsprechende Failover- bzw. Retry-Mechanismen implementiert sind.

Softwareloadbalancer Serviceregistry

Die Verwendung eines Softwareloadbalancers, der die Service Registry ausliest, bzw. die Events der Registry abhört ist eine weitere Möglichkeit. Hier spielen vor allem HAProxy oder Marathon-Lb eine große Rolle. Ein interessante Variante, welche die Funktionsweise verdeutlicht, ist traefik. Der Loadbalancer kann sowohl bei Mesos/Marathon, Docker Swarm oder Kubernetes eingesetzt werden. Basis für Docker Swarm und Kubernetes (Achtung beta) ist der ingress Controller. Hier werden die Änderungen des Routings oder Loadbalancing per API an den Loadbalancer gesendet.

Virtuelle IP

Als einfachste Variante kann man in den Container eine Virtuelle IP konfigurieren. Das bedeutet alle Anfrage kommen erst auf diese IPAdresse und werden danach, abhängig vom Routing, auf verschieden Services verteilt. (Mesos/Marathon, Kubernetes). Ein vorgeschalteter Loadbalancer ist hierfür nicht notwendig, ebenso kann mit fast jedem Protokoll, ob HTTP, LDAP oder ähnliches gearbeitet werden.

Zusammenfassung

Es gibt viele Möglichkeiten in einem Containerumfeld die Last der Applikation zu verteilen. Die Container Orchestrierungs-Frameworks bringen Lösungen mit, die einfach zu implementieren sind. Welche Lösung oder welche Kombination an Lösungen schlussendlich verwendet wird, muss aufgrund der applikationsseitigen Anforderungen entschieden werden. Erschwerend kommt hinzu, dass alle Frameworks in ständiger Weiterentwicklung sind und ständig neue Features entstehen.