聊一聊,如何做好垂直域稳定性(1)

本文涉及的产品
性能测试 PTS,5000VUM额度
简介: 聊一聊,如何做好垂直域稳定性



这是阿里技术2022年的第17篇原创文章

( 本文阅读时间:20分钟 )


一个小小的故障就可能造成巨大的负面影响,因此稳定性工作复杂却又至关重要。本文将通过故障预防、修复、复盘来讲解该如何建设一个稳定性体系。

来到阿里后,我的工作内容一直都是商品中心的稳定性,这份工作对于我个人在技术和经验上的成长提升是无比巨大的。在我看来,稳定性是一个极为复杂的工作,对人的能力考验极大,本文希望和大家一起了解:


  • 稳定性是做什么的?

  • 稳定性到底怎么做?

  • 做好稳定性,需要什么样的能力?

  • 怎么从稳定性零散的事情中创造价值?



01

什么是稳定性

1.1 稳定性的定义

在我看来,稳定性工作是指日常保障系统安全生产的同时,利用技术手段以及规范开发流程,使系统在不断的业务迭代中熵增达到最小化的一种工作。作为一家互联网公司,稳定性工作本质上就是保障安全生产。一个故障,就可能会造成很大的负面影响,举例几个之前有过耳闻的故障:


  • 某故障使下单阻塞,导致某线下业务受到很大影响;

  • 很多年前春节时订正数据,由于脚本问题,导致部分订单被确认收货;

  • 由于arguments版本不一致,同时进行了无灰度的操作,导致某业务大范围宕机;


由此可见,集团内部的故障,轻则影响用户体验、商家体验,重则对人民财产造成重大损失;因此,保障安全生产是企业发展的头等大事。

1.2 稳定性岗位的工作内容

稳定性的事情看上去可能比较散,但结合我自己的思考,我将稳定性的价值体系划分为几个方面:

✪ 1.2.1 日常稳定性

⍟ 业务保障

大促保障、业务日常的答疑等等,通过这些事情,稳定性同学会与业务同学配合,从底层性能、技术层面,更好地推动业务向前发展。日常的答疑工作是稳定性同学投入时间最多的内容之一,很多问题都会第一时间流入到稳定性同学手中


  • 技术问题:应用架构不了解,或由于系统稳定性问题导致上游出现限流、超时等;

  • 大促问题:很多关于大促的问题,大促跨域合作的横向事宜等;

  • 业务问题:日常碰到的影响业务体验的问题,比如某些业务出现了阻塞或者数据错误等。


对于体量较大、较为核心的团队,一天涌入的问题是很多的,我们的思考和处理方案如下:


  • 技术支持:所有问题的入口,首先通过答疑群接触到的就是技术支持同学,这部分能cover大部分的问题;

  • 每周答疑:技术支持并不深入了解底层业务和代码,对于他们无法处理的问题,会流转到每周答疑同学身上,由商品域的同学每周轮换,负责答疑和发布;

✪ 1.2.2 大促 & 活动保障

稳定性另一个核心就是负责大促和重保活动。每一次大促,上到业务,下到中台、基础设施,都需要抽出人力进行保障,每个域的稳定性同学则是其中的中坚力量。下面我着重从流程和内容上讲一下大促保障手段,可能不同同学面临的场景不同,但整个理论应该是相通的:

⍟ 保障流程

  • 大促准备:活动开始前开始进行一系列准备工作,如入口流量、各应用容量的评估,预案、规则的梳理,建站压测等。

  • 全链路加固:这个阶段会根据正式期的流量模型进行频繁的压测来找出系统问题,建立相关的监控防线,压测会一直持续到正式期开始。

  • 作战保障:从压测期间发现的具体问题出发,逐个解决,并制定相关的作战手册等,完善大促保障机制。

  • 大促预热:这个阶段一般在大促正式期前几天开始,一般会执行一些清理和重启的任务,混部扩容以及一些提前执行的预案、预热任务等也会启动。

  • 大促保障:正式进入保障期,核心作战时间保障活动,盯盘,发现问题及时播报;峰值结束后,需要关注相关预案及资源是否下线。

⍟ 工作内容

大促稳定性保障的工作比较复杂,在这里先放一张图,让没有参与过大促的同学来点体感:

虽然看起来简单,但真实的保障过程远比这些事情更多,面临的压力也比想象的大很多,即使在大促日渐常态化的今天,参与大促保障、经历阿里千万级复杂流量模型洗礼仍然是提高个人能力的最佳方式。

✪ 1.2.3 优化专项 & 链路治理

保障业务不断发展时,由于系统不断的迭代,必然会导致熵增,原来可能较为稳定的链路,会因为迭代而不断腐化。同时,如618、双11等大型活动,也不断挑战系统的极限。一句话来总结:业务发展(系统变更)不断的挑战着我们系统的稳定性,我们需要持续不断的进行性能优化,保障系统的高可用,来适应越来越庞大的业务。不同的优化专项,在不同的场景下做法可能也不同,风险也会比日常的需求高很多。

⍟ 产生变更

随着业务不断的迭代,不可避免地会发生变更,如更新代码、发布配置或做运维层面的变更等,而这些变更则可能引入一些未知的问题,这些问题可能会瞬间暴露出来,或积压一段时间后喷涌式的爆发,一般来说,后者产生的影响可能会更大一些。

⍟ 发现问题

