对中国开发者最具吸引力的科技企业有哪些?快来为你 pick 的企业投票! 了解详情
写点什么

大型赛事稳定性保障:Dpath 为世界军人运动会护航

2020 年 3 月 21 日

大型赛事稳定性保障:Dpath 为世界军人运动会护航

一、背景

第七届世界军人运动会是中国第一次承办综合性国际军事赛事,有 100 多个国家、一万多现役军人参与竞技。武汉军运会票务系统建设和票务运营由大麦网承接,使用阿里集团基础技术能力,通过大麦麦座票务系统提供票务管理、售卖和现场换验服务。


大麦麦座票务系统(简称“麦座”)定位于现场娱乐的一站式行业服务平台,结合阿里的大数据、云计算等能力,为场馆向数字化、智能化的升级提供行业解决方案。麦座基础架构经历了从单机软件部署到阿里云的商户独立部署,再到 SaaS 化的演进过程。


目前麦座系统利用阿里巴巴的 pouch 容器,采用微服务的架构,为大量商户提供统一的服务。多用户共享服务的架构,实现了资源利用的最大化,方便版本的统一维护和升级。当承载军运会等大型赛事,或者面对头部 KA 客户时,从安全、稳定性角度考虑,需要做独立部署和流量隔离,从而避免突发流量影响到 KA 客户。


二、目标

针对军运会的场景,我们需要满足:独立部署、流量隔离。在满足独立部署和流量隔离的基础上,需要满足:


  1. 对开发尽量透明:尽可能少的定制和代码侵入,对开发透明,不能因为独立部署增加额外的开发和运维成本;

  2. 独立部署的容器与普通分组的容器完全等价,且可以动态的切流:某个环境宕机的极端情况下,能够快速切换,保证业务正常运行。


三、方案选型

为了实现独立部署和流程隔离的目标,同时支持动态切流,我们调研了单元化、独立应用、环境配置项、通过流量打标进行路由的方式。


单元化独立应用环境配置项流量标路由
介绍独立机房部署,通过域名等信息进行路由;可动态切流;实现了存储隔离和异地容灾单独的应用和代码库,可实现多版本的共存,无法代码复用同一个应用和代码库,独立的分组,对应独立的配置项。通过配置项维护 RPC 版本号等信息,实现隔离根据商户信息,对流量打标。RPC 调用、消息队列等根据打标信息进行路由,形成分组的隔离
部署成本需要独立的单元化环境,成本高独立应用需要测试、预发、线上环境,成本偏高申请独立的分组,成本低申请独立的分组,成本低
开发成本对代码无侵入,成本低维护多套代码,成本高新增配置时需要修改多套配置项,成本偏高RPC、消息队列等中间件支持,对开发完全透明


通过对四个方案的比较,我们最终选择流量打标路由的方式。阿里巴巴中间件 Dpath(Dedicated path),在请求中添加流量标识,通过 Diamond(持久配置管理中间件)把 Dpath 的打标规则,推送到各个应用容器。RPC、消息队列等中间件根据流量标和 Dpath 规则,进行路由,选择相应的应用分组。


  1. Dpath 实现的需求:


1)针对特殊流量可以圈定一些特殊机器作为他的专属的服务器,以便对特殊流量进行特殊保障或者测试;


2)普通流量不应该使用专属服务器,特殊流量可以按需使用普通服务器;


3)整个链路上的专属服务器组成了特殊流量的专属通道,类似公交专用道。


  1. 基于 Dpath,我们需要实现:圈定专属服务、识别特殊流量、在链路上引导流量到对应的服务器。


四、HTTP 流量路由

我们为每个应用申请独立的应用分组,专门为军运会提供服务(下文称为军运会分组)。然后在 Dpath 创建独立的环境,选择对应的分组,组成军运会的集群环境。通过统一接入层,为军运会分组配置独立的域名。在 VipServer 进行配置,军运会域名的请求关联军运会的分组。当某个分组宕机等原因导致服务不可用时。修改 VipServer,把域名的关联切换到可用分组,保证流量的动态切换。


五、RPC 流量路由

RPC 的流量可以分为麦座内部系统的相互调用和麦座外系统的调用。针对麦座的内部流量,当请求经过某个分组时,自动在链路的上下文中打标。常见的 RPC 中间件(如 Dubbo)支持路由规则的配置。针对外部的流量,在 Diamond 中配置路由规则。Diamond 把 Dpath 的路由规则推送到各个容器,包括流量标识和应用分组的映射关系。RPC 中间件根据 Dpath 规则和流量标识,选择对应的分组。


