如题,物联网项目。工作上需要设计一个能够支持 100 万长连接的架构。
1
12liuxiangyu12 2017-06-19 09:46:20 +08:00
难道不是堆机器就好了?
|
2
bolide2005 2017-06-19 10:03:37 +08:00 1
只是单纯实现 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 1
HTTP 长连接 200 万尝试及调优方法 http://www.linuxde.net/2011/10/1230.html
|
10
ixiaohei 2017-06-19 11:50:53 +08:00 1
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 左右,瓶颈在数据库,其实我可以不用数据库的。
|