1淘宝稳定性实践——淘宝-小邪1系统稳定性第一印象21.监控2.简化系统依赖3.增强代码容错能力4.增加弱依赖开关5.增加强依赖的流控3用户流量固定机房213同城机房容灾异地机房容灾A为前台应用,强依赖BB和C为服务应用ABC和DB都为集群主DB提供两个机房读写45备库不对外服务提供只读服务机房2故障4切DNS流量机房1故障5切DNS流量切DB机房1恢复6机房3故障7切DNS流量主站整个城市故障8主站机房之间断网9?1、同城多路光纤保证2、切流量主站机房1的B集群系统故障10A对B的调用自动切换到机房211所有机房的B系统都发生故障所有机房的B系统故障12如果B系统是核心业务必经路径等待修复吧如果是发布引起的则立即回滚上一个版本主站机房1的C集群系统故障13C的调用自动切换到机房214所有机房的C系统故障所有机房的C系统故障15模块的线程保护自动启动有效防止A模块因为调用C超时导致故障模块线程保护(stableswitch)•A的主线程为jboss的ajp线程共200个–假设给调用B的模块分配最大50个线程–假设给调用C的模块分配最大10个线程–那么C出现故障的时候,C的故障将控制在这堵塞的10个线程里,而不会扩散到其他线程,正常逻辑得以继续16stableswitchconsole17机房1的请求流量超过单系统负载181、TDOD(TMD)2、StableSwitch机房1的请求流量超过单系统负载•TDOD(TMD)–利用对机器的负载做出格挡–根据实时收集的信息分析对IP流量进行拦截•StableSwitch–利用线程保护机制,让少量线程用来返回超过的流量19接下去介绍系统的稳定性预防系统CSP系统20CSP系统的组成21依赖降级容量规划运行监控CSP对系统的运行数据非常清楚22A调用C的响应时间10ms变成了500ms访问A的流量增加1.5倍系统负载、CPU、内存如何了?运行时监控-实时得到系统运行的信息•运行时信息的透明化:监控报警23•问题的自动排查CSP对系统的运行数据非常清楚24B:CSP最了解我了我每天忙着工作,保证没有小三,那件事情可能是C干的C:CSP最了解我了,如果是我干的,我就不会让你知道容量规划-获取系统能力数据251、要搞活动了,流量可能要增加2倍以上,不知道A是否能撑住,B和C是否也能撑住?2、A系统的QPS怎么今天突然下跌到原来的一半了?容量规划-定时得到系统的容量信息26知道系统现状能力预测未来业务需求何时增加服务器何时做性能优化27问题点容量规划28CSP对A,B,C的能力非常清楚知道何时增加机器,何时进行系统优化实时知道系统的依赖关系•依赖关系生成•强弱关系验证29依赖降级30CSP知道A一定会调用B和C并且知道C挂了对A不影响总结•容灾和稳定性–各种故障情况下的系统化处理•一个保障稳定性系统的组成–容量规划、依赖降级、运行时监控–能力数据、静态数据、动态数据31系统建设初期需要考虑的3点•系统可被监控–线程,连接池,远程调用,系统信息,重要接口执行数据–重要的操作环节记录日志•系统可被调试–配置等信息可以被dump出来–远程服务的接口容易被调试•系统可被容错–所有远程接口的调用均有流量控制–所有远程接口的调用返回数据都是不可信任的32•接下去,大家讨论时间–稳定的系统架构–系统的容量规划–系统的运行时监控–系统的依赖和降级33•小凡(速度性能优化)•小赌(稳定性相关)•小邪(稳定性和性能)34讨论时间3536