读书笔记(SRE:Google运维解密):第20章 数据中心内部的负载均衡系统

读书笔记(SRE:Google运维解密):第19章 前端服务器的负载均衡 流量负载均衡(traffic load balancing)   理想情况下,用户流量应该最优地分布于多条网络链路上、多个数据中心中,以及多台服务器上。但是这里的“最优”是如何定义的呢?最优严重依赖于下列几个因素: (a)逻辑层级(是在全局还是在局部)。 (b)技术层面(硬件层面与软件层面)。 (c)用户流量的天然属性。 简化的场景:一个简单的搜索请求和一个视频上传请求。用户想要很快地获取搜索结果,所以对搜索请求来说最重要的变量是延迟(latency)。而对于视频上传请求来说,用户已经预期该. 阅读详情
  • 识别异常任务:流速控制和跛脚鸭任务
    (a)流速控制机制也是一种非常简单的负载均衡机制:如果某个后端任务过载了,请求处理开始变慢,客户端会自动避开这个后端,从而将任务分配给其他的后端。
    (b)跛脚鸭状态,后端任务正在监听端口,并且可以服务请求,但是已经明确要求客户端停止发送请求。

在Google的RPC框架实现中,不活跃的客户端(没有建立TCP连接的客户端)也会定期发送UDP健康检查包。这就使跛脚鸭状态可以相对较快地传递给所有的客户端—通常在一到两个RTT周期内—无论它们处于什么状态下。
 
允许任务处于这种半正常的跛脚鸭状态的好处就是让无缝停止任务变得更容易,处于停止过程中的任务不会给正在处理的请求返回一个错误值。能够无影响地停止一个活跃的后端任务可以让处理代码推送、设备维护活动,和机器故障问题导致的任务重启变得对用户透明。这个停止过程通常按照以下步骤进行:
(1)任务编排系统发送一个SIGTERM信号给该任务。
(2)后端任务进入跛脚鸭状态,同时请求它的所有客户端发送请求给其他后端任务。这通过SIGTERM信号处理程序中调用RPC实现中的API完成。
(3)任何在后端进入跛脚鸭状态时正在进行的请求(或者在进入状态之后,但是其他客户端收到通知之前)仍会继续进行。
(4)随着请求回复被发送回客户端,该后端任务的活跃请求逐渐降低为0。
(5)在配置的时间过后,该后端程序要么自己干净地退出,要么任务编排系统主动杀掉它。该时间应该被设置为一个足够大的值,以便一般的请求可以有足够的时间完成。每个服务的该数值都不同,一般来说取决于客户端的复杂程度,10s到150s是一个不错的选择。

 

  • 利用划分子集限制连接池大小在健康管理之外,负载均衡另外要考虑的一个因素就是子集划分:限制某个客户端任务需要连接的后端任务数量。
    (a)子集选择算法一:随机选择。一个最简单的子集选择算法是让所有客户端任务将后端列表随机排列一次,同时将其中的可解析/可服务状态的后端提取出来。一次性随机排列并顺序选取可以很好地处理重启和任务失败情况(在这些情况下连接变动很小),因为这种算法限制了所考虑的后端的数量。
    (b)子集选择算法二:确定性算法。将客户端任务划分在多“轮”中,每一轮i包含了subset_count个连续的客户端,从客户端subset_count * i开始,同时subset_count是子集的个数(也就是后端数量除以想要的子集大小)。在每一轮计算中,每个后端都会被分配给一个而且仅有一个客户端任务(最后一轮除外,这时可能客户端数量不够,所以有些后端没有被分配)。

每个连接都需要双方消耗一定数量的内存和CPU(由于定期健康检查导致)来维护。虽然这个消耗理论上很小,但是一旦数量多起来就可能变得很可观。子集化可以避免一个客户端连接过多后端任务,或者一个后端任务接收过多客户端连接。

 

  • 负载均衡策略可以是非常简单的,不考虑任何后端状态的算法(例如,轮询),或者是基于后端状态的算法(例如最小负载轮询,或者带权重的轮询)。
    (a)简单轮询算法:让每个客户端以轮询的方式发送给子集中的每个后端任务,只要这个后端可以成功连接并且不在跛脚鸭状态中即可。该策略的负载均衡结果可能很差。这里的实际数据取决于很多因素,例如不同的请求处理成本和物理服务器的差异等。
    (b)最闲轮询策略:让每个客户端跟踪子集中每个后端任务的活跃请求数量,然后在活跃请求数量最小的任务中进行轮询。最闲轮询策略的最危险的一个坑:如果一个任务目前不健康,它可能会开始返回100%的错误。取决于错误的类型,错误回复可能延迟非常低;一般来说返回一个“我不健康”的错误比实际处理请求要快得多。于是,客户端任务错误地认为该任务可用,从而给该异常任务分配了大量的请求。
    (c)加权轮询策略:加权轮询策略理论上很简单:每个客户端为子集中的每个后端任务保持一个“能力”值。请求仍以轮询方式分发,但是客户端会按能力值权重比例调节。在收到每个回复之后(包括健康检查的回复),后端会在回复中提供当前观察到的请求速率、每秒错误值,以及目前资源利用率(一般来说,是CPU使用率)。客户端根据目前成功请求的数量,以及对应的资源利用率成本进行周期性调节,以选择更好的后端任务处理。失败的请求也会记录在内,对未来的决策造成影响。
