0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

聚焦 | 高并发场景下分布式实时信令系统的架构实践

BYXG_shengwang 来源:YXQ 2019-06-20 17:00 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

在5 月 27 日举行的 Qcon 广州站上,声网 Agora 资深技术架构师吉奇 以《高并发场景下分布式实时信令系统的架构实践》作为话题,分享了 RTM SDK 背后的架构设计经验。

以下为演讲实录:

大家好!我叫吉奇,来自声网。现在负责声网RTM 实时信令云服务后台及SDK技术架构设计。这次演讲会按照RTM的系统架构上的分布或子系统的层级关系来展开。

首先,RTM 是一个通用的消息系统,主要是为了解决实时场景下信令的低延迟和高并发问题。我们声网是业务遍布全球的平台,因此在所有的后台设计中,把分区作为一个比较重要的事情来看。目前 RTM 有几个大区域,有美洲、亚洲、东南亚、中国大陆,还有欧洲、非洲几个大区。区与区之间相对独立,每个区会有跨区传输网络。每个区之间由三个子系统组成,首先是消息核心(Message Core),还有事件中心(Event Center),最后是应用服务(Application Services)。我会分别讲一下各个子系统内部的架构实现,即消息核心、事件中心、应用服务和跨区网络。

消息核心(Message Core)

首先是消息核心,它是目前成熟度最高,也是最复杂的子系统。在该系统里面有几个主要的组件,首先有接入服务器、点对点消息转发服务、频道消息的转发服务、简单的状态管理(包括用户状态和频道状态),还有频道分布状态服务器。

在消息核心,所有的服务都是分布式,没有一个单点或者中心式的情况,因此可以保证高可用,并且性能方面可以支持高吞吐量和低延迟Messaging Core 有一个特点,具有非常大的扩展性,但是它的问题是只支持基本核心的功能,剩下的都要放在其它子系统中。

分布式的信息核心有几个优势特性:

•完全排除单点故障

•接近100%可用

•端到端延迟 < 100ms

•任何节点都可水平扩展

•支持数百万人同频道(无理论上限)

•大型活动中支持数百万QPS消息下发

•核心功能超高响应

所谓核心功能,目前消息核心支持的功能是点对点消息、频道消息,可以加入频道、退出频道。用户也可以同时加入多个频道,使用一些频道管理的功能,比如获取用户属性、频道状态,能查询频道中有多少人,其他用户是否在线等基本功能。

在此,以点对点消息为例,和大家分享一下扩展性是怎么样做的。首先 SDK 登录系统的时候,会通过 DNS 来访问我们的 AP 服务,AP 知道附近的边缘节点 R 的地址,会根据当前的客户端的地理分布,包括边缘节点的负载情况来给 SDK 回一组地址。SDK 在拿到地址之后,可以登录连接边缘节点,然后发消息。这些消息到达边缘节点后会投递给本区的点对点消息转发节点 F。F 知道本区内所有用户登录在哪个边缘节点,这是由本区所有边缘节点 R 上报给转发节点 F 的。图中的 U 是用户在线状态服务器,那么一个用户给另外的用户发消息,有三种情况,第一种情况,对端在线并且在同一个区里面,F 可以直接投递;第二种情况对端在线但在别的区里面;第三种情况对端不在线。在后两种情况中,消息转发服务器 F 不知道该用户的信息,也不知道在哪个节点上。这时候就可以通过 U 来获取这些用户状态,因为 U 知道全网跨区情况下的用户生命周期,也知道这个用户是否在线,F 去问 U 是否在线,如果在线在哪个区里面,可以通过跨区投入到别的用户。

这里的可扩展体现在哪里呢?首先,所有的节点都是可以水平扩展的,随着业务量增长,可以增加部署。边缘节点是可以随意增加的,而核心节点 F 和 U 不能做任意的水平扩展,因为他们保留了一定的状态,我们用了一个一致性哈希的分片方法,所以把所有用户的账号哈希之后产生一个 32 位的随机数,想象把这些数放到一个环上,每个服务器各自产生一组随机数,在环上均匀分布。这样所有的消息会被映射到比自己的哈希值小的那一个服务器上面。所有的节点的 partition 都是可以动态地增加和减少的。假如说有一个核心服务器故障或者下架了,那么它可以重新分布到别的服务器上,实际上我们地消息核心中除了边缘节点R之外还有十几种核心节点,它们都是做了分片的。这就是所谓的可扩展性。

