当前位置: 首页 > 科技观察

500万日订单下的高可用拼购系统,到底暗藏了什么“独门秘籍”-

时间:2023-03-12 19:14:29 科技观察

日订单500万的高可用购物系统,究竟隐藏着怎样的“绝密”?购物系统瞬时高并发能力的优化升级,保障消费者丝般顺畅的购物体验。下面介绍一下苏宁购物系统应对大促的策略和方法。使用技巧:购物系统高可用架构设计的“艺术”是架构设计的方法论。购物系统的架构经过多次更新迭代,其目的是打造一个高可用、高性能、易扩展、可扩展的应用系统。为了细化整个流程,我们主要做了三个方面的工作:系统架构优化设计数据库性能优化高可用性优化应用系统架构优化设计根据康威定律,组织形式等同于系统设计。为了适应快速的开发迭代节奏,购物系统的所有功能都集中在一个集群中。随着业务的发展,功能越来越复杂,单一集群成为制约系统性能的最大瓶颈。图1:苏宁购物系统架构设计因此,系统优化首先要做的就是重构购物系统架构。一方面,对系统进行横向切分和分层,包括:网络层:通过CDN加速响应。CDN缓存一方面提高了静态内容的访问速度,减轻了服务器的压力;另一方面,CDN内网专线加快了回源速度。荷载层:包括四层荷载和七层荷载。功能包括流量调度、流量控制、安全防护、黄牛防护等。另外,负载层也会做一些轻量级服务的Lua聚合,提高响应性能。应用层:该层主要实现业务功能逻辑。服务层:为应用层提供原子服务,如会员、优惠券领取、寻源、时效、订单生成、支付等。数据层:提供数据存储和访问服务,如数据库、缓存等;提供数据提取和分析服务,如Hbase、Hive。另一方面,根据团购的业务特点,进行垂直切分,将原来耦合的功能逻辑拆分为三层:PGS-WEB、PGS-TASK-WEB、PGS-ADMIN_WEB。每个模块部署在一个独立的集群中,集群与服务层通过分布式远程调用提供的原子服务协同工作。其中:PGS-WEB:前台业务处理模块。包括展示、交易、营销三个单元模块。每个模块可以划分为更细粒度的子模块。例如,营销模块可以细分为四个轻量级的玩法模块:新邀请群、议价群、扩容红包、应援群。可以根据业务需要,对不同的模块进行插拔、扩展。PGS-TASK-WEB:中台定时任务处理模块,主要用于处理定时任务,支付逻辑也在这一层。PGS-ADMIN_WEB:后台管理模块,主要用于运营商的维护活动、商品、玩法等。数据库性能优化在高并发场景下,提交订单、生成拼团记录、查询订单等操作都会给数据库带来很大的压力,而这些需要高一致性的操作不能直接使用分布式缓存来替代数据库.要给数据库降温,提高数据库的并发处理能力,数据库必须具备水平扩展的能力。因此,我们基于Mycat数据库中间件,实现了购物系统数据库的分库分表策略。图2:高并发场景下MySQL数据库负载能力趋势Mycat是MySQL的分库分表的中间件,类似于Web服务器的Nginx,是应用程序和数据库之间的代理层。由于Mycat是一个开源的中间件,这里不再详细阐述技术实现,主要讨论如何在购物系统中应用。如下图,业务逻辑的数据操作通过Mycat划分到三个数据库DataNode1~3,而这个分库过程的应用本身是无感知的。图3:苏宁购物系统基于Mycat的分库架构。每个数据库写一次读两次。组和组明细的操作分片规则基于组ID(GROUP_ID),订单的操作分片规则基于订单ID(ORDER_ID)。另外还有一个单独的BackupDB用于大数据的提取和数据备份,使用Canal来保证BackupDB中的数据是全量的。当Mycat出现问题时,我们可以在应用层切换数据源,降级为单库来保证业务。应用高可用优化对于应用层面的优化,主要包括两个方面:分布式缓存和异步化。使用Redis分布式锁解决并发场景的一致性问题。比如为了防止订单重复处理,我们使用Jedis事务Transaction+SETNX命令实现Redis分布式锁:Transactiontransaction=jedis.multi();//返回一个事务控制对象transaction.setnx(tmpLockKey,"lock");//SetifNotExisttransaction.expire(tmpLockKey,locktime);Listrets=transaction.exec();//事务执行使用Redis实现主动盘存,解决数据库资源竞争问题。对于每一个团购活动,我们维护的是活动库存,或者说资格/剩余人数,并不是真正的实际库存。在1元秒杀等活动中,本次活动的库存会快速变化,大量的数据库Update操作会导致行锁,极大地影响系统吞吐量。优化方案是在Redis中扣除活跃库存,并在一定时间同步到数据库:/***Redis缓存扣除活跃库存**/privateLongupdateStoreByRedis(StringactId,Stringfield,intcount){Stringkey=redis.key(PGS_STORE_INFO,actId);//如果存在activeinventory缓存信息,则更新对应字段的个数;if(entity==null){return-1L;}Mapvalues=newHashMap();values.put(PGS_STORE_ALL,…);values.put(PGS_STORE_REMAIN,…);values.put(PGS_STORE_LOCK,...)redis.hmset(key,values);//库存缓存信息在活动有效期内失效,初始化缓存信息一小时redis.expire(key,ONE_HOUR);}returnredis.hincrby(key,field,count);}/***Redis同步活动清点到数据库**/publicintsyncActivityStoreToDB(StringactId){...try{//判断同步锁状态Stringkey=redis.key(PGS_STORE_SYNC,actId);if(!redis.exists(key)){updateactivity可以被锁inventoryredis.setex(key,actId,STORE_SYNC_TIME);}}}catch(Exceptione){Log;}…}异步操作,消除并发访问高峰。比如支付完成后,还有一系列后续的处理流程,包括活动库存扣减、群群状态变化等,其中一些实时性逻辑要求高,需要同步处理。有些可以异步处理,比如通知物流发货。我们使用Kafka队列进行异步通信,让下游系统处理消费。道即体:购物系统高并发下的保障体系“以道制艺,艺必成。背离道的艺,艺必衰。”我们所有的结构优化升级,最终目的都是为了保证推广高峰的稳定。高并发场景下团购系统的保护方式是基于合理的容量规划,以完善的监控系统为支撑,形成完整的限流+降级+防控策略。全链路压测和容量规划根据业务预估,生产环境只有对苏宁采购的全链路场景进行压测,才能做出合理的容量规划。目前我们的压测系统可以支持引流压测,即复制真实在线流量,生成脚本,进行压测。最大程度保证压测与真实情况的一致性,让容量规划更加准确。端到端覆盖的监控系统目前,苏宁品欧的监控系统可以实现端到端的覆盖,包括客户端->网络->服务器监控。其中,客户端监控依赖终端日志,覆盖PC+WAP+App。网络监控主要是CDN日志和拨号测试数据。服务器端监控方式最为丰富,包括:服务器系统状态监控:CPU、内存占用、网卡流量、磁盘IO等Web服务器监控:显示Http连接数、响应时间、Http异常、状态Web服务器的实时代码和其他指标。应用服务器异常监控:实时汇总应用异常堆栈信息。JVMStatusMonitoring:实时显示JVM内存、线程、GC和Class使用情况。NoSQL监控:监控Redis每分钟的命令数、大对象、连接性等。数据库监控:监控数据库层面的各项指标。调用链监控:实时展示应用间的调用关系,反馈链路系统的健康状态。这些监控系统通过traceId串联起来,与基础运维平台对接,最终通过决策分析平台进行聚合,实现智能告警。图4:端到端的监控系统和报警决策平台流量控制和风险控制流量控制针对的是88购物日0:00高峰超预期的高峰流量。设置限流是为了保护自身的应用,否则会出现雪崩连锁反应。Pingou目前的流控系统可以支持多维度的流控策略。包括最基本的JVM活跃线程数流量控制,用户IP、UA、会员号流量限制,核心接口流量限制策略,热门商品流量限制策略等。图5:团购流量控制系统架构风控是针对88购买日热门商品被黄牛诈骗风险的防控策略。除了传统的黄牛榜外,Pingou的风控策略还包括对用户、地址、事件行为、设备指纹等方面的判断。区别于黑白防控,Pingou采用打分的方式对用户进行画像,并对潜在风险用户采用短信验证、滑动验证、人脸识别等一系列挑战模式。大促准备及应急预案大促准备是指结合业务的大促节奏,为大促做的一系列准备工作,包括提前降级非核心计划任务、恢复生产运营权限等。应急预案是针对大促期间可能发生的突发事件的应急预案,应急预案是基于降级的手段。比如关键时候部分功能的降级和关机操作,弃车保帅,保障正常购物流程;另一个例子是服务器性能瓶颈的冷却方法。促销活动圆满完成。结语任重而道远,今年的88苏宁购物日已经落下帷幕。未来给我们带来了更多的挑战和机遇。如何进一步突破系统性能瓶颈,如何为用户提供个性化的推荐和服务,如何将拼购打造成一个开放的社交电商平台,苏宁拼购技术团队还有很多工作要做。我们将继续前行,势不可挡,为您带来源源不断的技术分享与更新。作者:朱一权、任章雄、张涛、龚兆忠简介:朱一权,硕士毕业于南京航空航天大学,苏宁易购消费者研发中心高级技术经理,主要负责电子商务各系统结构优化及推广保障。先后参与了易购全站Https改造、苏宁购物架构改造、先知业务监控平台建设。专注于构建高可靠、高性能、高并发服务系统的技术研究。【原创稿件,合作网站转载请注明原作者和出处为.com】