At Rendered Text, we like to decompose our applications
into microservices. These days, when we have an idea, we think of its
implementation as a composition of multiple small, self-sustaining services,
rather than an addition to a big monolith.
In a recent Semaphore product experiment, we wanted
to create a service that gathers information from multiple sources, and then
emails a report that summarizes the data in a useful way to our customers. It's
a good use case for a microservice, so let's dive into how we did it.
Our microservices stack includes Elixir, RabbitMQ for communication, and Apache
Thrift for message serialization.
We designed a mailing system that consists of three parts:
- the main user-facing application that contains the data,
- a data-processing microservice, and
- a service for composing and sending the emails.