Tech 导读
本文面向受众可以是运营,可以是产品,也可以是研发、测试人员,希望通过如下思路(知历史->清家底->明目标->定战略->做战术->促成长)帮助大家了解电商大促系统的高可用保障,减少那些高深莫测的黑话和高大尚的论调,而希望以体系化的知识让读者有所得。
导读
本文面向受众可以是运营,可以是产品,也可以是研发、测试人员,希望通过如下思路(知历史->清家底->明目标->定战略->做战术->促成长)帮助大家了解电商大促系统的高可用保障,减少那些高深莫测的黑话和高大尚的论调,而希望以体系化的知识让读者有所得。
1.1 什么是电商大促
电商大促是电商平台组织的一种大型销售推广活动,目的是通过提供各种优惠、折扣等方法,提高商品销售额和网站流量,增加消费者的购物欲望,以实现销售目标。电商大促活动通常会在一些特定的节点或者节日举行,比如“双11”、“618”、“黑色星期五”等,这些时期的电商大促极具吸引力,既有大量的商品打折优惠,又有丰富多样的活动供消费者参与,是电商平台提升销售业绩的重要手段。 电商大促活动期间,大家可以购买到平时心仪已久的商品,并且价格通常会远低于平时,而电商平台也会通过活动吸引更多的消费者流量和购买力,进一步提升其在电商行业的影响力。电商大促不仅仅是一种营销方式,也是电商平台和消费者互动、提高用户粘性的有效方式。
1.2 典型的电商大促活动简介
【清家底】电商平台的商业模式与系统
2.1 电商平台的商业模式
2.2 电商平台下的系统链路划分
上面提到的链路因为分叉分支很多,比如时效保证、开寄发票、预售先款/先货、商品评价、直播空间、店铺评价、客服处理等等内容未涉及,也从侧面想说明如果想要保障整个电商平台的大促稳定,如果不区分重点的话,那么眉毛胡子一把抓是肯定完不成好的效果,所以这一个环节主要想要阐述说明在特定场景下,电商大促更多的是保障重点在哪里。
【明目标】大促备战目标
【定战略】大促整体备战思路
大促备战是一个完整的事件,具备着详细的故事线,这里面延展开说明下,在领域驱动设计的建模过程中有个事件建模其实就非常好的应证了这一个点,如果将人类文明的活动想要梳理清楚,其实很多时候会发现越理越乱,所谓的点-线-面-体,其中线是更好的中间表述环节。基于故事线来看的话,那么整体备战思路,可以拆解为事前-事中-事后来考虑,相对而言会比较全面的将大促备战体系针对特定场景下的备战尽可能全面。
4.1 事前:基于现状进行整体提前工作安排
(1)参与部门/集团大促启动会,及时获取最新集团备战导向和最新的战略内容,比如京东的三道防线战略。
(2)进行资源盘点梳理,包含人员、应用、上下游依赖、中间件、数据库,本次大促的SLA约定,值班上下游群,问题反馈群,大促备战手册等。
(3)针对可以降低发生概率的事项进行改造,比如梳理核心链路,针对链路上的薄弱点进行改造,并对于日志进行改造可以基于不同场景进行日志输出,规范整个大促备战的指南方案。
(4)宣讲仪式增强备战感知,比如基于大促封板需求开始,进行大促意识宣讲,同时完善监控大盘,补充关键日志,报警邮件短信治理,历届大促相关指标同环比数据对照分析数据表等。
(5)宣讲会后日检工作内容,比如成立应急故障虚拟小组,基于历史故障和常见问题形成故障手册,同时制定限流和降级预案等指南手册。
4.2 事中:基于备战情况保持警惕备战状态
(1)每日邮件指标报表通晒
(2)每日错误日志收集并反馈和解决
(3)每日监控报警根因分析
(4)每日站会同步当天系统应用和人员情况
4.3 事后:基于整个备战结果进行效果复盘
(1)业务目标的达成情况,比如某个营销活动的达成情况,做的好的,待改善的,可以萃取经验的内容。
(2)产研测团队的系统需求保障情况,比如大促前期和中间上线的需求,上线情况和需求收益达成情况。
(3)系统应用的指标、资源成本、人力成本投入情况,比如每年大促备战基于成熟化的工作流程、工具等内容,在业务变化不大的情况下,成本投入应该逐年下降等。
(4)备战沉淀的经验形成文档资产,每次大促都是系统历炼的一次非常好的机会,期间形成的文档资产都可以归档方便下次使用。
(5)大促备战中的待办工作内容和事项持续跟踪,很多时候团队部门缺少跟踪事项表,只是记录了时间和人但是持续跟踪的事情没有持续性。
【做战术】大促整体备战工作
5.1 流量沙漏防护原理介绍
5.2 流量沙漏防护原理后端应用考虑因素评估表
考虑因素 |
特征 | 措施 |
---|---|---|
功能/适用性 | 合适原则 | 系统需求的可理解 |
性能效率 | 全面性 | 页面、接口、功能加载时间 |
时间性 | RT响应时间、吞吐量 | |
资源利用率 | 内存、磁盘空间、CPU使用率 | |
可扩展性 | 代码、架构设计 | |
可用性 | 全面性 | 平均无故障时间、平均修复时间、平均故障间隔时间 |
稳定性 | 平均停机时间 | |
容错性 | 错误崩溃、代码覆盖率、多机房容灾、冗余备份等 | |
可维护性 | 全面性 | 应用维护人力投入情况 |
模块化 | 结构清晰、边界清晰 | |
可重复使用性 | 代码、功能复用情况 | |
可测试性 | 代码覆盖率 | |
可分析性 | 复杂性、代码圈复杂度、服务之间交互耦合等 | |
可变更性 | 代码大小、变更、代码耦合、服务单一职责等 | |
成本 | 全面性 | 开发、测试、部署维护 |
基础设施 | 云/本地基础设施成本 |
5.3 流量沙漏防护原理的备战重点&应用健康度
检测指标 | |
基础资源 | 应用跨集群 |
应用跨机房 | |
应用跨POD | |
应用POD分布 | |
JIMDB POD分布 | |
网络TCP重传 | |
应用容器CPU | |
JIMDB CPU | |
JMQ CPU | |
数据库 CPU | |
JIMDB分片拓扑 | |
JIMDB分片POD | |
数据库主从 | |
数据库机房 | |
数据库规格 | |
JMQ POD | |
VIP机房数量 | |
后端机房数量 | |
错误后端(ip) | |
集群环境一致 | |
容器 | 容器存活 |
应用模块化 | |
GIT分支 | |
灰度更新超时 | |
CPU利用率 | |
内存使用率 | |
磁盘繁忙 | |
网络流入 | |
TCP连接数 | |
CPU利用率 | |
内存使用率 | |
Swap使用率 | |
磁盘繁忙 | |
磁盘使用率(根目录) | |
磁盘使用率(export) | |
网络连通性 | |
网络流入 | |
网络流出 | |
系统时间偏差 | |
应用 | JSF版本 |
JMDB版本 | |
JMQ2版本 | |
JMQ4版本 | |
UMP版本 | |
DUCC版本 | |
LOG4J版本 | |
JVM版本 | |
Full GC/Young GC | |
JVM_XMX最大堆内存 | |
JVM_XMS最小堆内存 | |
JVM_堆外内存 | |
JVM_ParallelGCThreads | |
JVM_GCConcGCThreads | |
JVM_CICompilerCount | |
JVM_Metaspace | |
JVM_CMS回收阈值 | |
JVM_新生代大小 | |
JVM_HeapDump | |
JVM_Server模式 | |
JDOS_日志清理 | |
JSF_Timeout超时时间 | |
JSF_跨单元调用 | |
JSF_跨环境调用 | |
JSF_跨机房调用 | |
JSF_重试次数 | |
负载均衡 | |
JSF_限流 | |
JSF_动态别名 | |
JSF_设置黑名单 | |
JSF_同机房部署 | |
JSF_别名命名规范 | |
JSF_混合环境部署 | |
color网关timeout | |
最大连接数 | |
初始连接数 | |
connectTimeout | |
SocketTimeout | |
maxWait | |
时区 | |
JIMDB FAILOVER状态 | |
JIMDB 热KEY | |
JIMDB 大KEY | |
JIMDB 慢日志 | |
JIMDB 扫描过期频率 | |
JIMDB 服务端版本一致 | |
JIMDB 服务端风险版本 | |
淘汰策略 | |
JIMDB_Swap交换区 | |
JIMDB_绑核 | |
JIMDB_CPU模式 | |
JIMDB_网卡软中断 | |
慢SQL | |
优先治理慢SQL | |
含外键表 | |
索引过多表 | |
自增溢出表 | |
大表 | |
接入方式 | |
最大线程数 | |
JIMDB读超时 | |
JIMDB跨单元调用 | |
JIMDB连接超时 | |
JIMDB等待超时 | |
JIMKV连接超时 | |
JIMKV读超时 | |
JMQ_sendTimeout | |
空应用 | |
纯预发应用 | |
单实例应用 | |
预发流量过大 | |
预发资源过多 | |
不活跃预发分组 | |
应用_实例存活 | |
应用_Port存活 | |
应用_URL存活 | |
JSF_Provider接口存活 | |
JSF_Consumer接口存活 | |
依赖JIMDB集群异常Server_OPS次数 | |
Server_CPU利用率 | |
Server_内存使用率 | |
Server_内存RSS | |
Server_网络流入 | |
Server_网络流出 | |
Server_连接数 | |
tp99异常次数 | |
积压 | |
broker 主机-负载 | |
broker 主机-磁盘繁忙 | |
JED Qps | |
JED连接数 | |
JED主从延迟 | |
监控报警 | CPU利用率 |
负载 | |
内存使用率 | |
Swap使用率 | |
磁盘繁忙 | |
磁盘使用率 | |
网络连通性 | |
TCP连接数 | |
TCP重传 | |
网络流入 | |
网络流出 | |
系统时间偏差 | |
JsfProvider组件报警 | |
JimDB组件报警 | |
JmqProducer组件报警 | |
Mysql组件报警 | |
SpringMVC组件报警 | |
UMP JVM监控 | |
UMP 方法监控 | |
JVM_CPU利用率 | |
JVM_内存使用率 | |
JVM_线程数 | |
FULLGC次数 | |
YONGGC次数 | |
方法TP99 | |
方法TP999 | |
方法可用率 | |
方法TP99配置合理性 | |
方法TP999配置合理性 | |
方法可用率配置合理性 | |
方法调用次数 | |
Port存活 | |
URL存活 | |
OPS次数 | |
连接数 | |
内存使用率 | |
主从断开 | |
主从复制延迟 | |
积压 | |
重试 | |
主从延迟 | |
Logbook关键字报警配置 | |
链路超时 | 链路超时 |
链路超时JIMDB组件 |
其他应用/中间件/数据库:会发现很多时间我们的问题引入集中在三方因素较多,也是在备战中需要关注的重点:
•- 接口定义不合理,业务周知不到位,新上的业务需求直接在某个时刻脉冲流量到达薄弱依赖将服务打挂;
•- 还有部分是因为上下游依赖不稳定,比如遇到性能瓶颈,业务系统强依赖无法作出降级操作,只能静静等待恢复故障;
•- 在机房方面没有容灾,可能因为通信机房网络问题,电缆被挖断或者信号中断等问题导致网络瘫痪故障不可用;
•- 中间件使用策略异常,比如没有做业务幂等性操作、重试策略未控制次数和时间导致依赖的业务系统无法承接脉冲流量从而服务不可用;
•- 还有依赖的中间件和数据库容量水位已到阈值,没有及时扩容,从而引发业务系统的不可用;
•- 应用操作数据库线程阻塞、死锁、慢SQL等造成数据库拖垮服务应用;
•- 应用操作缓存/ES出现热点的商品造成的数据流量不均引发的服务不可用;
通过上述的流量沙漏防护原理是希望帮助大家能够对于大促备战有个整体框架,从而更好的结合三道防线战略,以及考虑因素评估表和应用画像来决策如何治理整改应用不合理的内容,最终形成相对合理的应用架构。
【促成长】其他
那么如何成为一个事业部架构师或者集团架构师呢?笔者认为需要有严格清晰的备战路线和里程碑,关注的重点事项以及日例会进行事项跟进和同步,因为当人数超过几十人以后,大促备战更多的是管人、管流程,而不是管应用,所以需要责任到部门、到个人,紧抓流程,同时日例会及时信息沟通减少信息变更差。
【做回顾】总结
本文从(知历史->清家底->明目标->定战略->做战术->促成长)的6个环节,详细阐述了电商大促系统的高可用保障思路。其中对商业模式和业务流程的全面理解、针对性的解决方案、严谨的风险评估与控制检查指标,以及持续的优化改进路径和自身应该成长的要素等,这些又是保障大促系统顺利运行的重要基础。此外,本文也强调了在整个保障思路中,技术和人员的协作是不可或缺的。只有技术和人员达成有效配合,才能使电商大促系统在面临巨大压力时仍能保持高可用,保障用户良好的购物体验,为公司带来持续的商业成功。
求分享
求点赞
求在看
本篇文章来源于微信公众号:京东技术
本文来自投稿,不代表TakinTalks稳定性技术交流平台立场,如若转载,请联系原作者。