一、前言
交易中台,作为微盟新商业操作系统 WOS 的核心中台之一,前承消费者选择商品,后接消费者下单支付,是消费者线上购物通道中,搭配优惠,计算价格,配送履约,支付下单的必须环节。整个交易场景涉及到跟大量的其他业务域进行系统交互,比如商品,库存,履约,资产,订单,支付,商家,用户,促销,营销等;系统的稳定性面临非常大的挑战,交易中台如何确保能及时的发现上下游系统的问题,并确保自己不受影响,我们进行了全方位立体化的稳定性建设。二、稳定性思考
1.1、稳定性多维度特性
架构设计原则:
1、封闭修改,欢迎新增,尤其是对外对公的接口等。
2、尽可能通用,减少个性化。
3、能不耦合就不耦合,通过开关等方式做好业务逻辑隔离。
4、业务异常阻断要小心,能阻断就不兼容。
除非兼容逻辑得到业务产品的确认,否则绝对不允许技术自己做业务逻辑兼容。
5、限流,降级,熔断一个都不能少。能熔断就不限流,能限流就不降级,能降级就不回滚。三、稳定性大盘
四、交易稳定性建设
1、防护策略
第一层:限流策略(超过限流阀值,请求快速失败,流量被拦截在dobbu服务之外)1) 结算:确认下单 & 提交订单 都有针对自己实际情况的 限流配置
2)购物车:购物车列表,加购,修改购物车 也都设置了自己的限流阀值第二层:熔断策略(1s内出现多少次,N秒内不在调用,针对单个服务做预测保护)1)结算(确认订单&提交订单)没有配置;(原因,结算是交易最后一步,涉及到金额计算,所有对促销,商品,履约,资产都是不可降级的,不可降级的不配置熔断)
2)购物车(针对下游可降级的接口)有配置;第三层:超时策略(dubbo接口超时,单次快速失败)1)结算(确认订单&提交订单),
2)购物车所有涉及到下游接口都有配置,范围在1s~3s之间。第四层:降级(下游服务不可用,通过开关切断流量,对下游保护,对自己保护)1、系统链路强弱依赖梳理,跟产品
2、业务模块降级梳理,跟产品(是否可降级,降级后对系统的影响)
3、业务应急/提前预案梳理,提前预案适合大促活动高峰前降级,应急预案适合在出现问题时使用2、发现策略
2.1 运行时发现【秒级业务感知上报告警系统】
交易系统是依赖外部业务最多的模块,大概统计了下依赖【依赖应用:40+,依赖接口:100+】。
如此之多的接口依赖,我们必须得有一双能立刻发现问题的眼睛,基于此交易这边做了一个秒级业务监控报警系统。1、系统硬件的运行情况,CPU,IO,网络这些,通用监控平台可以搞定。
2、业务内部运行情况。
1)通用代码异常,npe,oom 等,通用监控平台可以搞定。
2)业务异常情况,商品无库存,冻结资源失败,通用监控平台无法触及(正常的业务逻辑,产生出不符合预期的结果,这种情况需要及时感知,往往更有价值)。SDK
Hawkeye 主要通过引入 SDK 二方包的方式进行接入,SDK 内置了完整的系统指标自动采集功能、定制化埋点采集功能、指标秒级聚合功能、数据上报失败断点续传功能,严格控制异步线程的数量,最大程度减少对业务系统的侵入和性能影响,提供秒级的响应时效。Hawkeye 服务端模块采用 HTTP&RPC 两种方式,供 client 端进行上报,server 将数据按照一定规则存入到TSDB;
2.2 流程制度
核心:抓住商品&促销的基本数据模型,就可以辐射到,履约,库存,资产,商户等业务;交易这边把历次的压测数据,双11的压测数据,平时的数据(数据模型,流量模型)在线化,搞了一个 压测数据模型录入工具,便于后续的 查找,统计,分析 为后续的压测和大促的流量模型流量模型 + 流量转化模型 + 数据模型 => 全链路压测 【全栈稳定】流量模型:一次促销活动,各个入口的流量分布(巴拉大促,详情页入口,活动专题页入口,购物车入口)流量转化模型:从活动转题页—>详情页 —>购物车 —>确认订单 —>提交订单—>支付拉起直接的流量流失比例数据模型:这些流量设计到商品模型和促销活动模型以及用户模型(区域性)这个主要运用在大型接口改造升级重构的场景,交易这里做了一个 线上流量回放对比工具我们认为对外部接口的依赖,只要入参一样,出参理论上是一致的;1、把线上老接口的真实数据(服务入参/出参,依赖接口的出/入参)记录下来
2、异步线程 把老接口的请求数据 灌入到新接口 把新接口产生的数据跟老接口的对比(这里只对比入参,不对比出参)好处:
1、覆盖场景全。
2、系统自动化,效率高。
3、测试只需要覆盖修改的那部分,其他回归的部分,系统可以自动化完成。
4、回放的流量不对下游造成实际的流量侵入(我们只按照流程构建入参,尤其是对写接口的场景)五、小结
随着业务的不断增长,交易系统本身的业务复杂性叠加系统流量的增长带来的挑战会愈发凸显,如何能在高效率支持业务迭代的同时,还能保持系统的稳定,这块我们任重道远,还需要不断总结和提炼出可靠的方法论;总结起来就是,纵向把现在的玩法不断做精做深,同时还需要从架构上不断演进。 本文转载自微盟技术中心,已获取转载授权,【点击跳转查看原文】