读书笔记(SRE:Google运维解密):第22章 处理连锁故障

40个运维故障排查与修复技巧 这些故障问题及其解决方法涵盖了运维工作的多个方面,包括网络、系统、存储、安全、虚拟化等,希望能为运维人员提供实用的参考。解决方法:检查物理线路、交换机端口、网卡驱动和配置,使用ping、traceroute等工具定位问题。解决方法:优化SQL查询语句,调整索引,分析数据库资源使用情况(CPU、内存、I/O)。解决方法:检查SMTP、POP3、IMAP服务状态,查看邮件队列和日志。解决方法:检查硬件故障(如电源、硬盘)、系统日志,恢复或重装操作系统。 阅读详情
  • 连锁故障是由于正反馈循环(positivefeedback)导致的不断扩大规模的故障。

连锁故障可能由于整个系统的一小部分出现故障而引发,进而导致系统其他部分也出现故障。例如,某个服务的一个实例由于过载出现故障,导致其他实例负载升高,从而导致这些实例像多米诺骨牌一样一个一个全部出现故障。

 

  • 连锁故障产生的原因

(a)服务器过载:直接由于服务器过载导致,或间接由于服务器过载引发的其他问题导致

例如,某个集群内部的过载可能会导致该服务实例崩溃;这时负载均衡器会将请求发送给其他集群,使那些集群的实例过载,从而造成整个服务过载故障。这些事件连锁发生的速度可能非常快(可能在分钟级范围),因为负载均衡器和任务编排系统的响应速度通常非常快。

(b)资源耗尽:某一种资源的耗尽可以导致高延迟、高错误率,或者低质量回复的发生。这些的确是在资源耗尽时应该出现的情况:在负载不断上升到过载时,服务器不可能一直保持完全正常。

不同种类的资源耗尽会对软件服务器产生不同的影响。

  • CPU:如果CPU资源不足以应对请求负载,一般来说所有的请求都会变慢。这个场景会造成一系列的副作用:
    (1) 正在处理的(in-flight)请求数量上升:这会影响其他所有的资源,包括内存、活跃线程数(在每个请求一个线程的编程模型下)、文件描述符,和后端服务器的资源(该资源的耗尽可能会带来其他连锁问题)。
    (2) 队列过长:意味着延迟上升(因为所有请求都要排队一段时间),同时队列会使用更多的内存。
    (3) 线程卡住
    (4) CPU死锁或者请求卡住
    (5) RPC超时:服务器过载时,对客户端RPC的回复会变慢,最终会超过客户端所设置的超时时间。这会导致服务器对请求实际进行的处理都被浪费了,而客户端可能会重试RPC,造成更严重的过载。
    (6) CPU缓存效率下降
  • 内存: 就算没有其他副作用,同时处理的请求数量升高也会消耗更多的内存用于存放请求、回复以及RPC对象。内存耗尽可能导致如下情况的发生:
    (1) 任务崩溃:任务可能会因为超过资源限制而被容器管理器驱逐(VM或者其他的),或者程序自身逻辑会触发崩溃。
    (2) Java 垃圾回收(GC)速率加快,从而导致CPU使用率上升:由于CPU资源减少,请求处理速度变慢,内存使用率上升,导致GC触发次数增多,导致CPU资源的进一步减少。我们将此称之为“GC死亡螺旋 ”。
    (3) 缓存命中率下降:可用内存的减少可能会导致应用层缓存的命中率降低,导致向后端发送更多的RPC,可能会导致后端任务过载。
  • 线程: 线程不足可能会导致错误或者导致健康检查失败。如果服务器为此增加更多线程,这些线程可能会占用更多内存。在极端情况下,线程不足可能会导致进程ID数不足(Linux的进程ID数是有限的)
  • 文件描述符:文件描述符(file descriptor)不足可能会导致无法建立网络连接,进而导致健康检查失败。
  • 资源之间的相互依赖:很多资源的耗尽都会导致其他资源出现问题—某个服务过载经常会出现一系列次级现象看起来很像根本问题,这会使定位问题更困难。

