Agilität trifft Stabilität
Die Architekturen für Softwareanwendungen werden immer komplexer, denn die Anforderungen an die Systeme werden immer größer: auf Veränderungen im Markt muss schnell reagiert, das Geschäftsmodell evtl. angepasst werden und auch die Konkurrenz schläft nicht. Doch wenn die Komplexität steigt und die Releasezyklen immer kürzer werden, müssen viele Vorgänge und Prozesse neu gedacht werden. Deshalb endet unsere Arbeit nicht nach der Entwicklung einer Softwareanwendung bzw. mit der Übergabe des Quellcodes. Auch der reibungslose Betrieb muss gewährleistet sein.
Das erreichen wir mit dem Aufbau einer effektiven Infrastruktur und dem dazugehörigen Support – von Trainings über Reviews bis zur maßgeschneiderten Umsetzung. Bevorzugt arbeiten wir dabei im Sinne des DevOps-Ansatzes. Das bedeutet nichts weniger als die Verbindung zweier unterschiedlicher Welten – nämlich von Entwicklung und IT-Betrieb. Wo traditionell ein konfliktbeladenes Verhältnis vorherrschte, bevorzugen wir die vertrauensvolle Zusammenarbeit. Für uns ist der Wille zur Veränderung und der Wunsch nach Stabilität kein Widerspruch. Weil wir schon bei der Entwicklung und bei der Architektur die Aufgaben des Betriebs berücksichtigen, beispielsweise das Durchführen von Deployments. Aber auch, weil wir im Betrieb durch das Schaffen neuer Infrastrukturen, Vorgänge automatisieren, die sonst manuell durchgeführt wurden. Kurz gesagt, Infrastruktur wird zum Code, also programmierbar. Das Ergebnis überzeugt alle Beteiligten: Eine schnellere Auslieferung der Software in besserer Qualität.
Aufgaben teilen, Qualität multiplizieren.
Die Art und Weise des Deployments, also des Softwareauslieferungsprozesses, wird bereits bei der Software-Architektur beeinflusst. Wir haben Erfahrung sowohl mit Monolithen, als auch mit Microservice-Architekturen, sprich Konglomeraten von vielen, kleinen fachspezifischen Anwendungen. Beide Ansätze haben Vorteile, doch gerade Microservices und DevOps ergänzen sich optimal: Die kleinen Module sind unabhängig voneinander deploybar, neue Features können schneller releast und kleinere, agilere Teams eingesetzt werden. Umständliche Abstimmungen und Synchronisierungen entfallen.
Wenn wir Ihnen also eine Plattform, zum Beispiel für einen Webshop, liefern, besteht Sie aus vielen kleinen Software-Anwendungen. Unterschiedliche Teams konzentrieren sich auf einzelne Module wie beispielsweise den Warenkorb oder die Hauptnavigation. Damit dies trotzdem problemlos auf einer einzigen Plattform funktioniert, arbeiten wir mit Container-Technologien wie Kubernetes und Docker. Denn Container sind die perfekte Verpackung für die Microservices. Das Beste daran: Container- Deployments ermöglichen ein polyglottes Entwicklungsumfeld. Jedes Team kann mit seiner bevorzugten Programmiersprache arbeiten; mit den Technologien seiner Wahl fachspezifische Probleme lösen; und unabhängig von den anderen in eigener Geschwindigkeit seine Anwendung veröffentlichen. Auch hier kommt wieder der DevOps-Gedanke zum Tragen. Denn aufgrund dieser Komplexität und der erforderlichen Geschwindigkeit ist ein hoher Automatisierungsgrad nötig – und die klassische Trennung zwischen Entwicklung und Betrieb kaum mehr vorstellbar.
Aus Fehlern lernen – in Höchstgeschwindigkeit.
Ist ein Softwaresystem erst einmal veröffentlicht, muss es überwacht werden. Wir unterstützen Sie beim Aufbau einer feinmaschigen Monitoring-Infrastruktur. Denn gerade bei einem verteilten System wie oben beschrieben, ist die Überwachung eine große Herausforderung und für den Betrieb unbedingt notwendig.
Um Probleme und Bugs zu erkennen und anschließend zu analysieren, müssen Metriken und Logs gesammelt werden. Vereinfacht ausgedrückt werden beim Logging Fehler und Auffälligkeiten, aber auch Standardverhalten protokolliert. Metriken dagegen erlauben den Blick in den aktuellen Zustand des laufenden Systems, beispielsweise wird die Netzwerksättigung gemessen. Bei auffälligen Werten werden automatisch alle relevanten Mitarbeiterinnen und Mitarbeiter alarmiert. Wichtig dabei ist die Auswahl der richtigen Metriken sowie deren Zusammenfassung und die Visualisierung.
Doch bei der automatisierten Überwachung von Microservice-Deployments geht es nicht nur um das Erkennen von Fehlern und Auffälligkeiten. Sondern auch um schnelle Rückmeldungen bei Codeänderungen. Wurde die Performance gesteigert? Sind die Verbesserungen eingetreten? Hat die Änderung den erwünschten Effekt? Wertvolles Feedback für die Entwicklungsteams, die so noch schneller noch bessere Qualität liefern können. Und wertvoll für Kunden, weil alles funktioniert.