从哲学层面谈稳定性建设

news2024/11/24 16:44:40

背景

我(姓名:黄凯,花名:兮之)在阿里工作了五年,一直在一个小团队从事电商的稳定性工作。看了很多稳定性相关的文档,很少有能把稳定性说明白的文档。也有一些文档也能把涉及的方方面面说清楚,但是这些方方面面的来源和推导是不提的。我想尝试系统化体系化的讲稳定性讲清楚。因为哲学上讲共性和个性,那么事物都可以按照从共性到个性进行分层描述,我从哲学层面开始讲起,讲到分布式信息化系统层面,希望你能从某个层面获得帮助。能给你稳定性保障一些启发。
下面这个图是从物质拆分到具体信息系统,从物质拆分到基于具体业务的互联网类型信息化系统。我们想搞清楚稳定性是什么要一层层的去分析。

下面这个图是物质的生产过程(实践),从实践拆分到具体业务。其实可以更细,不过本文只挑选几个比较重要的层次讲解,读者可用继续细化。因为物质的生产会影响物质,我们想让生产的物质稳定,要搞清楚生产过程。

哲学层面

定义

从哲学层面讲稳定是物质的一种状态,即事物在持续量变的过程中,对外保持的关系基本不变,那么物质就是稳定的。而稳定性则呈现主观状态,即稳定性是使用物质的人对物质稳定的评价。这就告诉我们不仅要关注物质本身的稳定,还要关注物质不稳定后,尽可能降低使用物质的人的负面评价。通俗的来讲,就是如何让物质不出问题,出了问题如何降低影响面。

特点

所以我们要分析事物的稳定就要看看物质在持续量变过程中哪些对他有影响,改变其对外性质,找到影响稳定的点(出问题的地方)。一个是内部的组成和关系。另外一个是外部环境,外部环境中其他物质和他的关系。对于内部组成,比如一个用了很久的电视,可能里面的电容老化坏掉了,那么电视就坏了,内部模块出问题,导致整个物质发生了质变。对于外部环境,其本质也是影响内部组成而影响物质发生质变。比如现在的电动车在东北低温低区的续航和在南方地区的续航不一样的,其本质还是内部模块的结构发生了变化,但这种变化又是受环境影响引起的。
静态的看:

另外我们动态的看,物质经过产生,使用(可能伴有维护), 质变(消亡)的过程。此处我们可以看到这些环节从时间上都和物质有交互,都会影响物质的稳定性。

  • 物质的产生,可能是自然界自己产生的,或者人通过实践活动生产的,生产的过程如果随意,技术落后,可能导致最终物质不稳定。生产关系如果不能适配生产力,那么生产出来的东西稳定性也可能受影响。
  • 使用是一个物质出来给其他角色使用,那么这个物质在其他实践环节,可能就是个工具,那这个工具除了自身的稳定性外,在其他实践环节中能帮助其他实践中的主体取得改造客体的结果也是非常重要的,如果不能帮助其他实践主体达成目标,可能也会被认为是不稳定的,或者是无用的。举个列子你设计了个系统,比如说商家上架售卖的商品不允许随便下架。有一天商家发现他卖的东西亏了,要紧急下架,一下架就报错,对你来说是稳定性的,但是对于商家卖货的逻辑来说,这就是不稳定的了,为啥有时间能下架,有时候不能下架。这也是很多产品,研发人员觉的很稳定,运营觉得很不稳定的原因,因为你没让人家把的实践目的达成。
  • 维护本质上是减慢事物质变的过程,通过替换内部组件,维护外部物质的关系达成。比如数据库里面的数据量大以后,可能会出现查询超时等,我们可以替换更高级的数据库硬件,或者做一下历史数据迁移等,尽可能保持对外属性的一致。还有就是物质的性质就是发生变化了,如何保障物质和其他物质的关系稳定。比如技术系统出bug了,有些紧急操作是不是可以通过技术人员去替运营人员做。当然维护由于对系统改动了,也会引起稳定性问题。
  • 消亡是指物质发布质变的时候,如何降低对其他物质消极的影响。比如你要下线一个很多年在线的功能,如何降低这个功能下线对依赖这个功能的影响呢。当然也可能成为其他实践改造的客体,成了新的物质。

