Microservices

Adapt to Change Faster

What Are Microservices?

What Are Microservices?

Microservices are a result of the DevOps movement and represent a new approach in the software development. In contrast to monolithic software development, microservices support a loosely coupled architecture and the independent scaling of each component. The exact definition of a microservice may vary, but standards have started to emerge.

Each Microservice

  • Communicates via technology agnostic protocols (e.g. HTTP)
  • Can be deployed independently from other microservices
  • Has a specific goal, task or capability
  • Can be replaced with ease
  • Can use any programming language, database or libraries
  • Contains its own business logic

Monolithic software development is not inferior to microservices, as both have their pros and cons. Although organizations that have a greater need for agility and scalability have started to favor the microservice approach. Microservices are suitable for any industry and can be implemented to rapidly build new services, scale across cloud infrastructure or even to break down monolithic software into smaller and more manageable services. The growth and the hype of microservices is due to their ability to adapt to changing requirements.

The “micro” in microservices refers to the scope of the solution and does not necessarily reflect the size of an application or its data. By limiting the scope, a small team can build, manage and operate the microservice. The team has a complete overview of the services and its functionality and thus can quickly make changes to meet customer’s demands. This is made possible, because each microservice is a fully independent application with its own logic, API, and data, meaning that each microservice can be deployed, updated and scaled individually – without disrupting any of the other services that make up the applications.

What Microservices Require

Agile teams

Microservices’ main advantage come from speed, so it’s imperative to have a team using agile methodologies to rapidly release changes. Team members will have expertise in one area while being a generalist in many others, allowing the small team to respond to business needs.

DevOps Alignment

Software Development and IT Operations must work together and processes should be streamlined. Microservices teams continuously deliver new iterations that require a flexible operations strategy. To achieve this, no one tool or platform will be enough and standards must be established.

The Right Infrastructure

Microservices need to keep running, and this means that the infrastructure has to support the constant deployment of microservices to not only scale up existing services, but also to support new microservices on demand. Often companies use containers, PaaS and various cloud providers to create an adaptive infrastructure.

Why Microservices?

Why Microservices?

Business is changing faster than ever and IT needs to keep up to prevent digital disruption. The need for speed is core motivation behind microservices, as they let small teams react to new business requirements and implement changes in a short amount of time. Additionally, microservices scale more efficiently than monolithic software since each service can run independently.

Scaling Comparison: Monolith vs. Microservices

A microservice’s ability to scale is one of the key advantages to the microservice approach in comparison to monolithic software. In the image below, it’s easy to see the advantage microservices have when scaling. In combination with Container Management Solutions like Kubernetes or Docker Swarm, individual services can automatically be scaled up to meet peak hour demands. And of course, also scaled back when the demand falls.

In comparison to the monolith, microservices give developers the choice to use the tools they see best fit to overcome their specific challenge. Rather than selecting one set of tools to fulfill all the requirements of a monolith and forcing developers to create a solution with the prescribed tools, each microservice can use different technologies since they are independent services. This means the team can select their choice of programming language, database and libraries based on their skills and the challenge at hand.

This not only makes for more productive developers, but allows companies to hire a wider range of developers, who may not have fit into their previously traditional monolithic software approach. Microservices enable a polyglottal approach and leads to happier and more effective developers, while also letting developers implement new technologies without disturbing the status quo.

Each team selects the tools for their microservice.

Since each team is small and their microservice fulfills only a scope of larger applications, each microservice can quickly adapt to changing business needs without having to make changes to a more complex system. The constant evolution of microservices is the pinnacle of business agility, providing the closest IT and Business alignment possible.

The team manages the microservice through the entire lifecycle.

The team behind a microservice is 100% responsible for it – from conceptualization to deployment and ultimately until the microservice is retired. Microservices can be and are retired when they no longer fulfill a business need, are replaced by a new microservice or when the team decides the microservice does not justify its costs in its current form.

