|
关于我们
新书资讯 新书推荐 |
高性能之道: SRE视角下的运维架构实践 读者对象:本书适合互联网行业内的运维人员、SRE和DevOps工程师、架构师、技术团队负责人及关注用户体验的相关开发者阅读,也适合掌握了一定的SRE方法论但在实践中无从下手的读者阅读。
本书从实践出发,包括了作者参与并主导的3家电商互联网公司架构从0到1的构建经历,从多个角度讲解稳定、性能、效率、成本四大职责落地经验,并结合Mikey金字塔进行了部分创新,很多内容都可以直接复用于实际工作。本书分为7篇,分别是开端篇、监控篇、故障篇、容量篇、全局视角篇、性能篇和扩展篇。 本书适合互联网行业内的运维人员、SRE和DevOps工程师、架构师、技术团队负责人及关注用户体验的相关开发者阅读,也适合掌握了一定的SRE方法论但在实践中无从下手的读者阅读。
王力,资深技术老兵,《Nginx实战:基于Lua语言的配置、开发与架构详解》和《高性能之道:SRE视角下的运维架构实践》作者。15年互联网从业经验,其中有9年电商互联网开发和运维经验,这期间担任过微拍堂运维专家、阿里技术专家、折800运维架构师等,并有5年主导电商大促活动保障的落地经验,推进过折800、微拍堂两家电商平台运维架构从0到1的建设,精通服务的稳定性建设,精通高并发场景下的性能优化和中间件开发,擅长通过架构设计来优化系统复杂度、降本增效。本书提供了一些补充内容(比如对软件安装、配置的讲解等),大家可以搜微信公众号“SRE基础架构”进行查阅。
目 录
开端篇 弱化边界感 第1章 引言 3 1.1 运维架构和SRE 3 1.2 理解业务,技术为业务服务 5 1.3 不设边界 6 1.4 SRE金字塔 6 1.5 总结 7 第2章 重视测试环境和预发布环境 8 2.1 提效和维稳的第一道门槛——测试环境 9 2.1.1 低级错误 9 2.1.2 提效分析 10 2.2 “守门员”——预发布环境 11 2.2.1 低级错误 11 2.2.2 提效分析 12 2.3 两大环境问题根本原因溯源 12 2.4 微拍堂测试环境治理思路介绍 13 2.5 总结 17 监控篇 底层逻辑的艺术 第3章 浅谈监控系统设计 21 3.1 梳理监控体系 21 3.2 梳理监控指标 22 3.3 变更监控 25 3.4 准实时系统监控 25 3.5 短时进程追踪工具 27 3.6 全链路监控 27 3.7 商业监控平台的选用建议 28 3.8 监控方式:白盒监控与黑盒监控 29 3.9 从监控数据中总结规律 30 3.10 黄金指标 30 3.11 总结 31 第4章 云原生可观测性开源工具——Kindling 32 4.1 行业现状 32 4.2 Kindling解决方案——关联内核可观测性数据的Trace 34 4.3 Kindling探针的架构设计理念 37 4.4 Kindling探针架构 38 4.4.1 内核态程序:drivers 38 4.4.2 用户态C/C++程序:kindling-probe 38 4.4.3 用户态Go程序:kindling-collector 39 4.4.4 程序间通信方式 40 4.5 在线Demo介绍 41 4.6 案例分享 42 4.6.1 安装 43 4.6.2 功能介绍 44 4.6.3 稳定性价值 47 4.7 总结 48 第5章 高阶实战——打造可持续维护的闭环流程 49 5.1 案例:动态观测SQL质量流程设计 50 5.1.1 分析规范难以落地的原因 50 5.1.2 监督与管控流程设计 51 5.1.3 通知和统计 57 5.2 案例:WebP格式图片的规范和落地实践 57 5.2.1 规范无法持续推广 57 5.2.2 成本和用户体验上的双赢 58 5.2.3 计划实施 60 5.2.4 管控机制 60 5.2.5 采集数据信息和数据加工处理 60 5.2.6 巡检平台之规范化监督 61 5.3 案例:管道通信规范化实践 62 5.3.1 我们每天都在使用管道 62 5.3.2 管道示例场景及性能说明 64 5.3.3 如何规范管道使用场景 66 5.4 标准和规范治理平台 67 5.4.1 现状 68 5.4.2 设计思路 68 5.5 总结 72 第6章 挖掘Nginx的监控价值 73 6.1 URI指纹服务设计 73 6.2 Nginx日志分析指南 76 6.2.1 参数白名单 76 6.2.2 URI的响应时间和HTTP状态监控 77 6.2.3 URI响应字节数波动分析 77 6.2.4 查询URL请求的项目 79 6.2.5 注意HTTPS的透传 80 6.2.6 利用Nginx完成动态全链路比例调整 81 6.3 总结 82 故障篇 故障的生命周期 第7章 事前治理的方法论 85 7.1 从故障中总结经验 85 7.2 从系统资源层面和日志中巡检异常 86 7.3 从标准和规范中寻找闭环之路 86 7.4 从业务中挖掘基础服务的使用问题 87 7.5 技术风险防控运营成本 87 7.6 总结 88 第8章 变更管控设计思路 89 8.1 变更管控 89 8.1.1 变更对象 89 8.1.2 变更发布 90 8.1.3 变更可灰度 91 8.1.4 变更可回滚 92 8.1.5 变更可监控 92 8.1.6 配置项变更 92 8.1.7 变更管控思路 92 8.2 JumpServer使用的艺术及工单交互 96 8.3 变更三板斧:运维团队的可监控、可灰度、可回滚实践 98 8.3.1 案例:云服务器资源伸缩稳定性 98 8.3.2 案例:CDN OpenResty的变更策略 102 8.4 总结 106 第9章 轮值的设计思路 107 9.1 值班模式探究 108 9.1.1 让开发人员参与其中 108 9.1.2 制定KPI 109 9.1.3 值班人员的边界探讨 110 9.2 值班机器人 111 9.3 提升值班价值——SRE需求池设计 112 9.3.1 结合日常巡检与非值班时间 112 9.3.2 在烦琐的工作中收集需求 112 9.4 总结 113 第10章 故障演练与应急预案 114 10.1 故障演练缘由 114 10.1.1 更好地面对系统规模增长带来的复杂性 115 10.1.2 提升故障的排查速度 115 10.1.3 验证应急预案的正确性 115 10.1.4 验证基础设施的稳定性 116 10.1.5 验证监控感知能力 116 10.1.6 验证应急流程的顺畅度 116 10.2 故障演练流程 116 10.2.1 故障演练场景关键要素 116 10.2.2 故障演练预期 117 10.3 应急预案 119 10.3.1 应急场景标准化 120 10.3.2 梳理应急预案清单 120 10.4 总结 121 第11章 应急响应流程实践 122 11.1 收拢故障上报来源 122 11.1.1 从技术体系内部发现 122 11.1.2 从技术体系外部发现 123 11.2 建立应急小组 123 11.2.1 人多力量弱 123 11.2.2 稳定性接口人和岗位权限 123 11.2.3 完善客诉标准化术语 124 11.3 故障噪点治理 124 11.3.1 报警治理 124 11.3.2 设计外部反馈阈值 125 11.3.3 收集第三方抖动事件 125 11.4 控制应急节奏 126 11.4.1 舍小保大 126 11.4.2 “优先止血”,后续定位根本原因 127 11.4.3 及时同步信息,减少信息差 127 11.5 应急“止血”的常见操作 127 11.5.1 代码回滚 127 11.5.2 重启 128 11.5.3 时序监控下的限流、熔断、扩容 129 11.5.4 业务降级 130 11.5.5 阻断慢查询 131 11.5.6 网络与运营商 131 11.5.7 重识监控 132 11.6 总结 132 第12章 静态容灾降级系统 133 12.1 荆棘之路 134 12.2 设计之路 136 12.3 架构流程图 138 12.3.1 反向代理系统 138 12.3.2 日志分析系统 138 12.3.3 后台系统——利用URI指纹服务 138 12.3.4 爬虫系统 139 12.3.5 容灾的缓存系统 140 12.3.6 基于时间的版本用途 140 12.3.7 异地容灾 141 12.4 核心代码解说 142 12.4.1 Ngx_Lua应用 142 12.4.2 爬虫和日志分析系统的关系 143 12.4.3 完全容灾和部分容灾功能 144 12.5 静态容灾的智能关闭方案 145 12.5.1 从日志分析系统复制请求 145 12.5.2 利用GoReplay复制流量 145 12.5.3 利用Nginx的mirror镜像功能 146 12.5.4 灰度验证容灾系统缓存——闭环设计 147 12.6 替换爬虫的新思路 148 12.7 总结 148 第13章 基于OpenResty的动态限流设计思路 150 13.1 常见反向代理限流方案缺点分析 150 13.2 动态限流设计思路 151 13.3 多维度限流 154 13.4 智能感知响应能力动态控速设计方案 157 13.5 屏蔽慢请求带来的服务阻塞 159 13.6 总结 160 第14章 故障复盘 161 14.1 复盘前 161 14.2 复盘中 161 14.3 复盘后 164 14.4 自省 164 14.5 跨部门分享 165 14.6 故障库 165 14.7 总结 165 容量篇 性能与成本间的平衡 第15章 成本优化 169 15.1 成本优化事前准备 169 15.1.1 目标的制定和价值体现 170 15.1.2 IT成本与人力成本的权衡 170 15.1.3 提升对系统的理解 171 15.1.4 评估优化前后的数据统计及业务影响 171 15.1.5 从用户体验看待成本优化 173 15.1.6 梳理业务和资源的关系 173 15.2 公有云基础资源优化实践 174 15.2.1 成本管理白皮书 174 15.2.2 合理化资源使用率 177 15.2.3 自建产品和云产品的使用场景优化 178 15.2.4 基于业务场景的成本控制 179 15.3 总结 180 第16章 智能伸缩平台 181 16.1 弹性伸缩平台关键路径盘点 181 16.2 基础设施建设 182 16.2.1 基于Pod的HPA传统模式 182 16.2.2 基于Cluster-Autoscaler的Node伸缩 184 16.3 基于业务场景的实战 189 16.3.1 定时伸缩 189 16.3.2 基于预测的弹性伸缩 191 16.4 风险控制体系 199 16.4.1 动态限流触发规则 199 16.4.2 扩容节点失败和业务降级 200 16.5 总结 200 第17章 容量规划 201 17.1 容量规划现状 201 17.2 容量规划建设思路 202 17.2.1 建设核心 202 17.2.2 建设思路 203 17.3 应用系统容量规划说明 204 17.4 基于巡检模式的容量评估流程 205 17.4.1 对流量来源的梳理 205 17.4.2 对容量对象的梳理 206 17.4.3 收集日常关键性数据 207 17.5 对容量规划关注点的梳理 210 17.5.1 压力测试 210 17.5.2 业务放量 212 17.5.3 大促活动 213 17.5.4 秒杀业务 214 17.5.5 关注运营活动计划 214 17.5.6 尖刺限流 215 17.6 总结 215 第18章 编程能力 216 18.1 养成写伪代码的习惯 216 18.2 养成管理代码的习惯 217 18.3 编程能力分级 218 18.4 编程能力更深层的价值探讨 219 18.4.1 如何看待PHP短连接问题 219 18.4.2 理解Redis和Memcached在业务场景上的区别 220 18.4.3 进程、线程、协程在Linux系统中的表现 221 18.4.4 探究阻塞和非阻塞、异步和同步在系统中的表现 223 18.4.5 共享内存 224 18.4.6 尝试一些导致进程崩溃的操作 224 18.4.7 学习秒杀系统的业务架构 225 18.4.8 给自己的代码做闭环实践 226 18.4.9 参与业务开发日常 226 18.5 熟悉编程语言特性 226 18.6 通过系统分析倒推应用配置问题 227 18.6.1 通过access函数发现PHP性能问题 227 18.6.2 Java连接池失效 228 18.7 总结 229 全局视角篇 运维破圈 第19章 开启测试视角 233 19.1 测试人员的职责边界 233 19.2 压力测试 234 19.2.1 压测黑名单思维 235 19.2.2 压测利器Wrk 235 19.2.3 流量镜像工具GoReplay 235 19.3 自动化测试监控平台设计 237 19.3.1 “牵一发而动全身”的迭代 238 19.3.2 OpenDiffy介绍 238 19.3.3 变更管控的支撑系统OpenDiffy+GoReplay 239 19.4 破坏性测试探究 239 19.5 从前端的体验“找碴儿” 240 19.5.1 基于浏览器特性的服务优化 240 19.5.2 从图片加载中寻找优化方法 241 19.5.3 数据埋点的发送频率 242 19.5.4 域名的使用限制 243 19.5.5 请求重复性 243 19.5.6 PageSpeed Insights分析页面的加载 243 19.5.7 定期的内耗分析 245 19.6 总结 245 第20章 开启用户视角 246 20.1 内外兼顾 246 20.1.1 内部用户 247 20.1.2 外部用户 248 20.2 建立反馈机制 249 20.2.1 优化客服反馈机制 249 20.2.2 与客服合作的案例分享 249 20.2.3 奖励机制 250 20.2.4 关注舆情 250 20.3 产品体验——谷歌SRE的高阶思维 251 20.3.1 不仅仅是体验 251 20.3.2 交互烦琐 252 20.3.3 无人问津 252 20.3.4 ROI 252 20.4 防御体系的“误伤”指南 253 20.4.1 WAF“误伤” 253 20.4.2 内部风控“误伤” 254 20.5 关注客户端环境 254 20.5.1 客户端机型配置 254 20.5.2 网络 255 20.6 总结 255 第21章 开启前端和App开发人员视角 256 21.1 概述 256 21.2 为什么要解决性能问题 257 21.3 缓存 257 21.3.1 强缓存 257 21.3.2 协商缓存 259 21.4 网络请求 261 21.4.1 HTTP/2.0 261 21.4.2 DNS预解析 262 21.4.3 预先建立连接 262 21.4.4 服务器应该避免过多重定向 263 21.5 客户端计算 263 21.6 预加载 265 21.7 梳理技术风险 265 21.7.1 请求阻塞式串行加载 266 21.7.2 埋点发送过于频繁 266 21.7.3 弱网下的资源加载降级 266 21.7.4 拨测 266 21.8 总结 267 第22章 DNS应用场景实践 268 22.1 利用DNS完成故障转移 268 22.2 使用HTTPDNS提升访问稳定性 271 22.3 提升测试、A/B测试等环境的切换效率 273 22.4 域名反向解析用途实践 273 22.5 内部DNS系统高可用实践 274 22.5.1 两次DNS故障 275 22.5.2 问题和思考 276 22.5.3 改进措施 278 22.5.4 配置及验证 279 22.5.5 监控 283 22.6 总结 284 性能篇 SRE进阶之路 第23章 高并发网关价值探究 287 23.1 通用功能介绍 287 23.2 网关中的聚合模式 288 23.2.1 Lura启示录 289 23.2.2 APISIX中的batch-requests插件 289 23.2.3 从GraphQL发现的技术实践思路 291 23.3 兼顾缓存的网关设计思路 293 23.3.1 APISIX的proxy-cache插件 293 23.3.2 利用聚合拼接缓存资源 293 23.3.3 鉴权和缓存剥离 294 23.4 总结 295 第24章 高性能Varnish缓存系统 296 24.1 HTTP缓存对后端服务的价值分析 296 24.2 CDN缓存和Varnish缓存的共存模式 298 24.3 安装Varnish和所需模块 299 24.4 配置文件概览 300 24.5 稳定性建设所依赖的功能 300 24.5.1 神圣模式 300 24.5.2 宽限模式——异步缓存更新 302 24.5.3 更安稳的软清除 303 24.6 最佳实践 304 24.6.1 动态缓存时间配置 304 24.6.2 热Key及秒杀系统的缓存实践 305 24.6.3 后端服务故障转移 306 24.6.4 高并发下Varnish启动参数优化 307 24.6.5 Varnish配置模板优化实践 307 24.6.6 测试环境缓存系统的干扰事件 309 24.7 总结 309 第25章 SRE漏斗优化法则 310 25.1 SRE性能优化之漏斗优化法则 311 25.2 漏斗优化法则的技术栈梳理 312 25.2.1 减少访问量 312 25.2.2 减少返回的数据 313 25.2.3 减少交互次数 313 25.2.4 降低CPU、内存使用率 314 25.2.5 提升资源利用率 314 25.3 总结 315 第26章 awesome性能分析工具 316 26.1 站在巨人的肩膀上工作 316 26.1.1 系统性能分析常见清单 317 26.1.2 bcc-tools工具清单 319 26.1.3 火焰图 320 26.2 Netdata 320 26.3 总结 321 第27章 性能优化实践锦集 322 27.1 TIME_WAIT优化方案扩展 322 27.2 利用Ngx_Lua缩短请求链路 323 27.3 eBPF在Kubernetes上的应用 325 27.3.1 kubectl-trace 325 27.3.2 使用前提 325 27.3.3 使用优点 325 27.3.4 使用场景 326 27.3.5 安装 326 27.4 善用CDN 327 27.4.1 静态加速 327 27.4.2 动态加速 328 27.4.3 缓存过期保护策略 328 27.5 记一次中台服务优化实战 329 27.5.1 寻找优化目标 330 27.5.2 抽丝剥茧——尝试优化方案 331 27.5.3 使用go pprof火焰图发现端倪 333 27.5.4 回顾复盘 337 27.6 总结 337 扩展篇 在团队间搭建桥梁 第28章 业务开发人员视角下的技术风险 341 28.1 了解业务开发人员 342 28.1.1 工作内容 342 28.1.2 废弃十年如一日 343 28.1.3 重构并非易事 343 28.1.4 发布前的检查清单 344 28.1.5 站在巨人的肩膀上编程 344 28.1.6 拒绝伪需求 345 28.2 大淘客之旅 346 28.2.1 对话高层,达成共识 346 28.2.2 对话业务线负责人 347 28.2.3 重识目标,各个击破 347 28.2.4 技术氛围和激励政策 348 28.2.5 “曲线救国”的技术路线 348 28.3 总结 351 第29章 SRE视角全篇总结 352 29.1 齐心协力 353 29.1.1 关键要素 353 29.1.2 华山论剑 353 29.2 竞品分析——最后1公里 355 29.3 故障降级系统——来自监控的沟通艺术 355 29.3.1 抽象业务形态 355 29.3.2 抽象监控触发条件 357 29.3.3 收拢零散性的自愈任务 357 29.4 重识CMDB价值 357 29.5 总结 358
你还可能感兴趣
我要评论
|

新书资讯



