剖析多利熊业务如何基于分布式架构实践稳定性建设

news2024/11/28 20:39:49

在这里插入图片描述
作者 | 百度小程序团队

导读

多利熊稳定性建设,是指为了确保系统或服务,在生产环境中的稳定性而采取的一系列措施和优化。这包括但不限于监控、预警、容错、自动化、规范、质量等方面的优化。通过稳定性建设,可以提高系统的可靠性和可用性,从而为用户提供更好的使用体验和服务质量。

全文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系统

精准水位在流批一体数据仓库的探索和实践

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

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

相关文章

sysbench压测MySQL8问题记录

数据库版本:MySQL8.0.26 sysbench版本:sysbench 1.0.17 CentOS版本:CentOS Linux release 7.9.2009 (Core) 问题一:FATAL: error 2059: Authentication plugin ‘caching_sha2_password’ cannot be loaded 执行 sysbench /usr/…

【论文阅读】3D-LaneNet

【论文阅读】3D-LaneNet 主要要做的事情就是 lane detection。这里提一下 BEV(Bird‘s Eye View) 感知算法,为了将 2D 图像映射到 3D 空间中,能够更准确的检测物体位置,需要 BEV 感知的结果。后续还会继续了解这方面内…

论文阅读【17】Dynamic ensemble learning for multi-label classification

论文十问十答: Q1论文试图解决什么问题? Q2这是否是一个新的问题? Q3这篇文章要验证一个什么科学假设? Q4有哪些相关研究?如何归类?谁是这一课题在领域内值得关注的研究员? Q5论文中提到的解决方…

研究LLMs之前,不如先读读这五篇论文!

目标:了解 LMM 背后的主要思想 ▪️ Neural Machine Translation by Jointly Learning to Align and Translate ▪️ Attention Is All You Need ▪️ BERT ▪️ Improving Language Understanding by Generative Pre-Training ▪️ BART Neural Machine Translati…

引导程序、BIOS中断、检测内存容量、实模式切换到保护模式

初始化引导程序 基本概念 BIOS会将磁盘的第0个扇区(大小为512字节),加载到0x7c00处。 引导程序负责操作系统的加载,主要用于为操作系统运行提供初始化环境,并运行加载操作系统。 BIOS只加载磁盘的第0个扇区(512字节)到内存中,次程…

【论文阅读_序列推荐】Intent Contrastive Learning for Sequential Recommendation

【论文阅读_序列推荐】Intent Contrastive Learning for Sequential Recommendation 文章目录【论文阅读_序列推荐】Intent Contrastive Learning for Sequential Recommendation1. 来源2. 介绍3. 准备工作3.1 问题定义3.2 用于下一个项目预测的深度 SR 模型3.3 SR中的对比SSL …

基于springboot和ajax的简单项目 06 日志界面的delete功能(根据选择的checkbox)

01.这次后台开始&#xff1b; 顺序依次是dao->xml->service->serviceimpl->controller->html 02.dao接口 public int doDeleteObjects(Param("ids") Integer... ids);03.xml文件 <update id"doDeleteObjects" >delete from sys_lo…

七项新发布,亚马逊云科技Amazon S3持续进化

17年前的3月14日&#xff0c;亚马逊云科技推出了一项“非常简单的”对象存储服务&#xff08;Amazon Simple Storage Service&#xff09;。该服务允许开发人员创建、列出和删除私有存储空间&#xff08;称为存储桶&#xff09;、上传和下载文件以及管理其访问权限。当时&#…

C++刷题--选择题1

文章目录选择题选择题 1&#xff0c; 以下for循环的执行次数是&#xff08;&#xff09; for(int x 0, y 0; (y 123) && (x < 4); x);A 是无限循环 B 循环次数不定 C 4次 D 3次 解析 &#xff1a; C&#xff0c;for循环y 123 是赋值语句&#xff0c; 也就是一…

PSO算法

&#x1f34e;道阻且长&#xff0c;行则将至。&#x1f353; 目录1.PSO算法主要步骤&#x1f331;2.PSO更新方法&#x1f33e;3.PSO求解TSP问题&#x1f334;粒子群算法&#xff08;Particle Swarm Optimization&#xff0c;简称PSO&#xff09;是一种优化算法&#xff0c;模拟…

