.NET-Anwendungen mit Microservices behutsam migrieren

November 26, 2016 - 6:59 pm in Software-Entwicklung

Schön wäre es, eine Anwendung immer "auf der grünen Wiese" beginnen zu können. Unter wirtschaftlichen und zeitlichen Aspekten ist gerade beim Erweitern von Legacy-Anwendungen ein solcher Neustart jedoch unverhältnismäßig. Hier sind andere Strategien erforderlich.

Hat man noch vor wenigen Jahren unter Legacy-Anwendungen hauptsächlich Altanwendungen auf Großcomputern verstanden, sind inzwischen auch viele PC-Applikationen in die Jahre gekommen. Fasst man den Begriff etwas weiter, lassen sich damit alle Anwendungen zusammenfassen, die aus dem berühmten “historisch” gewachsenen Code bestehen und irgendwann kaum mehr wartbar sind. Mangels oder aufgrund verwaschener Architektur bestehen viele Abhängigkeiten, häufig entgegen der gedachten Richtung oder gar zirkulär.

Business-Logik, GUI, Datenbankanbindung und sonstige Services sind untrennbar miteinander verwoben. Eine kleine Änderung kann unerwartete Auswirkungen an anderer Stelle bewirken, und so trauen sich kaum noch Entwickler daran. Wenn nun aber dennoch größere Erweiterungen anstehen, ist über alternative Vorgehen nachzudenken.

In einigen Fällen besteht die Chance, die Anwendung inklusive der neuen Features von Grund auf neu zu designen. So lässt sich von Anfang an eine klare Struktur definieren und auf aktuelle Techniken setzen. Für Entwickler ist das oft der schönste Weg, und häufig ist zu beobachten, dass Anwendungen einfach weggeschmissen und neu erstellt werden. Unter wirtschaftlichen oder zeitlichen Aspekten ist das jedoch nicht immer sinnvoll. Hier sind gegebenenfalls andere Strategien in Erwägung zu ziehen.

Microservices mit Altlasten kombinieren

Eine Möglichkeit ist beispielsweise, neue Features als eigenständige Applikationen zu erstellen und sie über definierte Schnittstellen anzusprechen. Eine solche Anwendung wird heutzutage gerne als Microservice bezeichnet. Trotz ihres aktuellen Hypes verbergen sich dahinter keine neue Techniken. Bereits vor Jahren kam die Idee der serviceorientierten Architektur (SOA) auf. Laut Eberhard Wolff spielt die Größe der Applikation beim Microservice keine Rolle [1]. Ein solcher Dienst lasse sich mit unterschiedlichen Sprachen und Techniken realisieren – selbst mit SOAP. Als Abgrenzung zu SOA sieht Wolff den Verzicht auf eine aufwendige Service-Orchestrierung und -Verzeichnisstruktur.

Der Autor schildert in diesem Artikel den Fall einer Applikation, die unter anderem um die Dienste einer zweiten (bestehenden) erweitert wurde. Hier kam bereits lange vor dem Microservice- Hype ein Webservice zum Einsatz – ohne Registry und Orchestrierung. Diese Bemerkung soll aufzeigen, dass sich Microservices hervorragend mit Legacy-Code kombinieren lassen.

Die Applikation war vornehmlich als Viewer für Kundendaten im Einsatz. Im Wesentlichen konnten Anwender einige Selektionskriterien angeben und erhielten dann unterschiedliche Kennzahlen und Daten in thematisch aufgeschlüsselten Registern präsentiert. Kombiniert war das Ganze mit Reporting-Funktionen. Die Applikation sollte insofern verändert werden, dass Anwender nun deutlich umfangreichere Auswahlmöglichkeiten erhalten. Diese sollten dynamisch mit Kennzahlen (z. B. Anzahl der erwarteten Kundensätze) gestützt werden, die von bereits getätigten (Teil-)Selektionen abhängig waren. Zahlreiche neue thematisch sortierte Auswertungen sowie Dialoge zum Erfassen von Daten und die Anbindung an andere Software waren weitere Anforderungen. Die Menge der neuen Features sprach für eine Neuentwicklung. Während einige nicht zeitkritisch waren, sollten andere zeitnah zu nutzen sein. Das war wiederum nur durch eine Integration in die bestehende Applikation möglich.

Die Visual-Basic-Falle

Es handelte sich um eine Visual-Basic-Applikation, die zwar in das Zeithalter von .NET hinübergerettet worden, aber kaum noch wartbar war: Mit Visual Studio ist es einfach, grafische Benutzeroberflächen zu entwickeln. Schlicht ein Steuerelement auf das Zielfenster ziehen, positionieren – fertig. Ein Klick auf das Element erzeugt den passenden Ereignis-Handler, Code ergänzt – wiederum fertig. Doch genau hier liegt das Problem: Wer so arbeitet, hat schnell eine kleine Applikation zusammengeklickt, und alles liegt in einem Formular, einer Klasse.

