• 一文解读阿里云短信网关的云原生技术


    随通信行业不断的业务迭代,新的赛道为业务带来了新变化,生态合作和渠道的规模上量给系统带来了模式创新的同时,也带来了更大的压力。

    同时,国际站的地域环境和当地政策法规的因素,给全球化的建设也带来了全新的机遇和挑战。

    本文将探讨云原生时代下的网关技术,面向全球化、平台化、精细化的时代背景,如何在云原生时代挖掘自我蜕变的契机,又如何拖着沉重的技术负债实现涅槃重生,实现高性能、高可用、低成本的架构演进和技术突破,本文结合历年双11顶流下的网关技术实践经验落笔成文,希望对各位读者有所帮助。

    云通信网关发展新趋势与挑战

    阿里云通信短信网关是基于领先的通信架构和大规模分布式网关处理技术打造的云原生网关,提供稳定的通信服务能力,具备可冗灾、可恢复、可切换的高可用服务保障能力,实现客户的SLA保障要求,最终实现资源的最大利用和利润的最大化。

    高性能、高可用、低成本——是趋势,也是挑战。

    高性能,十万级并发、秒级触达

    阿里云通信起步于2017年,早期孵化于阿里通信,后与阿里云整合,经过短短几年的发展,目前已经是阿里云上最热门的云服务产品之一。在2019迎来规模化发展,这一年在天猫双11活动当天实现了历史峰值,覆盖全球200多个国家。

    从技术层面上看,云通信短信网关在双11支撑了十万级QPS的流量分发,而且这类并发不是简单的查询,而是需要实现与运营商或其它第三方系统交互。如此之大的业务流量和资源的调度,除了要做好系统保障,同时还要保障发送与响应的低延迟,实现全球覆盖、秒级触达,这是很大的一个挑战。

    诉求是:同时满足高并发和高性能。

    那么现在的问题瓶颈主要出在哪里呢?

    1.    目前的网关架构主要是以规模换性能,需要大规模集群分布式部署提供高并发能力。

    2.    在通信网络传输上,需要依托通信标准协议等长连接方式通过互联网传输。

    高可用,分钟级故障隔离及恢复

    随着业务发展,云通信资源节点将要达到万级,如何在十万级并发下实现万级节点的稳定性是非常大的难题。另外,云通信有着类似于秒杀一样的突变型流量的业务场景,比如营销短信,会在几分钟内发送海量的短信请求,这种瞬时流量往往会形成洪峰对系统产生冲击。

    从技术层面上看,云通信短信网关采用微服务分布式架构进行领域拆分部署,并大量使用异步编程多线程并发调度模型,系统复杂度可见一斑,这么大的集群规模和密集型的通信网络,除了要做好业务故障监控覆盖率、告警准确率100%,同时还要保障故障隔离及快速恢复,实现整体系统高可用,这又是一大挑战。

    那么现在的系统风险还存在哪些隐患呢?

    1.    目前的网关架构主要是多中心多分组的部署架构,需要将不同维度的业务、场景、客户进行隔离部署。

    2.    其次在数据存储资源上,需要重点关注数据库的稳定性。

    低成本,容器资源弹性可伸缩

    随着指数级增长的运算规模,尤其是在双11期间部署的上百台服务器,当流量和资源进一步翻翻,成本消耗也会水涨船高。然而,在大促过后,潮涨潮落之后,就是容器资源的扩容与缩容,但是对于有状态的服务来说,扩缩容所对应资源迁移成本和难度着实不是一件轻易的事。

    从技术层面上看,有状态的服务是捆绑住了资源,原因是短信是长连接异步全双工的通信模式,本质上的冲突是潮汐流量下资源的利用率问题,面对这种有状态的服务和昂贵的资源成本,除了要做好流量和资源最优匹配,减少闲置资源的成本浪费,提升CPU利用率,同时还要实现无状态的容器资源弹性可伸缩,进一步降低运维成本,这又是一大挑战。

    那么现在的技术难点又有哪些呢?

    1.    目前的网关部署主要是DevOps的模式,需要预先申请资源再进行镜像容器的部署。

    2.    在资源连接的管理上,需要对资源连接的进行预分配,实现资源连接与容器IP的绑定。

    借力破局:基于云原生的边缘网关架构

    云原生是一套因云而生,又应云而行的技术方法体系,降本增效是云原生应用最大价值。

    下面,就结合云原生的技术特点聊一下短信网关建立了哪些技术优势。

    易部署、广覆盖,分钟级服务部署

    云原生是一套因云而生的技术方法体系,而阿里云又拥有遍布全球的中心和边缘节点,那么短信网关如何基于容器化、服务网格、微服务等云原生技术,结合边缘云,打造轻量级边缘网关和云网部署架构,实现易部署、广覆盖的全球就近接入和分发能力,以此达成提升网关性能和减少运维成本的发展目标。

    为了实现异部署的目标,这里主要有两个重点:一是系统架构支持云原生化的易部署,二是DevOps平台支持应用环境的易部署。

    首先在系统架构层面上,短信网关为此拆分解耦实现了两层架构体系来对业务进行支撑,打造的轻量级网关架构更易于部署在各地域,使客户实现就近接入,保障低延迟的短信发送体验。如下图所示:

    短信网关两层架构对业务支撑提供多种解决方案,轻量级的网关架构非常易于部署在各地域,使客户的实现就近接入,保障低延迟的短信发送体验。轻量易于部署,无论是公有云、混合云或专有云,都可以基于容器化实现快速部署构建。短信网关两层架构业支持相互独立部署,也可以整合集成部署,帮助打造多样化的部署架构。

    其次在DevOps平台层面上,为了适配多云环境的部署情况,边缘网关需要的中间件和资源要尽可能轻量级和开源化,包括部署到公有云、混合云和专有云里。基于此,我们在设计上边缘网关完全基于云原生的底座进行构建,实现部署上更强的适配性。

    在DevOps平台方面我们选择了两种方式进行支持:全托管集群和边缘全托管集群,这两个平台都可以将底层的资源池通过虚拟化技术封装成一个个的容器,在结合镜像服务即可实现服务的快速部署,特别要说的边缘全托管平台还可以纳管驻外的资源池,这样我们在面向混合云部署时,只通过镜像就可以部署到客户的容器化服务中。

    综上所述,边缘网关基于阿里云边缘节点,助力业务下沉至离用户10公里的地方,减少时延和带宽成本,在保障稳定性的同时实现技术降本和全球多节点的快速部点。

    易调度,低延迟,毫秒级响应

    云原生又是一套应云而行的技术方法体系,上文提到短信网关是通过多分组的部署解决方案,在接近用户的区域分别独立部署网关,进行与供应商的低延时高质量对接。那么这里就有一个问题;如此大规模的边缘节点是如何被调度的?调度的复杂度又有多高?

    针对流量调度复杂场景,降低业务架构复杂度,通过架构升级实现业务逻辑与流量管控逻辑解偶,让复杂调度变为可观测、可管控的统一的流量调度模型,以此实现易调度、低延迟的发现目标。

    为了实现易调度的目标,同样需要解决两个重点:一是系统架构支持云原生化的易调度,二是通信网络架构支持应用环境的易调度。

    首先在系统架构层面上,实现基于三级策略的路由寻址调度算法实现节点间、节点与资源间、资源与连接间的数据链路通信;以及基于多因子多权重的路由协同控制动态感知算法实现异常情况下的稳定可靠路由寻址。

    除此之外,短信面向的场景:验证码、通知、营销等,对于时效性的要求非常高,技术上我们实现了基于场景优先级的自适应弹性流控算法,多个消息队列之间不再是孤立的,每个队列的流速控制都会受到其他队列运行情况的影响,优先级越高的队列流速控制越大,优先级越低的队列流速控制越小,并且可以随系统运行情况自行动态调整,具备高时效性的自适应调整能力。其实,无论哪种算法,主要实现的目标都是让流量更加平滑、更即时。

    其次在通信网络架构层面上,我们主要采用了云上开源的中间件产品,比如Nacos、Redis、MNS等,另外在VPC组网过程中,也大量采用来EIP、NAT、SLB、VPN、IPSec等网络加速技术,以此来保障通信的低延迟。

    我们知道云服务通常部署独立VPC内,VPC访问需要通过SLB/NAT,公网用户主动访问云上资源的流量是经过SLB进行转发,云上资源主动访问公网的流量是经过NAT进行转发。针对跨region云上网络互访情况,我们采用的方法是对跨Region网关调用的是先走到本Region网关的弹内,再到达本Region网关的弹外,这样网络传输的性能就会有所保障。

    易运维,省成本,秒级弹性伸缩

    上文中提到短信网关有着庞大的集群规模和全球节点,除了在调度上的考量外,另外还有一个问题:如此大规模的边缘节点是进行成本控制的?潮汐流量下的弹性伸缩又如何运维?

    从本质上来看,短信网关的运维核心难点还是因为连接的有状态,有状态就会产生各种的复杂问题,其中最大的难点就是有状态的容器不能进行弹性扩缩容。所以,实现省成本的目标之一也在于此。为了实现易运维的目标,需要解决两个重点:一是系统架构支持云原生化的易运维,二是可观测技术支持数智化的易运维。

    首先在系统架构层面上,我们通过分布式松耦合网关架构实现了对传统通信网关的云端再造,解耦业务处理模块和通信协议会话模块,业务处理层无需关心通信连接状态,可根据流量动态扩缩容,自研的数据连接器提供路由发现、调度的能力。

    为了更轻量级的部署和设计,我们将云网架构从整体上拆分成独立的领域模块,每个模块都独立解决各自领域的问题。对一些协同关联的业务服务领域,我们采用的是服务集成和扩展的方式进行服务间的通信模式,而不是在本地网关进行开发,从而保障本地网关的轻量级和专属性,进而更易于运维。

    其次在数智化运维层面上,首先思考的是为什么要深挖可观测技术?可观测数据覆盖的范围是哪些?数据是隔离的?还是聚合的?从网络结构上看是是什么样的?

    “可观测”是个比较大而全的概念,包括了应用性能指标、链路追踪、容器监控、系统监控、日志监控等等,每个都是单独一个点,但是对于业务应用系统来讲,我们要做的应该是一个全方位的可观测体系。

    具体从层次来看,最上面是“看到”,能看到指标,能告警;下一层是可以“分析”,可以追踪调用链,可以分析RT、异常出在哪里;最下层是反作用,对于一些比较明确的场景,通过系统自动化实现基于编排的根因分析、基于编排的故障自动定位。

    总结来说,可观测应该是一个多面的,我们其实解决的是如何基于这些可观测数据聚合分析并反作用于业务网关,能做到自动化AIOps的运维管控。

    经过演进发展,网关始终致力于规模化、边缘化、数智化三个方向发展:

    通过云网关和边缘网关的云网架构实现全球多站点、多节点的网络拓扑部署;

    着力边缘化的架构演进助力规模化网关的快速、便捷的部署能力,同时重建云网通信模式,实现云网关的弹性水平伸缩能力;

    最后通过可观测技术对全球网关节点实现监控、埋点的Metrics和Trace,构建基于编排的根因分析能力。

    希望通过上面的内容可以帮助到大家对云通信全新的理解,如果有感兴趣的同学也欢迎进行沟通交流。

    「视频云技术」你最值得关注的音视频技术公众号,每周推送来自阿里云一线的实践技术文章,在这里与音视频领域一流工程师交流切磋。公众号后台回复【技术】可加入阿里云视频云产品技术交流群,和业内大咖一起探讨音视频技术,获取更多行业最新信息。    

  • 相关阅读:
    codeforces 261B Maxim and Restaurant(概率DP)
    洛谷P3066 [USACO12DEC]逃跑的Barn (线段树合并)
    洛谷P1600 天天爱跑步(线段树合并)
    AtCoder
    SPOJ10606 BALNUM
    洛谷P3567[POI2014]KUR-Couriers(主席树+二分)
    洛谷P2633 Count on a tree(主席树上树)
    【.Net边角料系列】1-单例模式(我真不是你想的那样)
    生成二维码的开源工具对比(附源码了呀!)
    你所不知道的linq(二)
  • 原文地址:https://www.cnblogs.com/VideoCloudTech/p/16722637.html
Copyright © 2020-2023  润新知