7 ms·
Scaling Datastores at Slack with Vitess
- wiredfool 6y agoSharding based on customer is an attractive way to get to shards, potentially with minimal interference in ops or data model, but truly sucks when your biggest customers don’t fit on one shard anymore.
- kamikaz1k 6y agoHas that ever happened to you? Would love to read about that story and hopefully the solution...
- juancampa 6y agoThe article addresses this particular point > Each keyspace is a logical collection of data that roughly scales by the same factor — number of users, teams, and channels. Say goodbye to only sharding by team, and to team hot-spots!
- sougou 6y agoThe way to reason about this is: If a customer had a huge business, what key would they shard by? Then choose that as the sharding key for all customers.
- philsnow 6y agosougou is one of the original vitess devs, he would know this very well. Hi Sugu!
- atombender 6y agoThe solution is to have different shard sizes. Your largest customer needs to fit on the largest shard size (extra large VMs or whatever).
- wiredfool 6y agoFins, but there comes a time when your largest customer doesn’t fit on your largest machine. I wouldn’t say that killed my first startup, but it certainly didn’t help.
- atombender 6y agoI guess I was assuming a shard was more than one machine. If a customer can't be horizontally scaled across nodes, then of course there's an upper limit on how large a shard can be. Database like CockroachDB and TiDB help here.
- continuations 6y agoHow big is your largest customer though? You can easily buy a machine with several TB of RAM, several hundreds of TB of SSDs in RAID giving you millions of IOPS, quad-socket 256 cores. How likely is it that a single machine cannot handle a single customer?
- jjeaff 6y agoYa, this is always what I think about when I see people spending lots of effort on "scalability". You either need an enormous client base or are doing something very specialized that requires tons of memory or cpu per customer. I would think 99% of all internet companies could likely handle everything on a single massive machine, or two, for redundancy. Assuming they were somewhat optimized.
- derekperkins 6y agoThat introduces different problems. Applying MySQL replication logs is single threaded by default and generally doesn't scale as well as the master, so it becomes increasingly difficult to keep replicas from lagging. As your database gets into tens or hundreds of TBs, now backups and restores take hours or days to complete. Any DR scenario becomes an existential threat. For large tables, schema changes can take weeks. This often results in developers doing their own custom table sharding strategies, even though they might still be on a single machine. I'm not saying that you can't architect around these problems, but operating a db at massive scale on a single machine isn't the obvious win that it seems to be.
- chevman 6y agoYeah, seems like the key point here is be careful architecting your infrastructure around a somewhat arbitrary construct like 'customer'. The relevant entity to scale around for Slack is likely 'active users' or even 'messages'. Which may map loosely to 'customers', but that's almost incidental.
- vp8989 6y agoIt looks like Azure has now integrated Citus into it's Postgres offering, but Im curious why AWS hasn't integrated either Vitess or Citus at all? It seems like a well executed combination of Vitess/Citus + read replicas pointing to decoupled page storage would result in a fully featured non-proprietary database that scales all the way down to your laptop and all the way up to the heaviest OLTP use cases. If that existed, only truly masochistic people would continue using things like DynamoDB.
- marcinzm 6y ago>If that existed, only truly masochistic people would continue using things like DynamoDB. Which is probably why AWS doesn't support it, they make less money and have less lock in on their clients.
- Scarbutt 6y agoThey want you to use Aurora instead.
- carlineng 6y agoCitus was acquired by MSFT in 2019, hence the integration. Vitess is primarily a MySQL-based solution, and I imagine that AWS would rather have its customers on Postgres-flavored DBs, given that MySQL is currently owned by Oracle.
- vp8989 6y agoThe Citus extension is still open-source though, right? Although I think it was a solid strategic move by MSFT to acquihire the Citus devs (probably all these people were given substantial golden handcuffs) to block AWS from hiring experts to integrate this extension into their PG offering.
- mosselman 6y agoIs there something comparable for PostgreSQL that makes it easy to setup clusters with? Maybe with automatic fail overs and HA?
- Scarbutt 6y agoNot a library but you can achieve the same with less work using amazon aurora postgres.
- shlomi-noach 6y agoDeepthi, tech lead for Vitess, just published this RFC a few days ago: https://github.com/vitessio/vitess/issues/7084 https://github.com/vitessio/vitess/issues/7084 Vitess plans to support PostgreSQL, but there is no work on that at this time.
- manquer 6y agoCitus does sharding as an extension for postgres. If all you want is HA and FO there are simpler solutions like pgpool and pgbouncer etc.
- dilyevsky 6y agoCockroachDB uses pg protocol but doesn’t support all the features (close enough though).
- nkcmr 6y agoNot a DBA, but this seems comparable: > stolon - PostgreSQL cloud native High Availability https://github.com/sorintlab/stolon https://github.com/sorintlab/stolon
- yashap 6y ago> Today, we serve 2.3 million QPS at peak. 2M of those queries are reads and 300K are writes. Damn, even for a service as popular as Slack, that’s significantly more than I expected. Slack has ~12-13 mil DAUs, right? I assume at peak time of day, maybe 2-3 million actively using the product at the same time? If that’s a fair assumption, that’s roughly 1 MySQL query per second, per active customer - seems like a fair bit? I wonder if they do polling (instead of websockets)? At my work we have roughly 1 order of magnitude fewer DAUs, but roughly 2 orders of magnitude fewer QPS. And we also have chat areas of the product.
- karlding 6y ago> Slack has ~12-13 mil DAUs, right? As of September 2019, Slack reported 12 million DAUs [0]. Of course, that is pre-pandemic, and the only figures that Slack has provided regarding demand in 2020 are these tweets [1] from Slack CEO Stewart Butterfield back in March. In those tweets, it mentions that Slack was serving 12.5M simultaneously connected users. [0] https://slack.com/blog/news/work-is-fueled-by-true-engagement https://slack.com/blog/news/work-is-fueled-by-true-engagemen... [1] https://twitter.com/stewart/status/1243000487365861376 https://twitter.com/stewart/status/1243000487365861376
- jhgg 6y agoIt is a pretty high QPS. I work on a chat service that is quite popular (even more popular than Slack) and looked at our QPS to our persistent data stores. It is less than an order of magnitude compared to slack's when you normalize for DAU. Really wonder what they're doing over there.
- derekperkins 6y agoWhatever the service, it isn't the platform that Slack is. I would guess that a huge percentage of their db traffic is from apps and custom integrations.
- ahachete 6y agoGitLab.com is serving around 300QPS at peak (see https://about.gitlab.com/blog/2020/09/11/gitlab-pg-upgrade/ https://about.gitlab.com/blog/2020/09/11/gitlab-pg-upgrade/). While that's like 1/7th of Slack's traffic, it is served by a single PostgreSQL cluster. That's the comment.