动态的看

另外稳定性是主观的,我们需要考虑使用者,以及对使用者主观性评价的影响,即生产关系层面的影响。就是有些时间你觉得明明是个小问题,但是使用者认为是个大问题,很可能是这个层面出问题了。我们在设置稳定性指标的时候,即要考虑使用者评价的客观,也要考虑使用者评价的主观。

利益分析

主要角色和利益诉求

物质生产者
  • 核心利益诉求:把能满足其他实践活动使用的物质生产出来
物质使用者
  • 核心利益诉求:物质要稳定的满足使用者改造客体的诉求。
物质维护者
  • 核心利益诉求:物质尽可能少出问题,减慢物质的质变过程。如果出了问题之后能尽快解决,尽可能降低和消除影响面。
物质
  • 核心利益诉求:能满足使用者的利益诉求,是生产者价值的体现。

对立统一分析

使用者和物质之间的对立统一

对立:使用者期望在自己实践过程物质保持稳定和物质天然存在量变而最终质变(即不稳定的趋势)之间的矛盾。
统一:物质存在的意义就是上一个实践活动为了满足这个实践活动的需求,和使用者在这个实践活动中对他的需求之间是统一的。
这是这个系统最主要的对立统一,如果这个对立统一不存在,整个系统将失去意义。

生产者和物质之间的对立统一

对立:生产过程的不稳定,不规范,以及物质本质不稳定 与 生产者期望生产出来的物质稳定之间的矛盾。
统一:物质的稳定也是生产者价值的体现和生产者对物质稳定性追求是一致的。

维护者和物质之间的对立统一

对立:维护者期望在自己实践过程物质保持稳定和物质天然存在量变而最终质变(即不稳定的趋势)之间的矛盾。
统一:物质的稳定以及物质稳定的评价是维护者价值的体现。

业务层面

在业务层面物质的产生,是通过公司生产来产生。物质传递到使用者的手中是交付环节。延长物质质变的流程是维护阶段。物质的质变,通常是下线报废来实现的。以及这些环节之间相互关系及其新成的生产关系都会影响稳定性评价,这些关系通常是一个公司内不同部门,不同组织,或者跨公司的组织或者部门。下面从一个业务的流程来分析不同流程对产品最终稳定性的影响。
image.png

生产环节

生产主要包括产供销,财税法, 这些环节也会影响最终物质的稳定性。比如原材料质量不合格,那么最终物质可能就比较容易坏。比如钱不到位,服务器不能及时购买,那你线上系统没有足够的机器运行,可能系统的稳定性就满足不了。

交付环节

有些物质对交付要求蛮高的,我们要通过设计合理的交付流程,来保障物质的稳定。比如一个玻璃杯子,如果不注意运输环节(将东西从生产者运到消费者手中),那么杯子可能路上就坏了,可能路上没坏,用几天就坏了。所以针对杯子的运输,我们需要用泡沫包裹,然后让运输人员轻拿轻放等。

使用环节

使用的时候影响稳定性的因素包括使用者使用方法得当吗,物质所依赖的其他物质和环境是符合预期的吗?所以我们出厂产品的时候就会提供说明书,告诉使用者正确的使用方法,也会说明需要的环境和工作条件。

维护环节

维护环境包含两个事情,一个事情是发现可能或者即将损害的某块进行替换或者保养。一个是产品出问题了,如何解决这些问题对使用者造成的影响,一方面是修复这个产品,另外一个就是将影响的方面也给修复或者补偿等。

下线(报废)

