V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
kkyyyw
V2EX  ›  互联网

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

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

    如题,物联网项目。工作上需要设计一个能够支持 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   ·   实用小工具   ·   4149 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 38ms · UTC 00:59 · PVG 08:59 · LAX 16:59 · JFK 19:59
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.