DB design for microservice architecture [closed]

北战南征 提交于 2019-11-26 14:07:49

问题


I am planning to use the Microservices architecture for the implementation of our website. I wanted to know if it is right to share databases between services or if it is preferable to have a separate database for each service. In this regard, can I consider having one common database for all services or does it violate the very essence of Microservice architecture ?


回答1:


Microservices offers decoupling. You must break down your application into independent domains. Each domain can have a DB. In case other MS needs to access data owned by some other microservices, they have to communicate over the network.

In case you feel that there are too many dependent services and the network calls would be too much, then you can define a domain, clustering the dependent services together.

For instance -- Suppose I have an online Test evaluation Service where a manager of a company can post tests and he can view results of all the employees in his department.

My Microservices for this scenario would be:

Initial Design

  1. User Service: For login and user information.
  2. Test Service: Service to evaluate tests.
  3. Employee: Handles employee details
  4. Company: Handles organization CRUD
  5. Department: Handles department CRUD

After breaking it down, seems like employee, Organization and Department service would be making too much network/API calls as they are tightly dependent on each other. So it's better to cluster them.

Updated design

  1. User Service : For login and user information.
  2. Test Service : Service to evaluate tests
  3. Organization : Handles Company, Employee and Department related operations.

Each service could have it's own DB and it's independently deployable. User and Test Service can use mongoDB or any NoSql DB and Organization service can use RDBMS.

Hope this helps.




回答2:


If you share the same database then you loose two of the most important advantages of microservices: strong cohesion and loose coupling (page 25).

You can share the same database if you don't share the tables in it. For example, microservice1 uses table1_1 and table_1_2 and microservice2 uses table2_1 and table2_2. When I say uses I mean read and write. One microservice don't read and don't write on the other's tables.



来源:https://stackoverflow.com/questions/43426699/db-design-for-microservice-architecture

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!