一、前端稳定性规约该如何制定

news2024/9/28 1:27:09

前言

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

前端稳定性的体系建设大约可以分为了发布前,发布后,以及事故解决后三个阶段。

在稳定性这一领域, 人的意识和经验与平台能力支撑一样重要。需要依赖平台提供的稳定性工具,但也需要对开发的过程和处理机制进行进一步规范,加强大家的稳定性意识。所以也分为了机制&规约 和 工具&平台能力两部分。

在机制和规约上,需要有整套规范的保障, 和RCA的介入。小范围的线上问题, 都需要经过系统性的复盘。在处理线上问题过程中,处理动作和流程需要遵循规范。

平台能力支撑方面,主要可分为线上问题的排查能力、报表分析能力、用户行为串联以及白屏率指标和智能报警能力。

稳定性五大规范

原则:线上稳定性是第一优先工作

  • 线上已知的稳定性问题,永远是第一优先级* 收到报警先评估影响,如果是稳定性问题必须停下一切去处理* 线上服务即使是偶发的Crash,也必须追查触发原因* 线上稳定性隐患,需要记录并在每次迭代的时候考虑修复排期
  • 敬畏每一条报警,不能无视线上报警* 拆分重要报警和不重要的提醒* 重要的报警可以设置电话报警* 业务负责人/值班人,夜间需要保持电话畅通
  • “当时在……” /“因为……没看到报警”都是可耻的辩解行为* 设置合适的互备人员* 把报警发到群里
  • 就算不是自己负责的业务,也需要尽量补位* 就算不是自己负责的服务,看到线上问题都可以通告、找人确认,确保已经有人在跟进

处理问题:先通告,后处理;先止损,再查因

  • 先通告,后处理* 线上出现问题后,除了既定的快速止损 SOP 外,一定要先通告,后处理。* 通告的好处:* 避免多人操作冲突* 和团队通报进展* 引入更多人复查
  • 先止损,再查因* 【回滚】上线过程出问题,不要想为什么,直接回滚* 【切流】单可用区出现问题,优先尝试切流* 【降级】夜间高峰期出现失败率增长,大概率是容量问题,优先尝试降级限流和扩容

线上变更:有灰度,做检查,不跨区,可回滚

  • 变更有灰度* 灰度常见方式是:Canary实例、分区操作等* 实验属于策略灰度,从稳定性角度看是全局的
  • 每个节点做检查* 光有灰度也不行,需要在灰度等待足够时间,并且完成明确的检查项* 检查项需要经常更新,如果有误报需要及时清理,避免狼来了现象
  • 单次操作不跨区* 对于已经双活部署的服务,操作时需要分可用区操作,这样如果操作有问题,可以通过切流尽快止损
  • 所有变化可回滚* 可回滚:回滚总时间 < 变更总时间* 每一个对线上的变更操作,都需要有明确的回滚方案* 尽可能采用幂等操作或声明式接口去执行操作

高可用设计:Design For Failure

  • 考虑最坏情况,任何单个基础设施都是会故障的* 公有云上,任意单一资源 ID 代表的设备,“无论他承诺了多高的可用性”,都是会故障的
  • 处理超时* 设置backup request控制长尾超时,而不是设置很大的超时* 拆分不同响应时间的业务场景,分别设置超时
  • 对数据做兼容性/完整性检查* 0值,空值特别需要注意

管理要求:允许试错、严惩违规

  • 允许试错* 大胆假设,小心求证* 踩坑是正常的* 特别鼓励不畏困难,解决历史遗留问题的行为
  • 严惩违规* 明确定下的规则,需要被严格遵守* RCA后的Action Item需要及时处理* 写出 BUG 是正常的,但不做任何测试就上线是违规的* 上线出现问题回滚是正常的,但上线过程不做检查是违规的* 偶尔的误操作是可以被谅解的(当然还是尽量不要出现),但企图掩盖误操作的行为是违规的

前端发布SOP

1、发布计划

开发时间>3PD项目,均需要给出发布计划

  • 需求背景:简单介绍本次需求背景
  • 实现方案:开发设计方案文档 & 系分方案
  • 主要改动点:改了那些页面,那些业务模块
  • 影响范围:评估改动影响范围
  • 发布顺序:结合后端发布计划,确定发布顺序(service、配置、前端项目的发布顺序)。
  • 监控指标:确定当前版本需要监控指标,比如白屏,接口okr,js error,客户端crash率,OOM率等等
  • 应急预案:降级开关/预案、切流开关/预案、回滚方案

