Select
Microservices platform Test data management Service virtualization Microservices architecture

Legacy monolithic applications cause significant challenges during the implementation of DevOps, continuous delivery and SRE best practices. One of the biggest challenges that monoliths bring is a lack of organizational scalability. Often, hundreds of developers are working on the same codebase, causing a high risk of collaboration issues and reduced performance across the organization. Microservices architecture helps solve these problems. Small services facilitate breaking down big and risky releases into smaller ones, and allow big groups of developers to implement new features in parallel without conflicts.

We have been working with microservices architectures for years, helping large enterprises migrate from monoliths to microservices. To get the most benefit from migration, we often advise combining such migrations with the adoption of open source, cloud, continuous delivery, DevOps, test automation and SRE practices. After years of building microservices in various environments, we have developed a number of best practices and reusable blueprints, which we bring with us in new engagements to reduce the risk and effort of migration.

Extensive expertise with large enterprises

Identify candidates for early adoption

It is best to start adopting microservices architecture with the applications that can benefit the most from the new approach. These are usually either new services that businesses need to build, or replatforming candidates migrating from legacy monolithic applications. When choosing candidates for migration, we look for services that satisfy the following criteria:

  • Are closely coupled with the rest of the system
  • Have plans for significant changes due to functional or performance requirements
  • Can take advantage of dynamic scalability and on-demand cloud resources

Choose the right size and boundaries

A microservice should solve one well-defined business task, or a single bounded context (if discussing in terms of domain-driven design). Artificially breaking business logic into many small services can therefore cause more harm than good. However, the "two pizza rule" size should also not be exceeded. Two microservices can only integrate with other services via API, messaging or ETL, and should never use data in the same database.

undefined

Invest in a management platform

While the first microservices may be built without a special platform, when the number of them exceeds five, we recommend investing in a management platform. Without it, the complexity of managing hundreds of services will become too large, and may outweigh the benefits of microservices.

undefined

Databases

Databases

Provide data persistence, dedicated to specific microservices.
Caches

Caches

Provides in-memory access to data when there are strict performance requirements.
Messaging

Messaging

Integrate between microservices in real-time.
Middleware

Middleware

Increase the productivity of developers.
API management

API management

Expose microservices to outside clients, both internal and external to the company.
Feature flags management

Feature flags management

Allow the business to switch features in real-time in one or across several microservices.
Service mesh

Service mesh

Enable complex patterns of inter-service communication reliably and flexibly.
Upgrade and release policies

Upgrade and release policies

Enable blue-green and rolling upgrades, and support shadow mode and canary releases as well as A/B testing.
Versioning

Versioning

Enable audit trails, rollbacks, and control of API backwards compatibility during upgrades.
Authentication

Authentication

Regulate the secure access to sensitive microservices for security purposes.
Database management system
Document-oriented database program
Relational database management system
Database management system with emphasis on extensibility
Key-value and document database
Relational database service by Amazon web services
Fully-managed database service
Globally distributed NewSQL database
Globally-distributed, multi-model database service by Microsoft
Database and caching platform
In-memory data grid
In-memory data structure store
Stream-processing software platform
Notification and messaging service
Streams data in real-time
Real-time messaging service
Provides tools for developers to build common patterns in distributed systems
General purpose computer programming language
JavaScript run-time environment
Software framework with interoperability across several languages
Transparent proxy that adds service discovery, routing, and visibility
Controls, observes, connects, and secures services
Edge and service proxy
Container orchestration system for automating deployment, scaling, and management
Cluster manager and orchestration system for Docker containers
Helps deploy, manage, and scale containerized applications
Manages hosted Kubernetes environment
Stack that enables developers to provision, secure, run, and connect infrastructure
Database management system
Document-oriented database program
Relational database management system
Database management system with emphasis on extensibility
Key-value and document database
Relational database service by Amazon web services
Fully-managed database service
Globally distributed NewSQL database
Globally-distributed, multi-model database service by Microsoft
Database and caching platform
In-memory data grid
In-memory data structure store
Stream-processing software platform
Notification and messaging service
Streams data in real-time
Real-time messaging service
Provides tools for developers to build common patterns in distributed systems
General purpose computer programming language
JavaScript run-time environment
Software framework with interoperability across several languages
Transparent proxy that adds service discovery, routing, and visibility
Controls, observes, connects, and secures services
Edge and service proxy
Container orchestration system for automating deployment, scaling, and management
Cluster manager and orchestration system for Docker containers
Helps deploy, manage, and scale containerized applications
Manages hosted Kubernetes environment
Stack that enables developers to provision, secure, run, and connect infrastructure

Schedule a free workshop with one of our senior architects to learn more

This field is requiredPlease enter your name
This field is requiredPlease enter your email
This field is requiredPlease enter company name