稳定性与高可用保障的工作思路

简介:稳定性与高可用性是老生常谈的两个词。凭借经验和感受我们知道,提高系统的这两项指标,系统会更加健康,产品也会有更好的用户体验。但是如果要给稳定性和高可用性下一个定义该如何表述?稳定性和高可用性这二者又有何区别和联系?我认为首先要理解好这两个问题,才能够设定清晰的目标,系统地制定完整可行的方案。

作者 | 字恒

深入理解稳定性与高可用性

稳定性与高可用性是老生常谈的两个词。凭借经验和感受我们知道,提高系统的这两项指标,系统会更加健康,产品也会有更好的用户体验。但是如果要给稳定性和高可用性下一个定义该如何表述?稳定性和高可用性这二者又有何区别和联系?我认为首先要理解好这两个问题,才能够设定清晰的目标,系统地制定完整可行的方案。 

在维基百科上搜索稳定性,定义如下:

稳定性是数学或工程上的用语,判别一系统在有界的输入是否也产生有界的输出。若是,称系统为稳定;若否,则称系统为不稳定。

再看看高可用性的:

高可用性(英语:high availability,缩写为 HA),IT术语,指系统无中断地执行其功能的能力,代表系统的可用性程度。是进行系统设计时的准则之一。高可用性系统与构成该系统的各个组件相比可以更长时间运行。

首先从稳定性的定义中提炼出关键的词语 -- 系统、输入、输出。在蚂蚁当下的技术架构中,可以把一个应用当做系统,应用之间的服务请求为输入,服务响应为输出,当服务响应符合预期时认为应用系统是稳定的。当他们相互组合形成一个更大的系统,作为业务产品对用户表达时,用户的请求作为输入,产品的表达作为输出,当产品功能正常运行时可以认为产品系统是稳定的。综上,关于稳定性的定义我们可以总结归纳为 -- 当系统接收输入后,能够产生正确的、符合预期的输出,称系统为稳定;否则,称系统为不稳定。 

再回到命题上,为什么叫稳定性保障?能不能换一个说法叫提高稳定性?通过上文的定义我们可以总结出,稳定性描述的是系统的行为。一个系统是否稳定,就像我们评价一个人是否健康一样,很难用陈述的方式进行完整的描述,去量化。但是却可以通过否定的方式进行快速地判断。人们通过良好的饮食和生活习惯来减少疾病的发生,保持身体的健康。保障系统的稳定性或者说提高系统的稳定性也是如此,我们需要通过各种方法来避免那些不稳定的情况发生。所谓的更稳定,客观上并不存在,是主观上希望避免或者减少不稳定的情况发生。 

与稳定性不同,可用性是一个可以量化的指标,计算的公式在维基百科中是这样描述的:

根据系统损害、无法使用的时间,以及由无法运作恢复到可运作状况的时间,与系统总运作时间的比较。

我们经常听到的3个9(99.9%),4个9(99.99%)度量的就是系统的可用性,高可用就是要保证系统的这个指标维持在一个高水平。在公式的定义描述中,将系统的运行时间分成了三个部分:

  1. 系统正常运作的时间,即系统处于稳定状态的时间。
  2. 系统损害、无法使用的时间,即系统处于非稳定状态的时间。
  3. 系统由无法运作恢复到可运作状况的时间,即系统由非稳定状态恢复到稳定状态的时间。

系统的可用性和系统的稳定性是成正相关的。不过在现实生活中,系统是不可能永远处于稳定状态。逆向思考,将上述的公式进行转换,更有利于我们进行分析: 

至此,本次命题的目标,KPI就清晰了。保障系统的稳定性和高可用的目标是使系统处于稳定的工作状态,对用户不产生负面的影响,避免线上问题和P级故障的发生。核心kpi是系统的可用性。为了提高系统的可用性,我们应该首先保障系统的稳定性,减少非稳定状况的发生,其次当系统由于各个组成部分发生故障,出现非稳定状态时,能够快速发现并将其恢复到稳定可用的状态。

稳定性与高可用保障的核心思路

 通过上文的推演,针对提高系统可用性这一目标,我们能够得到两个基本的解题思路。按图索骥,为了解决问题,首要的任务是发现和定义问题。因此为了提高系统的稳定性,我们先列举应用系统中常见的非稳定的情况,再一一对症下药:

  • 功能:应用程序执行的功能出现错误,不符合预期。
  • 容量:当系统接收的请求数量增加时,应用程序无法正常处理,出现异常或超时,导致服务失效。
  • 安全:当系统接收到的没有授权的或者恶意攻击的请求时,应用程序出现异常甚至服务失效。
  • 容错:对于用户错误的使用方式, 应用程序无法合适地处理。

