Being a software architecture style, microservices introduce a revolutionary approach to apps: they are no longer a monolithic structure, but a complex system composed of small particles and independent processes which communicate with each other via language-agnostic APIs. This particles and processes are represented by various services, which are highly decoupled and designed to run the smallest tasks that results in a modular approach to system-building. All micro services are easy to replace, since they run in a symmetrical architecture instead of common hierarchical, and you can implement them via various hardware and software solutions depending on what fits best. The potential of microservices is huge, so we will describe them from the perspective of ecommerce and Magento. Below, you will find a brief description of microservices, some useful links, and the best platforms designed for this software architecture style.
Let’s figure out some core problems related to common monolithic applications first of all:
Successful apps are often huge that essentially increase the complexity of development and slows the overall process down.
Big applications turn continuous deployment into a headache, because it is impossible to update its part without redeploying the entire app.
Monolithic apps are tend to be difficulty scalable especially when they consists of several modules with conflicting resource requirements.
Reliability is another crucial aspect of monolithic applications, since a small bug in a module often brings down the entire app.
And of course there is a huge problem with the deployment of a new technology stack (a framework or a language) within monolithic applications because of their tightly connected software design patterns.
It is possible to solve the aforementioned problems by adopting the microservices architecture pattern. Instead of building a monstrous application, such companies as Google, Amazon, and Netflix, already split their apps into sets of interconnected services. Each micro service relies on a hexagonal architecture which consists of business logic and various adapters. Some of them utilize APIs consumed by other services or clients of the application, while others implement a UI. Each instance often exists in a form of a cloud VM or a software container. Each functional area is implemented by its own microservice, and the entire web app can be split into a set of simple solutions. But what are the benefits of microservices?
Microservices solve the most common problems of monolithic apps, while functionality remains the same:
Software design patterns related to microservices provides the ability to create more precise applications, since each service can be developed by a team that is focused on its functionality.
A new technology stack can be easily implemented, because services are small and highly decoupled.
The microservices architecture pattern introduces independent deployment and scalability to services for the same reasons.
And microservices apps are more reliable, because a bug in a single service never stops the whole system from performing its tasks.
These are the benefits of microservices, but what are the drawbacks?
The major drawback of microservices is the complexity of a microservice app, since it is a distributed system. The creation of a microservice app requires more time and effort then the development of a monolithic app.
Another inconvenience is the partitioned database architecture. In case of monolithic apps, you can rely on a single database, while the microservices architecture pattern you get multiple databases owned by different services.
Even testing a microservices app is an obstacle, because it is a complex structure.
Implementing changes to multiple services is also a headache, because you should plan the rollout of changes to each service.
The deployment of microservices is simultaneously a benefit and a drawback. While it offers much wider opportunities, the procedure is very complex in comparison with monolithic apps.
As you can see multiservices software architecture style is not perfect. It solves a lot of problems related to common software architecture standards, but at the same time introduces a set of appreciable drawbacks.
For further information on microservices, we recommend you to check this article by Martin Fowler as well as Microservices.io by Chris Richardson – an experienced software architect, who offers microservices workshops, consulting, and training classes.
Patterns for building resilient and scalable microservices platform on AWS
If you are wondering how microservices can improve the Magento platform, we recommend you to pay attention to one interesting project by Fabrizio Branca and AOE. The project has such challenging requirements as:
up to a thousand reservations per second
up to thirty orders per second
two million products
The idea behind using microservices in Magento is fully described in an appropriate article by Fabrizio Branca. The post sheds light on the following topics:
Why is it necessary to use microservices in Magento
How to implement microservices in Magento
What tools to use while working with microservices in Magento
There are several platforms and tools that essentially simplifies development based on microservices software design patterns. You can find some top solutions below.
Giant Swarm provides the ability to build, deploy, and manage containerized services. Since you face no restrictions regarding frameworks, programming languages, or databases while working on the platform, it is a perfect solution for the microservices development. Besides, you get enough flexibility for changing the microservice tooling according to your own requirements. Please note that Giant Swarm is available on-premise and as a hosted container solution. You can get the tool here:
Discover the innovative enterprise application architecture with Vamp by Magnetic – the Very Awesome Microservices Platform. It provides the ability to create apps on the basis of the event-driven microservices architecture and such container technologies as Docker. Vamp is cloud and PaaS agnostic, open source, and self healing. It can easily become a Big Data pipeline for your enterprise. Vamp offers a platform-agnostic microservices DSL, reliable A-B testing, powerful autoscaling, as well as an integrated engine for metrics and events.
Gilliam is an open source PaaS designed for developing, deploying, and scaling app backend with the help of the microservice architecture. Being based on Docker, the platform turns all your code into Docker images and introduces such features as service discovery, scheduling, router, and elastic scaling. Besides, Gilliam offers a simple command-line client. Please note that it has been built with RESTful APIs in mind.
Building, testing, and deploying apps with LSQ are a piece of cake. The platform offers convenient pre-built microservice templates, a reliable NPM package manager, and a user-friendly documentation editor. Besides, it provides the ability to run multiple microservices simultaneously as well as view consolidated logs. One-click deployment should be implemented in the nearest future.
With Mantl, you get all components required for deploying a microservices platform. All the components work together, so there is no necessity to write a glue code. Hence, you can focus on an app instead. Mantl is cloud agnostic, so you can rely on a number of providers, such as Openstack, Vagrant, Bare Metal, and others via Terraform.