V2EX = way to explore
V2EX 是一个关于分享和探索的地方
Sign Up Now
For Existing Member  Sign In
kkyyyw
V2EX  ›  互联网

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

  •  
  •   kkyyyw · Jun 19, 2017 · 7575 views
    This topic created in 3247 days ago, the information mentioned may be changed or developed.

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

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

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

    netty 或者 mina 都可以,如果熟悉程度差不多,建议 netty,如果都不熟,可以看看 vertx,或者国产的 t-io
    hanwujibaby
        17
    hanwujibaby  
       Jun 19, 2017
    其实长链不是问题,就我们之前的经验看,主要瓶颈和 @soli 说的一样,带宽会事先达到瓶颈。单机的单宽甚至机房的带宽都会导致你的机器规模扩大,而不是仅仅看单机能抗的长链数。
    ixiaohei
        18
    ixiaohei  
       Jun 19, 2017 via iPhone
    Mina 也行,建议压测,java nio 模型很费内存
    thomaspaine
        19
    thomaspaine  
       Jun 19, 2017
    mqtt 的方案啊,刚开始折腾直接用 yunba 的服务算了
    dozer47528
        20
    dozer47528  
       Jun 19, 2017
    我用 netty 做过,前人都把坑踩完了,不难:
    https://www.dozer.cc/2014/12/netty-long-connection.html
    ihuotui
        21
    ihuotui  
       Jun 19, 2017 via iPhone
    最重要是怎么处理数据,管理连接和业务处理分离,然后计算好每个处理数据的延时,就轻松可以做到延时低,并发高,吞吐量大的应用。我的处理数据的延时是 10ms 左右,瓶颈在数据库,其实我可以不用数据库的。
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Solana   ·   844 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 73ms · UTC 21:15 · PVG 05:15 · LAX 14:15 · JFK 17:15
    ♥ Do have faith in what you're doing.