当上述情况发生时,就意味着系统处于不稳定的状态,需要我们能够及时发现并进行处理。而造成这些问题的原因,在软件系统中通常可以归结为以下三类:

  • 人为故障:在开发软件的各个环节中思考不充分,或者执行时粗心导致的各类问题。
  • 硬件故障:网络不通,硬盘空间不够,内存崩溃等。
  • 软件故障:线程池异常,JVM异常,中间件或其他依赖的应用服务异常。

对于一个动态演进的系统而言,我们没有办法将故障发生的概率降为0,只能通过在软件生产的过程中,建立流程规范和机制来尽量减少其发生。其次对于一个运行的系统,我们需要建立并完善监控和预警机制来及时发现系统中的故障,并通过执行预案使系统快速恢复。

基于上述结论,为了提高系统的可用性,需要从以下三个方面入手开展工作:故障预防,故障发现和故障恢复。

人犯错的几率是远远大于机器的,因此故障预防最重要的是建立一套机制,在团队内达成共识并持续按照此流程开展研发工作,从而减少个人因素(思考、执行、状态等方面)对系统稳定性的影响。而故障发现以及故障恢复,则是需要通过系统监控和应急方案来快速发现系统异常并恢复,从而尽量减轻故障的影响面。下面以蚂蚁日常的产品研发流程为例,从功能、容量、安全、容错这4个核心要素出发,给出一套方案仅供参考。 

研发规范

  • 设计阶段
  • 团队细分文档模板
  • 高可用设计规范
  • 编码阶段
  • 代码规范
  • 通用代码规范
  • 工程结构规范
  • 单测覆盖率
  • 单测通过率
  • 代码覆盖率
  • 日志规范
  • 安全漏洞修复规范
  • 发布阶段
  • 变更规范:三板斧

容量保障

  • 容量评估
  • 机器容量
  • DB容量
  • 缓存容量
  • 压测摸底
  • 限流方案
  • 降级方案

监控告警

  • 日志规范
  • 监控梳理
  • 应用基础监控
  • 网关监控
  • 服务监控
  • 业务监控
  • 限流监控
  • 告警规范
  • 数据核对

应急快反

  • 日常预案
  • 硬件异常预案
  • 中间件异常预案
  • 业务异常预案
  • 大促预案
  • 预案执行规范

总结

如何做好稳定性和高可用保障是一个很庞大的命题,其中的任一小部分内容在内网都可以搜到大量的文章。写这篇文章的目的是总结一下自己对稳定性和高可用保障工作的理解,给大家分享一套系统的框架思路。希望大家在读后能够更全面的了解安全生产,不陷于细节。

原文链接

本文为阿里云原创内容,未经允许不得转载。 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/510976.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

腾讯云数据库自研内核全新升级 新架构比原先性能提升20%

9月16日,腾讯云数据库自研内核TXSQL完成了全新升级。搭载了新一代内核的云数据库在性能上较之前提升超过20%,延迟降低80%。目前,新一代内核TXSQL已应用于腾讯云数据库MySQL、分布式数据库TDSQL、云原生数据库TDSQL-C等多款主流云数据库产品中…

系统性能分析从入门到进阶

简介:本文以系统为中心, 结合日常工作和用例, 由浅入深地介绍了性能分析的一些方法和体会, 希望对想了解系统性能分析的同学有所帮助。 作者 | 勿非 本文以系统为中心, 结合日常工作和用例, 由浅入深地介绍了性能分析的一些方法和体会, 希望对想了解系统性能分析的…

宜搭小技巧|第一时间看到审批进度?消息通知来帮你

简介:「消息通知」自动发送,再也不用担心错过流程审批进度! 今天,宜小搭要申请出差,为了第一时间获取审批进度,他频繁刷新审批页面,这样既麻烦同时也浪费了大量时间,影响其他工作。…

一看即会:Serverless 应用开发的 7 个实战小技巧

简介:干货满满,马住收藏! Serverless 应用开发的 7 个经验心得 作者说:Serverless 架构下的应用开发,与传统架构的应用开发还是有比较大的区别点的,例如天然分布式架构会让很多框架丧失一定的"便利性…

如何使用 Serverless Devs 部署静态网站到函数计算

简介:手把手教你:如何使用 Serverless Devs 部署静态网站到函数计算。 前言 公司经常有一些网站需要发布上线,对比了几款不同的产品后,决定使用阿里云的函数计算(FC)来托管构建出来的静态网站。 FC 弹性实例自带的50…

一个好的科技公司logo长这样

简介:一个好的科技logo能体现出行业独有的专业性和技术优势,让你的公司科技感加满! 近年来,越来越多的初创公司崭露头角,其中科技互联网公司的比重非常高。小云也收到很多朋友的留言,询问科技类公司应该怎…

系列解读 SMC-R (二):融合 TCP 与 RDMA 的 SMC-R 通信 | 龙蜥技术