假设如下场景:有点意思

  1. 某Java前端服务器GC参数没有被调优。
  2. 在高负载(但是在期待范围内)情况下,前端由于GC问题导致CPU不足。
  3. CPU不足导致请求处理变慢。
  4. 同时处理的请求增多导致内存使用上升。
  5. 内存压力上升,同时由于固定内存分配比例的原因,用于缓存的内存数量减少。
  6. 缓存数量降低意味着缓存中键值数量下降,从而导致命中率下降。
  7. 缓存命中率下降导致更多的请求被发往后端进行处理。
  8. 后端服务器CPU或者线程不足。
  9. CPU不足导致健康检查失败,从而触发了连锁故障。

(c)服务不可用:资源耗尽可能导致软件服务器崩溃。例如,这些服务器可能会由于内存超标而崩溃。一旦几个软件服务器由于过载而崩溃,其他软件服务器的负载可能会上升,从而使它们也崩溃。这种问题经常如同滚雪球一样越来越严重,不多久全部服务器就会进入崩溃循环。这种场景经常很难恢复,因为一旦某个软件服务器恢复正常,它就会接收到大量请求的轰炸,几乎立即再次崩溃。
 

  • 防止软件服务器过载的策略

(a)使用负载压力测试得出服务器的极限,同时测试过载情况下的失败模式:除非在真实环境下测试,否则很难预测哪种资源会耗尽,以及资源耗尽产生的效果。
(b)提供降级结果
(c)在过载情况下主动拒绝请求
(d)上层系统应该主动拒绝请求

由于速率限制实现中一般不会考虑服务整体健康程度的因素,它可能并不能阻止一个已经发生了的连锁故障。简单的速率限制实现很有可能会导致一些容量的浪费。速率限制可以具体在以下位置实现:

  • 在反向代理层,通过针对请求的某种特性进行数量限制(如IP地址),来缓解和避免拒绝服务攻击,避免攻击性客户端的影响。
  • 在负载均衡器层,在服务进入全局过载时主动丢弃请求。取决于该服务的实现和复杂度,这种丢弃可能是针对所有请求的(丢弃超过X QPS 的所有请求),或者是有选择性的(丢弃非最近用户发来的请求,或者丢弃低优先级请求,如背景同步请求,但是保留用户交互型请求)。
  • 在每个任务自身,避免负载均衡层的随机扰动导致软件服务器过载。

(e)进行容量规划:好的容量规划可以降低连锁反应发生的可能性。容量规划应该伴随着性能测试进行,以确定可能导致服务失败的负载程度。
 

  • 队列管理:
    大部分“每个请求一个线程”模型的软件服务器使用一个队列和一个线程池来处理请求。接收到的请求将会进入队列,线程池中的某线程会将请求从队列中取出,进行实际处理。通常情况下,当队列排满时,服务器会拒绝新的请求。
    在队列中的排队请求消耗内存,同时使延迟升高。
    对一个流量基本稳定的服务来说,队列长度比线程池大小更小会更好(如 50% 或更小)。当服务处理速度无法跟上请求到达速率时,尽早拒绝请求会更好。
     
  • 流量抛弃 load shedding
    软件服务器临近过载时,主动抛弃一定量的负载。目标是避免该软件服务器出现内存超限,健康检查失败,延迟大幅升高,或者其他过载造成的现象。
  • 一种简单的流量抛弃实现方式是根据CPU使用量、内存使用量及队列长度等进行节流。
  • 另外的做法包括将标准的先入先出(FIFO)队列模式改成后入先出(LIFO),以及使用可控延迟算法(CodDel)或者类似的方式更进一步地避免处理那些不值得处理的请求(如果某个用户的Web搜索请求由于RPC排队因素已经等待了10s,很有可能该用户已经放弃了,已经刷新了浏览器又发送了一个新请求:这时回复第一个RPC请求已经没有任何意义,因为它已经没用了!)
  • 优雅降级 graceful degradation
    在流量抛弃的基础上进一步减少服务器的工作量。在某些应用程序中,是可以通过降低回复的质量来大幅减少所需的计算量或者所需的计算时间的。

