2017-04-25 43 views
5

我正在學習微服務,我將用微服務架構來構建一個項目。共享數據庫的微服務?使用多個ORM的?

事情是,我的一個團隊成員想要爲所有服務使用一個數據庫,共享所有表,以便「數據不會重複」,每個服務都將使用不同的框架和語言,如django和rails使用非常不同的ORM標準。

什麼是正確的方法?因爲我認爲與一個數據庫合作會涉及到很多「黑客行爲」,以使它們正常工作。

+1

爲什麼你需要「破解」orms?僅僅因爲他們有不同的語法並不意味着他們最終不會做同樣的事情,查詢數據庫。 – Iceman

+0

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

+0

可能的重複[微型服務架構的數據庫設計](http://stackoverflow.com/questions/43426699/DB-設計換微服務的架構) –

回答

12

如果所有服務共享相同的數據庫表,您不可能從微服務體系結構中受益。這是因爲你有效地緊密耦合了這些服務。如果數據庫表更改所有服務將不得不更改。

您必須明白,微服務架構的全部原因是爲了減少開發團隊之間的依賴關係,並允許他們獨立於快速發佈版本前進。

這裏是沃納·博赫爾斯,亞馬遜CTO報價(亞馬遜開創了很多的微服務式建築):

對於我們服務的方向是指與在操作 業務邏輯封裝數據數據,通過 唯一訪問一個已發佈的服務接口。服務外部不允許直接訪問數據庫 ,並且 服務之間沒有數據共享。

欲瞭解更多信息,請閱讀thisthis

1

一般來說,一個微服務應該負責它自己的數據。這是一個完美的世界場景。

實際上,一些服務可能彼此高度相關。例如。 CustomerShippingDetails和CustomerShoppingCheckout服務都可以訪問相同的數據 - 客戶地址。那麼您將如何解決向客戶結帳服務提供客戶地址的問題。如果結賬服務直接查詢購物細節,那麼您可以打破服務之間的鬆散耦合。其他選擇是引入共享數據庫。

在架構上總會有某種妥協。什麼是sacreficed是一個架構的決定,高度依賴於大局(整個系統的設計)。

沒有太多關於您的系統的細節我會採取混合的方法。也就是說,擁有一個共享數據庫來處理類似業務邏輯的服務。所以CustomerShippingDetails和CustomerShoppingCheckout可以共享一個數據庫。但是StoreItemsDetails會有一個單獨的數據庫。

您可以在Microservice Architecture找到更多關於微服務共享數據庫模式的信息。