Warum brauchen wir es überhaupt?
Der enorme Vorteil von Microservices - und vor allem von SOA - ist der hohe Abstraktionsgrad der Interna - nicht nur die Implementierung, sondern auch die verwendeten Technologien. Wenn beispielsweise ein System in Form von fünf Microservices von fünf Teams entwickelt wird, kann ein Team entscheiden, auf einen völlig anderen technologischen Stack (z. B. von Microsoft Stack zu LAMP) zu wechseln, ohne andere Teams nach ihrer Meinung zu fragen.
Schauen Sie sich Amazon AWS oder Twilio an. Wissen Sie, ob ihre Dienste in Java oder Ruby implementiert sind? Verwenden sie Oracle oder PostgreSQL oder Cassandra oder MongoDB? Wie viele Maschinen benutzen sie? Interessiert dich das überhaupt? Mit anderen Worten, wirken sich diese technologischen Entscheidungen auf die Art und Weise aus, wie Sie diese Dienste nutzen? ... Und was noch wichtiger ist: Wenn sie in eine andere Datenbank verschoben werden, müssten Sie Ihre Clientanwendung entsprechend ändern?
Was passiert nun, wenn zwei Dienste dieselbe Datenbank verwenden? Hier ist ein winziger Teil der Probleme, die auftreten können:
Das Team, das Service 1 entwickelt, möchte von SQL Server 2012 zu SQL Server 2016 wechseln. Team 2 stützt sich jedoch auf eine veraltete Funktion, die in SQL Server 2016 entfernt wurde.
Service 1 ist ein großer Erfolg. Das Hosten der Datenbank auf zwei Computern (Master und Failover) ist keine Option mehr. Die Skalierung des Clusters auf mehrere Computer erfordert jedoch Strategien wie Sharding. In der Zwischenzeit ist Team 2 mit der aktuellen Skala zufrieden und sieht keinen Grund, zu etwas anderem überzugehen.
Dienst 1 sollte als Standardcodierung auf UTF-8 umgestellt werden. Service 2 ist jedoch mit der Verwendung von Code Latin 125 1 zufrieden.
Dienst 1 beschließt, einen Benutzer mit einem bestimmten Namen hinzuzufügen. Dieser Benutzer existiert jedoch bereits und wurde vor einigen Monaten vom zweiten Team erstellt.
Service 1 benötigt viele verschiedene Funktionen. Service 2 ist eine äußerst wichtige Komponente und muss die Datenbankfunktionen auf ein Minimum beschränken, um das Risiko von Angriffen zu verringern.
Service 1 benötigt 15 TB Festplattenspeicher. Die Geschwindigkeit ist nicht wichtig, daher sind normale Festplatten vollkommen in Ordnung. Service 2 benötigt höchstens 50 GB, muss jedoch so schnell wie möglich darauf zugreifen, sodass die Daten auf einer SSD gespeichert werden sollten.
...
Jede kleine Wahl betrifft jeden. Jede Entscheidung muss von Menschen aus jedem Team gemeinsam getroffen werden. Kompromisse müssen gemacht werden. Vergleichen Sie dies mit der völligen Freiheit, in einem SOA-Kontext zu tun, was Sie wollen.
es ist zu [...] unüberschaubar.
Dann machst du es falsch. Ich nehme an, Sie stellen manuell bereit .
So sollten die Dinge nicht gemacht werden. Sie müssen die Bereitstellung von virtuellen Maschinen (oder Docker-Containern) automatisieren, auf denen die Datenbank ausgeführt wird. Sobald Sie sie automatisiert haben, ist die Bereitstellung von zwei Servern oder zwanzig Servern oder zweitausend Servern nicht sehr unterschiedlich.
Das Magische an isolierten Datenbanken ist, dass sie extrem verwaltbar sind . Haben Sie versucht, eine riesige Datenbank zu verwalten, die von Dutzenden von Teams verwendet wird? Es ist ein Albtraum. Jedes Team hat spezifische Anforderungen, und sobald Sie etwas berühren, betrifft es jemanden. Mit einer Datenbank, die mit einer App gekoppelt ist, wird der Umfang sehr eng, was bedeutet, dass Sie viel weniger darüber nachdenken müssen.
Wenn für eine große Datenbank spezialisierte Systemadministratoren erforderlich sind, können Datenbanken, die nur von einem Team verwendet werden, im Wesentlichen von diesem Team verwaltet werden (DevOps handelt auch davon), wodurch Systemadministratoren Zeit sparen.
es ist zu teuer
Kosten definieren.
Die Lizenzkosten hängen von der Datenbank ab. Im Zeitalter des Cloud Computing bin ich mir ziemlich sicher, dass alle großen Unternehmen ihre Lizenzierung neu gestaltet haben, um dem Kontext gerecht zu werden, in dem es anstelle einer großen Datenbank viele kleine gibt. Wenn nicht, können Sie in eine andere Datenbank wechseln. Es gibt übrigens viele Open Source.
Wenn Sie über Rechenleistung sprechen, sind sowohl virtuelle Maschinen als auch Container CPU-freundlich, und ich würde nicht sehr bestätigen, dass eine große Datenbank weniger CPU verbraucht als viele kleine, die denselben Job ausführen.
Wenn Ihr Problem der Speicher ist, sind virtuelle Maschinen keine gute Wahl für Sie. Container sind. Sie können so viele RAMs umfassen, wie Sie möchten, da Sie wissen, dass sie nicht mehr RAM als nötig verbrauchen. Während der Gesamtspeicherverbrauch für viele kleine Datenbanken höher ist als für eine große einzelne, nehme ich an, dass der Unterschied nicht allzu wichtig ist. YMMV.