书籍作者:王力 | ISBN:9787121454585 |
书籍语言:简体中文 | 连载状态:全集 |
电子书格式:pdf,txt,epub,mobi,azw3 | 下载次数:4635 |
创建日期:2024-04-03 | 发布日期:2024-04-03 |
运行环境:PC/Windows/Linux/Mac/IOS/iPhone/iPad/Kindle/Android/安卓/平板 |
本书从实践出发,包括了作者参与并主导的3家电商互联网公司架构从0到1的构建经历,从多个角度讲解稳定、性能、效率、成本四大职责落地经验,并结合Mikey金字塔进行了部分创新,很多内容都可以直接复用于实际工作。本书分为7篇,分别是开端篇、监控篇、故障篇、容量篇、全局视角篇、性能篇和扩展篇。
本书适合互联网行业内的运维人员、SRE和DevOps工程师、架构师、技术团队负责人及关注用户体验的相关开发者阅读,也适合掌握了一定的SRE方法论但在实践中无从下手的读者阅读。
本书主要作者王力,资深技术老兵,《Nginx实战:基于Lua语言的配置、开发与架构详解》和《高性能之道:SRE视角下的运维架构实践》作者。15年互联网从业经验,其中有9年电商互联网开发和运维经验,这期间担任过微拍堂运维专家、阿里技术专家、折800运维架构师等,并有5年主导电商大促活动保障的落地经验,推进过折800、微拍堂两家电商平台运维架构从0到1的建设,精通服务的稳定性建设,精通高并发场景下的性能优化和中间件开发,擅长通过架构设计来优化系统复杂度、降本增效。
本书亮点和创新技术实践思路
√ SRE性能优化漏斗优化法则:全书用十几个章节介绍相关技术实践,体现了整个法则的收益。
√ 标准和规范治理平台的设计思路:是解决技术体系各项规范落地难、长期治理效果差的闭环解决方案。
√ HTTP故障降级理论和实践:从电商平台业务中抽象出降级模型,提出了创新的故障降级解决方案,相关思路不局限于解决电商平台业务问题,还可以扩展到其他一些领域(前提是运维人员深刻理解业务)。
√ 云原生可观测性开源工具Kindling的介绍及实践价值:针对目前云原生下海量日志分析难、定位问题难等进行的优秀实践。
√ 全视角解读运维架构建设中的各种矛盾和破解思路。
序
请各位读者耐心地看完下面的内容,这些内容是阅读本书之前必须了解的,可以让你们更清楚地理解本书想要表达什么,而不应只把本书当作一个方法论的实践手册。另外,下面也会告诉大家为什么笔者使用“高性能之道”作为本书的书名。
众所周知,SRE工程师有几类重要职责:延迟优化、性能优化、效率优化、稳定性优化、容量规划、应急响应等。随着SRE在国内的流行,很多运维团队开始转型,包括一些架构师、后端工程师、系统工程师也纷纷加入其中。在这个SRE实践日渐丰富的情况下,笔者想讲两件事情:一件坏事,一件好事。
第一件事情:互联网行业现状对技术的影响。几年前,或者说给人留下深刻印象的2011-2019年,互联网平台百花齐放,团购、电商、游戏、聊天软件等,基本上日常的生活方式都走进了互联网。也正是因为互联网发展迅猛,我们选择使用IT成本、人力成本交换时间,代码质量不高、架构设计不佳等问题都通过投入更多的成本暂时得到了解决。虽然这样做可以解决大部分性能问题,甚至隐藏不稳定的架构风险,让业务继续往前推进,但留下了很多技术债。
那段时间其实已经出现了SRE角色,虽然国内的SRE起步较晚,但也不断地发挥出了价值。那几年,SRE工程师的核心职责中保障稳定性、效率是高于优化成本和性能的,或者说成本和性能也需要优化,但相比其他目标,被降低了优先级。但在2020年后,互联网行业出现了明显的疲态,这对我们互联网技术人来说,是一件坏事。这时大多数公司面对“寒冬”开始开源节流,成本优化被反复拉上日程,甚至有云厂商专门为云产品客户提供了专业的成本优化方案。大幅度地优化成本,如果只是单纯地缩减使用效率低的机器,将无法满足公司迫切节约成本的需求,而且一旦服务器资源减少,曾经性能不好的代码和架构问题都会浮出水面,甚至会导致辛辛苦苦节约的成本被一次偶发故障就抵扣了,得不偿失。因此,成本优化往往要伴随着架构优化、代码重构,甚至业务逻辑优化,简而言之就是性能优化。面对这种突然发生的改变,SRE工程师如何从容面对?
第二件事情:国内的SRE工程师大多从运维工程师转型而来,对性能优化、延迟优化缺乏经验,很难发挥出SRE工程师应具备的各项能力(当然很多公司也没有对团队的SRE工程师提出这样的要求)。部分有独特见解的团队,在成立SRE团队时,除了运维工程师,也引入了业务开发人员、基础架构师、系统工程师等有较强高并发开发经验和系统底层认知能力的成员,他们对性能的要求是极致的,为服务的SLA达标,设计更精妙的架构,而这些不是传统运维人员可以达到的,国内的SRE已经开始向更高阶的路线发展。虽然这又增加了SRE的技术难度,但是是一件好事,让我们可以拥有更全面、更有深度的技术。
下面举几个常见的例子。
(1)业务开发人员开发了一些动态接口,其实可以适当配置1~2分钟的CDN缓存,但并未配置,导致回源请求量高、带宽成本高,响应速度和性能也未达到最佳。
(2)NoSQL使用场景少,过度依赖MySQL,成本高,响应速度和性能也未达到最佳。
(3)客户端请求数据太多,实际应用中,只使用了部分数据,浪费了带宽,数据太多甚至意味着可能存在太多的数据处理操作,响应速度和性能也未达到最佳。
(4)在页面渲染过程中,部分数据是不需要提前加载的,但前端工程师设计了大量预加载任务,导致了大量无效计算和网络开销,响应速度和性能也未达到最佳。
(5)业务开发人员对某个接口设置了1分钟的Redis缓存,但根据业务场景,这个接口的缓存其实可以设置为10分钟,这导致请求量减少得不多,响应速度和性能也未达到最佳。
诸如此类,各种问题累加在一起,极大地增加了系统的资源开销,这会影响成本优化,也会影响服务性能,而高性能可以提升成本优化的效果,也可以优化业务架构、延迟等现象,帮助我们更好地提升用户体验。
基于这两件事情,笔者使用“高性能之道”作为书名,本书会从SRE工程师的职责进行讲解,通过实践让读者更好地理解,这些职责在工作中是相辅相成的、共同发挥作用的。这几年互联网行业“内卷”严重,但也正是全面发挥SRE工程师职责的好机会。寒冬闭关苦修,静待春风到来!
前 言
写书的目的:破圈之道
从运维的范畴讲,我认为,在一个开发团队内,除了业务需求实现层面的事情,其他都属于运维的范畴,这个范畴内的事情本质上就是为软件生命周期内的运行维护阶段服务。
——来自赵成的运维体系管理课
以上是蘑菇街运维总监赵成的运维体系管理课中的一段经典语句,如果正在看本书的你是运维人员,可以认真地理解一下这段话,然后与自己的工作职责进行一下对比。
运维人员长期以来的工作职责都是围绕成本、安全、效率、稳定来开展的,这和SRE工程师的工作职责有很多相同点。但现在仍然有不少运维人员将掌握各项基础设施的维护、配置和监控当作工作职责,这样合适吗?如果你所在的公司对运维人员的要求就是支撑和辅助,而你本人也完全接受,那么无可厚非;但如果你在一家产品不断迭代、不断创新的公司做运维工作,笔者相信这些能力是远远不够的,除非你就打算“躺平”。
通过本书,笔者希望可以让更多的运维人员改变以往的工作模式,摒弃常年仅做后方保障工作的习惯,运维人员需要站在团队的最前面,统筹所有与运维架构有关的问题,在保障承诺的稳定性指标的前提下,尽最大的努力完成业务迭代、成本优化、性能优化、容量规划等工作。
本书以SRE的视角解读运维架构,运维架构并非指传统意义上的配置、安装、维护等,而是除了业务开发,其他都属于运维架构范畴,这些最终都是为了在合理的效率和成本前提下,让用户可以享用稳定的服务。
本书会通过一系列实践和案例突出以下3个基础思想。
(1)绝大部分用户体验不顺畅,从运维视角都能看出端倪,通过对性能、容量、响应速度等维度的分析,可以推进代码规范、质量等方面的改进,最终提升用户体验。
(2)在保障稳定性建设正常开展的前提下,最大化地降低用于应对技术风险的运营成本。
(3)除了业务开发,其他都属于运维架构范畴,但只有了解了业务和业务开发,才能更准确地完善运维架构。
这些基础思想可以支撑运维工作的整个生命周期,同样为其他技术岗位人员更好地实现跨部门共建提供解决思路。
读者对象
本书内容是通过大量工作经验总结得到的知识和技术方案,读者需要一定的积累才能更深刻地理解其中的价值。对于刚入行的运维人员,建议先熟悉运维架构工作或SRE方法论,再进行学习。
本书适合互联网行业内的运维人员、SRE和DevOps工程师、架构师、技术团队负责人及关注用户体验的相关开发者阅读,也适合掌握了一定的SRE方法论但在实践中无从下手的读者阅读。
本书内容
本书的大部分内容是以笔者9年电商行业运维和开发经验为基础进行的讲解,其中将电商行业与SRE中的Mikey金字塔相结合进行了创新,很多内容都可以直接用于日常工作(本书不会过多地介绍SRE基础知识,若读者想要学习相关知识,可以自行上网搜索谷歌SRE的相关文章)。
本书分为7篇。
开端篇,主要讲解SRE和运维架构之间的关联性和SRE的工作范畴,解读了岗位职责和一些日常非核心场景中容易被忽略的点,以及应该重视测试环境和预发布环境。
监控篇,主要讲解监控落地时容易被忽略的地方,并且提供了可持续维护监控对象的一些方法,提出了监控新思路——监测和控制,而不是以往运维视角下的以触发报警为核心的监控逻辑,监控应该发挥控制的效果,比如在监测到技术风险时,执行一系列动作来控制风险。
故障篇,主要讲解在故障的整个生命周期内,运维人员和SRE工程师应该担当的职责,并将故障分为事前治理、事中应急、事后改进三大板块,基于每个板块给出什么时间节点做什么事情的指导建议。
容量篇,主要介绍业务和容量的关系,并且讲解在容量规划中通过什么样的方式能够更好地实现成本、性能的平衡,而且在该篇章中,增加了对编程能力的介绍。编程能力能让我们更理解资源消耗是如何产生的,为我们更好地与业务开发人员探讨资源配置的合理性做好准备。
全局视角篇,主要介绍如何从各个技术岗位的视角看待运维架构中的各项事务,同时以用户视角讲解SRE的价值,为运维破圈做准备。
性能篇,主要通过介绍各性能优化技术方案,提供可实战的落地任务,给出工作中常见的技术难题和解题思路。
扩展篇,主要介绍在共建稳定性的过程中如何更好地应用整个技术体系,给出如何将技术思想和技术方案进行跨部门分享和推广的实践。
勘误
本书以实践为主,绝大部分内容是电商行业的技术实践,可能存在考虑不周全的地方,再加上运维架构相关内容烦琐复杂,在体系化的打造过程中难免存在疏漏和错误,请读者朋友多多见谅。如果你发现本书中存在的任何问题或者希望提出建议,请联系笔者,笔者的QQ邮箱是[email protected]。
致谢
本书中有部分内容来自其他作者的共同努力。在他们的帮助下,笔者才得以将整套实践体系打造完善。笔者要特别感谢以下成员。微拍堂运维团队:田红阳、柴振华、刘占彬、张博、刘帅、李秋阳、陆游、姜伯洋、章远强、涂永春、陈建华、李启龙等。Kindling开源团队。技术专家周云龙、索碧桐。网易SRE工程师陆游。
特别感谢微拍堂创始人徐烽、金明亮,在他们的大力支持下,笔者才有充足的时间将本书打磨完善。
感谢电子工业出版社博文视点的编辑付睿,她在本书的出版过程中提供了很多宝贵的建议。
开端篇 弱化边界感
第1章 引言3
1.1运维架构和SRE3
1.2理解业务,技术为业务服务5
1.3不设边界6
1.4SRE金字塔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章 云原生可观测性开源工具——Kindling32
4.1行业现状32
4.2Kindling解决方案——关联内核可观测性数据的Trace34
4.3Kindling探针的架构设计理念37
4.4Kindling探针架构38
4.4.1内核态程序:drivers38
4.4.2用户态C/C++程序:kindling-probe38
4.4.3用户态Go程序:kindling-collector39
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.1URI指纹服务设计73
6.2Nginx日志分析指南76
6.2.1参数白名单76
6.2.2URI的响应时间和HTTP状态监控77
6.2.3URI响应字节数波动分析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.2JumpServer使用的艺术及工单交互96
8.3变更三板斧:运维团队的可监控、可灰度、可回滚实践98
8.3.1案例:云服务器资源伸缩稳定性98
8.3.2案例:CDNOpenResty的变更策略102
8.4总结106
第9章 轮值的设计思路107
9.1值班模式探究108
9.1.1让开发人员参与其中108
9.1.2制定KPI109
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.1Ngx_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.2IT成本与人力成本的权衡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.2Java连接池失效228
18.7总结229
全局视角篇 运维破圈
第19章 开启测试视角233
19.1测试人员的职责边界233
19.2压力测试234
19.2.1压测黑名单思维235
19.2.2压测利器Wrk235
19.2.3流量镜像工具GoReplay235
19.3自动化测试监控平台设计237
19.3.1“牵一发而动全身”的迭代238
19.3.2OpenDiffy介绍238
19.3.3变更管控的支撑系统OpenDiffy+GoReplay239
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.6PageSpeedInsights分析页面的加载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.4ROI252
20.4防御体系的“误伤”指南253
20.4.1WAF“误伤”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.1HTTP/2.0261
21.4.2DNS预解析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.1Lura启示录289
23.2.2APISIX中的batch-requests插件289
23.2.3从GraphQL发现的技术实践思路291
23.3兼顾缓存的网关设计思路293
23.3.1APISIX的proxy-cache插件293
23.3.2利用聚合拼接缓存资源293
23.3.3鉴权和缓存剥离294
23.4总结295
第24章 高性能Varnish缓存系统296
24.1HTTP缓存对后端服务的价值分析296
24.2CDN缓存和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.5Varnish配置模板优化实践307
24.6.6测试环境缓存系统的干扰事件309
24.7总结309
第25章 SRE漏斗优化法则310
25.1SRE性能优化之漏斗优化法则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.2bcc-tools工具清单319
26.1.3火焰图320
26.2Netdata320
26.3总结321
第27章 性能优化实践锦集322
27.1TIME_WAIT优化方案扩展322
27.2利用Ngx_Lua缩短请求链路323
27.3eBPF在Kubernetes上的应用325
27.3.1kubectl-trace325
27.3.2使用前提325
27.3.3使用优点325
27.3.4使用场景326
27.3.5安装326
27.4善用CDN327
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使用gopprof火焰图发现端倪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