Navigating the implementation of Microservices-based, API-first, Cloud-native, and Headless (MACH) projects in the world of digital commerce often feels like solving a complex puzzle. In recent years, MACH architecture—particularly the use of microservices—has been touted as a technological savior. Microservice-based architectures are celebrated for their potential to drive scalable, high-performance systems, adept at handling the ever-increasing demands of the digital world. The appeal is undeniable: decomposing complex systems into manageable, individual services promises increased agility, resilience, and scalability.
Challenges of Pure Microservices-Based Architecture
However, like many things in life, it’s not as straightforward as it might seem. The discourse around MACH and microservices often omits the less glamorous side of this architectural style. The challenges, costs, and potential pitfalls associated with implementing and maintaining such systems are frequently glossed over. While microservices can undoubtedly be a powerful tool, they also introduce a new set of complexities requiring careful management.
When organizations migrate to MACH architectures, they must anticipate and address a range of operational challenges:
-
- Maintainability & Operations: Adopting MACH architecture necessitates considerable changes in operational models. This distributed architecture demands rigorous upkeep of numerous smaller services, as opposed to a single monolithic system. Managing individual services’ interdependencies and coordinating their updates become critical to ensure overall system functionality.
-
- Cost Implications: While MACH architecture provides scalable solutions, it introduces complexity in cost management. Pricing structures in cloud services and the overhead costs associated with managing numerous services can lead to an increased total cost of ownership.
-
- Technical Expertise: Deploying, operating, and optimizing MACH solutions require specific, often advanced, skill sets. Building an in-house team or outsourcing expertise can present significant challenges, not to mention the ongoing need for upskilling and training in this rapidly evolving field.
Why Do Microservices-Based Architectures Require an Advanced Skill Set?
A prime example of the technical challenges associated with building a robust e-commerce platform using a pure microservices-based architecture pertains to non-functional requirements. In systems engineering, non-functional requirements define the constraints and operational capabilities of the system being built. In the e-commerce space, non-functional requirements such as monitorability, performance, and scalability often dictate whether the platform can handle large numbers of concurrent users during peak periods like holiday sales seasons.
One of the most critical non-functional requirements that any e-commerce system needs to fulfill is consistency to maintain an accurate record of transactions. As we process sales orders and take payments through the e-commerce platform, it is absolutely critical to ensure that the system can guarantee transactional consistency in all situations, even during periods of system outage or failure.
Different Ways to Provide Consistency for an E-Commerce Platform
To design a system that provides transactional consistency for critical business capabilities in e-commerce such as cart, order management, and payment, transaction management and coordination is typically used. Transaction coordination can be achieved in multiple ways:
-
- Sharing the underlying integrated transaction manager in a relational database system between these capabilities ensures consistency between transactions (traditional approach with monolithic architectures).
-
- Including an external transaction manager in the system design to support XA-transactions that span over multiple systems.
-
- Or, with a completely distributed architecture, which microservices architecture often is, by implementing a logical model to compensate for local transactions if one of the capabilities fails to do its part. This design pattern with microservices-based architectures is typically referred to as the SAGA-pattern (please see https://microservices.io/patterns/data/saga.html)
However, many of these models for transaction management are costly and challenging to implement. Building and maintaining a platform that manages distributed transactions well requires immense skill from developers and operators.
Is There an Easier Way to Implement This?
We might wonder if there’s an architectural style that strikes a balance—offering the agility of microservices while maintaining a solid, consistent core that meets the demands of e-commerce use cases. This is possible by leveraging an e-commerce platform that supports extensibility with microservices, allowing us to envision a system where specific capabilities that do not require transactional consistency are hosted as external microservices, and those that do are provided from the core platform.
This hybrid architecture offers the best of both worlds. It benefits from the robust core of the e-commerce platform, which provides key technical services. At the same time, it leverages the flexibility of asynchronous microservices to add the necessary functionalities and create the desired customer experience. The combination of these two paradigms forms a unique architectural style that caters to the dynamic nature of today’s e-commerce landscape.
This approach could address many of the challenges associated with a pure microservices-based architecture while still harnessing its benefits, creating scalable, flexible, and robust e-commerce experiences for customers.
The following picture outlines this architectural style where e-commerce cloud platforms and public cloud providers are interconnected, and how some of the capabilities can be implemented as microservices outside of the e-commerce platform.