2、发布分支

必须是master分支

3、发布时间

  • 法定工作日(不含加班日)尽量避开业务高峰期(各业务需自行判断)* 例如以下系统,10点~11点尽量不要做发布,建议中午12点~2点,下午3点之后进行发布
  • 灰度canary实例的时间至少经过一个业务高峰,灰度满两小时

4、发布前提

  • Bug确认修复完毕
  • UI走查通过(有设计稿)
  • 产品验收完成
  • Code review完成
  • 依赖方确认发布完成

5、发布流程

线上问题处理SOP

1、线上反馈定级与评判标准

1.1、问题类型

  • 线上问题:由于开发的代码或技术设计问题,导致项目发布后产生的bug
  • 外部依赖问题:由于系统依赖的上游系统出现故障导致的bug
  • 系统遗留bug:已知的系统Bug,可能由于系统设计初期遗留的问题,或短期无法解决的问题
  • 产品需求bug:产品在需求设计上没有考虑充分,导致存在的漏洞
  • 稳定性问题:* 系统波动:对用户操作有一定的影响,一般排查较为困难,和用户电脑配置、环境或者用户操作等也有一定的关系* 系统故障:影响面比较大,用户无法操作及使用

1.2、常用解决步骤

  • 线上问题:需要根据Bug定级标准评估后,由开发、测试、产品共同决定应该立即回滚、立即修复或排期修复
  • 外部依赖问题:明确上游依赖系统的技术对接人,及时反馈问题,跟踪解决
  • 系统遗留 bug:此类bug优先级一般不高,且存在较久,需要衡量投入产出比后,开发排期修复
  • 产品需求bug:产品根据优先级评估,完善产品流程后,排期优化
  • 稳定性问题:* 系统波动:查看日志,监控等确认问题。* 系统故障:反馈SRE & 基建相关方处理

1.3、问题定级

  • 致命(critical) 功能影响:系统主流程无法工作,阻碍核心功能使用。* 影响范围:影响范围广* 采取策略:* 业务上线导致:执行回滚计划,立即回滚
  • 严重(high) 功能影响:阻碍特定常用模块功能使用,或问题影响大部分用户。* 影响范围:影响部分用户* 采取策略:评估是否能立刻修复(半小时内),否则立即回滚
  • 一般(medium) 功能影响:不影响主流程和常用模块,低频模块功能受阻,或小的特性影响,例如显示异常、UI展示错误,接口响应慢等。* 影响范围:影响小部分用户* 采取策略:上线导致的bug:开发评估,是否能短期修复(1d内),产品及测试评估,是否集中修复上线,否则走下一个周期产品排期迭代
  • 轻微(low) 功能影响:文案错误,美观体验性、易用性、遗留问题、合理性建议等问题。* 影响范围:影响极少数用户* 采取策略:走下一个周期产品排期迭代

2、线上报警响应和升级标准

报警级别响应&处理解决(要求)报警升级(标准要求)系统提醒
P0报警立即响应;0 ~ 10min 内响应尽快解决;0 ~ 30min内需解决10min内如没有响应,报警需升级至团队TL30min内如没有解决,报警需升级至团队TL备注:响应后30min内不再电话重复报警通知同一人电话,微信群,私信
P1报警尽快响应;0 ~ 1h内响应尽快解决;0 ~ 2h内需解决1h内如没有响应,需升级报警为P0级别报警2h内如没有解决,需升级报警为P0级别报警微信群,私信
P2报警尽快响应;0 ~ 12h 内响应尽快解决;0 ~24h内需解决P2由业务负责人决定要不要升级微信群
P3报警不做要求不做要求不做要求微信群

3、线上问题修复与处理流程

总结

本文主要针对稳定性相关定义了一系列的规范,如之前所说流程上的规范和平台能力的建设一样重要。

最后

整理了一套《前端大厂面试宝典》,包含了HTML、CSS、JavaScript、HTTP、TCP协议、浏览器、VUE、React、数据结构和算法,一共201道面试题,并对每个问题作出了回答和解析。

