This repository has been archived by the owner on Jul 16, 2024. It is now read-only.
-
Notifications
You must be signed in to change notification settings - Fork 167
RSocket IoT
linux_china edited this page May 6, 2020
·
2 revisions
RSocket和IoT整合是有一些特殊的因素,主要是因为以下因素:
- IoT设备无法根据目前的集群拓扑结构和集群中所有的broker创建连接,要维护多个连接、要处理load balance等,这个成本太高。
- 有反向单向单点通讯的需求,也就是应用要给特定的IoT设备发送消息
基于上述的一些特殊情况,相应的架构可能需要进行一些调整,如下:
- 每一个IoT设备使用独占的JWT Token,每一个token的ID是唯一标识的,该token ID可以作为以后的该IoT设备的连接ID
- IoT设备会根据broker列表使用一致性Hash算法和集群列表中的某一Broker创立连接
- IoT设备连接到Broker后,连接的标识使用Token ID进行确认,单个Broker上的重复多个连接都无效。
- 如果应用要给该设备发送消息,根据一致性Hash算法选择特定的broker,然后将endpoint调整为id:xxxx就可以,RSocket Broker有针对endpoint为id:xxx进行优化。
其他可靠性考量:
- 一直hash算法不需要IoT客户端进行计算,在RSocket Broker进行集群列表推送时就会指定一个默认的连接,如果默认连接不可用,可以考虑连接下一个。这样做的好处broker可以更好地控制路由,如就近连接等。
- 可靠性考虑: 可能会出现IoT和非期望的broker创建连接,可以考虑使用集中式的Redis保存IoT设备连接ID和Broker IP的映射关系。如果一致性hash路由失败,Broker会从Redis中再查一次映射关系,然后进行请求转发。
- 如果非常重视消息的投递可靠性,如设备突然离线等,可以考虑持久化存储的支持,在设备连接上broker后,会将持久化的消息再次发送。
当前的进展:
- 一致性hash算法完成
- 集群列表推送已经包含默认推荐的连接地址(todo)
- Binary: byte stream
- Async message
- Multi transports
- Reactive Semantics
- request/response
- request/stream
- fire-and-forget
- channel
- TCP+TLS
- WebSocket+TLS
- UDP(Aeron)
- RDMA