Hello Devs,

As part of the Spring’17 Advanced Science Gateway Architecture course, we are 
working on the topic of Data Management for Micro-services. The goal of this 
project is to explore possible ways to manage data across micro-services. In a 
nutshell, the question at hand is whether to have a “database per 
micro-service?” or “shared database for all micro-services?”.

After reading through few blogs and articles it was clear that “generally”, it 
is not a good idea to maintain everything in a shared database have all 
micro-services access it. Rather in order to achieve portability and 
maintainability of both the micro-services and the database, it is a good 
practice to keep a micro-service data private – only takes care of data which 
is needed for that service. Having said that, in a distributed environment it 
is almost impossible to NOT have any data dependencies between micro-services 
(if not write, then at least read). Like for e.g.: “User Profile” micro-service 
contains data that is most often needed by others.

In such a scenario, the challenge would be to keep a micro-service data private 
and at the same time enable sharing following the CAP theorem. We have 
identified 2 possible solutions to achieve this:

·         2-phase commits

·         Event driven data replication

Each of these have their pros and cons related to consistency and availability. 
While 2-phase commits guarantee consistency while compromising availability, 
event driven data replication assures eventual consistency.

Ajinkya and me, we have already implemented a prototype for the event driven 
data replication (see 
github<https://github.com/airavata-courses/spring17-microservice-data-management>).
 We are using a message broker (RabbitMQ) as our event-communication channel. 
As of now, we have identified all possible corner cases and tuned our code 
accordingly. We would appreciate if anyone would volunteer to try out the 
2-phase commit.

References:
[1] http://microservices.io/patterns/data/database-per-service.html
[2] http://microservices.io/patterns/data/event-driven-architecture.html
[3] 
https://plainoldobjects.com/2015/09/02/does-each-microservice-really-need-its-own-database-2/
[4] https://en.wikipedia.org/wiki/CAP_theorem

Thanks and Regards,
Gourav Shenoy

Reply via email to