有需要的小伙伴,可以点击文末卡片领取这份文档,无偿分享

部分文档展示:



文章篇幅有限,后面的内容就不一一展示了

有需要的小伙伴,可以点下方卡片免费领取

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

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

相关文章

建立做机器学习项目的范式

建立起做机器学习项目的范式&#xff0c;萃取出核心步骤&#xff0c;避免后面做项目没有明确的方向。 核心步骤&#xff1a; 1、明确自己想做什么样的项目&#xff0c;感兴趣的领域&#xff1b; 2、找到满足项目的数据集&#xff0c;开源的或者自建数据集&#xff1b; 数据…

《数据结构》二叉树面试题

&#x1f451;作者主页&#xff1a;Java冰激凌 &#x1f4d6;专栏链接&#xff1a;数据结构 目录 给定一个二叉树, 找到该树中两个指定节点的最近公共祖先力扣 思路分析 代码 思路拓展 根据一棵树的前序遍历与中序遍历构造二叉树。力扣 思路分析 代码 根据一棵树的中序遍历与…

Linux系统看门狗应用编程

目录看门狗应用编程介绍打开设备获取设备支持哪些功能&#xff1a;WDIOC_GETSUPPORT获取/设置超时时间&#xff1a;WDIOC_GETTIMEOUT、WDIOC_SETTIMEOUT开启/关闭看门狗&#xff1a;WDIOC_SETOPTIONS喂狗&#xff1a;WDIOC_KEEPALIVE看门狗应用编程实战在产品化的嵌入式系统中&…

[计算机网络(第八版)]第二章 物理层(章节测试/章节作业)

章节作业 带答案版 选择题 (单选题)双绞线是用两根绝缘导线绞合而成的&#xff0c;绞合的目的是&#xff08; &#xff09;。 A. 减少干扰 B. 提高传输速度 C. 增大传输距离 D. 增大抗拉强度(单选题)在电缆中采用屏蔽技术可以带来的好处主要是&#xff08; &#xff09;。 A…

DNS 域名解析

介绍域名 网域名称&#xff08;英语&#xff1a;Domain Name&#xff0c;简称&#xff1a;Domain&#xff09;&#xff0c;简称域名、网域。 域名是互联网上某一台计算机或计算机组的名称。 域名可以说是一个 IP 地址的代称&#xff0c;目的是为了便于记忆。例如&#xff0c…

Latex中的表格(2)

Latex中的表格一、一个加脚注的三线表的例子二、一个表格中加注释的例子三、两个并排的两个表格的例子3.1 使用小页环境并排表格3.2 使用子表格并排表格四、一个格式复杂的表格的例子五、一个长表格的例子这篇文章主要罗列一些特殊的表格例子。内容来自&#xff1a;一篇北师大学…

深度剖析数据在内存的存储

目录1.深度剖析数据在内存的存储(前言)数据类型介绍类型的基本归类整形在内存中的存储原码、反码、补码大小端练习总结1.深度剖析数据在内存的存储(前言) 今天就让我戴佳伟给大家讲一下数据在内存中的存储。之中有好多让我们深思的点&#xff0c;大家都拿起笔记本&#xff0c;…

【机器学习笔记】Python基础笔记

目录基础语法加载数据&#xff1a;pd.read_csv查看数据大小&#xff1a;shape浏览数据行字段&#xff1a;columns浏览少量数据&#xff1a;head()浏览数据概要&#xff1a;describe()基础功能语法缺省值去除缺失值&#xff1a;dropna按行删除&#xff1a;存在空值&#xff0c;即…

【数据库】第二章 关系数据库

第二章 关系数据库 2.1关系数据结构及形式化定义 关系 域&#xff08;domain) :域是一组具有相同数据类型的值的集合&#xff0c;可以取值的个数叫基数 笛卡尔积 &#xff1a;一个记录叫做一个元组&#xff08;tuple),元组中每一个属性值&#xff0c;叫一个分量 基数&…

35测试不如狗?是你自己技术不够的怨怼罢了