有些产品的质变影响可能不大,不需要特别关注,比如一个凳子突然坏了,人最多摔一下。 但是一个汽车如果行驶途中突然坏了,那么造成的影响是巨大的。质变就标志着物质不稳定了,但是我们还是希望它质变的时候带来的影响尽可能少。所以在设计生产环境,也要考虑一下下线(报废) 的时候,如何尽可能减少影响。

互联网信息化系统层面

当互联网企业出现后,区别传统企业生产和使用系统的人基本是跨组织的,生产和运营流程变的非常紧密,基本都是一个组织内部的人,这其实是生产关系发生了改变,适应了进步的生产力,提高了生产效率。同时这也给很多人分析稳定性的时候,不能把生产流程和使用流程区分开,混在一起讲,总感觉讲的不完整,缺点什么。
其实很多文章讲的稳定性主要集中在下面的章节中若干部分。我这儿就不讲的特别深入了,如果你负载那块,需要深入了解的,可以参考其他文章。
下面从整个常见的互联网行业,分布式信息系统的研发过程来看那些环节影响稳定性,如何设计流程,研发工具,改变组织架构来保障最终产品的稳定性。

信息系统研发

研发流程对稳定性的影响

  • 需求分析设计

一个无用的产品,稳定性无从谈起。稳定性是一种评价,使用者都不使用,那就没啥稳定的意义。所以作为开发人员一定要去思考产品设计的需求是不是真的解决了使用者的问题,不要浪费时间做无用的系统。

  • 技术方案设计
  • 开发和代码审核
  • 发布流程自动化,规范化
  • 发布
  • 如何预测问题并消除和防御。

研发生产工具对稳定性的影响

科学技术是第一生产力,好的生产工具,可以降低对研发者的依赖。如果很多流程都是靠人工处理的,比如以前商店结账的时候,都需要人工算,很容易出错。后来有了计算器,求解的过程不需要人操作了,大大降低了出错率,但是产品的单价还需要人输入,还是可能出错。现在计算机+扫码枪的出现,输入都不需要人操作了,直接扫条形码,出错率更低。所以做稳定性工作的同学,要尽可能将研发流中能信息化,自动化的都自动化,甚至包含整个研发流程本身这个流程也要信息化数字化。

研发的人,组织关系

研发者的个人素质,个人知识水平,个人对研发工具的熟练程度都会影响最终产品的稳定性。所以做稳定性建设的同学经常会组织技术分享,研讨会,开设知识论坛等,这些就是通过提升研发者个人知识水平。还有师兄帮带,一方面提升个人知识水平,另外一方面也让研发者尽快熟悉研发工具。还有有些公司(如阿里)会进行价值观建设,就是提升研发者的个人素质,提升个人的责任感,对研发软件系统负责。
研发组织的关系和对应的规则奖惩制度,也会间接影响产品的质量。一个混乱,内部矛盾较大的组织,很大可能研发的软件系统充满各种问题。我们看到公司会给每个研发者打稳定性的分,然后来 调整年终奖的比例。比如一次影响面较大线上故障,可能直接将年终奖归零,这都是通过组织的制度来影响产品质量的。

信息系统交付

交付流程对稳定性影响

你可能把系统交付给普通消费者使用,交付给运营使用,交付给其他B端客户使用。不同的交付对象,交付流程不一样。我观察到,很多开发同学不大关注交付流程,尤其是交付给运营的,认为需求变更发布到线上,就交付完了,没有考虑到如何让运营知道你的新功能上线了,运营怎么用你的新功能,这样如果流程不规范,那么运营会觉得你这个系统不稳定。还有交付给B端客户,很多研发团队的交付流程也不规范,拉个群,一堆开发在群里面,客户提个问题,研发很久不理,也没人跟进。那么客户认为这个交付流程是稳定的。还有和其他系统对接,没有将当前系统的各种异常情况讲清楚,客户没有充分了解,那生产出的最终系统会存在稳定性风险的。

技术对交付稳定性的影响

