#1 Global Leader in Data Resilience

What are Microservices?

Microservices are an architectural approach to the development of applications that breaks a project up into smaller, more independent services that communicate with each other over APIs. Using microservices can speed up application development by reducing the complexity of each piece of the project. Individual microservices may be reused across multiple projects.

Discover how Veeam Data Platform can help protect your data security in your cloud, hybrid or on-premises environment.

Monolithic vs. Microservices Architecture

Historically, online applications used a monolithic architecture. With this approach to software development, all the processes within a project are tightly coupled together. A monolithic SaaS project might contain several components, including:

  • Web server and load balancer
  • User registration and management
  • Payment systems
  • CRUD systems for creating and displaying content
  • API endpoints for external use

The issue with monolithic architectures is that if the web application sees a surge in demand, the whole system must scale. In addition, as the codebase grows, making changes to it gets much harder. In the long term, this can create technical debt. If part of your codebase relies on old or outdated libraries or you'd like to move to a new framework for certain features, issues with other parts of the codebase may hold you back.

With microservices, each component is a standalone service. The user service is independent of the payment system, which is independent of the content system, and so on. The services do not share any code with each other. Rather, they communicate with each other over APIs.

Because each component is standalone, it's possible for them to be written in entirely different languages if desired. In addition, if one component fails, that doesn't necessarily have to bring down the entire application. Other aspects of the application that do not depend on that component can still function as normal.

Service-oriented Architecture (SOA)  vs. Microservices Architecture

A service-oriented architecture is one where applications are broken down into modules. These modules have clearly defined roles and are smaller than monolithic applications, making SOA similar to the microservices approach. The key difference between SOA and microservices architectures is the scope of the architecture.

Modules built for SOA are shared and reused enterprise-wide. In contrast, microservices rely on modules that are designed to function independently. That's not to say that components written for a microservices architecture can't be reused, but the approach is different. For example, modules built for an SOA application may all share the same storage layer and communicate using the same enterprise storage bus (ESB). In a microservices environment, each service would have a separate API and may use its own storage.

Benefits of Microservices

Microservices have several advantages, especially when an application is designed from scratch to use this model.

  • Ease of development: Because microservices are small, standalone applications, each one can be developed by a separate team. Each microservice has a clearly defined purpose, making it easy to write tests for them. Troubleshooting microservices is usually easier than troubleshooting a monolithic application. In addition, it's possible to reuse existing microservices, speeding up development further as the project grows.
  • Flexibility: Developers of monolithic applications often find themselves locked in to certain technologies or ways of doing things because of the difficulty of making changes to the existing codebase. With microservices, it's easier to make changes, experiment with new technologies and refactor code on the fly because there's less risk of unintended consequences when working with a standalone service.
  • Scalability: Scaling a monolithic application can be difficult. It isn't cost-effective to simply overprovision hardware, and this approach to scaling isn't viable for coping with sudden, unexpected peaks in demand. Microservices offer more options for scaling your applications and can help developers add capacity when needed and then shut down extra services when demand tails off.
  • Resilience: If a monolithic application fails, the whole application will break. With microservices, problems are confined to the specific application that failed. For example, a game's login server failing may prevent new users from authenticating, but anyone already connected to the app might be able to continue using it as normal. An issue with the photo gallery may be confined to that small service and not interfere with other areas of a website.
  • Improved resource utilization: Breaking up an application into small, clearly defined services can offer efficiency improvements over using a monolithic architecture. Rather than running a large, resource-hungry CMS to manage content for a website, a company could use a headless microservice CMS and a lightweight, custom front-end to display their content.

Challenges of Microservices

The power and flexibility of microservices makes them a popular choice for large, complex applications. However, there are some challenges to deploying them.

  • Complexity: While each component of a microservices architecture application is simple, the application itself can become quite complex because there are so many different components to think about. Breaking an application down into several component parts can introduce extra areas where things can go wrong. It may also create some performance overhead.
  • Data consistency: When using a microservices architecture, there may be issues with data consistency and race conditions. It can be challenging to handle instances where one microservice is reading from a database while another is attempting to update it.
  • Communication and service discovery: Ensuring all microservices are able to communicate effectively with each other, and are aware of which services are available and where, can be a challenge. This is something that should be addressed early in the design phase.
  • Testing/debugging: In some ways, testing microservices is easier because each component can be tested independently. However, when it comes to linking up components, testing and debugging them can be a challenge. Is the unexpected output you're getting due to an error in the component you're currently working on, or is the data being fed to it from a different service not what you're expecting it to be?
  • Monitoring and service management: One of the benefits of microservices architecture is the ability to create and destroy instances of microservices on demand without impacting other areas of the program. Managing this can require additional tools, such as software to manage container deployment.