google 运维解密-终极最全标签版! SRE:Google运维解密解释了如何对软件进行生命周期的整体性关注的,以及为什么这样做能够帮助Google成功地构建、部署、监控和运维世界上现存最大的软件系统。 DevOps突出重视软件开发人员和运维人员的沟通合作,通过自动化流程来使得软件构建、测试、发布更加快捷、频繁和可靠。 你值得拥有!!!! 立即下载

相关推荐

QT项目实战:如何在正点原子Linux开发板上集成CVR-100UC身份证阅读器(附完整代码)

本文详细介绍了在正点原子Linux开发板上集成CVR-100UC身份证阅读器的完整实战流程。内容涵盖驱动适配、库文件部署、QT项目框架搭建、核心功能封装以及界面集成,并提供了完整的代码示例,帮助开发者快速实现嵌入式环境下的身份证信息读取功能。

yyy34的博客 258

负载均衡之子集选择算法

目录 背景 背景 目前的场景下,任务管理集群Apiserver有6个节点,agent集群的数量有36w+。之前的算法是agent通过注册中心获取Apiserver全量的节点数,并建立连接,所以每个Apiserver上维护了36w+的连接池。 当集群负载高时,扩容Apiserver节点并不能解决负载的问题,因为新节点并不能平摊其他节点的连接数,为此需要采用sharding的方式,让每个agent连接到部分的Apiserver节点,并且这个过程需要是幂等的,就是如果APiserver节点没有变更,.

u010512429的博客 1066

S32DS IDE调试技巧:如何用条件断点精准捕获汽车电子MCU的硬件状态变化

本文详细介绍了S32DS IDE中条件断点功能在汽车电子MCU开发中的应用技巧。通过精准捕获硬件状态变化,工程师可以高效调试外设寄存器异常、时序敏感型交互等复杂场景,大幅提升汽车电子系统的开发效率。文章还提供了多种实战案例和性能优化建议,帮助开发者充分利用S32DS的调试功能。

CAT789的专栏 209

google sre运维解决 读后感 - 第二篇(16-21章)

跟踪故障 提高可靠性的唯一可靠的方法论是建立一个极限,同时不断跟踪改变。  测试可靠性 如果你还没有亲自试过某件东西,那么就假设它是坏的。 SRE的一项关键指责就是要定量地分析我们维护的某项服务的质量。对服务质量的自信可以用过去的系统可靠度和未来的系统可靠度来衡量。前者可以通过抓取和分析历史性监控信息来活得,后者可以用给予历史数据的预测来量化。 如果我们在短时间内做了大量改动,等待监控数据再积累一段

vbaspdelphi的专栏 2062

Geant4 案例分析(一): B1

本文是对Geant4 B1的案例分析,其中特定的功能不做介绍,而注重于各个文件的主要功能,以及它们组织的方式。

m0_51809467的博客 1583

2026四款AI原生IDE实测:Trae、Qoder、CodeBuddy、Cursor能力边界深度解析

AI原生IDE正从代码编辑器演进为开发者智能工作流中枢,其核心在于对上下文理解、AST编辑意图建模与多模态任务调度的工程化实现。区别于传统插件式AI辅助,真正的AI原生IDE需具备知识库嵌入、符号图索引、操作链固化等底层能力,从而支撑Figma转码、N+1查询修复、跨语言迁移等复杂场景。Trae强调中文语境与企业规范的强绑定,Qoder聚焦AST级编辑轨迹预测,CodeBuddy通过IDE/插件/CLI三态划分控制权边界,Cursor则以云端Agent实现开发任务的时空并行。本文基于真实项目压测,揭示免费版

ctk87443的博客 2470

数据中心内的负载均衡-MPTCP

1. 为什么用MPTCP做负载均衡? (1)充分利用网络资源 以手机为例,手机包含两种上网方式,蜂窝移动数据网络(2G,3G,4G)和WIFI网络。我们希望在有WIFI的时候尽量使用WIFI,这样可以节省成本,没有WIFI的时候自动切换到蜂窝移动网络,避免断连。同样在PC端,我们希望有线网卡和无线网卡可以同时上网,提高网速。但是使用TCP协议是无法实现上...

