2017-04-25 3 views
5

Ich lerne über Microservices und ich baue ein Projekt mit einer Microservices-Architektur.Microservices mit gemeinsamer Datenbank? mehrere ORM verwenden?

Die Sache ist, einer meiner Teamkollegen möchte eine Datenbank für alle Dienste verwenden und alle Tabellen teilen, damit "Daten nicht wiederholt werden", jeder Dienst würde mit verschiedenen Rahmenwerken und Sprachen wie django und Schienen gebaut werden Verwenden Sie sehr unterschiedliche ORM-Standards.

Was wäre der richtige Ansatz? Da ich denke, dass das Arbeiten mit einer Datenbank eine Menge "Hacken" der ORMs beinhalten würde, um sie richtig arbeiten zu lassen.

+1

Warum müssten Sie die Orms "hacken"? Nur weil sie unterschiedliche Syntax haben, bedeutet das nicht, dass sie am Ende nicht dasselbe tun, sondern die Datenbank abfragen. – Iceman

+0

siehe http://stackoverflow.com/questions/43426699/db-design-for-microservice-architecture/43427397#43427397 –

+0

Mögliches Duplikat von [DB Design für Microservice Architektur] (http://stackoverflow.com/questions/43426699/db-design-für-mikroservice-architektur) –

Antwort

12

Sie werden wahrscheinlich nicht von einer Microservices-Architektur profitieren, wenn alle Dienste dieselben Datenbanktabellen verwenden. Dies liegt daran, dass Sie die Dienste effektiv eng koppeln. Wenn sich eine Datenbanktabelle ändert, müssen sich alle Dienste ändern.

Sie müssen verstehen, dass der ganze Grund für eine Microservices-Architektur darin besteht, Abhängigkeiten zwischen Entwicklungsteams zu reduzieren und es ihnen zu ermöglichen, unabhängig voneinander mit schnellen Releases fortzufahren.

Hier ein Zitat von Werner Vogels ist, (Pionier Amazon viel von der Architektur Microservice Stil) der Amazon-CTO:

Für uns Serviceorientierung bedeutet, die Daten mit der Geschäftslogik einkapseln, die auf die arbeitet Daten, mit dem einzigen Zugriff über eine veröffentlichte Service-Schnittstelle. Kein direkter Datenbankzugriff ist von außerhalb des Dienstes zulässig, und unter den -Diensten gibt es keine gemeinsame Datennutzung.

Für weitere Informationen lesen Sie this und this.

1

Im Allgemeinen sollte ein Microservice für seine eigenen Daten verantwortlich sein. Das ist ein perfektes Szenario für die ganze Welt.

In der Praxis können einige der Dienste in hohem Maße miteinander verwandt sein. Z.B. CustomerShippingDetails und CustomerShoppingCheckout-Dienste können beide auf dieselben Daten zugreifen - Kundenadresse. Wie würden Sie dann ein Problem der Kundenanschrift an den Kunden-Check-out lösen? Wenn der Checkout-Dienst die Einkaufsdetails direkt abfragt, lösen Sie die Verbindung zwischen den Services auf. Eine andere Möglichkeit ist die Einführung einer gemeinsamen Datenbank.

Es wird immer eine Art Kompromiss in der Architektur geben müssen. Es ist eine architektonische Entscheidung, die stark vom Gesamtbild abhängt (das Design des gesamten Systems).

Da ich nicht zu viele Details über Ihr System habe, würde ich mit einem gemischten Ansatz gehen. Das heißt, eine gemeinsame Datenbank für Dienste zu haben, die sich um eine ähnliche Geschäftslogik kümmern. So können CustomerShippingDetails und CustomerShoppingCheckout eine Datenbank freigeben. Aber eine StoreItemsDetails würde eine separate Datenbank haben.

Sie können mehr über gemeinsam genutzte Datenbank Muster für Microservices bei finden.

Verwandte Themen