5G因高速率、大容量和低时延三个主要特征,为咱们带来了无限遐想,但若是底层通讯能力及设计架构不足以支撑高并发的场景,高延时仍然不可避免,那么5G技术所赋予的全新应用体验也将大打折扣,所以,掌握高并发的通讯技术在5G时代相当重要。算法
在2019全球互联网通讯云(WIIC)大会上,融云技术总监高晓光在“架构演进与性能优化”论坛演讲中毫无保留地分享了融云高并发通讯技术的系统设计与实践,但愿给广大开发者提供一些实战帮助。做为通讯云行业的技术领导者,融云连续五年保持IM即时通信市场占有率第一,是业内惟一承诺在高并发和弱网环境下,仍然能够保障消息不丢、不重、不乱序的厂商,融云的高并发通讯技术和系统架构也已成为业界争相学习的技术标杆。
融云技术总监高晓光演讲数据库
高并发系统的设计要点缓存
WICC会上,高晓光首先分享了融云在整个通讯平台上经常使用的系统性能优化手段。在系统运行的性能上,融云主要关注业务、系统和存储三个层面的问题。在业务层面,建议开发者关注每一个业务请求接口的响应时长,动态掌握正确的响应时长,过长和太短都不合理,并对程序运行中的性能拐点,尽量的优化,延长其到来的时间,这可极大提高高并发的业务承载能力。在系统层面,程序运行过程当中关注CPU、内存和I/O这三方面的使用状况,合理配置资源;在存储层面,根据实际业务场景作数据库选型,选择合适的存储介质。性能优化
基于以上性能问题关注点,高晓光坦言融云高并发系统的设计要点主要集中在如下四个方面:数据结构
融云高并发系统的设计要点架构
采用异步化的请求处理。目前,融云采用基于Actor模型自研的分布式RPC框架来实现整个通讯云平台,不但能够把请求的源数据,像流水线同样在每一个节点处理完后直接下转,还能够将最终处理的结果经过溯源直接投递回去,从而减小数据的调用次数。相对于同步的方式,异步化能够提升资源的复用程度,中间须要被处理的节点越多,异步化的优点会越明显。并发
合理的缓存策略。经过数据、分布式缓存、本地缓存、客户端缓存层层递进的缓存策略,使越活跃的数据越逼近客户。目的在于让热的数据离它要处理的位置更近,以提升缓存的利用率,加快数据处理的速度。框架
选用适合的数据结构与算法,能够极大的提升整个程序的计算性能。例如一致性哈希算法,可用于整个服务的数据的散列,或者节点的定位;LRU缓存,一个带数据淘汰的缓存组件,把冷的数据淘汰掉,把位置腾给热的数据,提升数据利用率;BitMap,每个比特位均可用来标识一个状态位,可用于快速的状态判断和节省存储空间;Bloom Filter能够认为是BitMap的一种应用,能够用来快速断定数据是否存在,避免缓存穿透。异步
高效的数据存取模型。在融云整个系统里面会经常使用到几种不一样的存储类型,没有高下之分,高晓光说选用的原则是必定要符合业务场景。例如,存用户的在线和离线状态,融云会选用KV存储;存储消息,因为消息对于时序的要求很高,因此能够选择时序型数据库。数据怎么用起来方便,就怎么去存取它。分布式
高并发系统架构的最佳实践解读
WICC上,高晓光谈到消息分发的典型场景有单聊、群聊、聊天室,不一样场景应具体分析、分别应对,才是解决高并发问题的秘诀。会上特别针对群聊和聊天室的不一样特色,融云分享了不一样的最佳实践方案。
针对群聊场景。首先,融云在系统中使用消息分发控制策略,在群消息分发中引进快、中、慢三个队列,分别设置不一样的延时值,根据不一样的群成员数量,映射到不一样处理队列中,将绝大多数百人如下的群放入快速队列,进行快速处理,可极大地减轻分发的压力。
其次,融云采用消息直推与通知拉取相结合的方式,在消息不频繁时用直推模式,当消息量爆增,产生积压时即转为通知拉取模式。同时,使用 ACK 机制进行消息可靠同步,且同步的消息严格按照时间戳有序进行,这个时间戳由服务端保证惟一性,这也是融云勇于承诺消息不重不丢不乱序的秘籍所在。
再则,融云经过“引用分发”机制下降消息缓存的存储占用。原则上,是按消息大小及群成员数量来断定是否采用“引用分发”。当消息体大,如发送语音或图片时,就采用“引用分发”机制,只分发一个索引,当终端实际拉取消息时,再推送实体消息。
针对聊天室场景。聊天室和群聊的不一样之处在于:聊天室的成员关系是临时性的,出入频繁,若遇大型直播,成员瞬时可达几万甚至几十万,消息极其活跃,瞬时峰值极高。融云承诺的是成员无上限的聊天室服务,最高服务过15万人同时在线,每秒消息的分发量超过2000万条,日消息峰值超2218亿条。
为知足高并发消息的服务请求,融云部署了环形队列的内存缓存,滚动保存最近的50条消息。在终端彻底改用通知拉取的方式,用户收到通知后,可从服务端的缓存中获取消息,这起到了很好的限流做用,直接缓解了终端压力。
另外,对于聊天室而言,融云根据多年服务客户的经验以及自身的技术模型,制定了一套按消息类型进行消息抛弃的处理机制。例如大型直播的场景,消息可能频繁到每秒瞬间几万条消息涌向终端,即使终端可以处理过来,用户也未必看得过来,体验反而不好。因此当直播间消息量过大或消息频率太高时,融云会为消息设置优先级,并将连续消息和类似消息优化成一条“叠加消息”,同时根据优先级机制抛弃无用户属性消息,确保消息并发量极大的状况下,用户端也能够享受流畅的直播互动体验。对于聊天室,融云还额外对消息上行进行限流,也有效提高了用户体验。
将来所面临的挑战和改进
随着5G+物联网时代的到来,各类终端设备甚至会延伸到触手可及的任意一物,海量消息激增将直接致使高并发的场景无处不在,底层的通讯系统架构也将面临难于想象的考验。
高晓光表示,融云一直以来在服务性能上都围绕着三大重心去进行优化,1、合理的算法,下降CPU使用;2、合理的内存结构,下降内存用量,提升缓存利用率;3、尽量的下降I/O的频次。同时,高晓光在演讲中还着重强调:任何的优化都须要符合特定的场景,若是没有场景,任何优化都毫无心义。
回顾前文,融云的云通讯系统架构之因此可以经受住各类高并发的极端考验,与融云正确分析场景的特色,进而采起有效对策密切相关。这次融云在WICC上的技术分享,但愿帮助开发者了解到,在单群聊及聊天室这样典型的消息分发场景下,通讯云技术如何对高并发业务进行支撑。经过高并发系统设计及最佳实践的解读,融云但愿引领业界技术领袖一块儿,持续推进通讯云技术对5G多应用场景的服务性能优化与提高。