Microservices Technologies

There are many tools and technologies that are used to manage microservices architectures. Here are some key technologies that are frequently seen in environments using microservices.

Containerization

Containers are a key part of microservices architectures. They allow for the rapid deployment of microservices applications in a predictable and efficient way. There are several varieties of containerization tools, ranging from traditional LXC Linux Containers to the now near-ubiquitous Docker. Containers are ready-to-run versions of applications that contain all the libraries and other information required, allowing for one-click deployment in almost any environment.

Orchestration

While it's possible to manage containers by hand on a small deployment, organizations that run multiple docker deployments across several cloud services will need a way of automating this process. Solutions, such as Kubernetes, allow for large-scale automation. Developers can use a human-readable data serialization language called YAML to define to define their containers.

API Gateway

Each microservice communicates with other microservices via REST APIs. When there's a small number of known services, having these services communicate directly is simple enough. As the environment becomes more complex, it becomes less efficient to have services communicating directly with each other. API gateways and management tools make it easier for developers to integrate prebuilt services. The gateway receives the requests and passes them on to the systems that sit behind them. If you need to change anything about the underlying services, the only thing that needs to be updated is the gateway. Your other services can continue to pass requests to the gateway as normal.

Service Registry

A service registry is an effective way of keeping track of the microservices that are available to send requests to. A service registry is a database of services, their instances and their locations. In some models, a service registry may also be responsible for invoking health checks using each service's API to confirm that they're currently able to handle requests. Some container management systems, such as Kubernetes, have their own built-in service registries, for easier service discovery and management.

Circuit Breaker

Circuit breakers are used to monitor the health of services in a microservices architecture. When a circuit breaker is in place, microservices can communicate with each other as normal, and the circuit breaker keeps a count of any errors. If the number of errors detected reaches a certain threshold within a given time period, the circuit breaker will activate. If this number is not reached, the circuit breaker will set the count back to zero and continue monitoring. This helps ensure the reliable operation of the microservices, accounting for any acceptable timeouts or other errors.

Microservices Use Cases and Examples

Microservice architecture is useful for any environment where a web-facing application needs to be able to evolve and scale over time. Microservices are used in everything from gaming and e-commerce to logistics and finance.

E-commerce

E-commerce solutions provider Bigcommerce advocates for the use of microservices architecture and headless e-commerce solutions for some of its clients. It cites increased agility and flexibility as some of the key benefits of this architecture.

Health Care

Microservices allow health care providers to create separate but loosely coupled applications that can work together and have access to only the data they need. Using a microservices architecture provides several advantages over traditional ESB systems. There's no single point of failure, so issues with one system won't impact other potentially more critical systems. In addition, testing and security become more manageable when systems are isolated. Maximizing systems and data availability in a health care setting is crucial, and the modern microservices approach is becoming increasingly popular because it helps achieve these goals.

Banking and Finance

Many organizations in the banking and finance sector rely heavily on legacy systems that are difficult to update. Rather than attempting to modify a monolithic legacy codebase, many organizations are using microservices that connect to that existing codebase to provide extra functionality. Newer financial institutions are able to start from the ground up, designing systems based on microservices and individual APIs. Older institutions can keep their monolithic codebase while still making improvements to the user experience and building newer features that interface with that code. Combined with systems, such as Veeam's data security and protection systems for financial services, organizations can feel confident their systems are robust and user data is protected.

Transportation and Logistics

The transportation and logistics sector is leading the adoption of many technologies, including Internet of Things technologies, which can be useful for supply chain tracking. One prominent project, NIMBLE, adopted a microservices architecture approach to federated IoT, offering reliable and scalable real-time monitoring and optimization of supply chains.

By taking a microservices-based approach to development, organizations can test new devices and technologies quickly and without interfering with existing workflows. Given the 24-hour nature of modern supply chains, this agility is an incredibly useful feature.

How to Get Started With Veeam

Veeam makes it easy to manage backups and data security, whatever environment your data is hosted in. Whether you're using a monolithic on-premises architecture, primarily use third-party SaaS providers, such as Salesforce, to manage your customer information or host applications in the cloud, Veeam can help you protect your data.

We offer backup and recovery solutions for AWS, Azure, Google and IBM cloud platforms and Kubernetes deployments, as well as popular virtualization solutions. Our tools are designed to slot into your existing configuration as seamlessly as possible.

We offer free community editions of many of our tools. For example, Veeam Kasten is free to use for up to five nodes. This gives users a chance to test the system before deciding whether to deploy it on a larger scale. Time-limited trials of our enterprise products are also available.

Protect your organization from data breaches and loss with the Veeam Data Platform.