我从Node.js的角度来看这一点,其中普遍的共识似乎是它为IO绑定用例提供了亮点。我不打算构建下一个Facebook / Twitter,但我的问题是社交网站通常是I / O绑定还是CPU绑定?由于社交网络可以包含各种各样的上下文,我将进一步指出我对聊天,即时消息,跟随用户和状态更新等功能特别感兴趣。对于这些类型的事情,CPU或IO端通常会出现瓶颈吗?
答案 0 :(得分:3)
我是一个每月活跃用户约2000万的网站的主要工程师。我们肯定受I / O限制,很少(如果曾经)担心app-server性能。
缩放CPU非常简单。您在网络上启动新节点并将其添加到负载平衡器的可用池中。另一方面,扩展I / O非常棘手且昂贵,因为数据必须保持可寻址性和合理的一致性。
在阅读方面,您可以通过支持复制进行扩展。这需要编写能够容忍复制延迟的软件 - 数据从写入DB移动到读取DB所需的时间。我们有1个读服务器,用于1个写服务器,在高负载下,延迟可以是秒。我们选择实现具有回写缓存的I / O访问,其中缓存是通过memcached和高ram服务器集群提供的。
在写入端,数据分片是必要的,以便维持并发写入的数量。这意味着您无法使用表连接,并且您会在分片中失去原子性。同样,你的软件必须容忍这一点。
此外,在处理大量二进制数据(如照片图片)时,大规模网站通常使用针对更好的文件系统I / O进行了优化的CDN。
我的观点是,对于典型的社交网站,在扩展I / O与CPU之间花费了更多的时间和金钱。