同理好的交付技术工具,保障了交付质量,从而保障最终物品的质量。比如给客户提供各种异常Case的Mock能力,让客户可以自助的完成各种场景的Mock。客户上线时候通过系统校验客户完成了各种场景的验证,保障上线的质量,从而保障线上系统的稳定性。

交付的人,组织关系

组织关系这块基本同研发流程差不多,这儿不展开讲了。

信息系统使用环节

信息系统本身(使用物)对稳定性的影响


这是一个比较通用的分布式信息系统的架构分层,我们需要再每一层都做稳定性建设,思考每一层会出哪些问题,出了问题需要怎么应对。比如为了因对机房的的问题,我们可能需要多机房部署。为了因为虚拟化计算平台异常,我们可能需要多云部署。对于我们一般的开发人员,能花费大量时间做的事情其实主要在合理使用分布式架构本身和分布式架构保障业务代码出问题之后减少影响这块。这儿简单展开一下。

分布式架构
  • 高可用
    • 服务治理: 限流,降级,熔断,隔离,负载均衡
  • 一致性
    • 分布式事务,按照实际业务需求选择,一致性强弱基本和性能成反比。

使用者对稳定性的影响

不同的使用者类型也是需要考虑的,可能是面向C端的消费者,可能是面向B端的企业客户,大概率可能都有。对于面向C端的消费者,易用性一定是第一位,一个不易用的产品,对于消费者来说就是个有问题的系统,不稳定的系统,同时还要系统尽可能兼容C端各种千差万别的环境,不同的手机,系统,网络,温度等等等。但是对于B端来说,B端业务逻辑相对复杂,我们要给B端提供操作手册,SOP要规范,对B端客户的环境相关可以做一些要求。所以我们做稳定性的人,需要考虑C端不同环境的兼容,也需要考虑B端如果不按照手册操作是不是会把系统搞挂。还要考虑使用者的数量,并发等。

线上问题应急

线上问题应急流程对稳定性影响

线上问题会可能影响到使用者(当然有些问题可能不会影响使用者)。我们需要解决如何快速的发现问题,如何降低对使用者的影响,一方面是怎么尽快解决线上问题,一方面是如何将受影响的用户和数据进行修复。我们维护稳定性建设的团队,其实在这一块做的比较多,建设各种可观测系统,添加各种告警。但是出了问题之后,应急预案做的比较少,这儿的预案一方面是止血,一方面是数据修复。还有流程上面,我们可能会根据不同的影响程度,设计不同的响应流程。

技术可以增加线上问题应急的稳定性

通过技术手段可以帮我们加速问题的发现,加速问题的诊断,加速问题的解决,保障应急流程顺畅高效。比如阿里内部会根据影响面自动拉群,拉人,让相关的人参与排查解决问题。

应急团队的人,组织架构对应急的影响

组织关系这块基本同研发流程差不多,这儿不展开讲了。

系统服务下线升级

系统服务下线或者不兼容升级,我们要考虑如何降低对依赖这个系统的人和组织的影响。 从稳定性建设方面来讲,我们需要梳理所依赖它,谁使用它。和依赖方和使用方沟通,我们要下线、不兼容升级,给他们提供相应的解决方案等。

组织关系对稳定性评价的影响

由于系统架构的复杂,基本上不可能一个团队维护整个系统,会有好几个团队(或者跨公司)参与维护。那么这些涉及的团队间的组织关系对稳定性也是很重要的,你依赖的一个重要组件的团队,对你们系统出问题,不积极响应那么解决,也会影响稳定性。
另外如果你的系统是ToB的,那么使用者的关系也可能会影响你系统稳定性的评价,毕竟稳定性是个感受,是个评价。这儿你可以考虑维护好客户关系出发,让系统变的”稳定“,但稳定是事物本质的属性,做好系统的稳定建设是根本。

总结

本文从演绎的角度从顶向下分析了稳定性建设的方方面面。但这并不是否认通过经验归纳的重要性。而是很多人没有机会站在整个公司的角度去看稳定性问题,只是其中的一个维度的某个层面上或者上下几个层面经验的总结,很难新成系统化体系化的结论。本文系统通过本文让大家能从最宏观的角度看待稳定性建设。

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

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