weixin_34331102的博客 1035

DeepSeek与豆包无缝对接:5分钟搞定智能周报自动化(附完整代码)

本文详细介绍了如何利用DeepSeek与豆包API,快速搭建一个智能周报自动化系统。通过整合豆包平台的工作流数据,并调用DeepSeek大模型进行深度分析与内容生成,该系统能在5分钟内自动抓取、分析多源信息,并生成结构清晰、富有洞察力的团队周报,显著提升工作效率。

weixin_29029995的博客 494

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

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

2330

深入理解 Terraform 中的资源更新与管理

摘要:本文探讨Terraform处理AWS安全组名称变更时的行为。当修改不可变属性(如安全组名称)时,Terraform会创建新资源并删除旧资源。通过状态文件比对所需状态与实际状态,Terraform对不可变属性采用"先创建后删除"策略,对可变属性则直接更新。实例演示了修改安全组名称和关联EC2实例时的处理过程,强调理解资源属性可变性对基础设施管理的重要性。(149字)

2501_90323865的博客 473

WPF高级 | WPF 与数据库交互:连接、查询与数据更新

WPF高级 | WPF 与数据库交互:连接、查询与数据更新,在现代应用程序开发中,数据的存储和管理至关重要。Windows Presentation Foundation(WPF)作为一款强大的图形界面开发框架,常常需要与数据库进行交互,以实现数据的持久化存储、读取和更新。本文将深入探讨 WPF 与数据库交互的各个方面,包括数据库连接的建立、数据查询的执行以及数据更新的操作,并通过丰富的代码示例和详细的概念解释,帮助读者掌握这一关键技术。

不踩坑,不知道坑有多深;不总结,踩过的坑白踩。 6万+

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

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

lo_ong的博客 716

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

《SRE Google运维解密》读书笔记

SRE团队职责:确保服务可以正常运转 可用性改进 延迟优化 性能优化 效率优化 变更管理 (渐进式发布) 监控 紧急事务处理 容量规则与管理 (N+2 模式,google--> 15倍) SRE核心处理思想: 灾难预演与演习 确保系统按照预想方式应对故障 寻找系统中未预料的弱点 寻找其他提高鲁棒性的方式避免事故发生 从组织架构层面关注 关注...

victorzzzz的专栏 1266

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

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

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

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

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

1933

IMSL CNL 7.0.0 (x86-64)Crack

IMSL CNL 7.0.0 (x86-64)Crack intel的算法库破解文件,这是C++版本的破解文件

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

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

aifeier1982的博客 1267

《SRE:Google 运维解密》读书笔记21: 数据中心内部的负载均衡 - 当“宏观选址”遇见“微观分发”

数据中心负载均衡 = 用子集划分控制连接爆炸,用跛脚鸭实现优雅停机,用Maglev在大规模场景下实现高性能连接保持。关键点一句话概括理想负载均衡所有后端消耗相同CPU,资源利用率最大化跛脚鸭模式监听但拒绝新请求,继续处理已有连接,实现代码推送和重启对用户透明流速控制客户端跟踪活跃请求数量,主动避让过载后端子集选择限制客户端连接后端数量,避免连接风暴确定性算法通过多轮均匀分配后端,比随机选择分布更均匀地漏效应异常任务因快速返回错误被误认为“最闲”,收到更多请求Maglev。

1543

《SRE:Google 运维解密》读书笔记22: 应对过载 - 当负载均衡“失效”之后

应对过载 = 放弃QPS陷阱,以CPU为核心建模容量,通过客户端自适应节流主动限流,按优先级分级处理请求,在过载时优雅降级而非灾难性崩溃。关键点一句话概括核心前提无论负载均衡多有效,系统终将过载——优雅处理过载是可靠系统的根本要求QPS陷阱仅凭QPS评估容量不可靠,必须以CPU等资源消耗作为容量衡量标准CPU建模信号在GC语言中内存压力→CPU压力,使CPU成为资源配给的“一站式”信号优雅降级过载时返回质量降低但成本大幅减少的响应,而非直接崩溃客户限额。

1742

《SRE:Google 运维解密》读书笔记28: 可靠地进行产品的大规模发布 - 当发布不再只是“发布”

可靠的大规模发布 = LCE(发布协调工程师)设计流程 + 发布检查列表系统把关 + 灰度发布降低风险 + 功能开关提供逃生舱,让正常发布变得“无聊”而安全。关键点一句话概括LCE的角色定位SRE内部的专门咨询团队,负责新功能/新产品发布的可靠性审查和多方协调LCE三项核心能力广泛的经验 + 跨职能的视角 + 客观性好流程五大特征轻量级、鲁棒性、完整性、可扩展性、适应性——存在内在冲突,需持续平衡流程冲突的解法简化(用“最糟糕的事”问题判断)、高度定制、保证通用路径快速完成发布检查列表。

