2016-04-29 7 views
1

Ich versuche immer noch, Micro-Services zu finden. Ich habe eine grundlegende Frage.Verwalten der Parallelität von Datenspeichern als Microservices-Skala

In einem Unternehmensszenario müssten Mikroservices wahrscheinlich in einen persistenten Datenspeicher schreiben - sei es ein RDBMS oder irgendeine Art von NoSQL. In den meisten Fällen handelt es sich bei dem persistenten Datenspeicher um eine Enterprise-Klasse, jedoch um eine einzelne Entität (die natürlich repliziert und gesichert wird).

Betrachten wir nun den Fall eines einzelnen Mikroservices, der in einer privaten/öffentlichen Cloud-Umgebung mit einem eigenen persistenten Datenspeicher (z. B. RDBMS in Unternehmensqualität) bereitgestellt wird. Wenn ich meinen Micro-Service skaliere, wird es mehrere Instanzen des Micro-Service geben, die versuchen, aus demselben Datenspeicher zu lesen/schreiben. Ein herkömmlicher Datenspeicher kann wahrscheinlich auf ~ 50 bis 200 gleichzeitige Verbindungen abgestimmt werden. Wie gehe ich mit einer Situation um, in der meine Microservices weit darüber hinaus skaliert werden müssen?

Was sind die besten Praktiken in einem solchen Szenario? Irgendwelche Muster, die verwendet werden können?

+0

http://stackoverflow.com/questions/31525725/how-to-handle-too-many-concurrent-connections-even-after-using-a-connection-pool – alan7678

+1

Ihre Frage läuft darauf hinaus grundsätzlich nach unten zu „How to skalieren Sie die Datenbank ". –

Antwort

1

Idealerweise ist jede Microservice-Instanz in sich abgeschlossen, so dass jede Instanz unabhängig von anderen skalieren kann, während sie auch ihren Zustand einkapselt, so dass andere nur über eine wohldefinierte API darauf zugreifen können. Sie müssen also nicht nur herausfinden, wie Sie Ihre Datenbank (en) skalieren, die Ihre Microservices für die Speicherung verwenden, sondern Sie müssen dieses Einkapselungsproblem auch lösen, wenn Sie dieses architektonische Muster wirklich nageln wollen.

Haben Sie sich Service Fabric angesehen, um dies zu lösen? Service Fabric hat das Konzept stateful services, in dem Daten tatsächlich in jeder Microservice-Instanz gespeichert werden. Die Plattform verwaltet die Replikation und Festplattenpersistenz automatisch für HA und verfügt außerdem über integrierte Datenpartitionierung für die Verteilung auf mehrere Rechner. Die Idee besteht darin, die zentrale Datenbank zu entfernen und stattdessen Ihre Daten und Daten in einer Microservice-Instanz zu speichern. Jetzt sind Ihre Dienste in sich abgeschlossen und plötzlich passt die Lösung zu diesem Architekturmuster, denn jetzt kann jede Microservice-Instanz unabhängig skaliert und aktualisiert werden und Sie haben Ihre Daten vollständig in den Service integriert. Der Nachteil ist natürlich, dass Sie nicht den Funktionsumfang eines ausgewachsenen RDBMS erhalten, aber wenn Sie NoSQL-Speicher in Erwägung ziehen, sollte das keine große Sache sein.

Mein Gedanke war immer, dass ein zentraler Speicher wie eine Datenbank ein Anti-Pattern in einer Shared-Nothing-Microservices-Architektur ist. Vollständige Offenlegung allerdings: Ich arbeite an Service Fabric, daher kann meine Meinung ein wenig voreingenommen sein!

+1

Ich verstehe das Muster des gekapselten Datenspeichers. Dies ist jedoch kaum das Szenario in einer Unternehmensrealität. Sie verfügen bereits über Unternehmensdatenspeicher und benötigen nun Anwendungen, die auf Microservices basieren. Wie würde ich eine solche Situation angehen? – Ritwik

Verwandte Themen