相关文章

办理公司诉讼记录删除行政处罚记录删除

企业行政处罚记录是可以做到撤销消除的,一直被大多数企业忽略,如果相关诉讼记录得不到及时删除,不仅影响企业招投标,还影响企业的贷款申请,严重的让企业资金链断裂,影响企业长远发展和企业形象。行政处罚是…

配置网页版的SQL Developer : Oracle Database Actions

我们知道SQL Developer有三种形式: 桌面版,这个最常用命令行版,即SQLcl网页版,即SQL Developer Web,最新的名字叫Oracle Database Actions, 本文讲述3,如何配置SQL Developer网页版。 第一步…

【面向就业的Linux基础】从入门到熟练,探索Linux的秘密(一)

主要帮助大家面向工作过程中Linux系统常用的命令联系,采用极致的实用主义,帮助大家节省时间。 文章目录 前言 一、linux系统 二、linux系统基本命令 1.Linux系统的目录结构 2. 常用命令介绍 3.命令演示 4.作业练习 总结 前言 主要帮助大家面向工作过程中…

「动态规划」打家劫舍的变形题,你会做吗?

213. 打家劫舍 IIhttps://leetcode.cn/problems/house-robber-ii/description/ 你是一个专业的小偷,计划偷窃沿街的房屋,每间房内都藏有一定的现金。这个地方所有的房屋都围成一圈,这意味着第一个房屋和最后一个房屋是紧挨着的。同时&#x…

C++ Easyx案例实战:Cookie Maker工作室1.0V

前言 //制作属于自己的工作室! 注:运行效果以及下载见Cookie Maker 工作室成立程序。 关于Cookie Maker工作室成立的信息,I am very happy(唔……改不过来了)。 OKOK,第一次用图形库写程序(图形…

基于Simulink的双端行波测距

1 输电线路故障仿真模型 基于双端行波测距理论,在MATLAB软件中搭建的三相50Hz的输电线路故障仿真模型如图1所示,该模型包含了三相电源、输电线路、故障发生器和示波器模块等。主要仿真参数设置如下:仿真时间为 0~0.1s,采用固定步长 10-7和ode3 算法&…

knoXSS(case01~10)

case 01: 先在每个框里都输入:<script>alert(1)</script> 检查源码 这里第三个和第四个点都被处理过了&#xff0c;所以先考虑第一个和第二个点 这里试了一下&#xff0c;发现GET也能传参&#xff0c;所以构造 成功 case 02: 这里发现变量a和这个似乎有关联&…

【C语言】Leetcode-312 戳气球

文章目录 题目思路代码如下 题目 链接: Leetcode-312 戳气球 思路 我们观察戳气球的操作&#xff0c;发现这会导致两个气球从不相邻变成相邻&#xff0c;使得后续操作难以处理。于是我们倒过来看这些操作&#xff0c;将全过程看作是每次添加一个气球。 首先 我们需要创建一个…

社交“学习伙伴”:Meta Llama助力对话升级

每周跟踪AI热点新闻动向和震撼发展 想要探索生成式人工智能的前沿进展吗&#xff1f;订阅我们的简报&#xff0c;深入解析最新的技术突破、实际应用案例和未来的趋势。与全球数同行一同&#xff0c;从行业内部的深度分析和实用指南中受益。不要错过这个机会&#xff0c;成为AI领…

【数据结构】排序——插入排序,选择排序

前言 本篇博客我们正式开启数据结构中的排序&#xff0c;说到排序&#xff0c;我们能联想到我之前在C语言博客中的冒泡排序&#xff0c;它是排序中的一种&#xff0c;但实现效率太慢&#xff0c;这篇博客我们介绍两种新排序&#xff0c;并好好深入理解排序 &#x1f493; 个人主…

