Wir bauen den richtigen Monolithen / Sudo Null IT News

https://habr.com/ru/company/piter/blog/678484/image

Monolithen werden zu sehr kritisiert

Wenn nun gesagt wird, dass ein Unternehmen einen Monolithen weiter entwickelt, scheint es, dass dieses Unternehmen altmodisch ist und möglicherweise Probleme hat, den Monolithen zu skalieren, oder? Ich beschloss, darüber zu schreiben, dass einige Leute (mich eingeschlossen) Monolithen wunderbar finden. Die Technologie hat jedoch wirklich einen langen Weg zurückgelegt, und ich denke, es ist an der Zeit, den Ansatz zum Bau von Monolithen zu überdenken.

Wenn Sie neu in der Back-End-Entwicklung sind, möchte ich Sie daran erinnern: Ein Monolith ist ein Back-End-System, das als Ganzes funktioniert. Das heißt, es ist ein einzelnes Programm, das startet, eine Reihe von Netzwerkanforderungen bedient und dann beendet wird. Alternativen zum Monolithen sind insbesondere serviceorientierte Architekturen (SOA), Microservices, Serverless-Funktionen – vielleicht ist die Liste noch nicht erschöpft. Für jeden dieser Ansätze gibt es eine Zeit und einen Ort, daher ist jede vernünftige Entscheidung, die ein neues System nach dem einen oder anderen dieser Muster aufbaut, willkommen. Ich glaube, dass eine beträchtliche Anzahl von Webanwendungen und -diensten mit einem Monolithen bedient werden kann … mit einer kleinen Verbesserung.

Sie benötigen Dienste, um den Monolithen zu entladen

Musteralternativen zum Monolithen sind sehr vernünftig gerechtfertigt. Indem Sie die Arbeit auf mehrere verschiedene Entitäten verteilen, können Sie das gesamte System dazu bringen, mehr Arbeit zu erledigen. Aber es ist bekannt, dass mit diesem Ansatz die Komplexität des Systems zunimmt, mehr Aufwand erforderlich ist, um es zu warten, was oft zu zusätzlichen Arbeitsstunden und höheren Kosten führt. Die einzige Ausnahme von dieser Regel, die ich sehe, sind serverlose Funktionen, die die Dinge wirklich viel einfacher machen. Aber sie haben auch ihre Nachteile – solche Funktionen sind schwieriger zu testen, sie sind herstellerspezifisch und die Arbeit mit ihnen erfordert möglicherweise Tools, die nicht im Handel erhältlich sind. Wenn alles richtig gemacht wird, sind diese zusätzlichen Anstrengungen gerechtfertigt und ermöglichen es Ihnen, ein sehr komfortables System zu erstellen, das mit Tugenden glänzt. Das klassische Beispiel ist Netflix, sie sind sehr gut angesiedelt.

Einen Kompromiss finden

Wenn Monolithen nicht skalierbar und Microservices zu komplex sind, wie entwerfen Sie dann ein System, das mit Ihrem wachsenden Datenverkehr Schritt halten kann und freundlich zu Ihrem Entwicklungsteam bleibt, während es nicht mühsam ist, die Funktionalität zu warten, zu warten und zu erweitern? In den letzten Jahren hat sich gezeigt, dass hier eine Art Kompromiss erforderlich ist. Ich glaube nicht, dass die unten beschriebene Lösung für jeden geeignet ist, aber die meisten Lösungen müssen einfach nicht solche Traffic-Volumen bedienen, bei denen es wirklich sinnvoll ist, auf Microservices umzusteigen.

Lernen Sie das SUFA-Designmuster kennen

Bevor ich im Wesentlichen erkläre, was SUFA ist, möchte ich erwähnen, dass dies kein völlig neues Konzept ist. Es gibt seit langem Dinge wie das Akteursmuster, das neomonolithische Paradigma und andere, die ähnliche Ideen postuliert haben, und SUFA ist nur eine der Möglichkeiten, mehrere Konzepte in einem einfachen und verständlichen Entwurfsmuster zu kombinieren. Also, was ist es?
S (einfach), U (vereinheitlicht), F (funktional) A (Anwendungen).
Werfen wir einen Blick auf die einzelnen Komponenten:

Einfach

Ein nach dem SUFA-Muster entworfenes System kann mit den einfachsten Bereitstellungsszenarien arbeiten. Autoscale-Gruppen sind seit langem bekannt, und mit dem Aufkommen von Container-Orchestrierungssystemen ist das Erstellen solcher Gruppen noch einfacher geworden. Eine einzelne Autoscale Group (ASG) reicht aus, um das SUFA-System zu betreiben, oder es kann mit einem Service Mesh erweitert werden, mit dem Sie funktional unterschiedliche Gruppen erstellen können (dies ist ein Thema für einen separaten Beitrag).

Einheitlich (einheitlich)