高可用怎么样做呢?首先如上图所示介绍一下频道消息简单的流程。假定边缘服务器收到用户的频道消息,会把该消息投递给 F,F 是点对点消息的转发服务器,它看到是频道消息的话会自动抛给 D,D 专门负责频道消息分发,D 采用是级联的模式,每一个区都有一组总的频道消息分发服务器,在每个数据中心会有一组机房级别的代理。区域级根服务器发消息到机房级别的代理服务器,机房级服务器往该机房所有的边缘节点 R 转发,这样可以保证在超大频道下面的性能。现在有一个问题,之前我说了 U 是保存用户的生命周期的,而频道的生命周期与用户不一样,频道不是一个特定的个体。比如说用户要么在中国或美国,不可能同时在中国和美国,但频道可以。尤其当频道比较大的时候,分布会非常广,很有可能是跨区频道,甚至在中国、美国、欧洲都有用户处于同一频道。那么你该怎样获取某频道的用户分布呢?我们用频道分布服务器 O 来处理。所有的 R 都会在本地频道创建、销毁的时候,把该事件通知给 O。O 把频道分布的信息告诉频道消息转发服务 D,D 会从中获得两个信息,第一个信息是对于某频道来说,在本区内该频道的用户分布在哪几个边缘服务器上,第二个信息是可以知道该频道是否跨区,如果跨区的话,又是哪几个区域。D 通过第一个信息可以判断在本区投递给哪些用户,通过第二信息可以知道需要通过跨区传输网络投递给哪些别的区域的 D,让它们在别的区域来负责下发。

在这里高可用主要体现在 O 是对等部署的。我们每一条消息或者每一次状态改变或者每一个查询请求都会有一个全局唯一的 ID,这个 ID 由两部分组成,第一部分保证其唯一性,第二部分保证在某一个 session 之内前后的请求有一个单调递增的大小关系。这样的话,从多台对等部署的 O 同步给 D 的频道分布信息,就相当于要保证一个单一来源但多路径的信息同步的一致性问题,我们是可以通过这个 ID 来做到版本控制和除重从而保证一致的。当然对等部署只是其中一个手段,还有很多别的模式用到不同的服务上面,比如事件中心的高可用就是由双数据中心主备切换来保证的。但消息核心中的服务一般都是采用的比较激进的对等部署的方式,这样的好处是任何一个服务器挂了都不会有切换的事件,保证服务 100% 可用。

事件中心(Event Center)

Messaging Core 下面是 Event Center。就像我在开头说到的,Messaging Core 有一个限制,它是靠多重冗余和相对激进的策略来保证低延迟和高可靠的系统,因此很多扩展的功能没有办法做,所以会通过 Event Center 来支持这些扩展功能。

举个例子,比如用户属性是在消息核心中完成的,而频道属性在消息核心中就做不了。因为频道属性和用户属性不一样的地方在于,对于某一个用户,他的用户属性只有他自己能够编辑,他是该属性的主人,由该用户的客户端来保证属性的一致性。所以就算在服务端有多重冗余的情况下,该属性也可以达到最终一致。但频道属性不同。频道里可能同时有多个人在同时编辑频道属性,也可能同时有多个人在读该属性,怎样达到一致性?这里就需要对频道消息的编辑操作有一个统一的来源。但这个来源又不能是单点,否则很容易出故障也很容易成为瓶颈。

因此我们决定将所有的事件,包括状态改变、消息的投递都统一写到 Event Center 里面。Event Center 分为两个部分,Event Storage 和 Event Queue。我们的实现原则是传输与状态隔离,数据与索引隔离。传输是 Messaging Core 和跨区传输网络来负责,状态是存在 Event Center,而 Application Services 是消费的状态,这样可以做到传输与状态的隔离。

那什么叫数据与索引隔离呢?对于所有的事件来说我们都会把它的 meta data,或者叫事件的 header 放到 Event Queue 里,这样消费者去消费事件队列的话就会很快,而事件的内容本身则放在 Event Storage。我之前说过对于 RTM 的所有消息、事件、查询都有一个ID,这样的话就能建立一个事件 Header - 事件ID - 事件Body 之间的映射。消费者可以通过 Event Queue 建立对事件 Header 的索引,通过这个索引来做各种业务逻辑,然后再通过 ID 来找到对应的事件 Body。比如对于历史消息的条件查询就是这么做的。在这种模式下我们可以做到比如查询当前在线的所有用户里属性属性满足 "gender:female","age:24" 的用户。

