oneman 算是物联网项目。
因为接入设备数量比较多,测试期间已经有几千台活跃的客户端设备。
断断续续折腾几个月,走了很多弯路。目前是用的自定义的 tcp 协议。
因为利润非常低,但是设备数量增速很快,测试期间这几千设备用云服务器,算了一下可能会亏...所以想降低服务器费用。
主要有两个功能:1 设备离线检测 2 其他的功能
tcp 实现的。然后用一个入口文件实现了服务器的伪集群。
设备自己走 http 查询 cdn 上的文件检索自己要连接的服务器地址,然后和对应的 tcp 服务器定期发生一个心跳包。 然后实现了离线检测功能。用的 golang+gnet 。但是需要频繁检查 map 里面对应的设备一些配置情况
走的 tcp 短连接,这个频率不高,对服务器 内存和 cpu 开支很小 但是对服务器下行带宽占用多一些。
服务器这边 最大的性能开支,就是带宽开支和 tcp 大量长连接的内存和 cpu 占用。
我自己有三条宽带都有动态公网 ip ,且不在同一个城市。其中一条宽带还有 ups 和发电机,想用这三条宽带做一个高可用性伪集群。不用云服务。
家宽的,下行带宽够大所以带宽开支可以忽略。 然后存在两个问题,请教。1 、是可否用 arm 手机集群 2 、是家宽的 tcp 并发有什么限制吗?
用 手机主板集成机箱 放一堆手机主板 otg 有线网 跑 arm linux 可行吗? 用 x86 的话多出来的硬件开支和电费 是否值得
不是很明白 cpu 不同架构的性能差距,服务器这边除了维持大量 tcp 连接资源,就是需要频繁查询 map,算是 hash 运算,不知道这两个情况下,arm 是否比 x86 更合适。
手机的 cpu 缓存也比较小,但是不知道同性能下功耗和硬件投入是不是都要比 x86 小很多。
没有多少数据需要写硬盘的。
之前测试过 udp,同时收太多包会丢包。不知道 tcp 有没有限制。因为目前手上 x86 路由器太老了性能不够,自己测试的时候连接数多了开发机还没事,路由器 cpu 先 100%了,也没能测出来。
1
artnowben 2023-09-10 22:26:32 +08:00
感觉有一个性能比较高的 TCP 协议栈就可以。
一个高性能的 TCP 协议栈,比 linux kernel 的协议栈的性能可能高百、千、万倍。 例如 dperf 的 TCP 协议栈可以支持几十亿并发。 https://dperf.org/ https://github.com/baidu/dperf |
2
hefish 2023-09-10 22:32:28 +08:00
我觉着还是云服务器+家宽+zerotier/tailscale 。。。也不知道 OP 现在软路由是啥配置,我家里 J4125 + 16G 内存,感觉跑点小业务挺流畅。
|
3
OceanBreeze 2023-09-10 22:35:39 +08:00
@hefish zerotier 这两天我用了一下很卡,提交个打印任务给家里的打印机,要 1 分钟。
|
4
hefish 2023-09-10 22:53:56 +08:00
@OceanBreeze 主要看 ping 值,我移动到电信的话,ping 有 300-600ms ,这个时候肯定是卡顿。 然后我发现电信到电信的话,基本上 ping 是 50ms 以内,这时候就流畅多了。远程桌面都很流畅。
|
5
OceanBreeze 2023-09-10 22:54:48 +08:00
@hefish 哦,我是联通到电信,回头试试用电信到电信。
|
6
wangbin526 2023-09-10 23:30:08 +08:00 via Android 1
不懂你为什么说带宽开支最大,物联网一般都是大并发的小微请求,可以选各家限定总流量的轻量云服务器,便宜很多
如果下行时效不是非常高的话并且数据量不大,没必要保持 TCP 链接,用 go fiber 开 http 服务器,这货特别适合大并发的微小请求,偶独享 2 核+8G 的轻量云能支撑近 50 万传感器定时上传,平均 QPS 2 万+,峰值 5 万+,服务器还挺闲 下行也有时效要求的话就再开个 emqx 走 mqtt ,仅用于发下行消息和订阅离线通知,定时上传还是走 fiber ,emqx 的登录和需要频繁检测的都丢 redis 缓存,这样服务器花不了多少钱 |
7
1423 2023-09-10 23:39:40 +08:00
几千个长连接不算什么压力吧
是不是程序写的不行 |
8
ebi5oowiiy1llo 2023-09-11 00:11:53 +08:00 via Android
手机的主要问题是兼容性问题,系统非常不好搞,想省钱可以找一些 arm 开发板来做,或者淘二手笔记本,性能一般比手机好不少,耗电也较低
另外家宽连接数限制通常是设备跟不上,比如一般家用光猫能抗 2w 左右连接,再多就丢包死机之类的 运营商也有限制,一般比较高,得实际测一测才知道 |
9
yinmin 2023-09-11 00:32:30 +08:00
手机 arm 不行吧,推荐几款 arm 设备,你可以多买几台做个集群:
(1) cm311-1a 机顶盒,70 元/台,4 核 CPU ,能安装 armbian (debian/ubuntu),优点是便宜、省电,缺点是百兆网卡 (2) R2S ,2xx 元/台,4 核 CPU ,能安装 armbian (debian/ubuntu),优点是千兆网卡,缺点是没显示器接口,机器不能挂 再贵些的 arm 就不推荐了,不如 x86 的小盒子,也很省电。 关于家宽的 tcp 并发,这个涉及做 NAT 转换设备的性能。你要改成桥接模式,然后自己的路由器拨号,软路由的性能是比较强劲的,并发几千不是问题。 |
10
cdlnls 2023-09-11 00:46:41 +08:00
之前有搭建过 mqtt 的服务,50 万个设备同时连接,带宽占用也才几 M 。
现在几千台活跃设备,使用什么云服务器,价格大概多少呢?我感觉如果用云的话,服务器成本应该不会太高。 |
11
mayli 2023-09-11 09:29:14 +08:00
感觉是软解轮子不行 想用一个不好用的硬件抗?
|
12
150530 2023-09-11 10:41:20 +08:00
@yinmin 可以考虑 rk3399 的板子,比 R2S 的 rk3328 性能好(差不多翻倍),4+32 的黄鱼一百二三左右,基本都是千兆且带 hdmi
|
13
lengrongec 2023-09-11 11:49:09 +08:00
可以搞个垃圾玩客云刷机 armLinux 先做做测试
|
14
ggvm 2023-09-11 12:03:31 +08:00
感觉评论都说到点子上了。
个人认为家宽的稳定性存在问题,用云服务起码可以保证服务的稳定性,调试和维护也方便。如果嫌国内云服务费太贵,可以考虑一些性价比高的 包年服务云主机。 |
15
joyanhui OP @ebi5oowiiy1llo 请教,桥接的情况下,一般的光猫可以吗? 2w 的连接的不太够用。光猫不太好换。
|
18
joyanhui OP @hefish 这... 我有公网 ip 而且是面向外网的服务。 目前的需求和 zerotier/tailscale 没有关系。
|
19
joyanhui OP @wangbin526 场景不太一样。我正文里面有描述。我需要维持长连接,频繁短连接测试过性能开支更大。
gofiber 记得基于 fasthttp 的吧? 测试过 fasthttp 性能只有 gnet http 的 20%左右。应该比 tcp 更低了,。定时数据上报我这边带宽占用的比较多,数据量不低。部分走的自定义 tcp 数据量比较大的时候会设备端会 zlib 压缩后上报 也只能节省有限的带宽。 http 和 mqtt 上层协议是我前面几个月走过的弯路,中间测试过使用类似 coap 的自定义 udp 因为高峰期丢包太多的问题也放弃了。目前是设备段是优先 udp,udp 丢包率太高的时候会切换到 tcp 。 |
20
joyanhui OP @yinmin 感谢,但是我搜了一下 cm311-1a R2S 的主频核心数 二级缓存和内存频率 都低于 比较常见的可以刷 armdian 的手机主板,价格好像没有太大优势。
几千的并发只是目前 小范围测试的情况下,上线后不止这个数量。 |
21
ebi5oowiiy1llo 2023-09-17 01:23:11 +08:00 via Android
@joyanhui 桥接拨号后就不受光猫性能限制了
|
22
joyanhui OP @ebi5oowiiy1llo 非常感谢
|