What startups need to know about microservices architecture
Microservice architecture — also known as microservices — is a distinctive, yet increasingly popular way of engineering software solutions. It is one of the most effective ways for companies of every size to become more agile.
Microservices architecture principles are the opposite of the monolith approach for developing software. Instead of building an application as a single multi-layered suite of tools, software created using microservices is designed to be as modular as possible.
Introduction to microservices
In its simplest form, think of an application built using the microservices architecture approach as a collection of individual services. Connected through APIs. Completely modular and independent. Working together to create a single application, without the complexities of the same software if it were built using the monolith approach.
So what is microservices architecture, anyway?
Microservice based architecture doesn't have a clear definition, so far. The concept itself is agile. It is designed around the needs of businesses. Not every business has the same needs as the next one. A startup has different needs than an enterprise.
An advantage of microservices is that they are adaptable. Uniquely and powerfully flexible around the needs of organizations. Business leaders can ensure that DevOps teams create applications more quickly than if they took the monolith approach.
Microservices require organizations to adopt a new way of thinking.
Instead of thinking of every technology application as a single platform or product, they should be viewed as a coalition of smaller services. Each is standalone. Together they make a single application. Changing one feature doesn't impact the underlying code-base because effectively, there is no single underlying code-base. Each has its own, making the sum of these numerous parts more agile, scalable and powerful.
How microservices architecture works
Martin Fowler, a technology expert on this topic, explains microservices as a suite of independent services deployed "around business capability, automated, intelligence in the endpoints, and decentralized control of languages and data."
Every service within this loosely coupled technology coalition is independent. Changing one won’t mean calculating the overall impact on the entire application. APIs make the whole system work together at points where interaction between independent services is required.
Multiple teams can work remotely and independently on different services without impacting any underlying code-base. Often, when an application is built from scratch using the microservices approach, each service has its own codebase. Each service performs its own function aligned around a business need.
Microservices advantages and disadvantages
Firstly, let us consider the advantages of microservices.
- Easier to identify faults. Smaller services will naturally have smaller codebases and be less complex than monolithic cousins. Making it easier to spot and resolve faults.
- Reduced dependency concerns. When applications are built using the monolith approach, it often forces companies to stick rigidly to specific coding languages and technology vendors. With the microservices approach, this is no longer the case. Companies can write different services in different languages and can more easily try out a much wider range of technology vendors within every layer of the tech stack on each service separately.
- Easier to understand. As monolith systems grow, they grow in complexity. They outgrow their creators and become increasingly difficult for anyone to understand. Performance and user experience suffers at the same time. Microservice solutions are much easier to understand and more user-friendly.
However, microservices aren't perfect and there are a few disadvantages companies need to consider.
- Multiple databases to consider and sometimes services operating from a wide range of cloud-based data centers.
- It might be necessary to write more code to ensure remote calls don't suffer from latency.
- More to defend. With a monolithic system, defenses don't need to be as complex. With the microservice approach, every individual system needs defending as does the APIs that make it all work as a single application.
- Deploying microservices together can be complex. Whatever the benefits and advantages, it does require more planning to ensure everything works together effectively as it should.
Microservices architecture principles
Despite some difficulties, microservices are fast becoming "the default style for building enterprise applications", according to Fowler.
A Red Hat (now part of IBM) survey confirmed that two-thirds (69%) of companies are using microservice principles to re-architect legacy applications.
Clearly, microservices are here to stay, for startups and enterprise organizations. Unlike other attempts to rebuild legacy systems, this is gaining traction and is as popular with developers as senior business leaders.
Some of the key principles behind microservices include the following:
- Systems designed for business needs. Software that solves problems with separate components coming together as a complete solution.
- Routing is simple, not unlike the classic UNIX system. Data flows through pipes to smart endpoints that process the data and apply logic, making the whole system work together effectively.
- A decentralized approach is essential to the success of every microservice application. Without that, you’ve got another monolith, or a hybrid between the two.
- Less likely to fail. One or two services within the architecture could fail, yet the system as a whole would keep working. Microservices are more resistant and resilient, making them much harder to bring down.
Microservices vs. Monolithic architecture
Microservices evolved out of SOA (Service Oriented Architecture); something that ultimately failed for many at the deployment stage.
Unlike SOA, the microservices approach is more flexible and therefore more successful. This is what makes it different from monolithic architecture. The monolithic approach leads to software that is far more complex than users need. With a codebase that is an unruly and untidy monster. Flaws and bugs creep in making monolith systems a challenge to scale and fix.
Business leaders are turning away from the monolithic approach. It doesn't allow for agility or build-measure-learn feedback loops. It is often more expensive and difficult to keep supporting. Application updates can take a long time from ideation to implementation. Changes to part of the code need to be carefully mapped across the entire application.
With microservices, the opposite is the case. Small changes can be deployed quickly. Costs are kept down. Companies can work with multiple development teams that don't need to worry about what each of them is doing. Communication and development processes are simplified.
When it comes to picking monolithic vs microservices, the newer, more agile approach has multiple advantages and we can see why companies of every size are adopting it to power their products.