Skip to content
This repository has been archived by the owner on Jul 16, 2024. It is now read-only.

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)

RSocket

Network Protocol

  • Binary: byte stream
  • Async message
  • Multi transports
  • Reactive Semantics

Symmetric interactions

  • request/response
  • request/stream
  • fire-and-forget
  • channel

Transports

  • TCP+TLS
  • WebSocket+TLS
  • UDP(Aeron)
  • RDMA

Polyglot

Clone this wiki locally