概述
owt 整体基于微服务的架构思想,每个服务节点可以单独部署,多点部署
ClusterManager - 注册中心
每个运行的节点都会发送 RPC join 注册,并记录在注册中心。其他节点会发送 RPC schedule 到 ClusterManager 查询可用节点。
ClusterManager 本身使用选举机制来实现高可用,ClusterManger 本身也集成了资源调度的功能,其他节点使用指定的策略来进行调度。
OWT 并没有使用配置中心,每个节点都是用 TOML 文件来进行配置。
(refs: https://en.wikipedia.org/wiki/Leader_election - 选举机制)
(refs: https://github.com/open-webrtc-toolkit/owt-server/blob/8a166cc998341ee7a590d8683dfafdfe3d6e0d5f/source/cluster_manager/strategy.js#L72 - 调度策略)
(refs: https://github.com/open-webrtc-toolkit/owt-server/blob/8a166cc998341ee7a590d8683dfafdfe3d6e0d5f/source/common/clusterWorker.js#L249 - 注册)
(refs: https://github.com/open-webrtc-toolkit/owt-server/blob/8a166cc998341ee7a590d8683dfafdfe3d6e0d5f/source/agent/conference/rpcRequest.js#L15 - RPC schedule 获取可用节点)
RPC and InternalIO - 服务间通讯
OWT 的节点间通过使用 RabbitMQ 构建的 RPC 服务进行互相调用,媒体数据通过 InternalIO 来进行互相传输。
(refs: https://github.com/open-webrtc-toolkit/owt-server/blob/8a166cc998341ee7a590d8683dfafdfe3d6e0d5f/source/common/makeRPC.js#L8 - RPC 调用)
(refs: https://github.com/open-webrtc-toolkit/owt-server/blob/8a166cc998341ee7a590d8683dfafdfe3d6e0d5f/source/core/owt_base/InternalOut.cpp#L46 - InternalIO 发送数据)