我正在學習微服務,我將用微服務架構來構建一個項目。共享數據庫的微服務?使用多個ORM的?
事情是,我的一個團隊成員想要爲所有服務使用一個數據庫,共享所有表,以便「數據不會重複」,每個服務都將使用不同的框架和語言,如django和rails使用非常不同的ORM標準。
什麼是正確的方法?因爲我認爲與一個數據庫合作會涉及到很多「黑客行爲」,以使它們正常工作。
我正在學習微服務,我將用微服務架構來構建一個項目。共享數據庫的微服務?使用多個ORM的?
事情是,我的一個團隊成員想要爲所有服務使用一個數據庫,共享所有表,以便「數據不會重複」,每個服務都將使用不同的框架和語言,如django和rails使用非常不同的ORM標準。
什麼是正確的方法?因爲我認爲與一個數據庫合作會涉及到很多「黑客行爲」,以使它們正常工作。
一般來說,一個微服務應該負責它自己的數據。這是一個完美的世界場景。
實際上,一些服務可能彼此高度相關。例如。 CustomerShippingDetails和CustomerShoppingCheckout服務都可以訪問相同的數據 - 客戶地址。那麼您將如何解決向客戶結帳服務提供客戶地址的問題。如果結賬服務直接查詢購物細節,那麼您可以打破服務之間的鬆散耦合。其他選擇是引入共享數據庫。
在架構上總會有某種妥協。什麼是sacreficed是一個架構的決定,高度依賴於大局(整個系統的設計)。
沒有太多關於您的系統的細節我會採取混合的方法。也就是說,擁有一個共享數據庫來處理類似業務邏輯的服務。所以CustomerShippingDetails和CustomerShoppingCheckout可以共享一個數據庫。但是StoreItemsDetails會有一個單獨的數據庫。
您可以在Microservice Architecture找到更多關於微服務共享數據庫模式的信息。
爲什麼你需要「破解」orms?僅僅因爲他們有不同的語法並不意味着他們最終不會做同樣的事情,查詢數據庫。 – Iceman
請參閱http://stackoverflow.com/questions/43426699/db-design-for-microservice-architecture/43427397#43427397 –
可能的重複[微型服務架構的數據庫設計](http://stackoverflow.com/questions/43426699/DB-設計換微服務的架構) –