17.5W秒级交易峰值下的混合云弹性架构之路

简介:

前言

每年的双11都是一个全球狂欢的节日,随着每年交易逐年创造奇迹的背后,按照传统的方式,我们的成本也在逐年上升。双11当天的秒级交易峰值平时的近10多倍,我们要用3-4倍的机器去支撑。但大促过后这批机器的资源利用率不高,到次年的双11会形成较长时间的低效运行。试想一下,电商交易有大促峰值,而阿里云有售卖Buffer,如果能充分发挥云计算的弹性能力,让资源可以两边快速腾挪,就可以解决资源浪费的问题了。把我们的交易单元可以部署在云上面,那么大促的时候我们只需要按照压测模型去云上构建一个符合能力的新单元即可,用完马上释放掉,这样无疑是最优雅的。专有云+公共云 的混合云弹性架构成为一种自然而然的选择,不但可以资源合理利用,降低成本,同时也锻炼了阿里人的的技术能力,为用户提供更优质的服务。
有了架构思路,实现起来似乎也没那么容易。阿里的交易涉及几百个系统,他们之间的依赖错综复杂,如果能够把他们快速的搭建在云上?这次系统之间的依赖如何复杂,如果把他们的容量估算好,快速调整他们的容量水位?这就不得不提到下面的两个秘密武器了:一键建站和弹性容量交付

1. 一键建站

1.1 背景

一键建站是在底层基础设施交付的基础上,快速地在一个空机房部署交易单元,使新机房迅速具备对外提供服务的能力。一键建站的逆过程叫一键下站,即迅速切除单元流量,释放所有单元内应用的物理资源。
从架构的层面看,一键建站的基础是阿里电商体系的异地多活。从运维的角度看,一键建站是运维产品的升华,更是运维效率的核心体现。
一键建站第一次被提出是在2014年,但由于系统多,依赖复杂,加上中间件的复杂性,当时新建一个单元需要耗时近1个月的时间,更是需要所有单元链路上的运维同学参与。去年,DB实现了一次完整意义上的一键建站,中间件的建站实现了半自动化,但是应用的建站过程仍需要很多运维同学的支持。今年,一键建站进行了重构,并提出一天(8小时)一单元的目标,在几乎不用运维同学参与的情况下,顺利支持了3个云单元的建站工作,最快一次耗时6小时建站。

1.2 挑战

今年的双11单元架构是三地五单元,一中心四单元,也是第一次遇到同机房两单元。如何控制单元内的链路封闭,单元与单元、单元与中心的同步与可见性,是异地多活的大挑战,也是一键建站的难点。
首先需要明确单元内部署什么。建站需要维护一份知识库,包括单元的数据库,中间件,统一接入,以及导购、商品、店铺、交易、会员等一百多个应用。需要知道每个产品的服务器配置,软件配件,容量需求,甚至是应用间链路依赖等相关信息。这份知识库会跟随日常运维操作,调用链路日志等不断更新。同时,一个完整单元不仅仅包含线上环境,还需包含预发环境与小流量(测试环境),每套环境都有自己的一份知识库。
其次是需要明确部署的每个步骤实现。单元内的每个产品,都需要明确部署的操作细节,以及产品之间的前后依赖。今年,一键建站第一次在云上实施,面对全新的服务器资源(ecs),全新的网络资源(slb)以及全新的部署方式(docker)等,每个环节都需要技术落地。由此可见,一键建站是一个庞大的系统,几乎涉及所有的运维产品。
在明确了建站数据与建站步骤的基础上,还需要有一套技术实现能将单元内所有产品相关的近四千个部署步骤串联起来,这就是建站系统。追求建站效率的同时,安全始终要铭记于心。建站的每个步骤,都需要考虑可能出现的突发情况以及应对策略。

1.3 技术架构

一键建站是一个体系的构建,是要在原有运维产品的基础上进行升华,将相关产品的原子性服务联动起来,最终凝聚成一个按钮。
一键建站涉及的单元产品种类繁多,相关操作保罗万象,而且变化极为频繁。如果为每类产品写死操作流程,那建站只会疲于代码,即使完成了代码,也只会是一次性的玩物。因此建站需要更多的考虑灵活性,在最终的技术实现上,将系统架构分为四个层次,原子服务、功能组件、组件编排以及流程调度。系统架构如下图:

1.4 原子服务

建站平台的能力来源于周边的运维产品,接入相关系统的服务,将最小粒度的一次服务调用称为一个原子操作。服务网关包装一系列原子操作,以提供上层业务调用。
作为唯一的外部系统调用入口,服务网关还需要做统一的日志记录,业务链路跟踪以及故障告警等。
对建站平台的效率要求,很大一部分最终会落在外部系统服务上。最具代表性的是服务器资源申请与docker镜像,这两条链路的背后,凝聚着很多人努力的心血。

1.5 功能组件