1907

《SRE:Google 运维解密》读书笔记36: 学后总结与全书回顾 - 从理念到实践

第11-15章建立了完整的应急响应体系:主副值班制、25%运维时间红线、假设-演绎法排查流程、事故指挥系统、以及最核心的无指责事后总结文化。事后总结不是“追责文书”,而是“学习档案”——假定参与事故的每个人都出于善意,基于当时掌握的信息做出了最佳判断。《Google SRE 工作手册》:本书的官方姊妹篇,提供更深入的实践指南《混沌工程》(Casey Rosenthal):DiRT和混沌工程的权威指南:Google SRE团队的另一力作,聚焦安全与可靠性的交集。

2668

《SRE:Google 运维解密》读书笔记20: 前端服务器的负载均衡 - 当“鸡蛋”不再放在一个篮子里

用户流量负载均衡系统的核心任务,是决定数据中心中的哪一台机器来处理某个请求。理想情况下,用户流量应该最优地分布于多条网络链路上、多个数据中心中以及多台服务器上。因素说明逻辑层级是在全局层面(跨数据中心)还是在局部层面(数据中心内部)技术层面是基于硬件的负载均衡还是基于软件的用户流量的天然属性请求的类型决定了优化目标(延迟优先还是吞吐量优先)前端负载均衡 = GSLB负责“宏观选址”(选数据中心)+ GFE负责“微观分发”(选后端服务),通过分层分工实现全球流量的最优调度。关键点一句话概括。

1668

《SRE:Google 运维解密》读书笔记37: SRE理念落地实践指南 - 从理论到行动

不要等到下一次事故。找最近发生的一次事故(哪怕很小),按照无指责原则写一份事后总结。事后总结模板//markdown# 事后总结:[事故简述]## 摘要- 发生时间:YYYY-MM-DD HH:MM- 影响范围:[受影响用户/服务/数据量]- 恢复时间:[从发生到完全恢复的时长]## 时间线- HH:MM - [事件描述]- HH:MM - [事件描述]## 根本原因[不是“谁犯了错”,而是“系统为什么允许这种情况发生”]## 行动项目| 行动项 | 负责人 | 截止日期 |

2934

读书笔记(SRE:Google运维解密):第5章 减少琐事

如果系统正常运转中需要人工干预,应该将此视为一种Bug。   到底什么是琐事?琐事就是运维服务中手动性的,重复性的,可以被自动化的,战术性,没有持久价值的工作。而且,琐事与服务呈线性关系的增长。每件琐事都满足下列一个或多个属性: (a)手动性:手动运行脚本以便自动执行一些任务 (b)不停反复做的工作。如果你正在解决一个新出现的问题或者寻求一种新的解决办法,不算作琐事。 (c)可以被自动化的 (d)战术性的:突然出现的、应对式的工作,而非策略驱动和主动安排的。处理紧急警报是琐事。我们可能永远无法完.

lo_ong的博客 542

读书笔记(SRE:Google运维解密):第21章 应对过载

避免过载,是负载均衡策略的一个重要目标。但是无论你的负载均衡策略效率有多高,随着压力不断上升,系统的某个部位总会过载。运维一个可靠系统的一个根本要求,就是能够优雅地处理过载情况。   简单地使用CPU数量作为资源配给的主要信号就可以工作得很好,原因如下: (a)在有垃圾回收(GC)机制的编程环境里,内存的压力通常自然而然地变成CPU的压力(在内存受限的情况下,GC会增加)。 (b)在其他编程环境里,其他资源一般可以通过某种比例进行配置,以便使这些资源的短缺情况非常罕见。   应对过载:.

lo_ong的博客 561

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

连锁故障是由于正反馈循环(positivefeedback)导致的不断扩大规模的故障。 连锁故障可能由于整个系统的一小部分出现故障而引发,进而导致系统其他部分也出现故障。例如,某个服务的一个实例由于过载出现故障,导致其他实例负载升高,从而导致这些实例像多米诺骨牌一样一个一个全部出现故障。   连锁故障产生的原因 (a)服务器过载:直接由于服务器过载导致,或间接由于服务器过载引发的其他问题导致 例如,某个集群内部的过载可能会导致该服务实例崩溃;这时负载均衡器会将请求发送给其他集群,使那.

lo_ong的博客 553
上一篇: 读书笔记(SRE:Google运维解密):第19章 前端服务器的负载均衡
下一篇: 读书笔记(SRE:Google运维解密):第21章 应对过载
github_37320188
博客等级 码龄10年 24粉丝 86原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值