评估流量抛弃或者优雅降级时,需要考虑以下几点:

  • 确定具体采用哪个指标作为流量评估和优雅降级的决定性指标(如,CPU用量、延迟、队列长度、线程数量、是否该服务可以自动进行降级,或者需要人工干预)。
  • 当服务进入降级模式时,需要执行什么动作?

流量抛弃或者优雅降级应该在服务的哪一层实现?是否需要在整个服务的每一层都实现,还是可以选择某个高层面的关键节点来实现?当评估和具体实施的时候,还需要考虑以下几点:

  • 优雅降级不应该经常被触发—通常触发条件显示了容量规划的失误,或者是出现了意料之外的负载转移。整个降级系统应该简单、易懂,尤其是在不经常使用的情况下。
  • 记住,代码中平时不会使用的代码路径(通常来说)是不工作的。在稳定运行状态下,优雅降级不会经常触发,意味着在这个模式下的运维经验很少,对这个模式的问题也不够熟悉,这就会升高这种模式的危险性。我们可以通过定期针对一小部分的服务压力测试以便更多地触发这个模式,保证这个模式还能正常工作。
  • 监控系统应该在进入这种模式的软件服务器过多时报警。
  • 复杂的流量抛弃和优雅降级系统本身就可能造成问题—过于复杂的逻辑可能会导致软件服务器以外的服务进入降级模式,甚至进入反馈循环。设计时应该实现一种简单的关闭降级模式,或者是快速调节参数的方式。

 

  • 重试
    (a)限制每个请求的重试次数。不要将请求无限重试。
    (b)使用明确的返回代码,同时详细考虑每个错误模式应该如何处理。
     
  • 请求延迟和截止时间
    (a)选择截止时间
    (b)超过截止时间
    (c)截止时间传递

 

  • 慢启动和冷缓存
    (a)进程在刚刚启动之后通常要比稳定状态下处理请求的速度慢一点,原因在于:1)必需的初始化过程在接收到第一个请求后,需要跟后端服务器建立连接。2)运行时性能优化,尤其是Java JIT 编译过程,热点优化,3)以及类延迟加载机制。
    (b)有些服务器会在缓存没有充满之前效率很低,原因有可能:1)上线一个新的集群刚刚增加的集群的缓存是空的。2)在某个集群维护之后恢复服务状态缓存中的数据可能是过期的。3)重启。
     
  • 保持调用栈永远向下
    前端服务器和后端服务器通信,后端服务器随后和存储层通信。
    假设后端服务器中的所有任务会彼此通信。这种在层内的交互通信可能会导致问题,原因有如下几个:
    (a)导致分布式死锁。
    (b)如果这种交互通信是由于某种失败因素或者过载情况导致的(如负载重新分布机制在负载很高的时候很活跃),这种交互通信可能在延迟上升的时候从不常见变得很常见。
    (c)初始化整个系统可能会变得更复杂。
     
  • 连锁故障的触发条件
    (a)进程崩溃:进程可能会由于接收到致死请求(query of death,会触发进程崩溃的RPC)而崩溃,或者由于集群问题,代码中的断言错误
    (b)进程更新:发布一个新版本或者更新配置文件时,可能由于大量任务同时受影响而触发连锁故障。
    (c)新的发布:新的二进制文件、配置更改,或者底层架构的改变都可能导致请求特征的改变,资源使用和限制的改变、后端的改变和其他系统组件的改变可能导致连锁故障的发生。
    (d)自然增长:使用量的天然上升,却没有进行对应的容量调整导致的。
    (e)计划中或计划外的不可用:
     
  • 连锁故障的测试

(a)测试直到出现故障,还要继续测试:理解服务在高负载情况下的行为模式可能是避免连锁反应最重要的一步。

我们还应该测试一个组件在过载之后再恢复到正常水平的行为状态。这种测试可能可以帮助回答下列问题:

  • 如果一个组件在高负载条件下进入了降级模式,它是否能够在无人工干预的情况下退出该模式?
  • 如果高负载情况下几个服务器崩溃,负载需要降低多少才能使系统重新稳定下来?

(b)测试最常用的客户端:
(c)测试非关键性后端:
 

  • 某些原本为了降低服务背景错误率或者优化稳定状态的改变反而会让服务更容易出现事故。在请求失败的时候重试、负载自动转移、自动杀掉不健康的服务器、增加缓存以提高性能或者降低延迟:这些手段原本都是为了优化正常情况下的服务性能,但是也可能会提高大规模的服务故障的几率。
3D视觉引导技术在机器人焊接中的应用 通过对比传统的2D视觉和3D视觉技术在焊接领域的应用差异,探讨了3D视觉引导技术在提高焊接精度、适应不规则工件形状和增强自适应能力方面的优势。本文对3D视觉引导技术在机器人焊接中的应用进行了深入探讨,总结了其在提高焊接精度、适应不规则工件形状和增强自适应能力方面的优势,并通过应用案例展示了其在焊接路径规划、焊缝检测和焊接质量控制等方面的重要作用。1. 提高焊接精度:3D视觉引导技术能够精确测量焊接工件的三维形状和位置,为机器人提供精准的焊接路径规划和跟踪,从而提高焊接精度。三、3D视觉引导技术概述。 阅读详情

相关推荐

编译原理2024期末复习(面向做题,大题速学)【太原理工大学】

归约-归约”冲突就是在项目集规范族一个状态中两个。

m0_63181421的博客 1万+

google sre运维解决 读后感 - 第三篇(22-23章)

22 处理连锁故障 如果请求没有成功,以指数型延迟重试。 为什么人们总是忘记增加一点点抖动因素呢? 连锁故障产生的原因和如何从设计上避免 服务器过载 资源耗尽。某一种资源的耗尽可以导致高延迟、高错误率,或者低质量回复的发生。这些的确是在资源耗尽时应该出现的情况:在负载不断上升到过载时,服务器不可能一直保持完全正常。 CPU。如果CPU资源不足以应对请求负载,一般来说所有的请求都会变慢。这个场景会

vbaspdelphi的专栏 1057

写出GD32L233/235在读写flash的区别(用于OTA功能)

在单片机里面表示 大概是 address += sizeof(uint32_t) address += sizeof(uint64_t)1.说到OTA功能,实际上 往flash 指定区域写 数据, 拷贝数据,然后 跳转, 必要时 注意单片机的偏移量。在写本文时,L233支持单字写入,而L235只有双字写入. 一个写入地址+4 一个写入地址+8。这个是 自己写的擦除一页 数据,当然可以参考 提供的demo去实现,看自己需求。接下来是 读取 双字,也就是在L235上的读取。

teleger的博客 909

Java Full GC 全场景揭秘:你的应用何时会“全线崩溃“

7大触发条件的精准识别 🔍恶性循环的破解之道 ⚔️生产环境全套解决方案 🧰前沿规避技术 🚀最后防线:设置在测试环境捕获Full GC!💥#Java #FullGC #JVM #性能优化 #内存泄漏 #故障排查。

全栈开发工程师 1047

单细胞分析(16)—— RNA Velocity 分析流程

RNA velocity 是一种强大的单细胞转录组分析工具,它可以预测细胞的未来状态,揭示发育轨迹,并用于探索细胞状态转换。RNA velocity 是一种通过单细胞 RNA 测序(scRNA-seq)数据推测细胞未来状态的分析方法。🚀**RNA velocity 提供了一个全新的角度来理解细胞的动态变化,为单细胞转录组分析带来了更深入的时空信息!

阅读文献,记录学习笔记 2981

DELL Precision T7920加装显卡遇到的坑

文章目录DELL Precision T7920加装显卡服务器原有配置介绍选购过程确认型号确认PCIE x16插槽确认电源功率和电源线安装过程电源模组线不够多单装一个3090显卡尺寸问题加装上1080Ti非常重要!官方文档 DELL Precision T7920加装显卡 实验室由于显卡计算能力不够,以及显卡显存不够,请老师花了大价钱购入了两张GeForce 3090显卡。老师赛高!记录一下这次加装显卡过程中学到的一些知识。 服务器原有配置介绍 服务器原有一张1080Ti显卡,一个16核Xeon CPU。

weixin_45520982的博客 1万+

SRE Google 运维解密 具体实践一

一、基于时间序列数据进行有效报警 Borgmon是google使用的时间序列监控系统,在开源软件中Prometheus是非常类似的一款工具。这个软件将收集时间序列信息作为监控系统的首要任务,同时发展了一种丰富的时间序列信息操作语言,通过使用该语言将数据转化为图表和报警。 因为总是会有大批量的服务器在上线、下线,建立和维护一个有效的服务注册、发现系统是很有必要的。上线的主机需要能主动让B

watermelonbig的专栏 7363

从零搭建openEuler ARM64开发测试环境:手把手教你用libvirt+KVM配置虚拟机(含VNC远程安装)

本文详细介绍了如何在ARM64平台上从零搭建openEuler开发测试环境,涵盖libvirt和KVM配置虚拟机的完整流程,包括环境准备、存储配置、网络优化、XML配置详解以及VNC远程安装。特别针对华为欧拉(openEuler)系统进行了优化,帮助开发者快速构建高效的ARM架构虚拟化环境。

weixin_30545945的博客 587

一次 JVM FullGC 的排查过程及解决方案!

本文来源:字节观,是二阿公同学的投稿问题产生最近新上线的系统偶尔会报FullGC时间过长(>1s)的告警,查看GC日志,如下图所示:看到GC日志,我第一时间关注到的不是GC耗时,而是GC触发的原因:Metadata GC Threshold也就是 FullGC 触发的原因是因为Metaspace大小达到了GC阈值。在监控系统里面看了一下Metaspace的大小变化趋势,如下图所示:按照以往的...

weixin_33971977的博客 1511

Chapter 5 Gate Drivers and Level Shifters

Gate driver如下图所示, 包括功率管(带保护), Gate driver, Level shifter, Gate Supply 和Dead-time control.

2304_76736886的博客 2243

Upwork数据战争:用爬虫与AI预测垄断订单

当普通自由职业者还在“等客户发需求”时,顶尖玩家已用数据预测客户明天需要什么; 当竞争对手熬夜抢单时,你的爬虫早已自动提交提案—— 这不是科幻,而是2025年的现实! 本文将手把手教你用合法工具搭建“数据战情室”,让每个决策都有万亿级数据支撑!

qq_61813593的博客 983

《SRE:Google 运维解密》读书笔记29: 迅速培养SRE加入on-call - 培训, 是对人最重要的投资

SRE培训 = 系统性蓝图导航 + 目标性项目赋能 + 反向工程锻造思维——让新手在信任和安全感中快速成长为值得信赖的on-call工程师。关键点一句话概括信任是基石培训的目标是让团队可以相互信任——相信每个人在关键时刻都能靠得住三大核心问题除了“教什么”,还要考虑如何评估、如何双赢、如何让大家都喜欢培训蓝图X轴(抽象→具体) + Y轴(时间),正式on-call是重要里程碑新手三大焦虑“我在做什么”“进度如何”“何时能on-call”——培训需要回答这些问题系统性原则。

2330

高通SDX35:SGMII接口PHY RTL8211FSI-CG驱动适配

高通SDX35 RTL8211F SGMII

不秃头的程序猿Gabriel的博客 787

《SRE:Google 运维解密》读书笔记23: 应对连锁故障 - 从“局部过载”到“全局崩溃”

关联章节关联点第13章 紧急事件响应连锁故障的初期表现通常是一次紧急事件;如果处理不当,局部问题会迅速扩大为全局危机第14章 紧急事故管理当连锁故障已经发生时,第14章的事故管理流程是协调多团队响应、控制影响范围的关键第15章 事后总结每次连锁故障都需要事后总结,将“GC死亡螺旋”“重试风暴”等模式沉淀为组织的知识资产第16章 跟踪故障事后总结中识别的行动项目需要通过跟踪系统闭环管理,确保改进措施真正落实第21章 应对过载。

2552

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

《SRE:Google 运维解密》读书笔记11: 基于时间序列数据进行有效报警 - 新型的监控

在正式进入第10章之前,有必要对“具体实践”这一部分的整体结构有所了解。章节主题核心内容第10章基于时间序列数据进行有效报警Borgmon、时间序列数据库、报警规则设计第11章on-call 轮值多地团队、轮值频率与生产环境熟悉度第12章有效的故障排查手段假设-排除法、常见陷阱第13-14章应急事件管理降低影响范围、管理事故响应第15-16章事后总结与根源分析无指责文化、事故跟踪系统第17章测试避免已知类型问题重复发生第18-22章容量规划与负载均衡Auxon、GSLB、BwE、连锁故障。

1933

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

《SRE:Google 运维解密》读书笔记34: 从其他行业吸取的经验教训 - 跳出软件工程看可靠性

事后总结文化是SRE四大核心主题中的第二项。本章比较了不同行业如何从失败中学习。跨行业比较揭示了一个普世真理:高可靠性不是某个行业的专利,而是系统化准备、从失败中学习、自动化与结构化决策四大支柱共同支撑的结果——SRE不是孤立的学科,而是人类追求可靠性的共同智慧在软件领域的体现。关键点一句话概括四大核心主题备灾测试 + 事后总结 + 自动化 + 结构化决策——跨行业比较的简化框架备灾测试的共性航空模拟器、核海军演习、软件DiRT——都在“可控环境中暴露系统弱点”事后总结的共性。

2400

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

Google SRE 读书笔记 扒一扒SRE用的那些工具

写在前面 最近花了一点时间阅读了《SRE Goolge运维解密》这本书,对于书的内容大家可以看看豆瓣上的介绍。总体而言,这本书是首次比较系统的披露Google内部SRE运作的一些指导思想、实践以及相关的问题,对于我们运维乃至开发人员都有一定的借鉴意义。 书中的一些思想也令我印象深刻,例如SRE工程师要保证投入50%的时间在项目上、错误预算、命运之轮、事故总结等等,对于从业者有很大的启发。...

aifeier1982的博客 1267

SRE_Google运维解密_笔记

1.70%的事故由变更引起 2.谷歌的SRE倾向于DEVOPS,兼顾效率(快速上线更新)与质量(降低事故率) 3.SRE大致发展历程:手动(凭经验容易误操作)→自动→智能 4.缓慢的不断重启的实例优于永不重启泄露资源的实例 5.SLA(service level agreement):请求延迟;错误率;系统吞吐量(QPS);可用性;持久性 SLO(object):SLI的目标范围 SLI(indicator):从目标反推指标 6.多创新,少做琐事(DRY),但合理的琐事有助于放松 7.监控系

m0_70751647的博客 1449

SRE用的那些工具

写在前面 最近花了一点时间阅读了《SRE Goolge运维解密》这本书,对于书的内容大家可以看看豆瓣上的介绍。总体而言,这本书是首次比较系统的披露Google内部SRE运作的一些指导思想、实践以及相关的问题,对于我们运维乃至开发人员都有一定的借鉴意义。 书中的一些思想也令我印象深刻,例如SRE工程师要保证投入50%的时间在项目上、错误预算、命运之轮、事故总结等等,对于从业者有很大的启发。书中提...

niuniu0186的专栏 1585

《SRE:Google 运维解密》读书笔记26: 数据处理管道 - 当数据处理变成“输油管道”

数据处理管道 = 多阶段数据转换的有序链条——周期性模型虽实用但脆弱,领导者-追随者模型是更可靠的替代方案;管道的可靠性依赖于幂等性、检查点和批量写入的三层机制,而整条链的效率由最慢的分块决定。关键点一句话概括管道的本质读入→转换→输出,由Cron周期性调度管道深度串联程序的数量,浅则1、深可达数百脆弱性根源有机增长破坏初始调校的参数平衡桶效应整条管道由最慢的分块决定完成时间领导者-追随者模型调度逻辑与处理逻辑分离,替代周期性管道的可靠方案不连续性挑战。

1799

《SRE:Google 运维解密》读书笔记25: 分布式周期性任务系统 - 当“定时任务”遇上“行星级规模”

分布式Cron = Paxos集群保证高可用 + Leader唯一性保证正确性 + 幂等设计应对部分失败 + 任务延展打散惊群效应,让定时任务在行星级规模下可靠运行。关键点一句话概括单机Cron的问题单点故障导致所有定时任务失效,无法满足大规模业务需求Paxos的角色提供分布式一致性,确保集群中只有一个LeaderLeader的职责唯一可以修改状态和启动Cron任务的节点状态日志Paxos的只增日志,需定期压缩以防无限增长部分失败。

1736

ClawdBot本地AI中枢搭建指南:Node.js 22+、Anthropic API与Telegram集成

个人AI助理本质上是将大模型能力封装为可运维的本地服务基础设施。其核心原理在于构建稳定可靠的模型调用管道,通过协议适配层(如Anthropic Messages API)统一调度多源模型,并借助本地网关实现权限控制、熔断降级与审计追踪。该架构显著提升AI工具链的可控性与数据主权保障能力,广泛应用于知识管理、自动化办公与私有代码辅助等场景。本文聚焦ClawdBot这一典型实现,深入解析基于Node.js 22+环境的部署实践、Anthropic API高可用连接策略,以及Telegram消息通道的生产级集成方

weixin_34166847的博客 378

C. 高可用架构 --- 连锁故障处理

C. 高可用架构 --- 连锁故障处理 概述 由于整个系统的一小部分出现故障,进而导致系统其他部分也出现故障 原因 服务器过载:原本均衡的两个系统,由于其中一个服务出现问题,导致另外一个服务出现过载 资源耗尽 CPU,副作用: 正在处理的请求数量上升 队列过长 线程卡住 CPU死锁或者请求卡住 RPC超时 CPU缓存效率下...

micklongen的专栏 593

读书笔记(SRE:Google运维解密):第12章 有效的故障排查手段

新手们常常不能有效地进行故障排查,是因为这个过程理想情况下同时需要两个条件。 (a)对通用的故障排查过程的理解(不依靠任何特定系统)。 (b)对发生故障的系统的足够了解。 通用的故障排查流程 从理论上讲,我们将故障排查过程定义为反复采用假设-排除手段的过程:针对某系统的一些观察结果和对该系统运行机制的理论认知,我们不断提出一个造成系统问题的假设,进而针对这些假设进行测试和排除。 造成低效的故障排查过程的原因通常集中在定位(triage)、检查和诊断环节上,主要由于对系统不够了解而导致。  .

lo_ong的博客 602

读书笔记(SRE:Google运维解密):第17章 测试可靠性

对服务质量的自信可以用过去的系统可靠度和未来的系统可靠度来衡量。前者可以通过抓取和分析历史性监控信息来获得,后者可以用基于历史数据的预测来量化。为了让这些预测信息足够准确,必须满足下列条件中之一: (a)在这段时间内,该系统完全没有改变。包括没有任何软件更新以及服务器数量变化,这意味着未来的行为方式应该与过去的行为方式类似。 (b)可以充分描述整个系统的所有改变,这样可以针对每个系统变化引入的不确定性进行分析。   软件测试的类型:传统测试和生产测试 (a)传统测试: 1)单元测试:单元测试(.

lo_ong的博客 716

读书笔记(SRE:Google运维解密):第11章 on-call轮值

作为生产系统的监管者,on-call工程师负责处理生产环境中即将或者正在发生的业务事故,以及评审对生产系统的变更请求。   紧急事件(incident)的定义是:一系列根本原因一致或者相关的事件和报警信息,这些事件应该在同一个事后报告中讨论   现代理论研究指出,在面临挑战时,一个人会主动或非主动(潜意识)地选择下列两种处理方法之一: (a)依赖直觉,自动化、快速行动。 (b)理性、专注、有意识地进行认知类活动。   在应急事件处理过程中,最理想的方法论是这样的:在有足够数据.

lo_ong的博客 700
上一篇: 读书笔记(SRE:Google运维解密):第21章 应对过载
下一篇: 读书笔记(SRE:Google运维解密):第23章 管理关键状态:利用分布式共识来提高可靠性
github_37320188
博客等级 码龄10年 24粉丝 86原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值