9月7日-8日,相约 2023 腾讯全球数字生态大会!聚焦产业未来发展新趋势! 了解详情
写点什么

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

  • 2020-03-21
  • 本文字数:2250 字

    阅读完需:约 7 分钟

大型赛事稳定性保障: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 传输效率,还能这样做!


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


活动推荐:

2023年9月3-5日,「QCon全球软件开发大会·北京站」 将在北京•富力万丽酒店举办。此次大会以「启航·AIGC软件工程变革」为主题,策划了大前端融合提效、大模型应用落地、面向 AI 的存储、AIGC 浪潮下的研发效能提升、LLMOps、异构算力、微服务架构治理、业务安全技术、构建未来软件的编程语言、FinOps 等近30个精彩专题。咨询购票可联系票务经理 18514549229(微信同手机号)。

2020-03-21 10:00901

评论

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

火山引擎 DataTester 智能运营,帮企业实现“千人千面”精准营销

字节跳动数据平台

A/B 测试

亚信科技亮相南京软博会,数智赋能百行千业

亚信AntDB数据库

AntDB aisware antdb AntDB数据库

基于云边协同架构的五大应用场景革新

阿里云视频云

阿里云 边缘计算 边缘云

LeetCode题解:938. 二叉搜索树的范围和,栈,JavaScript,详细注释

Lee Chen

JavaScript LeetCode

阿里P8面试官总结的《2022最新年底java面试题》,搞定90%以上的技术面

钟奕礼

Java 程序员 java面试 java编程

通过支付网关提高第三方支付接入效率

产品海豚湾

产品经理 产品设计 支付系统 产品架构 11月月更

嘉为科技张敏:一文讲清场景工程方法论及运维组织能力内化

嘉为蓝鲸

运维 数字化

Kotlin作用域函数[Scope Function](上)

子不语Any

android kotlin 11月月更

Kotlin作用域函数[Scope Function](下)

子不语Any

android kotlin 11月月更

面试官:说说电商系统订单超时自动取消怎么实现?你有几种方案?

程序员小毕

程序员 面试 程序人生 后端 架构师

华夏银行:详解iDo平台一体化运维的落地过程

嘉为蓝鲸

运维 金融 银行 数字化

火山引擎DataLeap的Data Catalog系统公有云实践

字节跳动数据平台

大数据 火山引擎 大数据研发

元器选型攻略之 电阻

元器件秋姐

元器件知识 元器件科普 电阻 电阻定义 常见电阻

教你用JavaScript完成进度条

小院里的霍大侠

JavaScript 编程开发 初学者 入门实战

制造业数字化发展,瓴羊Quick BI引起了需求者的关注

夏日星河

云计算和虚拟化的三个小区别简单说明

行云管家

云计算 虚拟化

跨越速运如何构建实时统一的运单分析

StarRocks

#数据库

降价背后,函数计算规格自主选配功能揭秘

阿里巴巴云原生

阿里云 云原生 函数计算

Intel Arch SIG:介绍下一代数据中心互联协议CXL及在龙蜥的规划 | 第 54 期

OpenAnolis小助手

开源 直播 intel 龙蜥大讲堂 CXL

ZooKeeper 避坑实践:如何调优 jute.maxbuffer

阿里巴巴云原生

zookeeper 阿里云 云原生

透明LED屏幕如何设计显示效果更好?

Dylan

LED LED显示屏

Kotlin伴生对象(Companion Object)

子不语Any

android kotlin 11月月更

磐久网络|揭秘阿里云HAIL数据中心网络

云布道师

阿里云 数据中心 基础设施建设

瓴羊Quick BI自助式报表分析工具,令企业的运营服务更高效

夏日星河

常规加密算法是什么?原理是怎么样?有哪些?

行云管家

算法 加密算法 国密

开源共建 | TIS整合数据同步工具ChunJun,携手完善开源生态

袋鼠云数栈

大数据 开源 数据同步工具

QuTrunk与MindSpore量子神经网络初探

启科量子开发者官方号

人工智能 ai框架 量子编程

java 环境变量配置详细教程(2023 年全网最详细,没有之一)

千锋IT教育

老工程师荐读!PCB设计避坑指南

华秋PCB

PCB PCB设计

java程序员,是不是很想进字节跳动?开发三年的我拿到了入职通知

钟奕礼

Java 程序员 java面试 java编程

深入了解瓴羊Quick BI,对于商业智能BI发展情况更好分析

巷子

  • 扫码添加小助手
    领取最新资料包
大型赛事稳定性保障:Dpath 为世界军人运动会护航_文化 & 方法_阿里巴巴文娱技术_InfoQ精选文章