支持 100 万的长连接和并发,需要什么样的服务器架构? - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
kkyyyw
V2EX    互联网

支持 100 万的长连接和并发,需要什么样的服务器架构?

  •  
  •   kkyyyw 2017-06-19 09:42:43 +08:00 7219 次点击
    这是一个创建于 3038 天前的主题,其中的信息可能已经有所发展或是发生改变。

    如题,物联网项目。工作上需要设计一个能够支持 100 万长连接的架构。

    21 条回复    2017-06-19 21:41:54 +08:00
    12liuxiangyu12
        1
    12liuxiangyu12  
       2017-06-19 09:46:20 +08:00
    难道不是堆机器就好了?
    bolide2005
        2
    bolide2005  
       2017-06-19 10:03:37 +08:00   1
    只是单纯实现 1000K 的话并不是太难,一般的异步框架都能实现,主要修改下服务器的文件描述符的上限,然后内存够大就行。具体要看你的业务场景是怎样的了。
    scys
        3
    scys  
       2017-06-19 10:06:05 +08:00
    并发和长连接是两个概念。
    如果没有弄清楚前,最好考虑的是,10 万左右这种好现实的
    ryd994
        4
    ryd994  
       2017-06-19 10:43:23 +08:00 via Android
    你先实现一个能支撑 1 千并发的然后根据压测再优化
    kkyyyw
        5
    kkyyyw  
    OP
       2017-06-19 10:52:05 +08:00
    @scys 需求是支持 100 万的设备长连接。。并发肯定也是不低的。
    gamexg
        6
    gamexg  
       2017-06-19 11:01:30 +08:00 via Android
    只做过单机 10w 的网关类应用,异步+常规优化就行,不需要什么黑科技。
    百万的话看起来堆机器就行。
    soli
        7
    soli  
       2017-06-19 11:20:59 +08:00
    100W 的话,内存大点就好了。

    不过,我怀疑带宽先达到瓶颈。
    ll3027
        8
    ll3027  
       2017-06-19 11:36:48 +08:00
    物联网需要这么多并发? 100W 还是容易实现的,内存+网络
    AntonChen
        9
    AntonChen  
       2017-06-19 11:37:43 +08:00   1
    HTTP 长连接 200 万尝试及调优方法 http://www.linuxde.net/2011/10/1230.html
    ixiaohei
        10
    ixiaohei  
       2017-06-19 11:50:53 +08:00   1
    100w 现在的框架随便保持了。java 的 netty 可以做,就是修改服务器文件限制数。另外根据 tcp 四元组,一个 ip 和端口最大 64k 链接,你要服务器要加 ip 或者加端口就行。
    ixiaohei
        11
    ixiaohei  
       2017-06-19 11:56:12 +08:00
    不做测试忽视上面 64k 限制。
    sagaxu
        12
    sagaxu  
       2017-06-19 11:59:44 +08:00
    1M 长连接很容易,关键是设备每隔几秒上报一次?
    kkyyyw
        13
    kkyyyw  
    OP
       2017-06-19 12:02:25 +08:00
    @sagaxu 心跳 10 秒一次
    kkyyyw
        14
    kkyyyw  
    OP
       2017-06-19 12:02:58 +08:00
    @ixiaohei 我如果用 mina 框架差别大吗?
    dragonszy
        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
    sagaxu
        16
    sagaxu  
       2017-06-19 12:24:11 +08:00
    @kkyyyw
    10 秒一次,峰值的时候 rps 很可能会超过 30 万,建议使用自定义的二进制协议,http 有点儿重了

    netty 或者 mina 都可以,如果熟悉程度差不多,建议 netty,如果都不熟,可以看看 vertx,或者国产的 t-io
    hanwujibaby
        17
    hanwujibaby  
       2017-06-19 12:28:06 +08:00
    其实长链不是问题,就我们之前的经验看,主要瓶颈和 @soli 说的一样,带宽会事先达到瓶颈。单机的单宽甚至机房的带宽都会导致你的机器规模扩大,而不是仅仅看单机能抗的长链数。
    ixiaohei
        18
    ixiaohei  
       2017-06-19 13:41:32 +08:00 via iPhone
    Mina 也行,建议压测,java nio 模型很费内存
    thomaspaine
        19
    thomaspaine  
       2017-06-19 16:00:04 +08:00
    mqtt 的方案啊,刚开始折腾直接用 yunba 的服务算了
    dozer47528
        20
    dozer47528  
       2017-06-19 16:35:02 +08:00
    我用 netty 做过,前人都把坑踩完了,不难:
    https://www.dozer.cc/2014/12/netty-long-connection.html
    ihuotui
        21
    ihuotui  
       2017-06-19 21:41:54 +08:00 via iPhone
    最重要是怎么处理数据,管理连接和业务处理分离,然后计算好每个处理数据的延时,就轻松可以做到延时低,并发高,吞吐量大的应用。我的处理数据的延时是 10ms 左右,瓶颈在数据库,其实我可以不用数据库的。
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     3174 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 26ms UTC 12:12 PVG 20:12 LAX 05:12 JFK 08:12
    Do have faith in what you're doing.
    ubao snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86