Why Micro-Services ?
Traditional monolithic applications present a limitation challenge for continuous delivery and scalability. Delivering a new feature, improving an existing one, or fixing a bug, requires a checkpoint across all the code-base to create a consistent release-bundle, and deploying it requires the shutdown and restart of the complete system.
Micro-Services style architectures decompose project functionally in independently deployed and scaled components — the services. Deploying a new feature is nothing more than adding another application to a existing running distributed system. Improving a feature or fixing bugs can be done without affecting other parts of the system too. Different services can also be scaled at different levels, depending on the expected load.
Technologies of Choice
Spring Cloud is a collection of middleware projects aimed to simplify development of cloud deployable and micro-services style software architectures. Includes Spring Cloud Connectors — providing abstraction to achieve cloud portability and production-development parity; Spring Cloud Config — allowing distributed configuration of many applications in a simple way; and Spring Cloud Eureka — a service for dynamic registration and discovery of application instance, and Spring Hystrix Circuit-Breakers a AOP based based on Netflix OSS.
Micro-Services benefit from Cloud Native Platforms like Cloud Foundry due to the simplicity of deployment and scaling. Alternative deployment approaches are also possible by wrapping application services in Docker software containers and deploy them to a cluster orchestration platform specific for Docker containers.
Micro-Services Design Patterns
Micro-Service Architectures use already well established techniques, styles of integration, and design patterns to fully realize the promised of distributed deployments. Beyond following appropriated criteria to decompose the functionality of applications, Micro-Services pattern need to ensure that client applications response time is low, that failure of some micro-services don't cascade into a global system failure, and that security requirements are meet without reducing the usability of the system.
Combining intuition about the business domain, sensitivity to trade-offs in distributed computing, relying on battle-harden service discovery and configuration services, use of suitable inter-process communication abstractions, and setting up continuous delivery and cloud deployment strategies, are all required ingredient to reap all the benefits of micro-service architectures.
- Highly-Scalable, Realiable, and Complex Distributed Systems
- Polyglot Programming
- Polyglot persistence
EInnovator can help by providing guidelines, and concrete design suggestions on how to split application functionality into semi-independent micro-services, and the implementation strategy to use to realize that architecture. The toolkit of technologies and techniques recommended include: REST APIs, loosely-coupled message passing, polyglot persistence, polyglot programming, distributed configuration, service discovery, functionality decomposition between UI gateways and back-end micro-services, circuit-breaker for reliability, and cloud deployment for scalability and operational simplicity.