应用服务(Application Services)

Application Services 是一个微服务的架构,在 Event Center 的支持下可以支持很多的业务逻辑。还包括实时的监控、计费、问题调查、分析等。它的好处是易于开发,我们通过 Event Center 把传输和事件解耦了,让我们可以更容易地实现更多的功能。目前已经落地的功能包括频道属性和历史消息,还有很多其他的功能在开发中。

下面讲一下跨区传输网络,它负责所有区域到区域之间的通信。我们有去中心化地实时路由计算策略,会根据延迟和负载来动态挑选跨区路由。实际上你发现在很多场景下面,跨境传输是最难的问题,尤其是在教育场景下。例如,老师在东南亚某个地方,学生在国内,他们之间建立连接、收发一些消息的过程中,稳定性和到达率会遇到很多问题。声网全球有 200 多个数据中心,我们通过智能路由来进行实时传输,比如中国到菲律宾,当前网络不好的时候,我们可能会通过新加坡进行中转,如果新加坡到菲律宾好但是到国内不好,我们会也许会通过国内某个机房先中转到新加坡。RTM SDK 今年上线后,从运营数据来看高峰期的跨洋平均 RTT 是 250ms,该数据已经比较接近实际网络传输延迟。

如上图所示是简化版的跨区传输网络,这个算法有点类似于 BGP 算法。自治域与自治域之间全连接,每个节点都有自己的路由表,每个节点会定期广播自己的路由表到别的节点。比如 A 知道到自己到 B、C、D 的延迟是多少,一轮广播之后 B、C、D 就会知道自己如果通过 A,到其他节点的延迟会有多少。各节点会选择延时较短的路线传输。当然,实际策略肯定不会这么简单,因为如果所有节点都采用相同策略,流量可能会汇集到某一些节点上去,在流量高峰期时会对这些节点造成冲击。因此我们有一套很复杂的策略来进行负载均衡。

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 信令
    +关注

    关注

    0

    文章

    41

    浏览量

    14392
  • 架构
    +关注

    关注

    1

    文章

    533

    浏览量

    26506

原文标题:高并发场景下分布式实时信令系统的架构实践

文章出处:【微信号:shengwang-agora,微信公众号:声网Agora】欢迎添加关注!文章转载请注明出处。