Es erfordert schon ein wenig Disziplin, GUI und Verarbeitungslogik voneinander zu trennen. Die ursprünglichen Entwickler des Viewers hatten diese anscheinend nicht und sind – wie so viele andere – in die Falle getappt. Irgendwann ist die Klasse zu groß, besonders wenn weitere Logik – im vorliegenden Fall das Reporting – mal einfach schnell mit hineingepackt wird. Während die gesamte Applikation mit rund 21.000 Zeilen sowie ein paar Hundert Zeilen SQL-Stored-Procedures eher klein ausfiel, war das größte Formular im Laufe der Zeit auf über 6000ˇZeilen angewachsen und kaum noch durchschaubar.

Die Anwendung wurde ständig gebraucht, ebenso einige der geplanten Features. Eine Neuentwicklung kam daher aus Zeitgründen nicht in Frage. Dennoch war das Ziel, das bestehende Programm in eine neue Applikation zu überführen. Weiterhin sollte eine andere, bestehende Funktionalität eingebunden werden. Sie war Teil eines in Java entwickelten Prozesses. Darüber hinaus existierten weitere kleine bis mittelgroße Anwendungen, die in C# erstellt worden waren. Da sowohl Java als auch C# ihre Wurzeln im C-Umfeld haben und sich so über weite Teile ähneln, wurde der Beschluss gefasst, auf diese beiden Sprachen zu konsolidieren.

Read more on: Source

E-Mail-Provider RiseUp: Der Kanarienvogel ist verstummt

November 26, 2016 - 6:55 pm in Security

RiseUp, ein Anbieter verschlüsselter E-Mail-Kommunikation, hat seinen Warrant Canary nicht aktualisiert – das wird als Hinweis darauf gewertet, dass…

Siebter Thomas-Krenn-Award zur Förderung von Open Source

November 26, 2016 - 12:55 pm in OSS

Mit dem Thomas-Krenn-Award 2017 will der Serverhersteller Open-Source-Projekte fördern. Den Gewinnern winken Hardware-Preise von insgesamt 6500 Euro.…

Kotlin 1.1 nimmt mit drittem Milestone-Release weiter Form an

November 26, 2016 - 12:54 pm in Software-Entwicklung

Zu den Neuerungen gehört der Unterstrich als Ersatz für ungenutzte Parameter in Lambdas und Funktionen zum Zugriff auf generische Enumerationen. JetBrains hat neben neuen Versionen der Entwicklungsumgebungen wie IntelliJ IDEA, CLion, PyCharm, WebStorm und…

Entwickler dokumentieren Krypto-Verfahren des Messengers Signal

November 26, 2016 - 12:50 pm in Security

Signal wird in der Krypto-Community hoch geschätzt, unter anderem, weil er einige nicht-triviale Herausforderungen mit Bravour meistert. Mit der jetzt veröffentlichten Doku kann man sich ein genaueres Bild davon machen, wie das passiert. In den letzten Tagen…

OpenSSL stellt Sicherheitsupdate in Aussicht

November 26, 2016 - 6:52 am in OSS

Das OpenSSL-Team hat eine neue Version angekündigt, in der sie mehrere Schwachstellen geschlossen haben. Am 10. November wollen die OpenSSL-Entwickler zwischen 13 und 17 Uhr deutscher Ortszeit eine fehlerbereinigte Version veröffentlichen. In OpenSSL 1.1.0c…

macOS 10.12 Sierra: Apple gibt Darwin-Quellcode frei

November 26, 2016 - 6:50 am in Software-Entwicklung

Die quelloffenen Bestandteile des Betriebssystems vom XNU-Kernel über den AppleFileSystemDriver und viele weitere Komponenten stehen nun zur Einsicht. Gut zwei Monate nach der Veröffentlichung von macOS 10.12 Sierra hat Apple nun die Open-Source-Bestandteile…

Knifflig, aber möglich: Sicherheitsforscher hacken Tesla-App und starten Auto

November 26, 2016 - 6:49 am in Security

Offensichtlich hat Tesla seine Auto-App nicht optimal abgesichert: Sicherheitsforscher konnten genügend Infos abziehen, um einen Wagen zu öffnen und damit wegzufahren. Damit das klappt, müssen aber einige Voraussetzungen erfüllt werden. Sicherheitsforscher…

Kriminelle bieten Mirai-Botnetz mit 400.000 IoT-Geräten zur Miete an

November 26, 2016 - 12:55 am in Internet

Zwei Hacker sollen derzeit auf Kundenfang gehen und Mirai-Botnetze zur Miete anbieten. Dabei werben sie unter anderem mit einer optimierten Version des DDoS-Tools Mirai. Sicherheitsforscher zeigen den Live-Status des gesamten Mirai-Botnetzes an. Aktuell soll…

Linux 4.9: Google will Reaktionsgeschwindigkeit des Internets steigern

November 26, 2016 - 12:46 am in OSS

Der Linux-Kernel 4.9 bringt Verbesserungen, mit denen Google-Entwickler das Internet schneller machen wollen. Das XFS-Dateisystem kann jetzt doppelt gespeicherte Daten zusammenführen und selbst großen Dateien in Sekundenbruchteilen kopieren. Der Linux-Kernel…