Avatar of Chris McFadden

Chris McFadden

VP, Engineering at SparkPost
VP, Engineering at SparkPost·

We send over 20 billion emails a month on behalf of our customers. As a result, we manage hundreds of millions of "suppression" records that track when an email address is invalid as well as when a user unsubscribes or flags an email as spam. This way we can help ensure our customers are only sending email that their recipients want, which boosts overall delivery rates and engagement. We need to support two primary use cases: (1) fast and reliable real-time lookup against the list when sending email and (2) allow customers to search, edit, and bulk upload/download their list via API and in the UI. A single enterprise customer's list can be well over 100 million. Over the years as the size of this data started small and has grown increasingly we have tried multiple things that didn't scale very well. In the recent past we used Amazon DynamoDB for the system of record as well as a cache in Amazon ElastiCache (Redis) for the fast lookups and Amazon CloudSearch for the search function. This architecture was overly complicated and expensive. We were able to eliminate the use of Redis, replacing it with direct lookups against DynamoDB, fronted with a stripped down Node.js API that performs consistently around 10ms. The new dynamic bursting of DynamoDB has helped ensure reliable and consistent performance for real-time lookups. We also moved off the clunky and expensive CloudSearch to Amazon Elasticsearch Service for the search functionality. Beyond the high price tag for CloudSearch it also had severe limits streaming updates from DynamoDB, which forced us to batch them - adding extra complexity and CX challenges. We love the fact that DynamoDB can stream directly to ElasticSearch and believe using these two technologies together will handle our scaling needs in an economical way for the foreseeable future.

READ MORE
9 upvotes·472.4K views
VP, Engineering at SparkPost·

The recent move of our CI/CD tooling to AWS CodeBuild / AWS CodeDeploy (with GitHub ) as well as moving to Amazon EC2 Container Service / AWS Lambda for our deployment architecture for most of our services has helped us significantly reduce our deployment times while improving both feature velocity and overall reliability. In one extreme case, we got one service down from 90 minutes to a very reasonable 15 minutes. Container-based build and deployments have made so many things simpler and easier and the integration between the tools has been helpful. There is still some work to do on our service mesh & API proxy approach to further simplify our environment.

READ MORE
9 upvotes·2 comments·161.1K views
Jerome Dalbert
Jerome Dalbert
·
April 5th 2019 at 7:59PM

What CI tools were you using before the switch?

·
Reply
Chris McFadden
Chris McFadden
·
April 5th 2019 at 8:22PM

Self-managed Atlassian Bamboo (Elastic Bamboo running on EC2)

·
Reply
VP, Engineering at SparkPost·
Shared insights
on
NGINXNGINXOpenRestyOpenRestyLuaLua
at

We use nginx and OpenResty as our API proxy running on EC2 for auth, caching, and some rate limiting for our dozens of microservices. Since OpenResty support embedded Lua we were able to write a custom access module that calls out to our authentication service with the resource, method, and access token. If that succeeds then critical account info is passed down to the underlying microservice. This proxy approach keeps all authentication and authorization in one place and provides a unified CX for our API users. Nginx is fast and cheap to run though we are always exploring alternatives that are also economical. What do you use?

READ MORE
7 upvotes·293K views
VP, Engineering at SparkPost·

We migrated most of our APIs last year from using our self managed Cassandra cluster to a mix of Amazon DynamoDB and Amazon RDS for Aurora. This has reduced the operational overhead for our team and greatly improved the overall reliability of our service. The new dynamic capacity in DynamoDB has been super helpful for handling bursty traffic.

READ MORE
5 upvotes·47.5K views
VP, Engineering at SparkPost·
Shared insights
on
SparkPostSparkPost
at

Send transactional or marketing email from your web apps. SparkPost provides all the deliverability, scalability and speed you expect from the world's leading email platform in an easily integrated, pay-as-you-go email delivery service. SparkPost

READ MORE
1 upvote·10.8K views