收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    怕故障?怕扩展难?分布式可视化控制:给足场景安全

    在数字化浪潮席卷各行各业的今天,指挥中心的实时调度、会议中心的高效协同、培训中心的沉浸展示、调度中心的精准响应 —— 这些场景都离不开一套 “稳、全、灵、清” 的音视频通信与数据处理系统
    的头像 发表于 11-09 17:27 377次阅读

    从 “单一控制” 到 “智能可视”:分布式系统与传统音视频控制系统的关键区别

    和通信。而传统的音视频控制系统通常采用集中式架构,将所有的音视频处理、数据通信等功能集中在一台服务器上进行处理。 2.灵活性:分布式可视化控制系统由于采用了
    的头像 发表于 10-21 10:52 234次阅读

    分布式光伏环境监测站的技术架构与应用实践

    分布式光伏环境监测站的技术架构与应用实践 柏峰【BF-GFQX】一、系统技术架构解析 分布式光伏
    的头像 发表于 10-13 10:05 254次阅读
    <b class='flag-5'>分布式</b>光伏环境监测站的技术<b class='flag-5'>架构</b>与应用<b class='flag-5'>实践</b>

    国际标准在分布式能源并网场景中的应用现状和发展趋势是怎样的?

    国际标准在分布式能源并网场景中的应用现状呈现 技术成熟度、跨区域渗透加速、多场景融合深化 的特点,而发展趋势则聚焦 标准动态更新、技术跨界
    的头像 发表于 09-18 17:43 768次阅读
    国际标准在<b class='flag-5'>分布式</b>能源并网<b class='flag-5'>场景</b>中的应用现状和发展趋势是怎样的?

    光伏监控案例分享!奉贤平食品4.4MW分布式光伏电站:实时监控+智能运维

    摘 要:在“双碳”和新型电力系统建设背景分布式光伏接入比例不断提高,对配电网电压、调度运行及调峰等环节造成强烈冲击。本文设计包含平台层、设备层二层架构体系的
    的头像 发表于 09-01 17:49 1256次阅读
    光伏监控案例分享!奉贤平<b class='flag-5'>高</b>食品4.4MW<b class='flag-5'>分布式</b>光伏电站:<b class='flag-5'>实时</b>监控+智能运维

    【节能学院】Acrel-1000DP分布式光伏监控系统在奉贤平食品 4.4MW 分布式光伏中应用

    摘要:在“双碳”和新型电力系统建设背景分布式光伏接入比例不断提高,对配电网电压、调度运行及调峰等环节造成强烈冲击。本文设计包含平台层、设备层二层架构体系的
    的头像 发表于 08-23 08:04 3306次阅读
    【节能学院】Acrel-1000DP<b class='flag-5'>分布式</b>光伏监控<b class='flag-5'>系统</b>在奉贤平<b class='flag-5'>高</b>食品 4.4MW <b class='flag-5'>分布式</b>光伏中应用

    分布式光伏发电监测系统技术方案

    分布式光伏发电监测系统技术方案 柏峰【BF-GFQX】一、系统目标 :分布式光伏发电监测系统旨在通过智能化的监测手段,实现对
    的头像 发表于 08-22 10:51 2888次阅读
    <b class='flag-5'>分布式</b>光伏发电监测<b class='flag-5'>系统</b>技术方案

    Ceph分布式存储系统解析

    在当今数据爆炸的时代,企业对存储系统的需求日益增长,传统的集中式存储已经无法满足大规模数据处理的要求。分布式存储系统应运而生,而Ceph作为开源分布式存储
    的头像 发表于 07-14 11:15 714次阅读

    电力系统分布式故障实时定位技术——精准抗干扰快速响应

    在电力系统中,分布式故障的快速定位与隔离对保障电网稳定运行至关重要。传统的故障检测方法受限于干扰强、定位延迟的问题,难以满足现代智能电网的高可靠性需求。我们的分布式故障
    的头像 发表于 07-11 10:43 398次阅读
    电力<b class='flag-5'>系统分布式</b>故障<b class='flag-5'>实时</b>定位技术——精准抗干扰快速响应

    分布式光伏发电监控系统

    、低压并网分布式光伏电站的升压系统、光伏逆变器等设备进行全面监控,采集微机保护装置、自动控制设备、电能质量监测装置、光伏逆变器、一体化电源等设备数据,并提供有功功率控制(AGC)、电压无功综合
    的头像 发表于 06-25 13:41 593次阅读
    <b class='flag-5'>分布式</b>光伏发电监控<b class='flag-5'>系统</b>

    多通道电源管理芯片在分布式能源系统中的优化策略

    理、可靠性设计以及系统集成为主轴展开分析,为分布式能源系统效能提升提供坚实理论基石与创新实践路径。 关键词: 多通道电源管理芯片;分布式能源
    的头像 发表于 05-16 15:22 619次阅读

    从监控到落地:分布式光伏系统方案及多元场景应用指南

    安科瑞+18721098782 分布式光伏监控系统方案 1. 系统架构 分布式光伏监控系统一般按
    的头像 发表于 05-16 10:39 825次阅读
    从监控到落地:<b class='flag-5'>分布式</b>光伏<b class='flag-5'>系统</b>方案及多元<b class='flag-5'>场景</b>应用指南

    输电线路分布式故障定位装置的原理、优势与应用场景解析

    输电线路分布式故障定位装置的原理、优势与应用场景解析
    的头像 发表于 05-16 09:25 631次阅读

    分布式日志追踪ID实战

    作者:京东物流 张小龙 本文通过介绍分布式应用各个场景的全局日志ID透传思路,以及介绍分布式日志追踪ID简单实现原理和实战效果,从而达到通过提高日志查询排查问题的效率。 背景 开发排
    的头像 发表于 01-20 10:16 906次阅读

    基于ptp的分布式系统设计

    。 PTP概述 PTP是一种网络时间同步协议,它允许网络中的设备同步它们的时钟。PTP基于IEEE 1588标准,旨在提供亚微秒级别的时间同步精度。PTP通过在网络中传播时间信息,并使用这些信息来校正本地时钟,从而实现精确的时间同步。 系统架构 基于PTP的
    的头像 发表于 12-29 10:09 975次阅读