icon-rss-large

外贸 | | 登录

订阅我们

如何实现单服务器300万个长连接的?

Published on 2021-11-03 by zhushican

如何实现单服务器300万个长连接的?

如何实现单服务器300万个长连接的?

这……我能说也不怎么困难咩?实际在去年操作过一次,并且看过一篇文章(研究eurasia socket内存使用量的时候翻到的最后会单独列出),我的成果是2G内存双核18W左右的并发连接

1. 事件驱动,这个只是为了IO和CPU异步,让CPU从IO等待中解放出来,这样就能在CPU循环中往死里accept连接了,nginx就靠这个把apache玩死的,nodejs的快不仅仅因为这个,语言层的magic就扯远了。

2. 利用双核,2个核就2个进程,一个进程一个事件驱动核(epoll,select啥的),增加链接吞吐。

3. 参数调优,这才是最重要的一步,一个Socket连接默认是有内存消耗的,我不记得Python的Socket占用是4M还是多少来着了,当然这个也可以调优,eurasia的作者沈大侠说过可以搞到2M来着?当然这对于一个24G的服务器来说300w还是搞不定的,但是就送TCP本身来分析的话,tcp_rmem/tcp_wmem,这2个系统tcp读写缓存默认都很高,拉低到4k,然后把tcp_mem也得改下,这个说起来太麻烦,man一下就有了,总的来说就是得拉高High值4. 网卡要给力,端口给足,句柄加高。参考文献:100万并发连接服务器笔记之1M并发连接目标达成从我的测试和此文的结论来看,他在7.5G左右实现了1M并发,24G到3M差不多,我那么挫的水平2G 18W,24G怎么说也能上2M啊,而且如果仅仅是推送,业务层逻辑复杂度不强,等于就是个Proxy所以恩。至于单台和多台之间的选择,追求技术的,单台你屌你牛逼,追求稳妥Crash也不会造成太大影响还想在推送一层玩点花样用点动态语言的,多台不二选择。


Gravatar

About

Read More...
0
Comments
Leave a Comment