Das SUFA-System verwendet nicht mehrere Dienste, von denen jeder als eine unabhängige einsetzbare Einheit existiert, sondern ist eine einzelne einsetzbare Datei. Es kann ein Docker-Image, ein AMI oder ein anderes Artefakt sein, aber in jedem Fall müssen wir nur eine Sache erstellen. Sie müssen es mit der Methode der kontinuierlichen Integration und Bereitstellung (CI/CD) als Teil einer kontinuierlichen oder gekennzeichneten Veröffentlichungskadenz erstellen und es über eine Artefaktregistrierung bereitstellen – beispielsweise eine Docker-Registrierung oder einen S3-Bucket.

Funktionsbasiert

Vielleicht gibt es in jedem Standard-Monolithen eine Handler-Schicht, die dafür verantwortlich ist, API-Anfragen zu empfangen und Aufrufe an die Geschäftslogik (die diese Anfragen verarbeitet) oder den Datenspeicher zu tätigen. Im Gegensatz dazu verketten SUFA-Systeme bei der Bearbeitung von Anfragen eine Reihe von Funktionen, die jeweils völlig unabhängig voneinander sind und nicht einmal von ihrer Existenz wissen. Funktionen müssen auf eine Eingabe warten, eine Operation ausführen und eine Ausgabe erzeugen, die an andere Funktionen in der Kette weitergeleitet wird. Funktionen sollten einfach zu testen und in verschiedenen Szenarien wiederzuverwenden (z. B. verschiedene API-Anforderungen). Außerdem sollten SUFA-Systeme so konzipiert sein, dass sie ereignisbasierten Datenverkehr verbrauchen und erzeugen, da Ereignisse das Hauptkommunikationsinstrument in ihnen sein werden.

Anwendungen

Auf den ersten Blick ist dieser Punkt offensichtlich, aber im Rahmen der SUFA wird „Anwendung“ in einem sehr spezifischen Sinne verstanden. Das SUFA-System muss einer einzigen Anwendung dienen, d. h. alle Merkmale abdecken, die in einem vollständig geformten Produkt bereitgestellt werden. Es gibt einen gewissen Interpretationsspielraum (z. B. wenn ein Unternehmen eine SUFA-Anwendung für das gesamte Unternehmen hat, auch wenn es ein Produkt für verschiedene Bereiche herstellt), aber es geht nicht darum, die Einheiten zu multiplizieren, die dieselbe Anwendung bedienen. Wenn die Funktionalität von mehreren Anwendungen gemeinsam genutzt werden muss, dann sollten diese Funktionen, die Teil eines SUFA-Systems sind, leicht wiederverwendbar und verknüpfbar sein, um unterschiedliche Ziele zu erreichen.

Sie merken bereits, dass dieser Ansatz vollkommen technologie- und herstellerunabhängig ist. SUFAs sind per Definition sprachübergreifend und so konzipiert, dass sie in verschiedenen Clouds und Bereitstellungsumgebungen funktionieren. SUFA ist eine Möglichkeit, ein Serversystem so zu gestalten, dass Testbarkeit, Skalierbarkeit und Sicherheit gefördert werden. Übrigens habe ich die Skalierung noch nicht angesprochen, also lass uns darüber reden.

SUFA im großen Stil

Entscheidend für die Skalierung eines SUFA-Systems ist, dass es aus unabhängigen Funktionen besteht. SUFA-Systeme sollten auf einem Grundgerüst basieren, das für die Orchestrierung der Ausführung aller Funktionen mit der Erwartung ihrer effizienten Skalierung verantwortlich ist. Durch die Verwendung eines Funktionsstarters oder Job-Schedulers, um mit den gewünschten Funktionen zu arbeiten, abstrahiert das SUFA-Framework die spezifischen Details der Ausführung der Funktionen; der Autor des Codes muss lediglich angeben, welche Funktionen in welcher Reihenfolge ausgeführt werden sollen.
Zusätzliche Skalierbarkeit wird durch Funktionsgruppen und Meshing bereitgestellt.

Suborbitale Atmosphäre

Das SUFA-Muster wurde entwickelt, um mit Atmo zu arbeiten, einem universellen Framework, auf dem SUFA-Systeme besonders bequem aufgebaut werden können. Atmo verwendet eine Datei namens „Directive“, die alle Aspekte Ihrer Anwendung beschreibt, einschließlich der Verkettung von Funktionen zur Bearbeitung von Anforderungen. Funktionen, die auf Atmo laufen können, können in verschiedenen Sprachen geschrieben werden. Das Framework verwendet WebAssembly-Module als Recheneinheiten. Atmo skaliert automatisch horizontal, um die Arbeitslast Ihrer Anwendung zu bewältigen, enthält alle Arten von Tools und Best Practices und bietet ein hohes Maß an Leistung und Sicherheit, ohne dass Sie eine einzige Zeile Boilerplate-Code schreiben müssen.
Die erstaunlichen WebAssembly-Fähigkeiten und das durchdachte Design von SUFA können auf der kostenlosen Suborbital Development Platform für einen neuen Ansatz zum Erstellen von Webanwendungen ausprobiert werden. Im Zuge neuer Technologien und Praktiken wie JAMStack und Edge Computing können wir das Beste aus neuen und alten Paradigmen nutzen, um unglaubliche Dinge zu tun.

Similar Posts

Leave a Reply

Your email address will not be published.