We are designing a system based on independent microservices (connected via a RabbitMq bus). The code will (for the first components at least) be written in python (both python2 and python3). We have already a monolith application implementing some of the business logic, which we want to refactor as microservices, and extend. One question that worries me is:
What is the best way to share code between the different microservices. We have common helper functions (data processing, logging, configuration parsing, etc), which must be used by several microservices.
The microservices themselves are going to be developed as separate projects (git repositories). The common libraries can be developed as a self-contained project too. How do I share these libraries between the microservices?
I see several approaches:
- copy around the version of the library that is needed for each microservice, and update as needed
- release the common libraries to an internal PyPi, and list those libraries as dependencies in the microservice's requirements
- include the library repository as a git submodule
I would like to read a bit more about suggested approaches, best practices, past experiences before deciding on how to proceed. Do you have any suggestion or link?
fib(n)
(implementation of the fibonacci series). You do not want to repeat that implementation in each microservice. That belongs to autils
library (versioned, for features and bugfixes). That is no distributed monolith, that is just a layer of common functionality. My question is how to handle this layer at implementation level?