Emarsys Evolves from a Monolithic to a Hybrid Architecture with New Full Stack Services on Heroku
Leading B2C cloud marketing platform built 42+ full stack feature services on Heroku.
It’s a universal truth for consumer brands: treat your customers as individuals. Companies know that such individual relationships drive consumer loyalty and business growth. Going beyond traditional face-to-face interaction, smart technology steps in to create and maintain long-lasting and profitable customer engagement.
Emarsys, a global leader in B2C cloud marketing software, provides intelligent technology solutions that empower relationship marketing. The company was founded in 2000 to help brands bring traditional one-to-one communication with customers into the 21st century in a highly scalable way.
B2C platform turns insights into relationships
Emarsys integrates customer intelligence, personalization, predictive recommendations, and omni-channel marketing automation into a single cloud platform. Using machine learning and data science, the platform transforms behavioral data into a deep understanding of each individual customer. Companies can leverage these insights to create highly personalized customer experiences and develop long-term relationships.
With a large global client base, Emarsys sends over 6 billion emails per month. Their 100+ engineering organization based in Hungary maintains their core platform built in PHP running on a legacy in-house infrastructure and connected to a big data warehouse. Due to the size and complexity of the Emarsys infrastructure, their system engineers are in high demand, which often means that developers had to wait for operations support.
Pioneering new approaches on Heroku
In 2014, some members of the development team wanted to try some new languages without worrying about operations. They also wanted to ease the burden on their system engineering resources and accelerate the pace of development. So they looked into PaaS providers, including Heroku, Microsoft Azure, and Elastic Beanstalk. After trying a simple test case, they found that the Heroku platform, part of the Salesforce Platform, best met their needs in terms of speed and simplicity.
For us, Heroku is the best out-of-the-box solution. We love the built-in security and metrics and how easy it is to calculate individual costs of services. Andras Fincza, Head of Engineering, Emarsys
The Emarsys engineering organization takes a liberal approach to experimentation. Developers can choose any technology as long as they can operate and troubleshoot it themselves. The team was particularly interested in exploring JavaScript, Node.js, and MongoDB. They started with AngularJS 1.1 and are now early adopters of Angular 2, which is working well for them.
The pioneering team started on Heroku by building a small app to collect user behavior data from the back-end and front-end single page apps. The experiment was well received by management and opened the door for the team to build more services on Heroku.
We first experimented on Heroku by building a few non-critical services. They were very successful, so now we are gradually moving more and more critical services to Heroku. Rafael Ördög, Technical Lead, Emarsys
The team also introduced other new technologies into the company, such as WebSockets, and even influenced their internal talent pool. Emarsys now hires more JavaScript developers than PHP developers (which are harder to find in Hungary).
A hybrid architecture
The company’s monolith application was written entirely in PHP using MySQL and the file system to store data, assets, and logs. Over the years, all new features were developed on this single application codebase with no distribution. Based on growing business needs and an emphasis on new customers, Emarsys decided to take a different approach to development.
Although they still develop on the PHP app, the wider engineering organization has since refocused on building individual features on Heroku using a service-oriented architecture. Emarsys does not consider these new services “microservices,” but rather “feature services,” as they are full stack apps with a broad scope. The ability to deploy and operate services independently has given the team ultimate flexibility in terms of introducing new languages and technologies.
Heroku’s flexibility allows us to build fully independent services and use whatever stack works best for a particular project. So we now build the majority of our new features on Heroku. Andras Fincza, Head of Engineering, Emarsys
Individual services communicate mostly through REST APIs, but some also use RabbitMQ message queues. In order to ensure security between services, they developed a stateless HTTP request signing library called Escher, which is a version of the authentication library from AWS Signature Version 4.
Service sizing has also been an interesting learning experience for the team. From the beginning, they took into consideration that services might have to be split up when they grow too big. Now they are experimenting with another approach. The team is trying out back-end for front-end services for UIs, supported by data stores or aggregation services. When they saw a downside to big service call chains, they started to cache and use internal data stores to improve performance.
The Emarsys evolution continues
Emarsys currently runs a total of 150 services on Heroku, with 42 of them on production. Others are still running on their in-house infrastructure, however whenever possible they build new features on Heroku. With this new approach, Heroku has significantly eased the burden on the system engineering team and also allowed management to more easily plan and control costs.
As Emarsys evolves, the company’s customer brands can appreciate increased system performance and new ways to strengthen their valuable customer relationships.
For more information about the Emarsys tech stack, read our developer interview with Andras Fincza, Head of Engineering, and Rafael Ördög, Technical Lead, for Emarsys.
More case studies
In the spotlight
- View all
- Code[ish] podcasts
- •
- Blog posts
- •
- Community stories