Microservice Approach Traditional Software Development
Do one thing and do it well. That is the motto of microservices, though this is not to be confused with the actual size of the microservice, but rather the goal and scope of the logic. Do (almost) everything. Traditional software development builds comprehensive solutions to tackle many challenges for a group of end users.
Loose Coupling – Microservices are self-sufficient and won’t fail if a supporting service is unavailable. Building for failure is necessary. Tight coupling – systems have strict requirements and interdependent components. The software is often rigid in its deployment.
DevOps – Developers and operations cooperate in a team to ensure software is continuously delivered to run optimally. Divide between IT operations and developers
The old saying is ship it and forget it. Developers are traditionally responsible for writing new code, and IT operations has to ensure it runs.
Service based lifecycle – Each microservice is its own entity, meaning its team can dictate its lifecycle. Since each service has a small scope, this can be done quickly without waiting upon a longer release schedule. Software based lifecycle – Monolithic software generally have longer release cycles due to the complexity in the application, causing slower changes and a strict cycle for implementing them.
Operational Complexity – Microservices reduce application complexity by pushing technical debt over to operations. This can be counteracted by new technologies that support microservices like PaaS, container management and the cloud services like AWS. Application Complexity – While making changes to a monolithic software may be complex, the deployment remains simple. Since there are fewer moving pieces monoliths do not require the same coordination as microservices.
Teams Decide on the Tools – Teams select tools best fit for the solution and follow overarching standards. Set tools, set standards – Teams have to create solutions with a prescribed set of tools.
Challenges

Microservice Challenges

Not every organization is Netflix, so it’s important to remember that microservices may not be the ideal approach for every organization. In fact, monolithic development is better suited to solutions where change does not occur often and user traffic is consistent. It’s important to plan carefully when considering building microservices or breaking down a monolith into smaller applications.

Each organization’s experience with microservices will be determined by several factors. A microservice approach is most successful when combining the right technology, methodologies and culture. Though which tools and methods will be right for your organization, are likely different from those that some of the microservice pioneers, such as Netflix, implemented.

Before your microservice journey begins, take the challenges below into consideration. Prepare by taking small steps towards microservices.

Mastering Agile

Agile methodologies like SCRUM and KANBAN have been around for years now, and even though they are seeing more and more adoption, not everyone has experienced agile success. If your organization has struggled with agile projects in the past, take small steps and plan an agile project first. Build up experience in agile, which will help prepare you for microservice success.

To help companies experience agile success, ApiOmat works together with customers in a workshop to define a pilot project based on design thinking methodologies. Once an ideal use-case has been identified and technically evaluated, ApiOmat cooperates with you until the project goes live. Learn from our workshop (link) and achieve the agility required to transform business in weeks, not months.

Designing for Failure

Failure happens, and in the world of microservices failure is going to happen a lot as there are more moving pieces. This is a stark comparison to traditional business and the monolithic approach where projects and software are designed not to fail. Because of this, making the adjustment to microservices requires not only a fundamental shift in development, but also in how business approaches digital initiatives.

From a business point of view, microservices should follow the “Fail fast and succeed sooner” principle. Microservices will support business initiatives, and all of those projects will not be a success. Business leaders need to get on board and sponsor small projects or minimum viable products that can turn into a quick win if successful, and not a tragic loss if the idea does not pan out. Accepting failure from a business point of view can be difficult, although it provides a great starting point for microservices.

As for developing microservices, traditional software development reflects traditional business in the sense that we must prevent failure. In microservices, it’s going to be impossible to prevent failure and the more microservices that are running – the more failure there is going to be. The goal is to build applications that fail gracefully. The shift to creating software that is “built to fail” can be challenging, but there are tools to help ease the development and operations.

Balancing Standards and Flexibility

A key aspect of microservices is giving each team the flexibility to work with the tools they see fit, while also implementing standards that streamline operations. Establishing a middle ground is essential to ensure that microservices will reduce operational overhead, though it’s important not to set too many restrictions on which tools developers can use.

As a rule of thumb, standards should not dictate the programming languages*, data bases, frameworks or libraries a team uses, but rather ensure that the microservice will seamless integrate with operations and the microservice environment. Generally, standards should be set for the deployment method, inter microservice communication (REST, Message Broker, etc.), versioning methods etc.

