开发长连接推送服务,如何模拟 100w 客户端频繁交互?

2015-08-24 09:47:54 +08:00
 Feiox

最好能单机, Node Go Python 都可以,需要完成一定的业务逻辑。有现成的工具可以使用吗?

内容为 1k 左右的内容。平均每秒约有 1/20 的客户端发送消息,峰值要能实现 1/2 的用户同时发送。

11891 次点击
所在节点    Node.js
35 条回复
jiumingmao
2015-08-24 10:00:39 +08:00
单 ip 只能对同一服务器 ip 发起 65535 个连接,要单机的话,这个机器需要有 20 个 ip
cyshi
2015-08-24 10:04:27 +08:00
@jiumingmao 确定是 65535 么
jiumingmao
2015-08-24 10:14:24 +08:00
@cyshi 这是只是 16 位端口的理论值,并且发起连接使用的是高端口,要修改系统配置才能使用低端口。多找几台机器方便,比如现在很多 vps 是按小时计费的,搞一批测一小时
yuxizhou
2015-08-24 10:32:07 +08:00
100w 每秒 1/2 的活跃,你这 server 都很难单机吧
rogerchen
2015-08-24 10:40:43 +08:00
单机 500K 问题有成熟解决方案的只有 Google 这种体量的公司了,基本思路都不是 epoll 这些了,肯定要涉及到用户态协议栈的魔改,楼主洗洗睡吧。
rogerchen
2015-08-24 10:44:21 +08:00
楼主居然还是说的是单机 500K 长连接,请收下我的膝盖。
ilskenyf
2015-08-24 11:28:28 +08:00
jmeter
aszxqw
2015-08-24 11:38:16 +08:00
个人觉得,开发一个模拟 100w 客户端的工作,比开发一个接受 100w 连接的服务器还麻烦得多。。。
xufang
2015-08-24 11:41:50 +08:00
只有 erlang 了, golang 目前还搞不定。
odirus
2015-08-24 13:35:15 +08:00
你是为了省钱么?最后反而还没集群便宜,做的时候就做成集群,省事儿。
invite
2015-08-24 13:50:35 +08:00
楼主找到了分享一下。
loqixh
2015-08-24 14:12:23 +08:00
@jiumingmao 端口可以共享的,远远不止 65K
alexapollo
2015-08-24 14:15:30 +08:00
@rogerchen 说实话这并不难,国内大公司都做得到。。
jiumingmao
2015-08-24 15:20:07 +08:00
@loqixh local_ip:loacl_port:remote_ip:remote_port:[tcp,udp] . 5 元组中 4 个都相同,只剩下 loacl_port 可以变,就只能到 65K 了
free6om
2015-08-24 16:34:12 +08:00
可以试试 tsung ,私有协议的话就自己写一个 tsung 插件,端口的问题可以用 linux 的虚拟网络接口, 100w 连接 32G 内存差不多了。
mengzhuo
2015-08-24 17:10:39 +08:00
500w 长链接 单机…嗯

4k * 500 w = 19GB tcp buffer
16 核 * 3G *2/ 500w = 20KHZ 每个客户端
1G 网卡 /500w = 200B/s 每个客户端
确定你的机子有这个能力么…
caoyue
2015-08-24 17:45:26 +08:00
Tsung 可以试试
硬件够的话,加上虚拟网卡虚拟 IP 之类的方法应该可以实现
shangjiyu
2015-08-24 17:57:29 +08:00
首先 定义一个 socket 的元组是 IP 加端口,虚拟 IP 可以实现模拟并发客户端的
对于 c10k 可以 io 多路复用,多线程啊等现有技术实现
500K 应该也可以吧,以现在硬件性能
现在都在研究 c10M 问题了,脱离操作系统独立于内核的数据包快速处理(貌似 DPDK , pf-ring ?, snap-switch ),自己实现 tcp 栈
jiumingmao
2015-08-24 18:00:13 +08:00
@free6om 虚拟网络接口,这要求客户端和服务端在同一台机器上。这样对服务端的测试不准确吧。
zonghua
2015-08-24 18:37:29 +08:00
这怎么可能,不是小数目啊,你的单机是天河二号?

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/215478

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX