如题,物联网项目。工作上需要设计一个能够支持 100 万长连接的架构。
1 12liuxiangyu12 2017-06-19 09:46:20 +08:00 难道不是堆机器就好了? |
![]() | 2 bolide2005 2017-06-19 10:03:37 +08:00 ![]() 只是单纯实现 1000K 的话并不是太难,一般的异步框架都能实现,主要修改下服务器的文件描述符的上限,然后内存够大就行。具体要看你的业务场景是怎样的了。 |
![]() | 3 scys 2017-06-19 10:06:05 +08:00 并发和长连接是两个概念。 如果没有弄清楚前,最好考虑的是,10 万左右这种好现实的 |
![]() | 4 ryd994 2017-06-19 10:43:23 +08:00 via Android 你先实现一个能支撑 1 千并发的然后根据压测再优化 |
![]() | 6 gamexg 2017-06-19 11:01:30 +08:00 via Android 只做过单机 10w 的网关类应用,异步+常规优化就行,不需要什么黑科技。 百万的话看起来堆机器就行。 |
![]() | 7 soli 2017-06-19 11:20:59 +08:00 100W 的话,内存大点就好了。 不过,我怀疑带宽先达到瓶颈。 |
![]() | 8 ll3027 2017-06-19 11:36:48 +08:00 物联网需要这么多并发? 100W 还是容易实现的,内存+网络 |
![]() | 9 AntonChen 2017-06-19 11:37:43 +08:00 ![]() HTTP 长连接 200 万尝试及调优方法 http://www.linuxde.net/2011/10/1230.html |
![]() | 10 ixiaohei 2017-06-19 11:50:53 +08:00 ![]() 100w 现在的框架随便保持了。java 的 netty 可以做,就是修改服务器文件限制数。另外根据 tcp 四元组,一个 ip 和端口最大 64k 链接,你要服务器要加 ip 或者加端口就行。 |
![]() | 11 ixiaohei 2017-06-19 11:56:12 +08:00 不做测试忽视上面 64k 限制。 |
![]() | 12 sagaxu 2017-06-19 11:59:44 +08:00 1M 长连接很容易,关键是设备每隔几秒上报一次? |
![]() | 15 dragonszy 2017-06-19 12:03:12 +08:00 The Road to 2 Million Websocket Connections in Phoenix http://www.phoenixframework.org/blog/the-road-to-2-million-websocket-connections |
![]() | 16 sagaxu 2017-06-19 12:24:11 +08:00 @kkyyyw 10 秒一次,峰值的时候 rps 很可能会超过 30 万,建议使用自定义的二进制协议,http 有点儿重了 netty 或者 mina 都可以,如果熟悉程度差不多,建议 netty,如果都不熟,可以看看 vertx,或者国产的 t-io |
![]() | 17 hanwujibaby 2017-06-19 12:28:06 +08:00 其实长链不是问题,就我们之前的经验看,主要瓶颈和 @soli 说的一样,带宽会事先达到瓶颈。单机的单宽甚至机房的带宽都会导致你的机器规模扩大,而不是仅仅看单机能抗的长链数。 |
![]() | 18 ixiaohei 2017-06-19 13:41:32 +08:00 via iPhone Mina 也行,建议压测,java nio 模型很费内存 |
19 thomaspaine 2017-06-19 16:00:04 +08:00 mqtt 的方案啊,刚开始折腾直接用 yunba 的服务算了 |
20 dozer47528 2017-06-19 16:35:02 +08:00 我用 netty 做过,前人都把坑踩完了,不难: https://www.dozer.cc/2014/12/netty-long-connection.html |
![]() | 21 ihuotui 2017-06-19 21:41:54 +08:00 via iPhone 最重要是怎么处理数据,管理连接和业务处理分离,然后计算好每个处理数据的延时,就轻松可以做到延时低,并发高,吞吐量大的应用。我的处理数据的延时是 10ms 左右,瓶颈在数据库,其实我可以不用数据库的。 |