TCP 网关背景和技术选择
最编程
2024-04-06 07:39:25
...
项目背景
物联网项目,硬件端通过TCP协议连接服务端,自行设计的通信协议(没有走通用的如MQTT等协议),所以需要一层网关,来负责服务端和业务端的通信。(注:此项目是2020年上半年开始计划重构)
网关需求
- 负责和设备端建立TCP连接,充当业务端和设备端的通信桥梁
- 支持并高发(当前设备数3W左右,单向下发的消息500条/秒,目标是可支持到50W+,单向下发支持到2W+条/秒)
- 限流,熔断,IP黑名单
- 通信协议解析
- WEB端接口(后台可强行设备断开连接等)
技术选型
PHP
- 优势
- 我们团队的技术栈是以PHP为主,目前业务端采用的框架是swoft2(关于swoft的问题,也可以私我,也经常在swoft群里,欢迎一起来吹水)
- swoole直接撸,成功案例还是多的,写起来也不陌生
- 不足
- swoole版本升级的有点快,文档略不足,前人踩过的坑相对比较多,有点慌
JAVA
- 优势
- 完整的体系,拿起来就能用(netty等)
- 不足
- 非java体系出身,怕遇到坑
- 似乎java的理念就并非小而美,而是完整的工程学
GOLANG
- 优势
- 有个好爹,网络开发利器,官方文档丰富,内置功能丰富
- 小而美的代表
- 不足
- 简单易用的三方框架少
经过对比,最终选择了网络开发的C语言--golang
也没有选择golang的三方包,主要是核心功能并不是特别复杂,官方提供的包足够应付。再者,要对三方包很熟悉,否则一出问题,无法在短时间内解决,对项目而言,是巨大的风险。
解答疑惑
-
为什么是选择TCP协议,而不是UDP协议?
答:tcp是安全可靠的面向连接双工通信的协议,硬件端和服务端的通信,正好需要这些功能。而udp协议虽然简单,但是不适合在这样的场景下(如:udp适合dns的时候使用)
-
为什么选择直连TCP,而没有选择如MQTT等通用协议?
答:这是个历史遗留问题,最开始硬件端设计的时候,就是只考虑了TCP直连,且我们自定义了一套效率较高的通信协议。MQTT等协议,底层也是基于TCP协议,无外乎就是提供了类似队列的一种通信机制,中间多了很多过程,而我们追求的是更快速的响应,所以选择TCP直连,其他的都自己来撸。
上一篇: 阿里的神器 Seata 实现了 TCC 模式来解决分布式事务!
下一篇: 从实用角度看单例和工厂模式
推荐阅读
-
PaaS 关键技术要点和难点,如何选择和实施?
-
说明 css3:核心技术和案例分析2.8 结构伪类选择器
-
生成人工智能体:交互式模拟人类行为 论文和源代码 架构分析(2) - 架构分析 - 核心理念与环境建设和技术选择 - 4.
-
商用密码产品认证--IPSec/SSL 网关技术和产品
-
谈API网关和应用网关--从技术选型谈起:API网关的性能是第一指标,一般会选择Kong、Apisix等基于OpenResty+Lua的高性能网关(得益于Ngnix基于C++的高性能无阻塞网络IO模型),应用网关一般是结合自身业务的技术栈来选择,比如SpringCloud Gateway、Zuul等。当然,这也不是绝对的,如果你对 Kong 非常熟悉,用它来做应用网关也不是不可能。 一些开源网关项目的例子: Kong Apisix 特使 Traefik SpringCloud 网关 Zuul / Zuul2 接下来,我们将重点介绍应用网关。在网格中,应用网关侧重于以下功能(与 API 网关不同) 动态路由 服务发现 服务聚合/协调 可观察性 如果您使用的是 Sping 技术栈,使用 SpringCloud Gateway 和 Zuul 可以轻松重用现有类库,如集成您的注册表,使用 Hystrix、resilience4j 完成熔断和限流功能等,快速完成一个生产级可用应用网关,如果引入新的复杂技术栈 成本将直线上升。根据使用场景的不同,性能有时并不是第一指标,但通常我们很容易陷入性能误区。
-
NL2SQL技术解决方案系列(1):NL2API、NL2SQL 技术路径选择;LLM 选择和及时工程提示,揭示优化项目落地之道
-
Kafka 高可用性之谜:深入剖析其架构原理和关键技术--副本数量与分布:适当增加副本数量可以提高容错能力,但会增加网络开销和存储成本。合理分配副本,保证副本在不同Broker上尽可能分散,可以降低单点故障的影响。 数据复制策略:Kafka 支持同步复制(在响应客户端之前同步 ISR 中的所有副本)和异步复制(响应客户端后异步复制到其他副本)。同步复制提供更强的数据一致性,但会牺牲写性能;异步复制则相反。根据业务对一致性和性能的需求,选择合适的复制策略。 监控和报警:实时监控代理、分区和复制状态,设置阈值警报,及时发现并处理异常情况,是保证高可用性的必要条件。 V.总结
-
关于摄影技术和器材的选择,读这篇文章就够了
-
TCP 网关背景和技术选择
-
在线培训系统(源代码 + mysql + 文档)--选择该系统的背景和意义