功能组件,是将相关的原子服务进行整合,从而形成的一个个有业务含义的独立功能模块。比如创建服务器、添加帐号、创建vip、docker upgrade、应用启动、更新hsf路由等等,将近百个原子服务最终聚合成三四十个功能组件。组件的实现需要能保证幂等。
功能组件需要遵循一定的规范,从而使得同一组件能被不同的应用,不同的流程复用。

1.6 组件编排

组件编排是建站灵活性的核心。建站平台支持在web页面动态编排功能组件,从而组装成一个个可以运行的流程。单元内的每类中间件或应用都可能存在部署上的差异,通过服务编排,使每一类产品都能对应到一类流程。
建站需要涉及整套中间件以及一百多个单元应用,这些产品在部署启动上还存在先后链路依赖。去除弱依赖,将单元产品依赖描述成一张无环有向图,每个节点代表一个产品的部署流程。将整张图描述成一个流程,这个流程就是建站流程!

1.7 流程调度

流程调度是建站稳定性的有力保障。流程调度负责建站流程的分布式执行,是流程引擎的一个实现,至少需要达到下述几点要求:

  1. 高可用。服务器宕机不能影响流程执行;
  2. 系统容错。下游系统异常诊断,自动重试;
  3. 并发访问控制。流程节点不应该同时在多台服务器被调度;
    在结构上,流程调度可以分为流程实例管控、任务队列、任务调度、组件执行器与分布式协同组件等。每个节点按照自身的负载情况加载流程实例到本地任务队列,组件执行器负责每个组件的入參注入,出參收集以及反射调用,分布式协同保障同一时刻仅有一个节点在调度流程实例。
    一键建站流程是一个包含众多子流程的嵌套流程结构,建站时,流程调度需要同时执行上千个流程。

一键建站只是完成了最小单元的建站工作,如果想让这个单元支撑好大促的流量,还需要对这个单元进行容量评估和扩容,如何快速的评估各个应用的容量并自动扩容呢?这时就需要弹性容量交付出场了。

2. 弹性容量交付

如下图:

今年弹性技术在实时容量评估算法上作了一定的改良,期初主要出于提升效率,最大程度地降低实施成本,与保障集群稳定性的目的: 更加智能,使用在线机器学习实时测算应用性能变化,并可作出简单的故障原因分析, 通过算法对各个单元的应用集群进行自然水位拉平.
1.如何用机器在无人介入的情况下,预测应用集群各个单元的性能;需要做很多事情:日常性能变化测量;应用发布性能变化测量;集群中单机的性能变化预测,与目标交易量下会有多少比例机器挂掉的预测,容量问题还是性能问题的判断等等等等。
2.为支持XX笔交易的业务目标,需要多少资源;或者说,现有XX些资源,最高可以支撑多高的交易量?
3.一个应用集群在什么样的物理资源利用率下稳定性与成本会是一个最佳配比?
4.资源预算.

我们先简单以一个在线web服务类应用进行分析,在线电商每天的流量波动与资源利用率是存在一定的关系的(当然也可以换成其它指标进行测算),我们将两项指标叠加,呈散点图形态

现在假设,我们设定资源利用率阀值为70%的cpu利用率,预测该应用集群的服务能力,我们利用上面呈现的散点图做一次拟合,延长趋势线,呈以下形态:

则求出,该应用极限能力在X%的资源利用率下的服务能力大致是Y.
但实际场景中,情况要复杂得多,在不同压力下,随着物理机的利用率整体饱和度的上升,性能会有一定的损耗,将不同压力下测算的服务能力记录,并作一次回归,预测出目标压力下,大致损耗度,并用刚才计算好的服务能力减去目标压力下的损耗度即可,

哪下一个问题来了,应用集群的资源利用率多少为极限值?这里只是一个假定,每个应用集群的极限能力都不相同; 首先前文已经提到,由于各个应用集群布署的物理机坑位不同,有可能超卖,也有可能会与资源占用多的应用布署在同一个物理核内,超线程会带来一定的影响,而一个物理核通常分为两个逻辑核,是否一个物理核的总能力/2则为两项占用该物理核逻辑核上的能力;假定100%的资源利用率为满负荷,则两个逻辑核各分50%的能力相对合理?

但实际情况是,占用两个逻辑核的应用集群利用率,在容量层次不齐的宏观情况下,有的偏高,有的偏低,这就会出现资源抢占问题。

如何识别某项应用集群合理的资源利用率是多少? 我们需要做一些事情,即除了对整个应用集群作上文中讲到的资源测算,还需要对每台单机作能力测算,这里我们随便拟定一个值,如单机负载如果超过80%是不可承受的,则我们在整体全链路压测时,会对每台单机做实时的负载预测,看在目标交易量下,多少比例的机器会超过最大的承受能力,该集群的总qps会有出现多少比例的损耗。 这里假定我们认为不允许有机器出现这样的情况,则当某台机器预测值达到最大承受能力时,则认为当前集群能力的合理负载应该在多少。

根据上文的描述,我们可以直接拿到测算好的各个应用集群的容量配比进行在线备容即可.通过后续每次的压测,对各个应用集群的预期资源利用率进行逐步逼近,最终达到整体备容目标.

