今年的双十一刚刚过去,大家都买什么好东西了?身为马云背后的男人,小灰买了一大堆东西,发现该收的宝贝全都如期到达。
回想起往年,曾经因流量激增,导致各地中转及收件点频频爆仓,收件延迟甚至长达半个月的事情,大体已经绝迹。这一现象,印证了中国物流在低延迟方面的技术创新与优化能力。
当运输速度恒定,那么中转站点的多寡、分拣能力的强弱、是否丢包重发,是决定快递能否如期到达的重要因素。
如果IM消息是物,音视频内容是物,那么全球通信网就是负责传输的物流系统。在物理距离恒定的前提下,对于路由跳数、网络带宽、网络质量和缓存队列的设计和优化,决定了系统能否做到高质量、低延迟的传输。
这一段话不是我说的,而是一位业界大牛,融云首席架构师李淼在全球互联网通信云大会(WICC2021)广州站中分享的。也因此,李淼关于《全球低延迟通信网络的设计与优化》的话题分享,也显得更加形象生动。
RTC与IM全球网络的设计有所同,有所不同
融云全球通信网络分为RTC全球网络和IM全球通信络两个部分,这是由于RTC和IM在传输中不同的加速特点所决定。
相同点在于:二者可在数据中心、节点等多项物理设施上进行复用,并且都必须保证高质量、低延迟的传输,从而为用户带来极佳的场景体验。
不同点在于:RTC基于UTP协议运行,对于用户体验而言,允许有一定的丢包率,但对于延时要求苛刻;而IM基于TCP协议进行业务承载,在要求消息不能丢失的同时,需要消息的集中存储,不仅能为用户不在线时存储离线消息,还要根据业务类型,进行历史消息的存储。
因此,融云对于RTC的设计,是完全去中心化的分布式通信网络。好处是在后续进行网络优化时,可以随意增加媒体节点部署,而不影响用户的任何使用体验。
融云IM的网络设计采用的是将数据流量导入到数据中心的方式。已陆续在国内、北美和新加坡分别设立了数据中心,目前已迭代至基于Anycast的一体化加速网。特点在于多协议支持、多数据中心支持,并且,基于SmartDNS& Anycast的加速原理可以更高质量地保证在全球范围内,节点分配的准确度。此外,IM的许多全球链路优化工作,都可以在RTC上复用。
了解完以上架构,重点来了:融云是如何进行延时优化的呢?这需要分别从RTC和IM两个方向进行解析。
如何降低RTC的网络延时
对于RTC而言,能降低延时最好的办法,就是提高RTC节点的覆盖率,目的在于缩短用户与边缘节点的物理距离,也就意味着以更少的跳数完成连接。
融云对于节点的选择先是要保证大洲级的全覆盖,再是对热点区域进行重点覆盖。
所选的每一个节点,都是基于一线IaaS厂商的公有云服务搭建,融云之所以不会自建 IDC,一则是可以选到经过大规模其他用户验证的优质节点;再则,一线IaaS厂商所提供的BGP节点,可以降低链路分配等后续服务的复杂度。
融云在全球采购的是AWS或者google云,每个节点之间都可通过专线互联。不但可以提升链路传输的稳定性,还可以降低 RTC节点的跳数,甚至可以做到0跳或者1跳。
优化的难点在于:如何让用户选择到质量最好的节点。通常最直观的办法是通过智能DNS解析,但融云经过验证发现,准确度率只在80%左右。为此,融云在之后增加了 IP Anycast,它跟 DNS原理完全不同,可直接通过IP的方式来进行分配,这个分配是运营商级的。
在链路探测方面,由于物理距离最近的 IDC未必就是质量最好的节点,即便采用smart DNS+IP Anycast,准确度依然无法达到100%,为此融云增加了客户端的探测能力,会在用户连接时,下发N个地址。客户端再根据下发地址进行探测,择优选择链路连接。据日志分析,能够做到准确度在99.5%以上。
同云连接可以通过链路优化来保证,那么跨云又该怎么办呢?
融云的做法是通过二级级联,将数据中心之间的流量通过所采购的SD-WAN进行导入导出。这其中,级联优化至关重要。
比如,一个北美用户跟一个国内用户进行通讯,融云会先在北美与香港之间进行专线互联,然后香港再与国内的节点进行专线互联。这种通过香港节点进行转发的方案,能够在保证质量的前提下,达到低延时的网络优化效果。
但难点在于:故障降级。传输过程中,同云的专线和SD-WAN都可能会出现故障。尽管故障的概率极低,但一旦故障发生,就必须有所取舍,为了保证用户能够正常接听互通,只能选择将整个通讯链路进行降级。比如当专线出问题时,会通过二级级联的方式,进行节点的跳转,或者直接通过互联网公网的方式进行数据的转发。
此外,要降延就要有完善的网络延时监控系统。融云在客户端有各种标准的Qos监测,包括数据实时上报和后台分析。
如何降低IM的网络延时
IM的网络延时优化途径主要集中于节点间数据转发和证书计算前置两个方面。
在节点数据的转发方面:由于IM数据基于TCP协议传输,但TCP的拥塞控制和丢包重传策略并不友好,因此融云将部分TCP协议替换成QUIC协议,也就是说,从物理距离最远的边缘节点到路由节点数据的传输,融云都通过QUIC进行了优化。
通过QUIC优化,第一是避免了在边缘点跟路由节点之间,TCP的三次握手,直接将TLS RTT降为0;第二是当网络抖动时,QUIC有更友好的丢包重传策略,可以做到丢哪个包就补哪个包,而不会像TCP那样,一旦丢包,后续所有的包都要进行重传。内测表明,这一优化,使整个网络延时降低了15%左右。
在证书计算前置方面:融云采取将TLS证书和SSL的证书,在边缘节点上直接进行交换的方式。这样一来,首先是减少了用户数据到数据中心之间的整体的RTT,可将RTT直接降到0。其次,IM多有小包通讯的场景,例如一个信令包,往往只有10-20个字节,通过在边缘点上将数据包进行解密,明文传递到融云的路由节点,再进行加密传到数据中心,大大降低了两个最远物理距端点间的数据传输量。
需要说明的是,用户完全无需担心数据的安全问题。因为融云的边缘节点和路由节点全部由融云控制,均为受信网络。但如果是必须要在公网完成数据传输,融云仍然会通过传统 TLS方式来进行数据链路加密。
当然,融云对IM的优化策略远不止于此,更多表现在客户端及服务端日志的收集、zero copy、多路复用、IP直连和QoS保证等多个方面。
比如对日志的收集,融云每发一个SDK版本,都会增加新的日志埋点,用于分析业务、分析网络等,以此进行一些定向或定点区域的优化。
在谈及未来计划时,李淼指出,融云将不计成本,不遗余力地继续加大网络建设力度,为开发者提供更加优质的服务。就研发而言,将持续提升软件本身的处理能力,不断丰富数据收集的手段,同时提升数据预估的准确性。
WICC2021广州站的归来,终于明白融云通信的低延迟是怎么做到的。回顾这场大会的点点滴滴,我不禁感叹,未来已来!
至今,融云已为30万+APP进行了即时通讯和实时音视频赋能,欢迎大家扫下方二维码,免费体验一下融云通信的产品: