以前写过不少和稳定性相关的文章,其中介绍了不少稳定性保障的实践案例和方法,比如全链路压测和服务治理,这些案例和方法更多的是技术层面解决问题的方法和手段。但为什么要做稳定性保障?如何理解稳定性保障? 这篇文章,我想聊聊我对于稳定性保障的理解,以及稳定性保障对团队带来的价值。 什么是稳定性保障? 通俗来说,稳定性是一个很抽象的术语,各人有各人的解读。 如果要给稳定性保障一个比较通用的定义,那这个公式大概是成立的:稳定性保障=良好的架构设计实现+完善的软件研发交付流程+持续的线上应急机制和方法+专业的技术团队+优秀的项目管理和团队协作。 为什么要实践稳定性保障 基础技术设施和稳定性保障体系的建设,是业务长期倒逼的产物。举个典型的例子:双11大促。 总的来说,稳定性保障对业务的价值在于:保证用户体验,满足业务诉求,支撑业务目标达成。
注册中心如何保障稳定性 注册中心主要是负责节点状态的维护,以及相应的变更探测与通知操作。一方面,注册中心自身的稳定性是十分重要的。 服务消费者如何保障稳定性 一个请求失败了,最直接影响到的是服务消费者,那么在服务消费者这边,有什么可以做的呢? 在实际使用中,我们可以取该应用一段时间内的P999的值,或者取p95的值*2。具体情况需要自行定夺。 在超时设置的时候,对于同步与异步的接口也是有区分的。 服务提供者如何保障稳定性 限流 限流就是限制服务请求流量,服务提供者可以根据自身情况(容量)给请求设置一个阈值,当超过这个阈值后就丢弃请求,这样就保证了自身服务的正常运行。 重启与回滚 限流更多的起到一种保障的作用,但如果服务提供者已经出现问题了,这时候该怎么办呢? 这时候就会出现两种状况。
2. FAQ 1)为什么使用 structured logs? 2)为什么不使用 debug/warning/critical/fatal? 通过减少日志类型,降低使用和维护负担。 debug 可以融入到 info 级别。 若要及时感知到关键告警,需要从如下 2 个方面入手: 定义「关键告警」特征 分级告警,与相应的通知渠道结合 定义「关键告警」的特征是个长期、持续完善的过程,有 通用关键告警 和 业务关键告警。 2. FAQ 如何预先配置未模拟出的异常? 业务依赖的 OpenAPI/SDK/Lib 等通常都会有错误码列表,如阿里云:API 错误中心、Lib 中的 errors 文件等。
今天我们就来聊一聊三H中的高可用,也是我们常说的系统稳定性。 > 本篇文章只聊思路,没有太多的深入细节。阅读全文大概需要5~10分钟。 要想提升一个系统的可用性,首先需要知道影响系统稳定性的因素有哪些。 三、影响稳定性的因素 首先我们先梳理一下影响系统稳定性的一些常见的问题场景,大致可分为三类: 人为因素 不合理的变更、外部攻击等等 软件因素 代码bug、设计漏洞、GC问题、线程池异常、上下游异常 硬件因素 四、提升稳定性的几种思路 4.1 系统拆分 拆分不是以减少不可用时间为目的,而是以减少故障影响面为目的。 如何做好稳定性和高可用保障是一个很庞大的命题,本篇文章没有太多的深入细节,只聊了整体的一些思路,主要是为了大家在以后的系统高可用建设过程中,有一套系统的框架可以参考。最后感谢耐心看完的同学。
作者 | 悟鹏 《Kubernetes 稳定性保障手册》系列文章: Kubernetes 稳定性保障手册 -- 极简版 Kubernetes 稳定性保障手册 -- 日志专题 Kubernetes 稳定性保障手册 -- 可观测性专题 Kubernetes 稳定性保障手册 -- 洞察+预案(本文) 综述 稳定性保障是个复杂的话题,需要有效、可迭代、可持续保障集群的稳定性,系统性的方法或许可以解决该问题。 为了形成系统性的方法,可以梳理出稳定性保障复杂性的源头,制定数据模型来对其进行描述,然后在数据模型的基础上对集群的稳定性保障进行数字化和可视化,以数据模型为内核来持续迭代对稳定性保障的理解、实践以及经验的固化 "] } ] } 全局可视化稳定性保障 基于上述4 张图和3 张表的数据模型,形成对集群稳定性保障的洞察+预案的内核,可以衍生出一种全局可视化的稳定性保障服务。 一种实现 1)部署形态 Region 化部署 面向 Region 内单集群或多集群提供服务 2)使用体感 根据稳定性保障的最佳实践,将稳定性保障分为如下几个栏目: 运行链路图: 该栏目是日常稳定性保障高频使用的区域
虽然基于 Kubernetes 的稳定性保障很重要,但业界缺少基于实践的标准化稳定性保障方案,导致同样的问题在同一产品或不同的产品中重复出现,最佳实践不能应用在更多相同技术栈的产品中,不同产品形成的稳定性保障最佳实践也不能互补 为此,基于过去的开发实践以及基于 Kubernetes 的稳定性保障经验,尝试形成《Kuberentes 稳定性保障手册》,将稳定性保障最佳实践进行沉淀,使得人人对 Kubenretes 稳定性保障的理论形成全面的理解 本篇文章作为《Kubernetes 稳定性保障手册》第一篇文章,抽象稳定性保障中的核心内容,作为稳定性保障最简使用手册。 ? 极简手册目标 1min 理解稳定性保障目标 3min 把握稳定性保障全局视图 一站查找稳定性保障推荐工具或服务 ? 稳定性保障目标 满足服务或产品对稳定性的诉求 加速服务或产品的迭代 ? 稳定性保障级别 级别标准L0 可观测、可灰度、可回滚 均不满足 L1 可观测、可灰度、可回滚 满足 50% 以上要求 L2 可观测、可灰度、可回滚 满足 90% 以上要求 L3 可观测、可灰度、可回滚
马上十一、中秋双节,很多客户开始做节日活动,基本都有一个共性需求:活动期间,流量预计翻N备,由此引发了一轮MySQL的容量治理与保障。 相对于Redis,功夫最好做在事前(参考 重大活动期间Redis稳定性保障思路-腾讯云开发者社区-腾讯云),MySQL可以在事前和事中同时做一些事情,用好云平台的能力,往往会有意想不到的收获。 2、事前治理思路 2.1 消除人为因素 可以考虑重大活动期间封网、控制可登陆生产数据库的权限,来尽可能避免人为对MySQL数据的影响。 2.2 容量 保障容量,主要考虑保障cpu/内存的冗余,用空间换时间;一方面要根据压测结果,做好扩容,另外一方面做好快速的弹性扩容及应急库容。 登陆控制台,找到目标实例,进入详情 2. 切换到 数据库管理选项卡,点击参数设置,根据业务情况设置阈值。
Docker 作为许多开发或生产环境中的基础设施的重要组成部分,其版本的稳定性直接影响着整个系统的可靠性。本文将介绍如何有效地管理和固定 Docker 的版本。 有时是配置文件不兼容,有时是命令参数变化,有时甚至会影响到整个应用的稳定性。 如果你追求极致的环境稳定性,并且不打算对宿主机做任何补丁更新,你当然可以把所有相关的软件包都锁定版本。 不过我建议你三思。 将所有程序都锁定版本,可能会导致错过 Ubuntu 系统的重要安全更新,也可能错过一些系统稳定性的改进。 -l | grep docker | awk '{print $2}' >> "$temp_file2" cat "$temp_file2" | sort | uniq | grep -E "docker
用作紧急情况下的指导文档 虽然不可能想到所有的情况,但至少会列出测试中发现的那些问题,并指明如何处理 还有一个巨大的玻璃墙,上面记录着关键信息,在问题发生时能够帮助进行快速决策 提前做好准备、想好出现问题时如何处理,是保证稳定性的重要思路
Docker 作为许多开发或生产环境中的基础设施的重要组成部分,其版本的稳定性直接影响着整个系统的可靠性。本文将介绍如何有效地管理和固定 Docker 的版本。 有时是配置文件不兼容,有时是命令参数变化,有时甚至会影响到整个应用的稳定性。 如果你追求极致的环境稳定性,并且不打算对宿主机做任何补丁更新,你当然可以把所有相关的软件包都锁定版本。不过我建议你三思。 将所有程序都锁定版本,可能会导致错过 Ubuntu 系统的重要安全更新,也可能错过一些系统稳定性的改进。所以我的建议是:只锁定 Docker 直接相关的软件包,其他系统组件就交给系统的包管理器去维护。 -l | grep docker | awk '{print $2}' >> "$temp_file2"cat "$temp_file2" | sort | uniq | grep -E "docker
马上十一、中秋双节,很多客户开始做节日活动,基本都有一个共性需求:活动期间,流量预计翻N备,由此引发了一轮Redis的容量治理与保障。 所以最好还是做好事前的保障。 2、事前治理思路2.1 消除人为因素我曾经在给一个业界有名的客户护航时遇到了一个问题:当时是客户的重大活动期间,前三天一切平稳,到最后快结束的一个中午,有开发登陆了生产的Redis集群,执行了key * 2.2 容量保障cpu/内存的冗余,用空间换时间副本只读2.3 慢查询监控这里主要的监控,是指把慢redis配监控,基于业务可以接受的超时时间;proxy-slowlog的配置阈值和监控的阈值一致,方便排查
欢迎来到我的博客,代码的世界里,每一行都是一个故事 Dubbo服务降级:保障稳定性的终极指南【六】 前言 在构建分布式系统时,不可避免地会面临高流量、网络故障和服务不可用等问题。 就像驾驶一辆高性能赛车一样,我们需要一套有效的服务降级机制,以保障系统的稳定性。本文将带你进入Dubbo的服务降级世界,探索如何应对各种挑战,让你的微服务系统始终高效运行。 服务降级概述 1. 在分布式系统中,面临高并发请求、资源瓶颈或故障时,服务可能无法正常运行,这时服务降级可以帮助系统继续提供基本的核心功能,避免完全崩溃,从而保障用户体验。 2. 2. 降级配置示例: 以下是一个示例,演示如何在Dubbo中配置服务降级策略: <! 这有助于提高系统的稳定性和可用性。 服务降级最佳实践 服务降级的最佳实践包括流量控制和故障处理,以确保系统在高流量和故障情况下能够稳定运行: 1.
那么究竟该如何保障庞大复杂的分布式系统的稳定性,走出故障频发的困局呢? 分布式系统的稳定性保障本身就比较难,再加上高峰流量场景,比如常见的双 11 或者是突发疫情导致行程卡的访问比平常多 20 倍的情况,我们该怎么保证系统的稳定性? 同理系统稳定性保障也是如此,主动进行峰值流量系统全链路压测、容量演练是解决主要矛盾的关键一步。 该企业从2017年开始发展快递业务,到2021年Q3, 收入从70亿快速增长三倍到现在的200亿,随着业务的不断扩张,企业的IT系统也在经历着天翻地覆的变化,为了保障业务的稳定发展,系统的稳定性保障也逐渐从被动防御转向积极防御 映射到系统稳定性保障领域,当企业具备这种主动验证系统稳定性的能力,验证的次数越多,你收获的价值就越大。
引言稳定性是数据价值实现的根本保障。数据从采集、传输、存储到计算处理的每个环节都需要系统的稳定运行支撑。数据库作为数据生命周期的核心载体,其稳定性的构建一直是业界公认的最大挑战。 一、稳定性面临的核心命题ApacheDoris稳定性之所以难以保障,其实是受多方面影响:1.1广泛的应用场景Doris主要面临以下五大应用场景的挑战:Real-TimeAnalytics:包括BI报表、 这种“高复杂度+高迭代速度”的双重考验,正是Doris在稳定性建设中需要持续攻克的核心命题。二、多维测试体系为应对上述的多重挑战,测试工作作为保障Doris稳定性的第一道防线,发挥着关键作用。 在系统版本迭代过程中,通过模拟升级和降级操作,验证数据兼容性、功能连续性以及回滚机制的可靠性,避免因版本更替导致的服务中断或数据丢失等问题,确保迭代过程中的系统稳定,让Doris用户在任何2位和3位版本之间都可以滚动升级 三、全方位的稳定性保障体系在构建多维测试体系的基础上,我们意识到单一手段无法应对复杂系统的稳定性挑战,还需要将工程实践、社区共建、系统重构与文档建设融为一体,形成全方位的稳定性保障体系。
除了表面的问题,他们可能还关心如何从流程和工具上提升稳定性,比如持续集成、监控报警这些方面。 稳定性问题的根源可能包括环境不一致、测试用例设计不合理、异步操作处理不当、依赖服务不可靠、数据问题、框架本身的缺陷,以及缺乏维护。 七 、监控与维护稳定性看板:监控测试通过率、失败原因、执行时长等指标,发现异常趋势。定期用例评审:清理过时用例,优化冗余或低效的测试逻辑。 自动化测试的稳定性需要从环境控制、用例设计、依赖管理、流程规范和持续维护等多维度保障。关键是通过工具、流程和团队协作,减少不确定性因素,同时对失败用例进行快速响应和修复,避免测试套件逐渐“腐化”。
今天我们就来聊一聊三H中的高可用,也是我们常说的系统稳定性。 本篇文章只聊思路,没有太多的深入细节。阅读全文大概需要5~10分钟。 要想提升一个系统的可用性,首先需要知道影响系统稳定性的因素有哪些。 三、影响稳定性的因素 首先我们先梳理一下影响系统稳定性的一些常见的问题场景,大致可分为三类: 人为因素 不合理的变更、外部攻击等等 软件因素 代码bug、设计漏洞、GC问题、线程池异常、上下游异常 硬件因素 四、提升稳定性的几种思路 4.1 系统拆分 拆分不是以减少不可用时间为目的,而是以减少故障影响面为目的。 如何做好稳定性和高可用保障是一个很庞大的命题,本篇文章没有太多的深入细节,只聊了整体的一些思路,主要是为了大家在以后的系统高可用建设过程中,有一套系统的框架可以参考。最后感谢耐心看完的同学。
质量保障设计的三位一体 如何思考 水平:通用的平台测试方案,不限于具体行业,通过技术手段形成通用化能力。 行业:具有特定业务形态的业务测试方案,结合业务特点形成针对性解决方案。 专项:对具体问题深挖解决方案,专项保障的测试方案,例如资损、预案、全链路压测等 ? 全链路压测自2013年诞生至今,一直稳居大促质量保障核武器地位。 基本原理: 入口:前端http请求,如detail页面、确认订单页面、提交订单等。 http请求 单链路链路http请求提供标准 URL自身要求可执行;使用条件标识清楚(是否需要带中间件的标等、是否需要用户登陆、请求方式(get or post));URL量级提供到位,URL量级>=2* 并保证各个URL可用,不需要重复修改 URL自身要求 可执行; 使用条件标识清楚(是否需要带中间件的标等、是否需要用户登陆、请求方式(get or post)); URL量级提供到位,URL量级>=2*
背景 数据库和缓存是系统的核心组件,保障其稳定性是确保整个系统稳定运行的基础。 本规范分别对数据库及缓存硬件扩容、软件升级的前置条件进行说明并期望后续按照此规范进行优化、硬件扩容及软件升级,保障升级操作规范、升级过程平稳。 2. ,则进行原主库升级 2.6 数据库架构升级 因数据库版本的迭代及新架构方案的出现,在当前数据库架构出现如下问题时,需要考虑升级数据库架构: 影响数据库稳定性: 如正在使用的数据库架构方式存在BUG ,导致数据库集群 无法正常切换、异常切换、不满足数据库可用性及稳定性要求时,需升级软件版本或 替换数据库架构方案 部署及维护成本高:如当前架构方案在部署及维护成本均较高,且存在可以替代的降本增效的架构时 BUG,导致Redis集群无法正常切换、异常切换、不满足Redis可用性及稳定性要求时,需升级软件版本或替换Redis架构方案 部署及维护成本高:如当前架构方案在部署及维护成本均较高,且存在可以替代
每年一次的双十一大促临近,因此上周末公司组织了一次技术交流闭门会,邀请了电商、物流、文娱内容、生活服务等知名一线互联网公司的技术大牛,一起探讨了一些大促稳定性保障相关的技术话题。 大促典型场景及优化方案 1、云资源稳定性保障 单云模式存在一定稳定性风险,混合云架构在容灾方面效果更好; 核心链路梳理,可以将历史大促或者峰值的访问URL存储起来,经过处理后作为核心链路参考; 验证线上的性能容量搭建单独的仿真环境 /代码块耗时大,不断压测优化验证; 2)业务优化(深库存场景) 为了应对秒杀场景高并发,可以通过缓存+数据库方式来解决; 90%库存放缓存应对高并发; 10%库存放数据库应对超卖; 3、数据库稳定性保障的 SOP 数据库的可用性底线:99.99%; 故障需要有严格的定义规则; 数据库稳定性三板斧: 1)扩容:DB是有状态服务,计算层便于扩容,将DB节点放到容器中,有需要扩容; 2)灾备:对于大流量读场景可通过流量切换方式 分组:假设有100个节点,40个给核心业务(交易),60个给其他业务; 2)业务身份:中台架构可通过业务身份把订单秒杀等应用打上标记,便于隔离区分; 业务稳定性保障 涉及到交易订单&优惠券等和钱有关场景
接口请求重试策略:保障稳定性的必杀技 前言 你的应用程序是否对接口请求失败有足够的应对措施?接口请求重试机制是确保数据可靠传输的关键。 例如,第一次重试等待1秒,第二次等待2秒,第三次等待4秒,以此类推。 适用情况: 指数退避适用于不确定问题解决时间的情况,或者服务器处于持续过载状态。 2. 为什么幂等性重要: 幂等性对于接口设计和实现非常重要,特别是在分布式系统和网络通信中。它确保了即使请求在网络中丢失、延迟或重复,系统也能够保持一致性。 3. 第六:超时和延迟 处理超时和延迟是关键的策略,用于更好地应对网络不稳定性。网络不稳定性可能导致请求超时或响应延迟,以下是一些处理超时和延迟的策略: 1. 采取适当的策略,如设置超时、超时重试和异步请求,可以更好地应对网络不稳定性,确保用户能够访问所需的信息,并减少不必要的等待。