作者 | 百度小程序团队
导读
多利熊稳定性建造,是指为了确保体系或服务,在生产环境中的稳定性而采纳的一系列办法和优化。这包括但不限于监控、预警、容错、自动化、规范、质量等方面的优化。经过稳定性建造,能够提高体系的可靠性和可用性,从而为用户供给更好的运用体验和服务质量。
全文4159字,估计阅读时刻11分钟。
01 事务介绍
多利熊是百度旗下的本地生活服务渠道,是针对本地生活职业的SaaS处理计划,运用中心化+去中心化分销渠道,协助商家在百度内外广泛获客及继续运营,协助用户发现所在地的商户,并给用户供给特征又优惠的吃喝玩乐产品服务。
多利熊生活服务渠道,包括以下三个主要产品形态:
多利熊商家渠道:主要是面向商家供给服务,是商家办理门店、核销订单、处理售后、资金提现的运营渠道;包括PC后台、小程序、APP双端(多利熊掌柜)
多利熊运营渠道:面向内部运转,用于商户审阅、产品审阅、套餐撰文等事务办理;包括PC后台、APP双端(熊管家)
多利熊用户渠道:面向C端用户和达人,供给多利熊百度小程序、多利熊微信小程序、多利熊APP等
多利熊事务应战,跟着技能人物分工越来越细、技能专业化程度越来越深,分布式体系的架构特性为其稳定性建造中的架构规划、安排规划等带来了新的应战。
- 跟着模块微服务(用户、产品、订单、商家、券码、付出…)数量激增,怎么确保架构健壮可拓展。
- 依靠内部服务多,调用链路长,怎么确保服务功用以及稳定性。
- 依靠外部服务多(交易、营销、三方Saas…),怎么确保数据终究一致性。
- 迭代周期短,节奏快,怎么平衡开发重构节奏,确保架构良性迭代。
02 建造理念
多利熊事务复杂性,对产品全体的稳定性质量建造,带来了巨大的应战,实践建造进程中主要从技能规范、事务规范、微服务三个方面落地实践,具体如下:
多利熊稳定性建造,示意图:
03 实施进程
从开发到上线,怎么确保稳定性?以多利熊事务稳定性建造落地实践介绍,主要从以下几个阶段:计划规划、技能评定、开发、CR、提测、上线、问题处理、Case沉积 实施落地,具体内容如下图:
3.1 计划规划
计划规划旨在整理需求布景,了解事务,确保需求合理性,可行性。计划规划带来的好处:
- 整理需求布景,了解事务,确定需求做的事情,确保需求合理性,可行性。
- 跨团队、跨部门需求,需求达成一致性认知,对齐需求上下文。
- 详设能够有效纰漏潜在的危险;评价开发工作量,确保项目进展。
- 沉积开发文档,确保项目开发文档具体准确,确保产品的项目开发文档的继续性,技能计划良构。
计划规划要包括内容如下:
计划版别:版别号、编写时刻、变更内容、修改人等信息
开发文档:需求文档、需求 icafe(feature) 地址、prd地址、依靠文档地址、需求负责人,便于后续查询
项目布景:对项目功用进列举阐明,项目布景整理了解为什么我们要做这个项目、要完结什么功用
技能计划:技能架构、流程规划、模块交互、功用规划,需求将产品需求转变为技能完结的进程表达清楚
接口规划:供给的接口命名、参数界说(类型 大小约束 长度约束 是否必填 补白…)、响应成果、接口信息(描绘信息 创建人 负责人…)等协议信息,处理前后端接口文档与实践情况不一致,跟着时刻推移,版别迭代,接口文档往往很简单就跟不上代码了等问题
存储规划:触及库表、字段变更,有必要考虑是否触及上下流同步、数据兼容、表情符号、字段长度等
兼容性:数据兼容,新增字段或许上线前后修改逻辑不一致等;接口兼容,考虑接口晋级,是否兼容;上线次序兼容,考虑前后端上线次序以及依靠联系,等其他需求考虑的兼容场景
监控告警:履行失利、反常场景监控告警。反常分支逻辑、运行时反常逻辑、要害路径逻辑「付出、注册等」
上线:上线前输出上线文档,包括资源、装备、授权、上下流依靠、上线次序等等
3.2 技能评定
目的:技能文档沉积以及技能文档继续性,同时确保技能计划良构。
方针:组件技能计划评定小组,输出技能计划评定规范(计划规划、评定内容、计划回忆)。
技能评定主要职责:
- 指定评定内容,搜集技能计划文档,指定参加评定人员(值勤),建议评定会邀
- 输出准入规矩,主要从竞品调研、架构、接口协议、功用、库表、中心流程可用性等方面,输出准入规约
- 计划周期回忆,定期安排技能计划 Review(值勤),进行技能计划合理性剖析回忆,确保架构良构
3.3 编码现约
编码规范愿景是提效,确保代码质量,提高团队的协作功率,降低沟通本钱。开发规约主要包括,编码规约、安全规约、Mysql规约、日志规约、反常规约等。开发规约方针:
- 确保代码质量
- 开发提效
- 提高团队的协作功率
- 降低沟通本钱
- 提高线上服务稳定性
- 确保项目健康快速迭代
3.4 CodeReview
Code Review在确保代码质量准入重要一环,CR 的主要职责如下:
- 提早发现因为事务了解偏差、逻辑过错等带来的质量危险,从而削减线上问题和反常case
- 编码风格的一致规范、规划的合理性、代码的健壮性等多方面
- CR规范指导,从硬编码、嵌套层级、日志、常量、办法界说、SQL运用、装备文件等方面对评定的规范进行了总结沉积
根据多利熊事务,我们也逐渐执行和完善了一套CR流程实践,流程如下:
- 开发提交CR,开发自测完结之后建议,需经同模块内小组同学和负责人分别评定,评定人给出评定定见和打分。
- 集中式CR,触及到多个模块联动的,以需求为单位,在上线前建议,此环节是上线前质量把控很重要的一个环节,能够发现模块间因为了解偏差导致的依靠运用问题或逻辑问题。
3.5 操作上线
上线内容,需求周知模块负责人,经过上线计划评定,完结上线内容挂号,上线布告后,进行上线操作。
- 上线窗口,对上线窗口没有严格约束,周五准则上尽量不上线
- 上线前预备,完结上线计划规划并经过评定,触及不兼容、或许危险较高上线,周知 PM 承认是否需求发上线布告,上线通知模板如下:
- 预览上线,先上线预览环境,调查服务是否契合预期
- 操作上线,确保无损上线,上线次序如下
- 单边单台,逗留 10 分钟,调查服务是否契合预期(验证改动功用契合预期),呈现问题第一时刻回滚,止损
- 单边,全量
- 上线后,线上回归测验(关于线上没有覆盖到的回归场景,有必要周知相应 PM&QA 同学,纰漏危险),完结监控告警添加以及承认,继续重视监控以及上线事务及数据是否契合预期
3.6 问题处理
问题处理准则:先布告,止损,再排查问题,线上问题优先跟进处理,最短时刻上线修复。
问题上线准则:线上 bugfix 分支,不与事务上线混合上线,应独立上线,防止回滚危险:
- PM/QA/RD谁先发现问题,第一时刻反应,同时记载 icafe 跟进
- 跟进准则,问题定位前:谁先报出问题,谁负责推动定位问题,问题定位后:相应问题负责人跟进
- 布告模板
- 【问题通报】问题描绘
【问题描绘】x年x月x日,因xx原因导致xx问题现象
【当前进展】xxx
【问题影响】待统计
【问题原因】待确定
04 实战
根据多利熊事务,我们也逐渐执行和完善了一套稳定性建造流程实践闭环。
4.1 稳定性闭环
稳定性建造各个环节交互如下:
4.2 终究一致性
多利熊事务内外部依靠服务较多,为了确保功用以及服务稳定性,终究采用计划如下:
- 异步调用,确保服务功用,同时引进反常情况下,数据不一致问题
- 终究一致性,通用处理计划有 本地音讯表、外部音讯表、Seata等。多利熊选则了 本地音讯表计划,完结终究一致性,处理异步调用数据不一致问题
多利熊事务事务调用,终究一致性完结流程如下:
4.3 重试幂等
幂等介绍:屡次调用不会改动事务状况,屡次调用获得相同成果,关于恳求的某一个资源应该具有同样的副作用。
关于 Http 恳求,会有三个状况:成功,失利,或许超时。成功、失利是明确事务是很好处理的,超时是不知道的,超时可能是网络传输丢包,也可能是恳求超时,还有可能是回来成果超时。这时候我们是否能够重试呢?
幂等和防重
防重,主要为了防止发生重复数据或许脏数据,对回来没有太多要求。主要有,前端重复点击,网络重试等等
幂等,比防重要求更加严苛,除了防止发生重复数据或许脏数据,还要求每次回来一样的成果
常见幂等问题场景
- 前端重复提交,屡次点击,服务端收到屡次恳求
- 超时重试,调用下流服务或许依靠外部服务处理超时,或许因为网络原因导致超时
- 音讯重复消费,运用音讯中间件 pulsar、mq 等,重复音讯发送,或许 ack 反常重复消费
- 高并发,仅有 ID 生成磕碰,重复写入,鸿沟控制等
多利熊事务幂等规划完结,规划幂等都需求一个 大局仅有的ID,标记绝无仅有。一般运用 UUID 或许 雪花算法生成大局仅有 ID,多利熊采用的 防重表方法 完结幂等,流程如下:
4.4 监控正告
多利熊事务布置采用 k8s以及云原生prome监控,本节主要介绍,多利熊触及监控告警技能选型,以及监控告警处理流程实践。
Trace 和 天眼(一站式日志服务渠道)区别
天眼,应用于分布式服务的具有日志采集、加工、存储、检索、告警等功用的一站式日志服务渠道,为事务团队供给低推迟, 高功用, 高可用的日志服务, 提高事务排障功率与能力
Trace,根据日志处理的全链路一站式查询剖析协议,特别关于链路较长事务,能够快速定位到那个事务呈现了问题。
监控告警处理流程如图:
多利熊事务监控选型,Trace,天眼,Actuator,Prometheus、Grafana,全体完结效果如下:
4.5 其他
事务生长,周期邀请产品、运营共享事务知识,以及产品沟通,生活服务研制做到『快』、『懂事务』和『正影响』。
技能生长,架构师周期共享前语技能,技能培训,定期剖析讨论架构,基础服务研制做到『及时性』、『专业性』、『稳定性』和『安全性』。
05 规划
自动化缩容
根据个功用目标或许Prometheus自界说目标来进行扩缩容,满足秒杀、大促等场景。
服务智能化容错
中心事务流程(下单、付出、核销…)降级处理,依靠服务资源(Redis、MQ…)降级处理,确保用户体验。
——END——
推荐阅读:
百度工程师的软件质量与测验随笔
百度APP iOS端包体积50M优化实践(一)总览
根据FFmpeg和Wasm的Web端视频截帧计划
百度研制效能从度量到数字化蜕变之路
百度内容了解推理服务FaaS实战——Punica体系
精准水位在流批一体数据仓库的探究和实践