Microservices are one of the most important software architecture trends of 2020. In a microservices architecture, an application is arranged as a collection of loosely coupled services. Each microservice is a self-contained piece of business functionality with a clear interface. With independently developer components, microservices make an application easier to maintain.
As this technology gains popularity, more and more tools and technologies have emerged to support microservices. So, how do we know which to use?
To help boost your microservices development, I’ve compiled a list of the top 5 technologies for building a microservices architecture.
Today, we will cover:
Learn the nitty-gritty details of real-world microservice implementation. Everything from Consul to Docker to Cloud Foundry and beyond.
Microservice Architecture: Practical Implementation
Microservices architecture forms the base for products being built at companies like Amazon, Netflix, Spotify, and Uber. When compared with a traditional monolithic application, microservices offer the following benefits:
Note: Microservices can be implemented in different programming languages and might use different infrastructures.
A typical microservice architecture consists of an API or communication gateway, service discovery, the service, and a database or cache.
Despite these benefits, microservices architecture also comes with its own challenges, from implementation to migration and maintenance. Some of the prominent challenges adopting a microservices architecture poses include:
In the next section, we will go over a simple microservices architecture design and the top technologies that can be used to develop each component in the design.
Docker is a software platform that allows you to build, test, and deploy software as self-contained packages called containers. These Docker containers can be deployed anywhere, and each container contains all the resources and configuration it needs to run.
Kubernetes acts as a complement to Docker, especially at scale. It’s typically used to help tackle some of the operating complexities when moving to scale multiple containers, deployed across multiple servers.
Docker and Kubernetes can be used together to act as a flexible base for your microservices-based system, easily scaling up as the workload increases or vice versa.
Docker is a lightweight option for building a microservices architecture. All components of a microservice can be packed into a Docker image and remain isolated from other microservices.
Docker makes it easy to deploy your software as you only have to distribute Docker images using Dockerfiles.
With Docker Compose, multiple containers can be coordinated to build an entire system of microservices with containers. We can also use Docker Machine to install Docker environments on a server.
Note: Docker requires rethinking regarding operation. So, for some cases, you may need alternative technologies. For example, when deploying several Java web applications on a single Java web server.
Microservices have to communicate with other microservices. One tool that can be used for this is REST (Representational State Transfer). REST is an architectural design pattern for building RESTful APIs.
REST allows services to communicate directly via HTTP. Requests and responses are handled in standard formats like XML, HTML, or JSON.
REST is a natural choice for most microservices, since many of them are Web Applications. It is possible to upgrade to HTTP/2.0 where necessary, reducing the need for other protocols like gRPC, which is based on ProtocolBuffer and HTTP/2.0.
REST is a great tool for building a scalable microservice, since they are stateless and modular. The REST pattern allows the client and the server to be implemented independently without the knowledge of the other entity. This means that code at either side can be modified without effecting each other.
Note: Pact is a great framework for writing tests of a REST interface in a programming language. This results in a JSON file containing the REST requests and the expected responses.
Redis is an open source, in-memory data structure store. It is one of the most popular key-value or NoSQL databases. Although it is an in-memory database, it provides support for persisting data, master-replica replication, and it performs well when compared to traditional database systems.
Redis is commonly used as a primary database for your application using Redis in persistent mode. It is also isa single-threaded application so, for databases, you never have to worry about record locks. In this pattern, entities are stored with hash operations. Redis is commonly built on top of the Spring Cloud or Spring Boot frameworks.
As we know, microservices must maintain their own state using a database. Service data should be isolated from other data layers to enable uncoupled scaling. Redis, alongside Redis clustering or Redis Sentinel, fits many of these requirements, including low-latency final response.
Redis can be leveraged by your application in many different ways. Redis is widely used in microservices architecture because it can serve as a cache or as the service’s primary database. Depending on your requirements, Redis can also act as a message broker or cache.
Learn popular recipes for tech stacks that can be used to implement microservices, as well as the pros and cons of each. By the end of this course, you’ll be an industry-ready, microservice pro.
Prometheus
Prometheus is an open-source systems monitoring and alerting tool originally developed at SoundCloud. It implements a multi-dimensional data model and provides data store and data scrapers. Data is stored as key-value pairs in memory cached files.
Prometheus uses a simple query language that forms the foundation of task monitoring. This includes visualisation features for alters and statistics.
For microservices, Prometheus’s support for multi-dimensional data collection and querying is a particular strength. Prometheus also offers an extensible data model, which allows you to attach arbitrary key-values dimensions to a time series.
Prometheus is known for its simple design and ability to create minimalist applications, so Prometheus is ideal for simple microservice-based applications. It is also useful for distributed, cloud-native environments.
Note: Prometheus is less suites for cases that require accurate second-by-second data scrapes.
Consul
Consul is a service discovery technology that ensures microservices can communicate with each other. It has some features that distinguishes it from other service discovery solutions, including:
Consul is very flexible. Due to the DNS interface and Consul Template it can be used with many technologies. This is particularly important in the context of microservices. While a system might not need to use a variety of technologies from the start, in the long term it is advantageous to be able to integrate new technologies.
Setting up a microservices system with Consul is great option for a synchronous system, as its infrastructure meets the typical challenges of synchronous microservices:
For each microservice, Apache HTTPD must have an entry in its configuration file. For this, Consul Template can be used. Consul Template ensures that a microservice can be reached from outside as soon as it has registered with Consul.
Note: Consul is written in Go. Monitoring and deployment differs from Java microservices.
Congrats! You’ve now learned the top 5 technologies for building a microservices architecture. Using these tools will make your development and deployment process far easier, and they empower highly scalable applications.
There is still a lot to learn, and, depending on your requirements, other top technologies may be beneficial. You should look into:
To learn more about the tools we discussed today and to get started with your next steps, check out Educative’s course Microservice Architecture: Practical Implementation. This course covers the most popular microservices tech stacks and learn how to implement complex, industry-standard architectures.
Or, if you want to get more familiar with microservices in general, Introduction to Microservice Principles and Concepts is a great jumping off point. You’ll learn microservices in depth, strategies for migrating old systems, and technologies for implementing microservices.
Happy learning!
Free Resources