Ich habe nach Mikroservice-Architekturen gesucht, um einen Überblick über alle Vor- und Nachteile, wann und warum usw. zu erhalten. Viele der Informationen, die ich lese / beobachte, stammen von ThoughtWorks (Martin Fowler, Neal Ford, et al).
Die meisten Arbeiten von Martin Fowler zu diesem Thema sind einige Jahre alt, als Microservices (als bekannter Name in der Programmierung, wenn nicht in der allgemeinen Praxis) noch jung war, daher nehme ich viel davon mit einem Körnchen Salz.
Eines ist insbesondere:
Als ich Geschichten über Teams höre, die eine Microservices-Architektur verwenden, habe ich ein gemeinsames Muster festgestellt.
- Fast alle erfolgreichen Microservice-Geschichten haben mit einem Monolithen begonnen, der zu groß wurde und zerbrochen wurde
- In fast allen Fällen, in denen ich von einem System gehört habe, das von Grund auf als Microservice-System entwickelt wurde, sind ernsthafte Probleme aufgetreten.
Dieses Muster hat viele meiner Kollegen dazu veranlasst zu argumentieren, dass Sie kein neues Projekt mit Microservices starten sollten, auch wenn Sie sicher sind, dass Ihre Anwendung groß genug ist, damit es sich lohnt. .
(Ref: https://martinfowler.com/bliki/MonolithFirst.html - Hervorhebung ihrer)
Jetzt, 3 Jahre später und mit Microservices, einem allgegenwärtigeren Begriff, ist es allgemein akzeptabel, dass ein neues System in der Regel besser bedient werden kann, wenn zunächst größere (als Mikroservice-aber-kleiner-als-Monolith-) Service-Chunks vorhanden sind und hergestellt werden sie granularer als Teil einer evolutionären Maßnahme?
Oder gibt es eine Norm, ein Projekt im Gegensatz zu den obigen Aussagen mit einer granularen Microservice-Architektur von Grund auf neu zu beginnen?
Scheint ein vernünftiger allgemeiner Ansatz zu sein, aber neugierig auf die Gedanken der Community.
quelle
Meiner Meinung nach kann es vorteilhaft sein, zuerst einen Monolithen zu entwickeln (oder besser: Teile Ihrer Anwendung als Monolithen zu entwickeln).
Es gibt Fälle, in denen Sie sich über die Domäne und die Grenzen Ihres Problems nicht sicher sind (z. B. baue ich eine Schiffsverwaltungssite, benötige ich einen Schiffsservice UND einen Flottenservice oder ist ein Schiffsservice ausreichend?), Und in solchen Fällen a Monolith kann leichter zu entwickeln sein.
Sie sollten damit aufhören, wenn Sie verschiedene Technologien in den Mix einbringen müssen (z. B. Ihre vorhandenen Teile sind in C # geschrieben, aber Ihr neues Problem erfordert maschinelles Lernen, am besten mit Python). Sie müssen die Domänen in Ihrem System gut verstehen Projekt oder Ihr Monolith versucht zu galvanisieren, z. B. baut jeder nur diesen Monolithen und unterdrückt den Begriff der separaten Dienste.
quelle
Ich bin mir ziemlich sicher, dass es zu diesem genauen Artikel von MF einige Fragen gegeben hat.
Meine Einstellung dazu ist folgende:
Ein Monolith mit Wartungs- oder Skalierbarkeitsproblemen wird verbessert, indem er in Mikrodienste unterteilt wird. Ein solches Projekt wird fast immer „erfolgreich“ sein, da selbst das Aufteilen eines kleinen Abschnitts zu messbaren Gewinnen führen kann und Sie eine Linie darunter ziehen können, wenn Sie zufrieden sind.
Ob Ihr halber Monolith + eine Nachrichtenwarteschlange und ein paar Arbeitsprozesse als "Microservice Architecture" gelten, ist ein Argument, das Sie in der Kneipe haben sollten, aber Sie werden es definitiv so nennen , wenn Sie über das Projekt sprechen.
Auf der anderen Seite läuft jedes neue Projekt unabhängig von der gewählten Architektur Gefahr, die Erwartungen nicht zu erfüllen. Daher würden Sie natürlich eine niedrigere Erfolgsquote erwarten. Wenn Sie zu Beginn versucht haben, das Ganze von Grund auf zu einer „Best Practice Microservice Architecture“ zu machen, wagen Sie sich möglicherweise in neue Technologien und die schwierigeren Bereiche von Microservices.
Wir müssen uns auch daran erinnern, dass MF aus einer großen OOP-Perspektive schreibt. Er ist natürlich skeptisch gegenüber einem moderneren verteilten Ansatz.
In der heutigen Zeit würde ich erwarten, dass jede große Geschäftslösung ein Element von Microservices enthält, und nur ein Narr würde empfehlen, dass Sie eine riesige Monolith-Anwendung erstellen, es sei denn, Sie vertreiben eine einzige Desktop-Anwendung.
quelle
In meiner (umfangreichen) Erfahrung habe ich gesehen, dass viel mehr Projekte aufgrund von Menschenproblemen als aufgrund von Technologieproblemen scheitern. Leider scheitern die Leute nicht gern und neigen daher dazu, die Gründe für das Versagen falsch zu melden und die Technologie zu beschuldigen.
In meinem Bereich Finanzen folgen die meisten neuen Projekte heutzutage Microservice-Architekturen, und aus Sicht der Gesamtbetriebskosten (Total Cost of Ownership) scheint dies eine erfolgreiche Architektur zu sein. Diese Projekte scheinen nicht so oft zu scheitern, und wenn sie die angegebenen Gründe erfüllen, wird die Anwendungsarchitektur nicht oft als Problem aufgeführt.
quelle