Buffer 之类的 Twitter 工具如何应对数百万用户,让他们每秒撰写数千条推文?
我有一个类似的服务,我正在运行一个 cron 脚本,但是仅仅浏览 50 个用户就需要大约 10 秒 - 所以我想知道这种规模是如何实现的。
答案1
Buffer 所做的任务很容易并行执行 - 您不必等待某人的帖子处理完毕即可发布另一个用户的帖子。因此,水平扩展非常简单 - 多个线程和/或服务器同时处理多个用户。
他们可能会使用的一些基本技巧是:
多个数据库服务器 - 帖子内容不必对所有服务器都可用,只需对需要处理的服务器可用即可。因此,您可以有一个主数据库来保存帐户和登录信息,以及一堆单独的数据库来添加排队的帖子,这样负载就会在它们之间平衡。无需设置数据库集群或在服务器之间同步,因为数据不需要在所有服务器上都可用。
多个发布服务器 - 每个服务器都会查看其中一个数据库,查找准备发布的内容并进行处理。可能使用多个进程/线程,以及某种方式来控制哪个线程处理哪个数据库记录,这样就不会发布重复的内容。
优化。如果您每秒处理数千条帖子,那么将发布时间缩短 1/100 秒将大大提高速度。他们可能做了很多工作来提高经常调用的代码部分的性能。仔细分析有助于确定哪些代码部分需要优化,哪些部分调用频率不够高,不值得一提。
基本上,您不必像脚本那样一次处理一个用户的帖子,而是尽可能多地并行处理这些帖子。使用这些技术,您可以随着业务的增长添加更多服务器。您还可以自动扩展云服务器 - 当积压过多时,会自动启动新服务器来处理额外的负载。当业务量下降时,额外的服务器也会关闭。