class DPathTagRule {   boolean isOverwriteOn() {      // 是否使用当前规则进行覆盖,默认为True      return true   }   // 接口/方法级别规则   String methodTagRule(String serviceName, String methodName, String[] paramTypeStrs){      return null   }   // 参数级别   Object argsTagRule(String servicenName, String methodName, String[] paramTypeStrs){      return {       Object[] args ->       if (JYH_TENANT_ID.equals(args.getTenantId())) {        return "jyh"       } else {        return null       }      }   }}
复制代码


六、MQ 消息路由

Dpath 支持消息队列的路由。Dpath 通过为消息消费者(Consumer)配置消息 Filter 方式实现。不同分组的 Consumer,注册时在用户配置的 ConsumerId(cid)基础上添加后缀。普通分组和军运会分组都会接收到所有的消息。消息的生产者(Producer)发送消息时根据自己的机器分组,在消息体内打标。Consumer 在消费消息之前,添加消息的过滤器。根据 Consumer 自己的机器分组,过滤掉非同分组的 Producer 发送的消息,仅消费同分组的 Producer 发送的消息。



七、效果

通过 Dpath,我们用低成本的部署,实现了独立部署和流量隔离。保障业务功能快速升级,同时兼顾最低维护和运行成本,保障流量和风险隔离。整个军运会从上线到闭幕期间,整个售卖过程非常顺利,无任何问题和故障。


作者介绍


阿里文娱技术专家 司楚


相关阅读


电影垂直行业的云智开放平台如何炼成?


阿里工程师带你了解 B 端垂类营销中心如何设计?


云智前端技术如何赋能场馆院线?


60 秒售出 5 万张票!电影节抢票技术揭秘


电影行业提升 DCP 传输效率,还能这样做!


超大型场馆的绘座选座解决方案


2020 年 3 月 21 日 10:00565

评论

发布
暂无评论
发现更多内容

第 1 周 架构方法 学习总结

心在那片海

5.2分布式缓存架构:常见的缓存实现形式

张荣召

第五周 作业二

Yangjing

极客大学架构师训练营

架构师训练营第五周 技术选型缓存、消息队列、一致性 hash

郎哲158

学习 极客大学架构师训练营

架构师训练营第五周作业

xs-geek

第五周作业

fmouse

极客大学架构师训练营

架构师训练营第5周作业

TheSRE

极客大学架构师训练营

Week 5 作业01

Croesus

【架构师训练营第 1 期 05 周】 作业

Bear

极客大学架构师训练营

架构方法-学习总结笔记

Xuenqlve

食堂就餐卡系统设计-week1

Mr_No爱学习

第 01 周——食堂就餐卡系统设计

Airship

极客大学架构师训练营

第五周 作业1

Yangjing

极客大学架构师训练营

架构师训练营第一周作业-周总结

张浩

hash一致性算法

橘子皮嚼着不脆

架构师训练营二期 1周总结

月下独酌

极客大学架构师训练营

5.1分布式缓存架构:架构原理与注意事项

张荣召

架构师训练营 1 期第 5 周:技术选型(一) - 作业

灵霄

极客大学架构师训练营

架构师训练营第 5 周:技术选型(一)

子青

第五周 技术选型(1)学习总结

钟杰

极客大学架构师训练营

作业

张荣召

第五周总结

架构师训练营第 1 期 - 第 5 周 - 学习总结

wgl

极客大学架构师训练营

AirPods过河,苹果拆桥:被“钞能力”征服的Beats何以至此?

脑极体

【架构师训练营第 1 期 05 周】 学习总结

Bear

极客大学架构师训练营

第一周10/25

张冬冬

总结

架构师训练营第 1 期 -- 第五周学习总结

发酵的死神

极客大学架构师训练营

第五周 技术选型 作业一

应鹏

极客大学架构师训练营 课程作业

week1作业

幸福小子

第1周作业-学习总结

jingx

Week_05 作业

golangboy

极客大学架构师训练营

数字化管理体系建设

数字化管理体系建设

大型赛事稳定性保障:Dpath 为世界军人运动会护航-InfoQ