美国全力打击币圈 “一套花式组合拳”,打得从业者透不过气

银行危机“平息”过后&#xff0c;美国监管机构对币圈接连出手&#xff0c;一套花式组合拳打得从业者透不过气&#xff0c;也使得加密行业在政府的拳头之下风声鹤唳。 首先&#xff0c;切断加密货币与传统金融机构的联系。美国金融体系陷入混乱之际&#xff0c;一系列历史性的银…

顺序表(数据结构)

目录 线性表 顺序表 1、顺序表创建 2、初始化 3、扩容 4、尾插 5、尾删 6、头插 7、头删 8、指定位置插入 9、指定位置删除 10、查询 11、打印 12、销毁 顺序表总代码 Leetcode编程题 1、移除元素 题目链接&#xff1a; 题目描述&#xff1a; 题目解析&#xff1a; 2、删除有序…

游戏内嵌社区服务开放,助力开发者提升玩家互动与留存

华为 HMS Core 游戏内嵌社区服务提供快速访问华为游戏中心论坛能力&#xff0c;支持玩家直接在游戏内浏览帖子和交流互动&#xff0c;助力开发者扩展内容生产和触达的场景。 一、为什么要游戏内嵌社区&#xff1f; 二、游戏内嵌社区的典型使用场景 1、游戏内打开论坛 您可以在…

[Linux]环境变量

目录 基本概念 常见的环境变量 PATH测试 HOME测试 SHELL测试 和环境变量相关的命令 main函数的三个参数 环境变量的组织方式 通过代码如何获取环境变量 通过系统调用获取或设置环境变量 基本概念 环境变量(environment variables)一般是指在操作系统中用来指定操作系…

FreeRTOS 系统内核控制函数

FreeRTOS 中有一些函数只供系统内核使用&#xff0c;用户应用程序一般不允许使用&#xff0c;这些 API 函数就是系统内核控制函数。 内核控制函数 顾名思义&#xff0c;内核控制函数就是 FreeRTOS 内核所使用的函数&#xff0c;一般情况下应用层程序不使用这些函数&#xff0…

6基于二阶锥规划的主动配电网最优潮流求解

matlab代码&#xff1a;基于二阶锥规划的主动配电网最优潮流求解 参考文献&#xff1a;主动配电网多源协同运行优化研究_乔珊 摘要&#xff1a;最优潮流研究在配 电网规划运行 中不可或缺 &#xff0c; 且在大量分布式能源接入 的主动配 电网环境下尤 为重要 。传统的启发式算…

设计师一定要知道这5个免费样机素材网

本期推荐5个设计师必备的样机素材网站&#xff0c;免费下载&#xff0c;建议收藏~ 1、菜鸟图库 https://www.sucai999.com/searchlist/3217----all-0-1.html?vNTYxMjky 网站有多种类型的设计素材&#xff0c;像平面、电商、UI、办公等素材这里面都能找到。样机素材分类清晰&…

GitHub“疯狂”求阿里内部开源这份10W字Java面试手册,竟遭拒绝

行业风向标&#xff0c;猎聘发布的数据报告显示&#xff1a; 相比以往&#xff0c;2023年企业招聘两大变化体现在&#xff1a;对人才各方面能力要求更高、对人岗的匹配性要求更细。不同规模的企业用人各有侧重&#xff0c;大中型企业更注重人的全面能力&#xff0c;小型企业更…

我写系列博客的缘由

我写系列博客的缘由 每个经历不是一帆风顺的人&#xff0c;都将深刻地体会到&#xff0c;少走弯路对一个人来说是多么重要。人的生存不是浪漫的幻想&#xff0c;而是建立在能立足于现实社会上&#xff0c;教育的真正意义&#xff0c;是培养你的认识水平、提升智慧&#xff0c;借…

JAVA语言-比较器Comparator

目录 一、什么是Comparator 二、Java compare方法和compareTo方法 三、java中Comparable和Comparator的区别 Comparator的例子 一、什么是Comparator Comparator 是javase中的接口&#xff0c;位于java.util包下。 数组工具类和集合工具类中提供的工具方法sort方法都给出…