故障定级经常会讲提前发现,如果能够提前发现故障,不仅能降低或者避免因故障带来的损失,也能将故障等级缩小。那么,如何主动发现由变更产生的问题?这一部分则要依赖稳定性建设时比较重要的一环 — 监控告警:


  • 我们在上线业务代码前,根据自己判断出的可能产生问题的点,输出的业务日志告警。

  • 容器与中间件性能相关的全景监控大盘。

  • 在线与离线等数据对账相关的大盘。


当然,监控不可能百分之百覆盖到所有的问题,也有很多问题会从其他侧反馈过来,此时就要盘点出自己的监控体系中到底还有哪些疏漏,并逐渐完善。

⍟ 解决问题

大致为高可用问题和数据一致性问题两类,针对不同场景有不同的解决方法,高可用问题大家可能比较熟悉了,优化起来目标也比较明确,技术难度有高有低,不详细展开讨论。

✪ 1.2.4 成本缩减

大部分的性能优化,提升系统的性能仅仅是一方面,另一个作用则是通过性能优化提高的性能压缩技术成本。同时,效能提升也是与稳定性同学有关的一件事情,通过制定更好的开发规范以及流程,来帮助同学们提高开发体验和工作效率,也可以将更多的时间投入在业务发展上,来进一步促进业务发展,从而形成一个良性循环。在我个人看来,我将成本划分为两类:

⍟ 效能提升 — 人力成本

人力成本受开发效率影响,效率越高,一个需求需要的人力成本就越低;影响人力成本的原因有很多,解决方案这里不继续展开,简单列举几个会影响到人力成本的因素:


  • 软件复杂度:不合理的架构设计,以及拥有很长时间历史包袱的应用,由于其代码的复杂度越来越高,会让开发人员的开发效率明显降低,要定时对应用中的代码进行重构,增加可读性。

  • 测试 & 回归:作为开发过程中的重要一环,为了降低故障频率,自测往往占据了比开发更长的时间,因此提升自测的效率和准确度尤为重要。

  • 工作流程:不合理的流程也会拖慢工作进度,如工作分配不合理,责任互相推诿等;对工作职责的细分没有明确的定义,或者对于问题的推进没有严格的流程和产品化的工具,是这个问题发生的核心原因。

⍟ 资源管控 — 技术成本

技术成本主要分为两类:


  • 计算成本:以内存运算为主,如容器、计算型中间件、外部平台等,往往流量越高则产生的计算成本越高,因此管控计算成本可以从链路、性能优化上入手,让同等流量下所需要的算力降低。

  • 存储成本:DB等偏重于存储的中间件,存储的数据越多,占用的磁盘空间越大,存储成本则越高,因此管控存储成本可以从数据治理入手。


计算成本与存储成本并不是完全分离开的,举例缓存,空间存储等中间件,往往是计算(读写操作)与存储并存,那核算成本的方式以长板为主


在成本缩减中,技术成本占的比例是最高的,如何帮助缩减掉业务增长时疯狂扩张的成本,也是稳定性同学的一个重要课题。


相关实践学习
通过性能测试PTS对云服务器ECS进行规格选择与性能压测
本文为您介绍如何利用性能测试PTS对云服务器ECS进行规格选择与性能压测。
相关文章
|
4月前
|
测试技术
软件设计与架构复杂度问题之区分软件维护、演进和保护(苟且)如何解决
软件设计与架构复杂度问题之区分软件维护、演进和保护(苟且)如何解决
|
4月前
|
Cloud Native
核心系统转型问题之平衡核心架构中的功能性与非功能性需求如何解决
核心系统转型问题之平衡核心架构中的功能性与非功能性需求如何解决
|
4月前
|
SQL 分布式计算 大数据
Android项目架构设计问题之平衡技术选型与业务需求之间的关系如何解决
Android项目架构设计问题之平衡技术选型与业务需求之间的关系如何解决
68 0
|
5月前
业务系统架构实践问题之领域设计的重要性如何解决
业务系统架构实践问题之领域设计的重要性如何解决
|
5月前
业务系统架构实践问题之如果一个域看起来太小问题如何解决
业务系统架构实践问题之如果一个域看起来太小问题如何解决
|
5月前
|
数据库
交易链路设计原则&模式问题之在软件开发中,平衡业务需求和平台能力的边界,如何解决
交易链路设计原则&模式问题之在软件开发中,平衡业务需求和平台能力的边界,如何解决
|
7月前
|
监控 Java 数据库
揭秘Java性能调优的层次 | 综合多方向提升应用程序性能与系统高可用的关键(架构层次规划)
揭秘Java性能调优的层次 | 综合多方向提升应用程序性能与系统高可用的关键(架构层次规划)
106 0
做了多年开发的你发现自己的水平一直上不去,一篇文章教你如何提高开发水平的方法(二)
做了多年开发的你发现自己的水平一直上不去,一篇文章教你如何提高开发水平的方法
做了多年开发的你发现自己的水平一直上不去,一篇文章教你如何提高开发水平的方法(二)
|
Oracle 关系型数据库 Java
做了多年开发的你发现自己的水平一直上不去,一篇文章教你如何提高开发水平的方法(一)
做了多年开发的你发现自己的水平一直上不去,一篇文章教你如何提高开发水平的方法
做了多年开发的你发现自己的水平一直上不去,一篇文章教你如何提高开发水平的方法(一)
|
存储 监控 安全
聊一聊,如何做好垂直域稳定性(3)
聊一聊,如何做好垂直域稳定性
150 0