容量保障总结
目标:
第一,以尽可能小的成本确保系统当前和未来的容量充足,即容量规划;
第二,解决已知的容量问题,预防未知的容量问题,即容量治理。
可以将其拆解为容量规划和容量治理两部分。
前者考虑在成本的约束下,将系统资源规划到最优水位;后者则主要致力于容量问题的事前防治和事后止损。
1、定义
在这里,我先为你总结一套较为适合互联网场景的容量保障方法论,如下图所示。先从“日常容量”和“大促容量”的目标出发,拆分出三个入口,分别对应计划事件(事先能够预知的新功能或大促活动)、突发事件(事先无法预知的紧急事件)和日常事件(常态化的容量表现)。再自上而下拆解出具体的策略(工作项、工具、规范、案例等),每一项策略再做具体细分,形成一个有机的整体。
2、度量、目标
最后,我详细展开了容量保障目标的量化方式和指标选取,分别就SLA、QPS/TPS和用户体验三方面进行了阐述。SLA是基于服务可用性的视角来量化容量保障目标的,QPS/TPS则是以服务处理能力作为容量保障的度量维度,用户体验是最高级的度量指标,直接以用户的感受作为容量目标。
sla = slo + 后果(补偿协议)
3、指标
4、三板斧:扩容、限流、降级
实际工作中,需要特别警惕无脑扩容,加强服务架构优化意识和根因分析能力;在扩容时,也应全面评估系统资源情况,做到资源平衡。
奥卡姆剃刀定律告诉我们:“如无必要,勿增实体”,简单的才是最有效的。限流策略的制定应充分考虑业务场景特征,选择最简单和最适合的限流策略,而不是盲目追求复杂的策略。同时,限流应当从全局视角看待,建立层次丰富可靠的限流体系。
降级的本质是为了解决服务资源不足和访问量增加的矛盾,而放弃一部分功能或体验。降级应当平衡好自动化降级和人工降级的关系,并通过分级的方式保证最小可用降级,最后辅以大量高频的验证,确保降级的有效性和熟练度。
6、
重点链路梳理
1. 同步链路:同步链路指的是,链路上的服务是强依赖的,调用方需要等待被调用方执行完成后才能继续工作。在同步链路中,各服务的容量最容易互相影响,尤其是那些直接暴露给用户的入口接口,往往受制于众多下游接口的牵绊,需要协同看待。
比如,在双11活动中直接与买家交互的活动会场和导购页面,就是最靠近流量入口的同步链路。
2. 异步链路:异步链路与同步链路的概念正好相反,链路上的服务没有强依赖关系,调用方不需要等待被调用方执行完成,可以继续执行后续工作,被调用方在另一个线程内执行完成后,通过回调通知调用方。异步链路需要明确异步流量是从哪里过来的,异步流量的量级有多大,在大促期间我方应用是否要做蓄洪,是否会由于消息重投而引起雪崩效应,等等。
比如,双11活动券的核销就是一个典型的异步链路,在大促期间,核销量可能会非常大,那么对于消息队列的容量保障就是重点。
3. 旁支业务链路:平时流量不大的“小”业务在大促场景下,流量是否会放大,是否会有叠加。有时候可能一个很不起眼的业务,在特定的场景下被反复调用后,会形成很高的终端延时。对于这类链路,主要是从业务场景的角度出发,细致地层层筛查,分析调用关系后得出结论。
比如,营销券底层服务,在平时流量不高,但双11期间大量活动和发券场景都会调用它,就会导致服务压力陡增。
4. 高并发链路:类似秒杀和红包雨这类链路,可能瞬间会产生极高的并发量,这类链路要尽量做到集群物理隔离,分层过滤流量,再通过容量测试去检验效果。
服务架构治理
调用关系图、部署图、时序图
代码评审
参考
https://learn.lianglianglee.com/%e4%b8%93%e6%a0%8f/%e5%ae%b9%e9%87%8f%e4%bf%9d%e9%9a%9c%e6%a0%b8%e5%bf%83%e6%8a%80%e6%9c%af%e4%b8%8e%e5%ae%9e%e6%88%98/00%20%e5%bc%80%e7%af%87%e8%af%8d%20%e4%ba%92%e8%81%94%e7%bd%91%e6%97%b6%e4%bb%a3%ef%bc%8c%e4%ba%ba%e4%ba%ba%e8%82%a9%e8%b4%9f%e5%ae%b9%e9%87%8f%e4%bf%9d%e9%9a%9c%e7%9a%84%e8%81%8c%e8%b4%a3.md
https://zhuanlan.zhihu.com/p/371860496