V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
joyanhui
V2EX  ›  程序员

请教懂 arm 和家庭宽带的大佬,自建 tcp 服务器集群 用手机主板的可性能

  •  
  •   joyanhui · 231 天前 · 1850 次点击
    这是一个创建于 231 天前的主题,其中的信息可能已经有所发展或是发生改变。

    oneman 算是物联网项目。
    因为接入设备数量比较多,测试期间已经有几千台活跃的客户端设备。 断断续续折腾几个月,走了很多弯路。目前是用的自定义的 tcp 协议。
    因为利润非常低,但是设备数量增速很快,测试期间这几千设备用云服务器,算了一下可能会亏...所以想降低服务器费用。

    主要有两个功能:1 设备离线检测 2 其他的功能

    离线检测功能

    tcp 实现的。然后用一个入口文件实现了服务器的伪集群。
    设备自己走 http 查询 cdn 上的文件检索自己要连接的服务器地址,然后和对应的 tcp 服务器定期发生一个心跳包。 然后实现了离线检测功能。用的 golang+gnet 。但是需要频繁检查 map 里面对应的设备一些配置情况

    其他的功能

    走的 tcp 短连接,这个频率不高,对服务器 内存和 cpu 开支很小 但是对服务器下行带宽占用多一些。

    服务器这边 最大的性能开支,就是带宽开支和 tcp 大量长连接的内存和 cpu 占用。

    家庭宽带

    我自己有三条宽带都有动态公网 ip ,且不在同一个城市。其中一条宽带还有 ups 和发电机,想用这三条宽带做一个高可用性伪集群。不用云服务。

    家宽的,下行带宽够大所以带宽开支可以忽略。 然后存在两个问题,请教。1 、是可否用 arm 手机集群 2 、是家宽的 tcp 并发有什么限制吗?

    可否用 arm 手机主板做服务器集群

    用 手机主板集成机箱 放一堆手机主板 otg 有线网 跑 arm linux 可行吗? 用 x86 的话多出来的硬件开支和电费 是否值得

    不是很明白 cpu 不同架构的性能差距,服务器这边除了维持大量 tcp 连接资源,就是需要频繁查询 map,算是 hash 运算,不知道这两个情况下,arm 是否比 x86 更合适。
    手机的 cpu 缓存也比较小,但是不知道同性能下功耗和硬件投入是不是都要比 x86 小很多。

    没有多少数据需要写硬盘的。

    家宽的 tcp 并发数量

    之前测试过 udp,同时收太多包会丢包。不知道 tcp 有没有限制。因为目前手上 x86 路由器太老了性能不够,自己测试的时候连接数多了开发机还没事,路由器 cpu 先 100%了,也没能测出来。

    第 1 条附言  ·  228 天前
    感谢各位,最后自己实际测试了一下。

    换了一个 8 核 64G 的软件路由 临时测试了一下家宽的并发数上限,4 万左右,山东电信。超过 后无法再建立新的 tcp 连接。

    准备只把部分功能当到家宽里面。


    不选择 arm 的那些盒子和开发板 是因为内存太小,并发上来后内存占用很大,因为运算比较简单,cpu 占用不高,但是内存成为瓶颈。

    最后也找了一个 骁龙 835+6G ( 200 元左右)的手机 实际测试自己的场景下,手机确实比 x86 更合适自己的场景,性能和功耗 都适合。
    artnowben
        1
    artnowben  
       231 天前
    感觉有一个性能比较高的 TCP 协议栈就可以。
    一个高性能的 TCP 协议栈,比 linux kernel 的协议栈的性能可能高百、千、万倍。
    例如 dperf 的 TCP 协议栈可以支持几十亿并发。
    https://dperf.org/
    https://github.com/baidu/dperf
    hefish
        2
    hefish  
       231 天前
    我觉着还是云服务器+家宽+zerotier/tailscale 。。。也不知道 OP 现在软路由是啥配置,我家里 J4125 + 16G 内存,感觉跑点小业务挺流畅。
    OceanBreeze
        3
    OceanBreeze  
       231 天前
    @hefish zerotier 这两天我用了一下很卡,提交个打印任务给家里的打印机,要 1 分钟。
    hefish
        4
    hefish  
       231 天前
    @OceanBreeze 主要看 ping 值,我移动到电信的话,ping 有 300-600ms ,这个时候肯定是卡顿。 然后我发现电信到电信的话,基本上 ping 是 50ms 以内,这时候就流畅多了。远程桌面都很流畅。
    OceanBreeze
        5
    OceanBreeze  
       231 天前
    @hefish 哦,我是联通到电信,回头试试用电信到电信。
    wangbin526
        6
    wangbin526  
       231 天前 via Android   ❤️ 1
    不懂你为什么说带宽开支最大,物联网一般都是大并发的小微请求,可以选各家限定总流量的轻量云服务器,便宜很多
    如果下行时效不是非常高的话并且数据量不大,没必要保持 TCP 链接,用 go fiber 开 http 服务器,这货特别适合大并发的微小请求,偶独享 2 核+8G 的轻量云能支撑近 50 万传感器定时上传,平均 QPS 2 万+,峰值 5 万+,服务器还挺闲
    下行也有时效要求的话就再开个 emqx 走 mqtt ,仅用于发下行消息和订阅离线通知,定时上传还是走 fiber ,emqx 的登录和需要频繁检测的都丢 redis 缓存,这样服务器花不了多少钱
    1423
        7
    1423  
       231 天前
    几千个长连接不算什么压力吧
    是不是程序写的不行
    ebi5oowiiy1llo
        8
    ebi5oowiiy1llo  
       231 天前 via Android
    手机的主要问题是兼容性问题,系统非常不好搞,想省钱可以找一些 arm 开发板来做,或者淘二手笔记本,性能一般比手机好不少,耗电也较低
    另外家宽连接数限制通常是设备跟不上,比如一般家用光猫能抗 2w 左右连接,再多就丢包死机之类的
    运营商也有限制,一般比较高,得实际测一测才知道
    yinmin
        9
    yinmin  
       231 天前
    手机 arm 不行吧,推荐几款 arm 设备,你可以多买几台做个集群:
    (1) cm311-1a 机顶盒,70 元/台,4 核 CPU ,能安装 armbian (debian/ubuntu),优点是便宜、省电,缺点是百兆网卡
    (2) R2S ,2xx 元/台,4 核 CPU ,能安装 armbian (debian/ubuntu),优点是千兆网卡,缺点是没显示器接口,机器不能挂

    再贵些的 arm 就不推荐了,不如 x86 的小盒子,也很省电。

    关于家宽的 tcp 并发,这个涉及做 NAT 转换设备的性能。你要改成桥接模式,然后自己的路由器拨号,软路由的性能是比较强劲的,并发几千不是问题。
    cdlnls
        10
    cdlnls  
       231 天前
    之前有搭建过 mqtt 的服务,50 万个设备同时连接,带宽占用也才几 M 。
    现在几千台活跃设备,使用什么云服务器,价格大概多少呢?我感觉如果用云的话,服务器成本应该不会太高。
    mayli
        11
    mayli  
       231 天前
    感觉是软解轮子不行 想用一个不好用的硬件抗?
    150530
        12
    150530  
       231 天前
    @yinmin 可以考虑 rk3399 的板子,比 R2S 的 rk3328 性能好(差不多翻倍),4+32 的黄鱼一百二三左右,基本都是千兆且带 hdmi
    lengrongec
        13
    lengrongec  
       231 天前
    可以搞个垃圾玩客云刷机 armLinux 先做做测试
    ggvm
        14
    ggvm  
       231 天前
    感觉评论都说到点子上了。

    个人认为家宽的稳定性存在问题,用云服务起码可以保证服务的稳定性,调试和维护也方便。如果嫌国内云服务费太贵,可以考虑一些性价比高的 包年服务云主机。
    joyanhui
        15
    joyanhui  
    OP
       228 天前
    @ebi5oowiiy1llo 请教,桥接的情况下,一般的光猫可以吗? 2w 的连接的不太够用。光猫不太好换。
    joyanhui
        16
    joyanhui  
    OP
       228 天前
    @cdlnls 主要还是数据上报频率和数据量,只是空的 mqtt 连接的话 可以接近 0 带宽了。 场景不同。
    joyanhui
        17
    joyanhui  
    OP
       228 天前
    @artnowben 非常感谢!!
    joyanhui
        18
    joyanhui  
    OP
       228 天前
    @hefish 这... 我有公网 ip 而且是面向外网的服务。 目前的需求和 zerotier/tailscale 没有关系。
    joyanhui
        19
    joyanhui  
    OP
       228 天前
    @wangbin526 场景不太一样。我正文里面有描述。我需要维持长连接,频繁短连接测试过性能开支更大。
    gofiber 记得基于 fasthttp 的吧? 测试过 fasthttp 性能只有 gnet http 的 20%左右。应该比 tcp 更低了,。定时数据上报我这边带宽占用的比较多,数据量不低。部分走的自定义 tcp 数据量比较大的时候会设备端会 zlib 压缩后上报 也只能节省有限的带宽。
    http 和 mqtt 上层协议是我前面几个月走过的弯路,中间测试过使用类似 coap 的自定义 udp 因为高峰期丢包太多的问题也放弃了。目前是设备段是优先 udp,udp 丢包率太高的时候会切换到 tcp 。
    joyanhui
        20
    joyanhui  
    OP
       228 天前
    @yinmin 感谢,但是我搜了一下 cm311-1a R2S 的主频核心数 二级缓存和内存频率 都低于 比较常见的可以刷 armdian 的手机主板,价格好像没有太大优势。
    几千的并发只是目前 小范围测试的情况下,上线后不止这个数量。
    ebi5oowiiy1llo
        21
    ebi5oowiiy1llo  
       225 天前 via Android
    @joyanhui 桥接拨号后就不受光猫性能限制了
    joyanhui
        22
    joyanhui  
    OP
       221 天前
    @ebi5oowiiy1llo 非常感谢
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   5855 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 41ms · UTC 06:23 · PVG 14:23 · LAX 23:23 · JFK 02:23
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.