Live data from Hacker News

Improving distributed caching performance and efficiency at Pinterest

medium.com

21–25 of 25 posts

Re: Improving distributed caching performance and efficiency at Pinterest

#21
post #5

> the fleet serves up to ~180 million requests per second For comparison, Google serves about 63k queries per second. I hope there's not a typo in the above line in Pinterest's blog

It is 180 Million divided by 5000 instances, or 36K request per instance.

Honestly not that high of a number from memcached [1] prospective. It could easily handle 10x that even with SSD extstore.

[1] https://memcached.org/blog/nvm-multidisk/

Re: Improving distributed caching performance and efficiency at Pinterest

#22
post #20

Curious on why self hosted MC vs Elasticache MC?

Better control over it would be my guess, as well as disaster recovery.

Control over the OS, kernel and server source code would expose values you can tune to make it perform better under their specific workload (where as managed services tend to strike a balance between a wide range of workloads).

For disaster recovery, a previous client of mine got bitten by an RDS instance that was stuck in “modifying” state for 12+ hours (presumably until an AWS engineer manually fixed the problem). Being able to SSH into the machine as root would’ve saved us quite a bit of time (we ended up starting a new RDS and restoring from a - thankfully very recent - backup to get the service back online).

Re: Improving distributed caching performance and efficiency at Pinterest

#23

> Today, Pinterest's memcached fleet spans over 5000 EC2 instances across a variety of instance types optimized along compute, memory, and storage dimensions. Collectively, the fleet serves up to ~180 million requests per second and ~220 GB/s of network throughput over a ~460 TB active in-memory and on-disk dataset, partitioned among ~70 distinct clusters. Wow. Assuming $0.09 per GB egress on EC2, that's $51,321,600/…

Hi, I'm the original author of this article, though I have left Pinterest since this article was published.

Many customers with large AWS footprints, Pinterest included, have enterprise plans with highly custom pricing. It is often the case that general public pricing isn't directly comparable to enterprise pricing on an individual component level.

On the topic of network transfer, many of our highest network bandwidth memcached clusters are replicated with an egress routing policy that exercises an availability zone affinity [0]. For the most efficient clusters, this means that 99.9+% of network bandwidth remains in the client-colocated AZ (within the same region and VPC), which is free [1].

[0] https://pin.it/scaling-cache-infrastructure

[1] https://aws.amazon.com/blogs/architecture/overview-of-data-t...

Re: Improving distributed caching performance and efficiency at Pinterest

#24
post #21
post #5

> the fleet serves up to ~180 million requests per second For comparison, Google serves about 63k queries per second. I hope there's not a typo in the above line in Pinterest's blog

It is 180 Million divided by 5000 instances, or 36K request per instance. Honestly not that high of a number from memcached [1] prospective. It could easily handle 10x that even with SSD extstore. [1] https://memcached.org/blog/nvm-multidisk/

Yeah, 36k per instance (especially on an xlarge or 2xlarge EC2 instance) is well within the serving capacity of memcached. While it depends a lot on the workload profile for a specific cluster, some clusters serve on the order of ~5k/instance while others are as high as ~100k/instance. We've done a lot of experimentation with extstore as well; it certainly eats up more compute cycles on average than an equivalent in-memory only cluster, but is still quite efficient.

Re: Improving distributed caching performance and efficiency at Pinterest

#25
post #5

> the fleet serves up to ~180 million requests per second For comparison, Google serves about 63k queries per second. I hope there's not a typo in the above line in Pinterest's blog

Hi, I'm the original author of this article, though I have since left Pinterest.

180M/s is the peak throughput I've observed from the entire fleet, and is an accurate figure.

It's worth noting that:

(1) When it comes to caching workloads, there is often a wide spread of request amplification factor from a single inbound user request to the site. For example, a search query on Pinterest might internally fan out to an order of magnitude more requests to memcached across several different services along the request path used for servicing that query.

(2) There are many systems outside of the online critical path that use caching, which add load on the system independent of the rate at which users are posting or viewing content on the Pinterest site.

As another reference point, Facebook, who developed mcrouter, shared that their memcached deployment serves on the order of billions of requests per second [0]. And this figure is from 2014; I imagine it's grown a lot since then.

[0] https://www.usenix.org/system/files/conference/nsdi13/nsdi13...

Post reply on HN