by Krzysztof Koper
What is considered modern these days?
I bet that everyone of you, doesn’t matter if you are a developer, recruiter, analyst, cto, ceo, cfo etc. have heard, at some point of time, that you need to be ‘modern’ if you want to survive. But what does it really mean in an e-commerce context? I have allowed myself to ask a few of my friends what it means to them to do ‘modern programming’.
There are some answers:
– To be in the cloud.
– Use the newest frameworks (or tools)
– Use fresh/young/trendy programming languages
– Do microservices
Those statements can be enclosed in the already existing acronym: MACH.
M – microservices
A – API first
C – cloud-native
H – headless
MACH is currently a standard for modern e-commerce architecture.
Let’s review quickly what all these statements mean.
Microservices: software architecture consisting in building small applications enclosing, as a rule, single functionality (domain).
Api first: Application design starts from description of its API instead of concrete implementation. In that way, users (other app) of our application can start implementing communication between us earlier.
Cloud native: Design and implementation of applications to be ready to run in a cloud environment. This involves coping with many challenges like security, resiliency, observability and many more.
Headless: User interface and backend are separated from each other. Both are independent and communicate with well defined interfaces.
Good, but what is this all about?
To have more for less. Microservices, like the name suggests, should be small. Such an application requires less resources to run. You can do it on some commodity machine. Or on a few of them. It is still going to be cheaper than a single ‘fat’ server. Additionally, running your app on multiple machines increases your resiliency. Api first approach is often associated with headless. Combination of those two approaches enables interchangeability of tools. You are able to take whichever implementation works for you the best. Setting up the whole server infrastructure can be very costly and time consuming. You can omit it thanks to public cloud suppliers. If you already have machines you can use it as your private cloud. Cloud-native apps can run on both solutions.
Take a look how we enabled greater scalability and control, while helping Bliq to migrate to cloud:
Do you always need to go all in?
The only thing which you need to always do is to be pragmatic. There are plenty of, so called, box solutions. You can buy it, buy a subscription or just use it if it is free. They are different with regard to customization capabilities, feature richness etc.
Recently, we were facing such a challenge.
What we choose for our implementation?
Of course it would be great to use all of the modern solutions ever made, but here comes the pragmatism. Our partner already had a working platform based on a closed-source e-commerce platform. Instead of starting from scratch, we have decided to keep the current platform, and build all additional functionalities on the basis of MACH assumptions.
For the cloud provider we chose Microsoft Azure. We ran all our services written in Java with Spring Framework. Undeniable challenge in cloud development is to ensure reliability in services communication. To guarantee appropriate level of resiliency we have used Azure ServiceBus for asynchronous communication. In the case of synchronous communication we have used the support of Spring Retry library. Another challenge in the cloud is security. We are processing sensitive data. Safety of credentials is ensured by Azure Key Vault. Speaking of data, we have used Azure CosmosDB both with relational engines (MySQL) and NoSQL (MongoDB). Access to our services is controlled and secured by Azure API management.
How did it work out?
Combination of our pragmatism, hardwork and good technical skills allowed us to keep the partner’s current platform and simultaneously we have been able to deliver all functionalities in modern style. The use of cloud-native approach guaranteed high performance, availability and reliability. At the same time, leveraging the current solution considerably shortened the time to market and decreased overall development costs.