简介:本篇以 first contact (通信两端建立首个连接) 场景为例,介绍 SMC-R 通信流程。 文/龙蜥社区高性能网络SIG 一、引言 通过上一篇文章 《系列解读SMC-R:透明无感提升云上 TCP 应用网络性能(一)》我们了解到&…

北京大学、阿里巴巴成立联合实验室,聚焦人工智能理论和创新算法研究

9月17日,在北京大学智能学科建设20周年大会上,北京大学和阿里巴巴共同宣布成立“北大-阿里妈妈人工智能创新联合实验室” (以下简称实验室)。实验室将聚焦人工智能前沿领域的理论、方法与关键技术展开研究,为社会和企业…

智能开放搜索上线定制分词器

简介:智能开放搜索上线定制召回模型-定制分词器功能,满足各行业、垂类、业务特殊,对搜索有较高分词要求的客户,提升语义理解能力,精准召回用户搜索意图。 NLP算法在搜索链路中的应用 这是一个完整的从查询词到搜索结…

云端渲染时长1.58亿核小时,阿里云助力国漫巨制《新神榜:杨戬》提升视效

当前,追光动画新作《新神榜:杨戬》(以下简称“杨戬”)正在热映,制作水准再次升级。无论是“水墨特效太极图大战”,亦或神女婉罗的灵动舞姿,还是元神现身的超燃瞬间,都极具视觉震撼。…

如何开一场高效的迭代排期会 | 敏捷开发落地指南

简介:如何开一场高效的迭代排期会,高效落地敏捷开发,先从这3个关键活动着手,通过本文你将了解到什么是敏捷开发、什么是双周迭代、如何高效地开展排期会,以及如何在云效项目协作Projex 中落地排期会相关事宜。 摘要&a…

Linux 中如何获取文件的绝对路径

我们都知道,在命令行可以使用 pwd 命令来获取当前目录的完整路径(绝对路径):pwd那么,如何获取文件的绝对路径呢?有下列几种方法,可以打印文件的完整路径:readlinkrealpathfindls 和 …

EasyCV开源|开箱即用的视觉自监督+Transformer算法库

简介:EasyCV是阿里巴巴开源的基于Pytorch,以自监督学习和Transformer技术为核心的 all-in-one 视觉算法建模工具。EasyCV在阿里巴巴集团内支撑了搜索、淘系、优酷、飞猪等多个BU业务,同时也在阿里云上服务了若干企业客户,通过平台…

开源数据库为什么能捕获开发者的心?

【CSDN 编者按】开源数据库的重要性,早就不言而喻。早期的自由软件开发者和初创公司,很多都受益于开源数据库。伴随着曾经的初创公司羽翼逐渐丰满,它们的开发者文化渗透到整个生态系统中,更多的人开始关注这些初创公司采取的方法&…

“消息驱动、事件驱动、流 ”基础概念解析

简介:本文旨在帮助大家对近期消息领域的高频词“消息驱动(Message-Driven),事件驱动(Event-Driven)和流(Streaming)”有更清晰的了解和认知,其中事件驱动 EDA 作为 Gartn…

KubeVela 1.3 发布:开箱即用的可视化应用交付平台,引入插件生态、权限认证、版本化等企业级新特性

简介:得益于 KubeVela 社区上百位开发者的参与和 30 多位核心贡献者的 500 多次代码提交, KubeVela 1.3 版本正式发布。相较于三个月前发布的 v1.2 版本[1],新版本在 OAM 核心引擎(Vela Core),可视化应用交…

阿里云发布企业云原生IT成本治理方案:五大能力加速企业 FinOps 进程

简介:阿里云企业云原生 IT 成本治理方案助力企业落地企业 IT 成本治理的理念、工具与流程,让企业在云原生化的过程中可以数字化地实现企业 IT 成本管理与优化,成为 FinOps 领域的践行者与领先者。 作者:莫源 云原生技术与降本增…

阿里云数字化安全生产平台 DPS V1.0 正式发布

简介:数字化安全生产平台则帮助客户促进业务与 IT 的全面协同,从业务集中监控、业务流程管理、应急指挥响应等多维度来帮助客户建立完善专业的业务连续性保障体系。 作者:银桑、比扬 阿里云创立于 2009 年,是全球领先的云计算及…

玩转小程序压测

简介:小程序是移动互联网时代非常重要的流量入口。为了避免因系统性能瓶颈导致用户在使用过程中出现白屏、异常报错等问题影响用户体验,小程序在新功能上线前需要做好压力测试,评估出系统的承载能力,并以压测结果配置限流。让系统…

好的每日站会,应该这么开 | 敏捷开发落地指南

简介:高效落地敏捷开发,先从这3个关键活动着手。在敏捷迭代中,虽然迭代周期比较短,但依然需要对迭代过程进行有效跟进。如果在输入、过程、输出环节,没有要求,每日站会(迭代跟进)将会…