What Are Microservices?
Microservices and their related architectures are gaining traction in enterprises of all sizes. However, many IT decision makers are still in the dark as to what microservices actually are and what a microservices framework means to the development of IT solutions in today’s enterprises. For DevOps, Microservices are also having a major impact. The agile development cycle is bringing together what were two separate IT entities, development and operations, into a commonly executed project ideology.
At a very high level, microservices can be conceptualized as a new way to create corporate applications, where applications are broken down into smaller, independent services, that are not dependent upon a specific coding language. In other words, development teams are able to use the language tools they are most comfortable with and still achieve synergy in the application development process. Using the ideology of microservices, large complex applications can be divvied up into smaller building blocks of executables, that when recomposed offer all of the functionality of a large scale, highly complex application.
At MuleSoft’s Connect conference in 2016, Katharina Probst from Netflix and Uri Sarid, CTO of MuleSoft, made the point that the most successful businesses now, e.g. McDonalds, Under Armour, Amazon, Tesla, and Netflix, are not only competing on the goods and services they sell, but also on their ability to be digital platforms, providing innovative ways of getting those goods, services, and experiences to customers at scale and in real-time. They are able to do this by creating small services that compose themselves into processes, that evolve independently, can be built as quickly as they are needed, and are optimized for change and reuse.
Adopting microservices allows organizations to achieve greater agility and realize lower costs, thanks to the inherent granularity and reusability of what constitutes a microservice. A plethora of supporting technologies and ideologies have made the concept of microservice-based architectures a reality to businesses of any size, bringing agility and efficiencies to application development and deployment once deemed impossible.
Those concepts and technologies include the increased availability of containers, tools and processes that make SOA-based processes more attainable, as well as domain-driven design processes. Combining these creates an development environment that focuses more on collaboration than on code governance, resulting in improved productivity.
The microservices architecture defined
A microservices architectural style leverages the ideology of developing a single application as a suite of small, narrowly focused, independently deployable services. Each microservice runs in its own process and communicates with a lightweight mechanism, often an HTTP resource API. Those services are encapsulated for specific business capabilities and are deployed independently using a fully automated mechanism.
Microservices can be aligned with the move towards cloud based offerings, where multiple applications can be driven by a shared set of services. However, a microservices based architecture proves to be useful for public, private and hybrid cloud implementations, where the concept of using a collection of small independent services can be accessed using a lightweight interface, such as a RESTful API.
Arguably, the concept of a microservices based architecture can be traced back to the early days of SOA (Service Oriented Architecture), which had a focus on service discovery and anonymous service usage based upon UDDI (Universal Description, Discovery, and Integration), principles which are still valid today. However, microservices go several steps further by using RESTful APIs, along with virtualized platforms and containers to create a hybrid service integration that replaces monolithic, single code base applications. It is the composition of those independent services that creates the experience associated with a monolithic application. SOA, as it was originally conceived, failed simply because the proper building blocks to execute that approach were not readily available.
However, microservices, which build on the principles of SOA, are now a reality with the introduction of new technologies, which constitute the three main building blocks of a microservices architecture. With those building blocks readily available and established, the following benefits emerge:
- Containers: Software containers have created a standardized frame for all services by abstracting the core OS code from the underlying hardware. The standardization offered by containers eliminates what was once a painful integration process in a heterogeneous infrastructure world. Thanks to vendors such as Docker, containers have revolutionized how developers build and deploy applications.
- APIs: The adoption and increased capabilities offered by APIs has created a robust and standardized format for communications between applications, services and servers. REST (Representation State Transfer) APIs in particular are key to microservices architecture: ;A RESTful API breaks down a transaction to create a series of small modules, each of which addresses a particular underlying part of the transaction. This modularity provides developers with a lot of flexibility for developing lightweight APIs, which are more suitable for browser powered applications.
- Scalable Cloud Infrastructures: Public, private and hybrid Cloud infrastructures are all now capable of delivering resources on demand and can effectively scale to deliver services, regardless of loads or associated traffic. That brings elasticity to microservices and in turn makes them more adaptable and efficient.
The risks of a microservices architecture
The danger that any new architectural trend poses is that they can be perceived as a silver bullet for IT’s problems, and are deployed as the “newest thing” without regard for pre-requisites such as IT operating model, infrastructure and developer skillsets.
A microservices architectural strategy should take a careful, measured approach to reap maximum benefit: we strongly recommend designing and building microservices that encapsulate capabilities for particular business domains and with security in mind. The risk of not doing this is that you will end up building a monolithic suite of microservices due to developers acting independently. In other words, organizations could end up with a disparate sprawl of microservices with all of the downfalls of the monolith, the added complexity of distribution, and a reduction in the overall return on your investment. Organizations looking to embrace microservices should expect development teams to coordinate efforts and adhere to clear-cut plans.
It’s also recommended that you establish the strict discipline of continuous delivery and have the necessary tooling for the automation of the release pipeline. A lack of Devops-style team coordination and automation will mean that your microservices initiative will bring more pain than benefits.
A platform approach to microservices architecture
Microservices is clearly an important and welcome trend in the software development industry, and has many advantages over previous architectural approaches. However, there are various concerns to be aware of when instituting a microservices architecture in your organization. Businesses need to implement microservices because of its ease of deployment and agile nature, but if not managed properly, this architecture can create disorganization and lack of governance. Products developed with a microservices architecture will also need to be integrated with legacy technology stacks, and if this is done poorly, it can create technical debt and more operational costs for the IT team. Therefore, instituting microservices in a way that will create competitive advantage and help your company innovate faster goes beyond a mere selection of products and software. You must also consider the people, process, and culture within the organization.
This is why we recommend a holistic, platform approach to microservices, centered around API-led connectivity. Not only does API-led connectivity create the integration component so crucial to the proper function of your technology stack, it will allow developers inside and outside the central IT team to create new solutions in a manageable, reusable, and governed way, eliminating concerns of too many applications that the business cannot control. MuleSoft’s platform approach provides a unique operating model to allow both LoB and IT to build, innovate, and deliver new solutions wherever needed throughout the organization while still retaining the necessary visibility and governance.
In today’s hyper-competitive business environment, it’s important to stand out and provide a delightful experience for customers, employees, and partners. Microservices are a key way for a business to do that. Done in a holistic, manageable fashion, microservices architecture will become a technological standard for the enterprise.
Take a look at further resources about best practices for implementing a microservices architecture.