Microservices is a popular buzzword currently. But how do you actually implement a microservices architecture? How should all the composable pieces of your infrastructure communicate?
Because of the need for all these services to function as a single entity (application, system, etc), but also to be de-coupled, a lightweight, fast, and highly scalable messaging layer is a must.
This post from earlier this year by Aaron Schlosser explains more about how his team implemented a Microservices framework at NextGen Leads using NATS. NATS is an extremely lightweight, open-source messaging system built on Golang. It provides scalability, simplicity, and performance that are ideally suited to microservices design.
NextGen Leads aims to provide extremely high-quality health insurance leads and Medicare supplement leads by streamlining the lead buying experience from end to end. Our leads are generated internally by a team of lead generation experts; they are not brokered by any third party. They are then delivered in real time and never oversold, passing through various filters to ensure that our customers can place bids on only those leads that they want. In fact, our unique second price auction model ensures that our customers always pay the minimum amount necessary to win a lead.
In lead generation, timing is of the essence. Mere seconds can make the difference between a hot and cold lead. As such, we chose NATS as the messaging service that would serve as the “glue” for our microservices architecture. Each of our workers, spread across a scalable number of servers, communicates with one another via our NATS infrastructure. In this manner, as we continue to grow and scale upwards, we can remain confident that our app can handle an exponentially increasing number of transactions.
Thanks to NATS, we can be certain that a lead generated in our funnel can be normalized, sent to auction, purchased, and shipped practically instantaneously. This provides our customers with a truly real time lead buying experience. We send raw lead data, as it is generated, to a normalizer that preps it for auction; then, based on the origin of the data and its unique characteristics, it is routed to one of our many different auction processes; there, our customers place bids on it; finally, the lead is routed to one of many different shipment handlers that deliver it to those customers with winning bids according to their unique delivery needs. These can range from automated CRM shippers (e.g., an XML or JSON POST to a customer’s API endpoint) all the way to human agents who connect our customers to our leads via live transfers over the telephone. At every step of the process, NATS is there to route our data to where it needs to be:
In the end, we at NextGen Leads are glad to have chosen NATS and are looking forward to continuing to grow thanks to NATS’ scalability and ease of use! Feel free to tweet at me if you’re thinking about using NATS for your own project, or follow us at NextGenLeads to see how we continue to use NATS to scale upwards as we take on new verticals.