一、前端稳定性规约该如何制定
前言
稳定性是数学或工程上的用语,判别一系统在有界的输入是否也产生有界的输出。若是,称系统为稳定;若否,则称系统为不稳定。
前端稳定性的体系建设大约可以分为了发布前,发布后,以及事故解决后三个阶段。
在稳定性这一领域, 人的意识和经验与平台能力支撑一样重要。需要依赖平台提供的稳定性工具,但也需要对开发的过程和处理机制进行进一步规范,加强大家的稳定性意识。所以也分为了机制&规约 和 工具&平台能力两部分。
在机制和规约上,需要有整套规范的保障, 和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道面试题,并对每个问题作出了回答和解析。

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




文章篇幅有限,后面的内容就不一一展示了
有需要的小伙伴,可以点下方卡片免费领取
相关文章:
一、前端稳定性规约该如何制定
前言 稳定性是数学或工程上的用语,判别一系统在有界的输入是否也产生有界的输出。若是,称系统为稳定;若否,则称系统为不稳定。 前端稳定性的体系建设大约可以分为了发布前,发布后,以及事故解决后三个阶段…...
Docker(三)Docker网络
目录1 结论知识2 link3 自定义网络1 结论知识 每一个容器启动时都会被分配一个ip地址;宿主机可以ping通任何一个docker容器;启动docker之后,宿主机默认网卡docker0,启动容器在宿主机注册网卡,使用的evth-pair技术&…...
Js高级API
Decorator装饰器 针对属性 / 方法的装饰器 // decorator 外部可以包装一个函数,函数可以带参数function Decorator (type) {/*** 这里是真正的decorator* description: 装饰的对象的描述对象* target:装饰的属性所述类的原型,不是实例后的类。如果装饰…...
团队:在人身上,你到底愿意花多大精力?
你好,我是叶芊。 今天我们讨论怎么带团队这个话题,哎先别急着走,你可能跟很多人一样,觉得带团队离我还太远,或者觉得我才不要做管理,我要一路技术走到底,但是你知道吗?带团队做事&am…...
Linux-Poolkit提权
Linux-Poolkit提权 漏洞复现- Linux Polkit 权限提升漏洞(CVE-2021-4034) 0x00 前言 polkit是一个授权管理器,其系统架构由授权和身份验证代理组成,pkexec是其中polkit的其中一个工具,他的作用有点类似于sudo&#x…...
【React全家桶】React Hooks
React Hookshooks介绍useState(保存组件状态)useEffect()useCallback(记忆函数)useMemo() 记忆组件useRef(保存引用值)useReducer()useContext(减少组件层级)自定义hookshooks介绍 在react类组件(class)写法中,有setState和生命周期对状态进…...
CLIP论文阅读
Learning Transferable Visual Models From Natural Language Supervision 利用自然语言的监督信号学习可迁移的视觉模型 概述 迁移学习方式就是先在一个较大规模的数据集如ImageNet上预训练,然后在具体的下游任务上再进行微调。这里的预训练是基于有监督训练的&am…...
华为OD机试真题Python实现【身高排序】真题+解题思路+代码(20222023)
身高排序 题目 小明今年升学到了小学一年级, 来到新班级后,发现其他小朋友身高参差不齐, 然后就想基于各小朋友和自己的身高差,对他们进行排序, 请帮他实现排序 🔥🔥🔥🔥🔥👉👉👉👉👉👉 华为OD机试(Python)真题目录汇总 输入 第一行为正整数H…...
Spring Cache的使用--快速上手篇
系列文章目录 分页查询–Java项目实战篇 全局异常处理–Java实战项目篇 完善登录功能–过滤器的使用 更多该系列文章请查看我的主页哦 文章目录系列文章目录前言一、Spring Cache介绍二、Spring Cache的使用1. 导入依赖2. 配置信息3. 在启动类上添加注解4. 添加注解4.1 CacheP…...
(三十八)MySQL是如何支持4种事务隔离级别的?Spring事务注解是如何设置的?
上次我们讲完了SQL标准下的4种事务隔离级别,平时比较多用的就是RC和RR两种级别,那么在MySQL中也是支持那4种隔离级别的,基本的语义都是差不多的 但是要注意的一点是,MySQL默认设置的事务隔离级别,都是RR级别的&#x…...
【博学谷学习记录】大数据课程-学习第八周总结
Hadoop初体验 使用HDFS 1.从Linux本地上传一个文本文件到hdfs的/目录下 #在/export/data/目录中创建a.txt文件,并写入数据 cd /export/data/ touch a.txt echo "hello" > a.txt #将a.txt上传到HDFS的根目录 hadoop fs -put a.txt /2.通过页面查看…...
go cobra初试
cobra开源地址 https://github.com/spf13/cobra cobra是什么 Cobra is a library for creating powerful modern CLI applications. Cobra is used in many Go projects such as Kubernetes, Hugo, and GitHub CLI to name a few. This list contains a more extensive lis…...
【react全家桶】 事件处理
文章目录03 【事件处理】1.React事件2.类式组件绑定事件3.向事件处理程序传递参数4.收集表单数据5.受控和非受控组件5.函数的柯里化03 【事件处理】 React的事件是通过onXxx属性指定事件处理函数 React 使用的是自定义事件,而不是原生的 DOM 事件 React 的事件是通过…...
RabbitMQ交换机(Exchanges)
目录 一、概念 二、临时队列 三、绑定 四、Fanout(扇出交换机) (一)介绍 (二)实战 五、Direct(直接交换机) (一)介绍 (二)实…...
2023年java初级面试题10道基础试水题
1、面向对象的特征有哪些方面?答:面向对象的特征主要有以下几个方面:1)抽象:抽象是将一类对象的共同特征总结出来构造类的过程,包括数据抽象和行为抽象两方面。抽象只关注对象有哪些属性和行为,并不关注这些行为的细节…...
烙铁使用方法
烙铁使用 烙铁是硬件工程师最经常使用的工具之一,一把性能保持良好的烙铁能帮助我们快速进行电路调试。烙铁第一次加热时采用焊锡均匀涂覆在烙铁头上,以便去除包在烙铁头上面的氧化物。在工作中我们需要根据情况选择合适的烙铁头类型,合适的温度进行操作。完成焊接后要在烙铁…...
golang日期转换、日期增减计算、时间戳转换
// 固定日期格式format : "2006-01-02 15:04:05"// 按本地时区解析日期location, _ : time.ParseInLocation(format, "2022-02-20 11:30:00", time.Local)// 增加1年,三个参数分别是:年,月,日date : location…...
Android 多种支付方式的优雅实现
场景App 的支付流程,添加多种支付方式,不同的支付方式,对应的操作不一样,有的会跳转到一个新的webview,有的会调用系统浏览器,有的会进去一个新的表单页面,等等。并且可以添加的支付方式也是不确…...
算法设计与分析期末考试复习(三)
动态规划 动态规划算法与分治法类似,其基本思想也是将待求解问题分成若干个子问题。但是经分解得到的子问题往往不是互相独立的。在用分治法求解时,有些子问题被重复计算机了许多次。 如果能够保存已解决的子问题的答案,而在需要时再找出已求…...
ZCMU--1970: 潜伏者
Description R 国和 S 国正陷入战火之中,双方都互派间谍,潜入对方内部,伺机行动。 历尽艰险后,潜伏于 S 国的 R 国间谍小 C 终于摸清了 S 国军用密码的编码规则: 1. S 国军方内部欲发送的原信息经过加…...
IDEA运行Tomcat出现乱码问题解决汇总
最近正值期末周,有很多同学在写期末Java web作业时,运行tomcat出现乱码问题,经过多次解决与研究,我做了如下整理: 原因: IDEA本身编码与tomcat的编码与Windows编码不同导致,Windows 系统控制台…...
解决Ubuntu22.04 VMware失败的问题 ubuntu入门之二十八
现象1 打开VMware失败 Ubuntu升级之后打开VMware上报需要安装vmmon和vmnet,点击确认后如下提示 最终上报fail 解决方法 内核升级导致,需要在新内核下重新下载编译安装 查看版本 $ vmware -v VMware Workstation 17.5.1 build-23298084$ lsb_release…...
服务器硬防的应用场景都有哪些?
服务器硬防是指一种通过硬件设备层面的安全措施来防御服务器系统受到网络攻击的方式,避免服务器受到各种恶意攻击和网络威胁,那么,服务器硬防通常都会应用在哪些场景当中呢? 硬防服务器中一般会配备入侵检测系统和预防系统&#x…...
vue3 定时器-定义全局方法 vue+ts
1.创建ts文件 路径:src/utils/timer.ts 完整代码: import { onUnmounted } from vuetype TimerCallback (...args: any[]) > voidexport function useGlobalTimer() {const timers: Map<number, NodeJS.Timeout> new Map()// 创建定时器con…...
汇编常见指令
汇编常见指令 一、数据传送指令 指令功能示例说明MOV数据传送MOV EAX, 10将立即数 10 送入 EAXMOV [EBX], EAX将 EAX 值存入 EBX 指向的内存LEA加载有效地址LEA EAX, [EBX4]将 EBX4 的地址存入 EAX(不访问内存)XCHG交换数据XCHG EAX, EBX交换 EAX 和 EB…...
DeepSeek 技术赋能无人农场协同作业:用 AI 重构农田管理 “神经网”
目录 一、引言二、DeepSeek 技术大揭秘2.1 核心架构解析2.2 关键技术剖析 三、智能农业无人农场协同作业现状3.1 发展现状概述3.2 协同作业模式介绍 四、DeepSeek 的 “农场奇妙游”4.1 数据处理与分析4.2 作物生长监测与预测4.3 病虫害防治4.4 农机协同作业调度 五、实际案例大…...
Java求职者面试指南:Spring、Spring Boot、MyBatis框架与计算机基础问题解析
Java求职者面试指南:Spring、Spring Boot、MyBatis框架与计算机基础问题解析 一、第一轮提问(基础概念问题) 1. 请解释Spring框架的核心容器是什么?它在Spring中起到什么作用? Spring框架的核心容器是IoC容器&#…...
【Go语言基础【12】】指针:声明、取地址、解引用
文章目录 零、概述:指针 vs. 引用(类比其他语言)一、指针基础概念二、指针声明与初始化三、指针操作符1. &:取地址(拿到内存地址)2. *:解引用(拿到值) 四、空指针&am…...
Go语言多线程问题
打印零与奇偶数(leetcode 1116) 方法1:使用互斥锁和条件变量 package mainimport ("fmt""sync" )type ZeroEvenOdd struct {n intzeroMutex sync.MutexevenMutex sync.MutexoddMutex sync.Mutexcurrent int…...
【 java 虚拟机知识 第一篇 】
目录 1.内存模型 1.1.JVM内存模型的介绍 1.2.堆和栈的区别 1.3.栈的存储细节 1.4.堆的部分 1.5.程序计数器的作用 1.6.方法区的内容 1.7.字符串池 1.8.引用类型 1.9.内存泄漏与内存溢出 1.10.会出现内存溢出的结构 1.内存模型 1.1.JVM内存模型的介绍 内存模型主要分…...
