技术架构和运行原理
事件中心由两大块组成,一块是针对后端之间的消息推送,另一块是针对前端消息的通讯。后端事件推送主要由 eventBridge 实现管理,前端消息通讯主要由 centrifugoServer 实现管理。
后端事件推送 eventBridge
主要特性是作为系统的消息总线,提供高可靠的事件分发机制,事件的流转过程如图所示:
图例说明:
- eventBridge:该组件是事件流转的重要管理站点,负者解析 trigger 列表,依据 trigger 的定义与 dapr 实时通讯,最后将 pub/sub 通讯转为 http 调用。
- events-client:是事件触发客户端,里面封装了调用事件中心的 api 逻辑。
- trigger 列表:事件的一种定义或描述,里面定义了事件标识 event 和事件流转的目标 target。
- dapr:是消息高可靠、消息队列特性的核心组件,主要使用到 pub/sub。dapr 官方文档 https://docs.dapr.io/zh-hans/concepts/overview/
- dapr sidecar: 伴随着 eventBridge 同生命周期,实时与 eventBridge 组件通讯转发消息
- mqService:是消息中间件,目前支持 redis stream 、kafka、mqtt、nats
详细说明参考《后端事件推送》
前端消息通讯 centrifugoService
主要提供前端消息实时通讯的能力,核心原理即是 websocket 通讯,原理如下图所示:
图例说明
- centrifugo:是底层提供 websocket 通讯的核心模块,它的主要特性是解决高并发大压力问题。centrifugo 官网 https://centrifugal.dev/docs/getting-started/introduction
- centrifugoService:主要提供管理能力,管理权限认证、管理消息通道、提供消息 push 接口。
- wxSubscribe:属于顶层页面组件,为通讯页面开发提供脚手架,和对 event.m 的管理。
- event.m:事件的模型资源,解析该模型资源可得到 centrifugo 通道,进而 wxSubscribe 与 centrifugo 通过该通道建立连接进行 webSocket 通讯。
详细说明参考《前端消息通讯》