(通常称为C10K问题)
是否有更现代的c10k问题解决方案评论(最后更新时间:2006年9月2日),特别关注Linux(epoll,signalfd,eventfd,timerfd ..)和像libev或libevent这样的库?
在现代Linux服务器上讨论所有已解决但仍未解决的问题的东西?
C10K问题通常假设您正在尝试优化单个服务器,但正如您引用的文章指出"硬件不再是瓶颈".因此,要采取的第一步是确保在混合中投入更多硬件并不是最简单和最便宜的.
如果我们有一个500美元的盒子每秒服务X个客户,那么购买另一个500美元的盒子来提高生产能力的效率要高得多,而不是让一个员工吞噬谁知道多少小时和美元试图弄清楚如何挤压更多走出原来的盒子.当然,假设我们的应用程序是多服务器友好的,我们知道如何负载平衡等等...
巧合的是,就在几天前,Programming Reddit或者Hacker News提到了这篇文章:
成千上万的线程和阻止IO
在Java的早期,我的C编程朋友嘲笑我用阻塞线程做套接字IO; 那时,别无选择.如今,凭借丰富的内存和处理器,它似乎是一种可行的策略.
这篇文章的日期是2008年,所以它将你的视野提升了几年.
要回答OP的问题,您可以说今天的等效文档不是关于优化单个服务器以进行加载,而是优化整个在线服务以进行加载.从这个角度来看,组合的数量是如此之大,以至于您所寻找的不是文档,它是一个收集此类架构和框架的实时网站.这样的网站存在,其名称为www.highscalability.com
附注1:
我认为投入更多硬件是一个长期解决方案的信念:
与单个服务器的成本相比,"获得"性能的工程师的成本可能很高.扩展时会发生什么?假设您有100台服务器.服务器容量提高10%可以每月为您节省10台服务器.
即使你只有两台机器,你仍然需要处理性能峰值.在负载下正常降级的服务与发生故障的服务之间的区别在于有人花时间优化负载方案.
附注2:
这篇文章的主题有点误导.CK10文档并未尝试解决每秒10k客户端的问题.(每秒的客户端数量是无关紧要的,除非您在有限延迟下定义工作负载和持续吞吐量.我认为Dan Kegel在撰写该文档时已经意识到这一点.).将其视为构建并发服务器的方法概要,以及相同的微基准测试.也许在当时和现在之间发生了变化的是,您可以在一个时间点假设该服务是针对提供静态页面的网站.今天,该服务可能是一个noSQL数据存储区,一个缓存,一个代理或数百个网络基础设施软件之一.