从 C10K 到 C500K

| 16 Comments

还在谈 C10K 的问题?这个已经过时了,现在大家已经开始说 C500K

国外的 Urban Airship 公司的工程师在其官方网志上发文章介绍他们在产品环境中做到 50 万并发客户端,Java + Pure NIO 的实现,最近又有文章介绍针对 Linux Kernel 调优的经验:Linux Kernel Tuning for C500k 。并且指出了"单个 IP 最大并发数量上限为64K" 只是一个误解。

硬件环境?操作系统为 Ubuntu(Lucid),租用 Amazon 的 EC2 ,使用 EC2 Large instances,64 位操作系统,每个 7.5 GB 内存。

当然,Urban Airship 是做手机消息 Push 服务的(Android Push 架构),所以,如果你也要做到这样的并发,还要看你的应用场景是否合适。去年了解到曾在新浪、腾讯任职的杨建已经做到超过 20 万的 HTTP 并发(现在可能已经突破这个限制了),非常的惊人。我非常想知道现在各个公司在这方面的实践数据。

--EOF--

另外参考:A Million-user Comet Application with Mochiweb

更新:杨建同学发来消息,去年已经单击突破 46.5万 Connections, 两块网卡, 1.5G 输出。10万请求处理每秒,每个响应 2k 左右。据说当时遇到一个坎一直没能过 50 万,不过这个坎三个月前已经过了,现在过 60 应该没悬念,四核双 CPU 机器。据杨建说,"按现在 4 Core * 4CPU 的机器,我觉得可以冲刺 80~100万,前提需要4块网卡(千兆)"。可见,把事情做到极致是没有极限的。

16 Comments

充分发挥机器极限,很多服务器厂商估计要哭了。

杨建同学能否也写篇文章介绍一下啊 :)

很强悍,不过前面讲的都是单网卡的情况。

对这方面不了解...

我认为要和应用关联起来。
简单的应用应该可以达到这个水平,但是动态的、复杂的、事务性的web应用,这个应该是不能达到这个水平的。
不过在简单应用环境,多网卡桥接,应该光从连接数上来计算应该可以。

有人在linux上讨论关于c500K的问题了,BSD这边有没有啥动静

并发数的问题,一个是数据IO问题,一个是数据共享、通讯问题。用erlang试试吧,在合理的硬件上达到很高的并发不是很困难的,毕竟都是现成的东西在那

还有很多东西需要学习。。

这个实现起来很容易了,去年某项目上线,8G内存扛并发连接55万;4G能扛30万。

"单个 IP 最大并发数量上限为64K" 只是针对client来讲的,local port有限,如果要增加client的并发量,只有增加ip了,每个ip 64K。

在epoll模式下,socket并发连接数多少除了与物理内存大小有比较直接关系以外,另一个制约因素是单片网卡的中断分布集中在多核cpu的其中一个,这个cpu往往在大量并发连接数据交换时成为一个瓶颈,不过最近的2.6.35 版Linux内核貌似解决了这个问题,http://www.javaeye.com/news/17197

淘宝的余峰同学刚在ECUG的聚会上讲了“C1000K高性能服务器构建技术”,可以参考
http://www.slideshare.net/mryufeng/c1000k

使用智能网卡

都是测试数据吧。真实数据怎么能达到这么高??