一、做软件测试怎么样&#xff1f; 引用著名软件测试专家、清华大学郑人杰教授的说法&#xff1a;软件测试工程师是一个越老越吃香的职业。 其中就表达了软件测试工作相对稳定、对年龄没有限制、而且随着项目经验的不断增长和对行业背景的深入了解&#xff0c;会越老越吃香。…

刚上岸字节测试开发岗,全网最真实的大厂面试真题

首先我来解释一下为什么说是全网最真实的面试题&#xff0c;相信大家也发现软件测试面试题在网上流传也已不少&#xff0c;但是经过仔细查看发现了两个很重要的问题。 第一&#xff0c;网上流传的面试题的答案并不能保证百分百正确。也就是说各位朋友辛辛苦苦花了很多时间准备…

《程序员的自我修养》阅读笔记

文章目录【第2部分】静态链接1 编译过程2 编辑器的工作流程3 链接——模块的拼接4 目标文件目标文件中的段&#xff08;section&#xff09;ELF文件结构5 静态链接1 空间与地址分配2 符号解析与重定位【第3部分】装载与动态链接1 装载的方式2 进程的启动3 为什么需要动态链接&a…

通俗易懂,十分钟读懂DES,详解DES加密算法原理,DES攻击手段以及3DES原理。Python DES实现源码

文章目录1、什么是DES2、DES的基本概念3、DES的加密流程4、DES算法步骤详解4.1 初始置换(Initial Permutation&#xff0c;IP置换)4.2 加密轮次4.3 F轮函数4.3.1 拓展R到48位4.3.2 子密钥K的生成4.3.3 当前轮次的子密钥与拓展的48位R进行异或运算4.3.4 S盒替换&#xff08;Subs…

学习 create-vite 源码后,感觉真不一样

前言 已经学习了一段时间的源码了&#xff0c;在写源码 demo 小例子的时候都是使用 react 项目作为模板&#xff0c;而我的 react 项目正好是由create-vite来创建的&#xff0c;因此&#xff0c;今天来学习一下关于create-vite的源码。话不多说&#xff0c;咱们直接开始学习。…

【深度学习】什么是线性回归逻辑回归单层神经元的缺陷

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录逻辑回归&线性回归单层神经元的缺陷单层神经元的缺陷逻辑回归&线性回归 线性回归预测的是一个连续值&#xff0c; 逻辑回归给出的”是”和“否”的回答. 等…

MySQL事务与索引

MySQL事务与索引 一、事务 1、事务简介 在 MySQL 中只有使用了 Innodb 数据库引擎的数据库或表才支持事务。事务处理可以用来维护数据库的完整性&#xff0c;保证成批的 SQL 语句要么全部执行&#xff0c;要么全部不执行。事务用来管理 insert,update,delete 语句 事务特性…

SQL性能优化的47个小技巧,果断收藏!

1、先了解MySQL的执行过程 了解了MySQL的执行过程&#xff0c;我们才知道如何进行sql优化。 客户端发送一条查询语句到服务器&#xff1b; 服务器先查询缓存&#xff0c;如果命中缓存&#xff0c;则立即返回存储在缓存中的数据&#xff1b; 未命中缓存后&#xff0c;MySQL通…

【编程入门】应用市场(go语言版)

背景 前面已输出多个系列&#xff1a; 《十余种编程语言做个计算器》 《十余种编程语言写2048小游戏》 《17种编程语言10种排序算法》 《十余种编程语言写博客系统》 《十余种编程语言写云笔记》 《N种编程语言做个记事本》 目标 为编程初学者打造入门学习项目&#xff0c;使…

qt源码--信号槽

本篇主要从Qt信号槽的连接、断开、调用、对象释放等方面展开&#xff1b; 1.信号建立连接过程 connect有多个重载函数&#xff0c;主要是为了方便使用者&#xff0c;比较常用的有2种方式&#xff1a; a. QObject::connect(&timer, &QTimer::timeout, &loop, &am…

一步步教你电脑变成服务器,tomcat的花生壳设置(原创)

1&#xff0c;首先你去https://console.oray.com/这网站注册个帐号&#xff0c;如果注册成功它会送你一个免费域名&#xff0c;当然不记得也没关系&#xff0c;你记住你注册的 帐号跟密码&#xff0c;然后下载它的软件&#xff08;花生壳动态域名6.0正式版&#xff09;有xp跟li…