Scaling up may be complicated if the product architecture wasn’t designed to be scalable, which is often the case with monolith applications. In that case, you have two ways to go: spend a fortune to throw in more resources and scale vertically or restructure your application using microservices and scale horizontally and cost-effectively. We’d always go for the second option – implementing microservices infrastructure.
Aside from cost-efficiency, going for microservices provides benefits like:
Going for microservices can be of great use for any SaaS provider. But what are microservices, exactly? Let’s explore the benefits of using microservices architecture and how to implement it with AWS. You’ll also find some real cases from Relevant Software’s portfolio below, so keep reading.
Table of Contents
AWS defines microservices as independent pieces of software that deliver specific functions, run separately from each other, and are owned by smaller, self-contained teams. Any communication between microservices happens over well-defined APIs, allowing polyglot development. This means that software engineers aren’t limited by a single programming language or framework and can select the tools best suited for every function a microservice performs.
Each microservice can be developed, updated, scaled, and managed separately, which tremendously increases the speed of innovation, as well as the cost-efficiency and simplicity of infrastructure management, compared to monolithic app development. Speaking of…
Monolithic applications run tightly coupled processes that are dependent on each other, so a failure in one process impairs the rest of the application. If the whole process faces a spike in demand, the entire application must be scaled up. Worst of all, with time, the code becomes increasingly complex, and adding new features or updating the existing ones starts costing too much time and effort.
With microservices, all processes are decoupled, run in separate code envelopes (Docker containers), and can be scaled, updated, or rebooted independently. Each microservice performs a single function, and all of them communicate over well-defined interfaces through lightweight, uniform APIs. Most importantly, if over time the microservice code becomes too complex, it can be easily split into more microservices, without affecting the performance of the whole application.
Microservice-based software development brings various benefits:
Microservices are thought to be the best choice for running cloud-based applications, although the ease of implementing them differs from one cloud provider to another. AWS, for one thing, can be a perfect choice for deploying and running a microservice-based application of any scope.
Amazon Web Services (AWS) is one of the best choices for deploying a microservice-based application due to the variety of IaaS, PaaS, SaaS solutions, and SDK packages offered by this cloud platform. AWS provides a vast array of building blocks to support software of any complexity and scale.
You can configure the architecture you need and select any required operating system, programming language, framework, database, or other required services. This facilitates migration for the existing applications and allows you to quickly build new applications from scratch.
Going for microservices on AWS was a perfect choice for Relevant Software. We leveraged detailed guides on deploying Java and Node.js microservices on Amazon EC2, building containerized microservices using Docker containers on AWS. This allowed us to follow best practices and build scalable, cost-efficient, and highly performant infrastructures for our customers.
The basic microservice architecture on AWS looks like this:
This workflow ensures unlimited front-end scalability through CloudFront CDN, back-end scalability using ECS, and application resilience with caching and secure data storage.
There is an excellent and very thorough step-by-step guide on microservice implementation on AWS, and here’s the gist to save your time.
Modern web apps often use REST or RESTful APIs for communication between their front-end written using one of JavaScript frameworks, and back-end. Static content is often served through a CDN like Amazon CloudFront, while it is stored at an object storage, like Amazon S3. Thanks to this, end-users experience minimal latency when connecting to an app through the edge node.
To support stable operations of RESTful APIs, AWS provides two main approaches: serverless computing with AWS Lambda and managed Kubernetes clusters with Docker containers through AWS Fargate.
AWS Lambda is a PaaS where you simply upload the code, and AWS does the rest. The key benefit here is that you operate a serverless platform, meaning you do not have to look under the hood and configure the underlying servers. This ensures speed of operations, unlimited scalability, and cost-efficiency of running microservices.
However, due to architectural limitations like file size limit, process duration limit, etc., Lambda is best used for short-term operations, while it definitely is a very secure and easy to operate tool.
AWS Fargate is a PaaS that provides managed Kubernetes clusters for running Docker containers with your microservices. This requires some technical expertise, yet most of the heavy lifting is still done behind the scenes by AWS.
By performing API calls, you can manage the cluster, run and stop Docker containers, operate load balancing, security groups, IAM, and other features. AWS ECS and EKS provide simple access to container management or Kubernetes clusters, should you decide to run your microservices implementation using an in-house or remote team (and save money).
The data your microservices process should be stored in a database and cached to decrease latency. While AWS provides six types of relational databases, microservices at scale are best served by NoSQL databases due to their emphasis on persistence.
There are three main ways of reducing operational complexity when designing and implementing microservices architecture using AWS:
Aside from dealing with every particular microservice, you should be prepared to handle various cross-service challenges:
AWS provides all the necessary components for implementing microservices using both managed and open-source solutions.
Just like we promised, here are some of our examples of building microservices for our clients using AWS.
One of Relevant Software’s customers, Svenn, needed an update and modernization of their service to enable integrations with various ERP systems.
Challenges the customer faced:
Microservices seemed like the best approach to handling all of these issues. Relevant Software implemented the solution based on AWS Step Functions, which enabled safe data processing. All services now communicate via a Distributor cluster that acts as a data streaming service.
The results are impressive. AWS Step Functions contains AWS Lambda schedule and rules and provides Lambda configuration. Once the input parameters from AWS Step Functions are delivered to Lambda instance, which contains ERP systems integration logic, they are combined with input parameters from the Transformer service, issue API calls to ERP systems, and send event notifications to the relevant Information topics. This makes adding integration with a new ERP as simple as registering its API within Lambda, and AWS does the rest.
Transformer service consumes ERP system data from ERP_SYSTEM topics, transforms it into Svenn data, publishes it into relevant information topics, and provides the necessary lambda configuration.
Events messaging is implemented using AWS SQS, which consumes ERP system data, events from Information and Notification topics, and produces notifications to relevant Information and Notification topics to ensure messaging consistency.
FirstHomeCoach (FHC) is another microservices-based solution we developed for our customer. It has mobile and desktop clients, and microservices enable the necessary isolation between the application server and business processes.
FHC uses CMS for content management, React.js on the front-end, and Node.js on the back-end, which communicates on AWS using Lambda functions, CloudFront, and API Gateway. Users are managed with Amazon Cognito.
Microservices are an excellent choice for building, running, and updating resilient and highly scalable applications. AWS provides a ton of managed building blocks for handling every aspect of microservices implementation and provides all the tools needed to replace these components with open-source alternatives — should you have the necessary expertise at hand and be able to manage your infrastructure using an in-house or remote team to maximize the cost-efficiency of operations.
By the way, Relevant Software has ample experience designing, building, and managing various microservice-based applications for our customers. So if you need our assistance, just drop us a line. We’re always ready to help!
Do you know that we helped 200+ companies build web/mobile apps and scale dev teams?
Let's talk about your engineering needs.
Write to us