1、降级预案在同程艺龙的工程实践同程艺龙搜索故障微信小程序API网关资源1搜索引擎统一资源网关资源2资源3资源4资源4大量超时统一资源网关搜索引擎API网关大量请求超时缺乏熔断设计交易故障第三方支付支付中心支付回写消息队列支付通知交易中台支付时限任务出票处理队列故障已支付订单被取消支付超时订单取消缺乏降级设计稳定性之路到底有多远如何设计面向容错的系统,如何提升系统的可用性强弱依赖弱依赖-熔断限流,有损服务强依赖-备选服务,降级实现什么是强弱依赖,如何确定强弱依赖 用户是否强烈感知 核心业务是否有损service用户请求serviceBserviceAserviceCserviceC-degrade
2、弱依赖强依赖强依赖备选服务熔断、限流降级业界解决方案-HYSTRIXNetflix开源的一款容错框架,支持多种降级熔断技术资源隔离断路器降级操作请求合并请求缓存实践过程中遇到的问题业务改造成本高,代码耦合,维护成本增高固化策略,需线下修改代码,测试,发布,线上应急策略响应不友好无法支撑多系统的复合指标计算,业务降级支持不友好大量应用各自实现降级熔断,代码散落在各应用,没有统一的管理和治理。久而久之,无人知道系统内有多少降级点,降级是如何实现的缺乏UI、没有灵活的参数、策略配置,没有预案制定管理能力业务保障平台建设之路业务保障平台建设之路服务管理策略管理预案制定线上演练 降级服务统一注册管理,通
3、过降级服务质量数据从整体反映各应用的降级点和可用性保障措施 降级策略集中管理,通过参数化、配置化、脚本化方式实现线上策略的灵活调整 依据服务重要程度,从全局制定分级预案,对降级点进行预案编排,并跟踪监控降级链路的执行 发现潜在故障,多维度验证预案有效性,评估系统可靠性,提供降级策略、参数调整的优化依据整体架构Agent服务降级注册降级熔断通知元数据存储控制 中心ETCDETCDETCDETCD服务注册监听降级控制中心元数据TurboMQ熔断降级监听ApplicationApplicationApplicationSDK熔断降级接入ApplicationApplicationApplicatio
4、nSDKApplicationApplicationApplicationSDK熔断降级流控隔离实时策略推送数据采集应用管理策略管理流控管理预案管理指标管理监控告警数据大盘脚本开发ETCD管理故障演练业务保障管理后台应用JVM进程故障动态注入Attach故障注入指标聚合查询熔断降级计算(Flink)日志中心KAFKA数据采集、计算、存储指标(HBase)指标明细(ES)降级日志(ES)ETL指标计算(Flink)脚本引擎查 询 服 务日志数据指标(Redis)业务异常数据快照(ES)熔断降级通知降级服务管理故障代码注入降级服务注册设计serviceAserviceBserviceCetcdre
5、gisterservice metadatadegrade strategycentermysql shardingwatchadmin 使用ETCD实现注册中心 简单-Go语言编写部署维护简单,定义良好的API 安全-SSL认证机制 快速-支持上万次写入操作 可信-Raft算法保证强一致性,Proxy反向代理模式支持 服务数据存储 应用、服务元数据、状态数据,etcd、mysql双份存储 后台实时监控应用、服务,实时变更降级策略proxy服务质量数据采集业务数据采集日志文件应用数据采集应用数据方法数据执行结果执行耗时异常数据JVM内存JVM线程GC数据业务数据SDK数据自定义数据系统数据采集
6、容器数据CPU数据内存数据磁盘数据网络数据采集Agent日志中心KAFKA数据处理通过本地日志文件,实时采集降级服务质量数据日志文件系统数据采集容器数据CPU数据内存数据磁盘数据网络数据采集Agent日志中心KAFKA数据处理应用数据采集应用数据方法数据执行结果执行耗时异常数据JVM内存JVM线程GC数据业务数据SDK数据自定义数据数据通道(长链接单通道)数据采集 Proxy 单工直连数据通道 长链接,数据流方式实时发送 本地多队列轮循,数据缓冲,合并异步发送指标如何计算处理数据采集KAFKAETL复合指标自定义指标系统指标业务指标指标脚本计算指标规则计算指标脚本规则表达式熔断降级 条件计算降