Skip to content
Armando Magalhães edited this page Mar 9, 2017 · 1 revision

A suite of polyglot, scalable, portable, and easy to maintain microservices running in an appropriate and reproducible environment.

By "polyglot", I mean:

  • Any service can be built using any kind of programming language and libraries it finds more suitable for getting his job done.

  • Any service can use any kind of database it finds more suitable for the job.

By "easy to maintain", I mean:

  • A service must be DRY, simple, small and follow the SRP from SOLID principles.

  • Must be easy to write unit and e2e tests for each service.

  • Must be easy to switch from a stack to another, so must be upgrading to major versions of frameworks and runtimes.

  • Must allow the developer to make simple implementations, so he can refactor faster.

By "portable, reproducible environment", I mean:

  • Must be easy to run all the infrastructure needed to run one or more services in any kind of environment.

  • Must be easy to distribute these services and its dependencies.

  • Must be easy to run a service independently or with one or more dependent services.

  • Must be easy to build a service independently or with one or more dependent services.

  • Must be able to reproduce the state of one or more services for debugging purposes.

  • Must be able to run the entire environment locally, without external dependencies.

By "scalable", I mean:

  • Must be easy to scale horizontally.

  • Must be able to schedule services through a cluster.

  • Must be able to run all services on a single host.

Clone this wiki locally