AppLovin: Processing 30B Requests A Day
highscalability.com
highscalability.com
FreeBSD 10 on the EC2 boxes, whatever Linux AWS is running on their managed service instances. Nginx backed by Python and Go servers.
Plus a smattering of other services like ELBs, etc.
I can't imagine having something so critical that you build a custom Nginx plugin. I thought I was cool for doing a bit of Lua scripting. :)
Ex: Realtime stats system. On each request doing several get,set,increment,push-into-queue, geoip + 1 bulk-postgresql-upsert every second. 1ms response, 400 requests/second, 3 python processes, 10$/month shared hosting.
I find Aerospike latency a lot more stable compared to that of Cassandra. Our use case is quite simple: we treat Aerospike as a large and fast key-value storage.
1. Is the Spark cluster running on top of an in-house cluster or on AWS EMR/S3?
2. Any more details about the custom message system, specifically how to guarantee exactly once delivery?
3. How do you guarantee data is never dropped?
4. "Make sure every message can be re-played without data corruption" how to achieve this when there is so many data points coming in?
Again, thank you for the insights!
> 1. Is the Spark cluster running on top of an in-house cluster or on AWS EMR/S3?
It runs on an in-house cluster.
> 2. Any more details about the custom message system, specifically how to guarantee exactly once delivery?
This topic might deserve a separate article. We have built a custom locking system that ensures proper delivery.
> 3. How do you guarantee data is never dropped?
We write each data point into 2-3 locations in our system and also back it up in S3.
> 4. "Make sure every message can be re-played without data corruption" how to achieve this when there is so many data points coming in?
Basically, batch things and keep a lot of signatures and checksums around.
About point 4, I'm assuming you built in idempotency into your message replay system. Is your unit of idempotency, say, 1 hour or some other unit of time, or is every single message have idempotent results? Because the latter would be pretty amazing :)
Any comment on that?