*It is advisible, especially for organizations new to microservices, to limit the programming languages to the most popular (e.g. Java, C#, node.js). If a microservice team leaves the company and built a business essential microservice in Dart or Rust, it may be very difficult to replace their knowledge.

Revenge of the Silo

Since each microservice is developed and supported by a single team, it can be easy to lose sight of the bigger picture. It’s unlikely for a single microservice to cover the entire scope of an application or service, so it’s imperative that microservices don’t take on the characteristics of a silo. By following best practices, such as providing thorough documentation or standardizing API structures/formats, the silo-ization of microservices can be avoided.

Since microservices are so intertwined, it is unlikely that a single individual service will become a silo – although microservices built for individual lines of business may. Each microservice needs to be communicated not only with direct users of the microservice, but also made known to other lines of business. If microservices are properly published and easy to discover, this will help avoid the creation of microservices that solve the same problem.

Mobilizing Microservices

Mobilizing Microservice

The goal of microservices should be to build applications that can rapidly adapt to the user requirements. As an organization grows its portfolio to hundreds of microservices that can each be adjusted on the fly, there’s a need for a standard method to expose these microservices to frontend solutions like mobile apps, websites, chatbots and virtual assistants for customers, employees and partners.

Microservices operate independently, however, they offer the most value when multiple microservices orchestrated to deliver a streamlined experience for users. Creating an app may require communicating with two or more microservices to create value for the users, but doing so creates new challenges. For the end-user’s device to communicate with the microservices either each exposes its API to the world, or a consolidated API or API Gateway exposes them to external devices. These two common approaches, however, slow down the pace of innovation and extend the total app development time.

In most scenarios, a new frontend app requires its own backend, or microservice, to meet the additional requirements of frontend devices that standard microservices typically don’t cover. End-user apps need mobile friendly APIs, which only collect and expose the necessary and enforce access control right. Additionally, depending on the use case the app’s backend will also have to provide authentication, push notifications and other features like service side image resizing and offline handling.

Backends for Frontends require:

  • Offline Handling
  • Server-side Image resizing
  • Fine Granular ACLs
  • Mobile Friendly APIs
  • Push Notifications
  • Hyper-Linking
  • Geo-Location Support
  • OAuth/LDAP Integration
  • Analytics
  • Encryption
  • Microservice Integrations
  • Data Caching

To accelerate the delivery of frontend solutions that integrate with microservices, it’s best to standardize the delivery of backends for frontends by using Mobile Back-end Services like ApiOmat. By doing so, you simplify the integration of microservices as well as remove the need to individually implement a backend for frontends each time.

OpenShift-Grafik-Mobilize Microservices

ApiOmat standardizes the communication between frontends and microservices.

Using a platform like ApiOmat lets developers focus on writing code that makes their app unique, rather than building each project from the ground up. In addition, ApiOmat simplifies the integration of new microservice versions and delivers dynamically generated SDKs. The SDKs accelerate the frontend development by encapsulating the communication between the backend and the app in any frontend programming language, giving them immediate access to the data from microservices.

Accelerating Microservices

Accelerating Microservices

Microservices allows companies to become more agile by letting them make changes and deploy new services faster. Although microservices have to be consumed by frontend developers to make the data accessible to mobile and web apps, chat bots, voice assistants and wearables. ApiOmat, the Mobile Backend Service Platform, makes this a fast and standard process.

Learn how ApiOmat can speed up development by generating new backends, APIs, while integrating microservices and providing mobile essential features out of the box. Download our white paper Accelerating Microservices to read more, or get in contact with us using the form below.

Using PaaS?

Although microservices can be deployed on premise or in the cloud using container management systems, Platform as a Service (PaaS) removes a large amount of the operational overhead created by microservices. PaaS helps manage, deploy microservices across any combination of on premise or cloud infrastructure.

ApiOmat’s Mobile Back-end Services compliment PaaS by letting developers focus on writing meaningful code. By combining a PaaS like Openshift or Cloud Foundry with ApiOmat, you simplify IT operations and accelerate development times by generating each project’s standard components.

ApiOmat & Cloud Foundry

Empower Developers to deploy code faster with Cloud Foundry. Write only the code that matters with ApiOmat. Use both to build solutions for any device faster than ever thought possible.

ApiOmat & OpenShift

Couple OpenShift with ApiOmat to mobilize legacy IT and microservices, decouple frontend and backend development and transform ideas into app with startup speed.