HCIA--NAT地址转换(复习)

先交换后路由&#xff1a; 1&#xff1a;在交换机上创建vlan&#xff0c;进入接口划分vlan&#xff0c;接着在交换机连接路由器的接口上建立trunk干道 2&#xff1a;在路由器上&#xff0c;先配置物理接口IP&#xff0c;接着在路由器上创建两个子接口&#xff0c;将建立的vla…

100道面试必会算法-32-二叉树右视图用栈实现队列

100道面试必会算法-32-二叉树右视图&用栈实现队列 给定一个二叉树的 根节点 root&#xff0c;想象自己站在它的右侧&#xff0c;按照从顶部到底部的顺序&#xff0c;返回从右侧所能看到的节点值。 示例 1: 输入: [1,2,3,null,5,null,4] 输出: [1,3,4]示例 2: 输入: [1,n…

powershell:使用IProgressDialog接口创建windows标准进度对话框。

禁止任何形式的抄录&#xff0c;转载请附上本文章地址 Add-Type using System; using System.Collections.Generic; using System.ComponentModel; using System.Linq; using System.Runtime.InteropServices; // 定义ProgressDialog类&#xff0c;实现IProgressDialog接口 …

数据库之PostgreSQL详解

一、PostgreSQL介绍 PostgreSQL是一个功能强大的 开源 的关系型数据库。底层基于C实现。 PostgreSQL的开源协议和Linux内核版本的开源协议是一样的。。BDS协议&#xff0c;这个协议基本和MIT开源协议一样&#xff0c;说人话&#xff0c;就是你可以对PostgreSQL进行一些封装&a…

K210视觉识别模块学习笔记5:(嘉楠)训练使用模型_识别人脸

今日开始学习K210视觉识别模块:(嘉楠)训练与使用模型_识别人脸 亚博智能的K210视觉识别模块...... 固件库版本: canmv_yahboom_v2.1.1.bin 之前的训练网址部署模型时需要我们自己更换固件&#xff0c;而且还不能用亚博的图像操作库函数了&#xff0c;这十分不友好&#xff0…

vue3关于配置代码检查工作流,husky出现创建错误问题的解决方法

关于配置代码检查工作流&#xff0c;husky出现error: cant create hook, .husky directory doesnt exist (try running husky install) 首先根据截图发现最明显的信息是error&#xff0c;中文译为-----错误&#xff1a;无法创建钩子&#xff0c;.husky 目录不存在&#xff08;尝…

【数据结构】十二、八种常用的排序算法讲解及代码分享

目录 一、插入排序 1)算法思想 2&#xff09;代码 二、希尔排序 1&#xff09;算法思想 2&#xff09;代码 三、选择排序 1&#xff09;算法思想 2&#xff09;代码 四、堆排序 1&#xff09;什么是最大堆 2&#xff09;如何创建最大堆 3&#xff09;算法思想 4&a…

Databricks Data Warehouse

Warehouse features 原来的data warehouse痛点&#xff1a; 用例不兼容的支持模型的安全和管理不兼容不相交和重复的数据 ETL workloads Streaming Architecture Data Science and ML

演讲全文|林涛:MongoDB助力智能制造出海控本增效

5月29日-30日在上海世博中心举办的亚马逊云科技中国峰会圆满结束。本文整理了MongoDB北亚区方案与咨询总监林涛在白金讲堂的演讲全文&#xff0c;就《MongoDB助力智能制造出海控本增效》话题与大家共同探讨。 白金讲堂演讲视频 从全球经济竞争的角度看&#xff0c;中国制造业…

原来你长这个样子啊,Java字节码文件

字节码文件 字节码文件是一种二进制文件&#xff0c;扩展名为.class 通过 javac 将源码编译得到&#xff0c;是一种中间形式的代码&#xff0c;这种中间形式的代码让Java有了“一次编译&#xff0c;多次运行”的跨平台特点。 字节码文件的组成 由5大组成部分&#xff1a;基础…