正因为有了以上两个秘密武器,我们在双11之前就快速的做好了容量准备,同时双11一过,我们立刻对云资源进行一键下站,把资源归还到云的Buffer里,对公共云进行售卖。

企业级互联网架构Aliware,让您的业务能力云化:https://www.aliyun.com/aliware

相关文章
|
负载均衡 Cloud Native 数据库
构建高可用的云原生微服务架构:实现弹性和可扩展性
随着云计算技术的快速发展,云原生微服务架构成为了现代应用开发领域中的一种重要范式。它通过利用云服务提供的弹性和可扩展性,为企业构建高可用的、面向未来的应用程序。本文将探讨云原生微服务的概念、核心原则以及一些关键技术,帮助您设计和构建具有弹性和可伸缩性的架构。
1183 1
|
2月前
|
人工智能 算法 测试技术
StockMixer:上海交大推出预测股票价格的 MLP 架构,通过捕捉指标、时间和股票间的复杂相关性,预测下一个交易日的收盘价
StockMixer 是上海交通大学推出的基于多层感知器的股票价格预测架构,通过指标、时间和股票混合实现高效预测。
195 11
StockMixer:上海交大推出预测股票价格的 MLP 架构,通过捕捉指标、时间和股票间的复杂相关性,预测下一个交易日的收盘价
|
4月前
|
网络协议 数据挖掘 5G
适用于金融和交易应用的低延迟网络:技术、架构与应用
适用于金融和交易应用的低延迟网络:技术、架构与应用
121 5
|
4月前
|
存储 负载均衡 Kubernetes
混合云和多云策略:混合云架构设计详解
混合云和多云策略:混合云架构设计详解
192 1
|
10月前
|
存储 分布式计算 分布式数据库
【专栏】云计算与分布式系统架构在数字化时代的关键作用。云计算,凭借弹性、可扩展性和高可用性,提供便捷的计算环境
【4月更文挑战第27天】本文探讨了云计算与分布式系统架构在数字化时代的关键作用。云计算,凭借弹性、可扩展性和高可用性,提供便捷的计算环境;分布式系统架构则通过多计算机协同工作,实现任务并行和容错。两者相互依存,共同推动企业数字化转型、科技创新、公共服务升级及数字经济发展。虚拟化、分布式存储和计算、网络技术是其核心技术。未来,深化研究与应用这些技术将促进数字化时代的持续进步。
248 4
|
8月前
|
存储 设计模式 监控
探索微服务架构的弹性设计
【7月更文挑战第23天】在现代软件开发中,微服务架构因其灵活性和可扩展性而受到青睐。然而,随之而来的挑战是如何确保系统在面对故障时能够持续运行。本文将深入探讨如何通过弹性设计原则和实践来增强微服务架构的韧性,包括冗余、服务降级、超时控制等策略,并结合实例分析其应用。
|
8月前
|
设计模式 监控 Java
探索微服务架构的弹性设计模式
【7月更文挑战第19天】在现代后端开发中,微服务架构因其灵活性、可扩展性而受到企业的青睐。本文将深入探讨微服务架构中的弹性设计模式,包括其定义、重要性以及如何通过技术手段实现服务的高可用性和容错性。我们将通过实例分析,展示如何在微服务系统中应用这些模式以提高系统的整体稳定性和响应能力。
79 1
|
8月前
|
弹性计算 运维 Kubernetes
阿里云ECS与混合云策略的结合,不仅为企业搭建了一个既灵活又稳定的IT基础架构,还为业务的快速发展与创新提供了坚实的技术支撑。
【7月更文挑战第3天】阿里云ECS在混合云中扮演关键角色,提供弹性计算资源和多样计费模式,确保业务连续性与灵活性。通过VPC互通、应用迁移、数据同步服务,如VPC对等连接、DTS,实现云上云下资源的高效整合。结合安全解决方案,保证在混合环境下的合规与安全。阿里云ECS助力企业数字化转型,应对市场变化。
161 1
|
8月前
|
分布式计算 运维 大数据
混合云模式下 MaxCompute + Hadoop 混搭大数据架构实践。
除了资源效率和成本的优势外,混合云模式还为斗鱼带来了可量化的成本、增值服务以及额外的专业服务。阿里云的专业团队可以为斗鱼提供技术咨询和解决方案,帮助斗鱼解决业务难题。此外,计算资源的可量化也使得斗鱼能够清晰地了解资源使用情况,为业务决策提供依据。
|
9月前
|
存储 供应链 安全
区块链技术防止交易被篡改的能力主要依赖于其独特的架构和机制
**区块链技术通过分布式存储、去中心化网络、哈希链接、共识机制及加密算法确保交易防篡改。每个区块含前块哈希,篡改将破坏链式结构;共识机制如PoW、PoS保证交易验证;智能合约增强安全性。多层防护保障数据完整性和安全性,支撑其在多个行业中的应用。**

热门文章

最新文章