当当
迎战11.11——两大举措
举措一——重构促销系统
『目的』满足贯穿从商品展示、搜索、购买、支付等整个流程,电商对于精细化、精准化促销运营的需求,使多渠道(终端)、多区域化营销成为简单易行的配置操作,提升运营能力。
『目标』保证促销规则支持分时段设置,多活动可叠加,促销系统中数据量超过商品信息系统的前提下,促销内容会根据执行效果快速调整,以强大的促销系统,保证有序的促销活动,使促销系统承担营销功能。
『核心改进点』数据模型与运营的贴合度决定的扩展性、灵活性,系统解耦和更强大的数据处理能力
『其他待解决问题』促销模型较陈旧、扩展性差,促销系统成熟度低、与其他系统耦合严重。
『解决方案』
step 1 :确定最基本的促销模型;
step 2 :在促销模型基础上抽象出活动模型;
step 3 :基础模型定型,实施解耦相关设计——
系统交互解耦:将直读DB和存储冗余促销数据的系统修改为调用服务及监听MQ
逻辑回收:包括将促销校验与促销计算提取为交易服务,将原先由购物车、交易系统自行处理的促销逻辑回收
提取促销工具的属性:诸如类型枚举、促销标签、限购策略、库存策略等,以期外围系统尽量少的关注促销类型,通过促销ID拿到所需信息直接使用。[未来关注于业务层面的梳理与整合,逐步回收适用于活动模型的其他“类促销”业务。]
step 4 : 完善促销系统查询服务,使其具备更强大的数据处理能力和更好的性能表现。
应用架构实现上,从前端页面到后端逻辑,尽量避免有逻辑与促销类型直接绑定,全部以插件化方式与促销模型对接,完全根据促销类型的配置进行组装。针对不同维度、条件、优惠、促销属性,定制页面模板及业务逻辑,使得新增一种促销类型(在已有维度、条件、优惠下)仅需配置即可完成。促销系统的查询服务需要同时为多个系统提供数据,对TPS要求很高,同时促销的时效性又要求很高的实时性。我们采用的方式是在数据库前加Redis缓存,提高响应速度,同时监听MQ,根据事件清理相应的缓存数据。
『需注意问题』
Redis缓存虽减轻了DB压力,但对于计算密集型应用并未减轻应用服务器压力,IO未节省且增加序列化开销;事件驱动清理缓存在读写分离场景下,有可能比主从同步更快,造成缓存数据错误。
举措二——重构交易系统
『措施——引入业界成熟技术实现方案』
交易系统上线后为备战双十一,确保万无一失,利用老交易系统还未下线的条件进行了线上压测。为达到最准确的测试效果,且不影响正常系统运行,当当的技术团队进行如何准备,以及上文重构促销系统中提到的促销模型具体设计,感兴趣可于公众号后台回复“当当”获取全文查看。
苏宁
迎战11.11——四大方向
方向一——关于系统拆分
『前提』技术上分析主流程、分离主干系统和枝叶系统、根据业务内聚性独立出主干系统,做到分别部署。业务上分析电商主要功能与重运营特点。
『执行』根据业务功能拆分出几大核心系统,包括:会员、商品、库存、价格、购物车、交易、订单和内容管理等,并组建对应的研发中心来维护;根据交易环节的系统压力,独立出抢购和秒杀系统,拆分出购物券、云钻等营销类的系统,并组建营销中心。
方向二——关于基础平台
『主攻解决问题』
『Tips』
方向三——关于研发流程
除通过代码走查、sonar平台、各种测试等手段,中心也采用代码飞检来确保代码质量。 代码飞检即定期快速评审系统核心代码。与面向项目组内代码走查不同的是参加代码飞检人员级别相对较高,均为各个系统负责人、架构师以及总监。当各个系统裸露在大家面前的时候,系统的美与丑很容易被区分出来。通过这种方式,发现优秀代码以及幕后高手。意想不到的效果是优秀的人才很快浮出水面,而并非靠挖掘。
流程发布检查单为系统的最后一关,需经过产品负责人、开发负责人、QA、测试负责人、DBA、运维人员、以及线上验证人员对各个环节进行确认,以确保系统上线过程少出问题,即便出现问题也能及时下架。
方向四——关于系统保障
『准备一:提高系统负载能力』
step 1 : 根据历史数据对双11的流量进行预估,细化到每个系统的PV、UV、峰值TPS,要求每个系统要努力达到这些指标;
step 2 :对目前系统压力、容量和相关指标进行统计,按预期流量判断系统的服务是否满足要求;
step 3 : 对系统进行自上而下的体检,针对体检发现问题制定相关方案。具体体现在对系统架构梳理、关键代码优化以及中间件调优。
『Tips』
架构梳理主要对重点业务的处理流程和处理的链路进行审核。一个系统经常依赖多个系统,一个业务需要多次调用第三方服务,导致流程链相当长。在非必要依赖的前提下,可通过依赖调用改成第三方主动推送数据来消除依赖。
『准备二:应急预案』
苏宁应对双十一如何颠覆旧系统,融合新技术,全文解说可于公众号后台回复“苏宁易购”获取查看。
蘑菇街
迎战11.11——五个关注焦点
焦点一——稳定性
对已遇到过的问题,及时采用各种方式解决或规避。如:CentOS6.5自带device mapper存在dm-thin discard导致内核可能随机crash,解决方式为关闭discard support,在docker配置中添加“--storage-opt dm.mountopt=nodiscard --storage-opt dm.blkdiscard=false”,且严格禁止磁盘超配,磁盘超配可能会导致整个device mapper无法分配磁盘空间,从而使整个文件系统变成只读,引起严重问题。
焦点二——多维度的阈值监控
焦点三——灾备和紧急故障处理
焦点四——与已有运维系统的对接
Docker集群须能与现有运维系统无缝对接,才能快速响应,做到秒级的弹性扩容/缩容。因而以统一的容器管理平台,实现对多个Docker集群的管理,从下发指令到完成容器的创建可以在7秒内完成。
焦点五——性能优化
蘑菇街具体对双十一的大流量压力做了哪些准备,以及在容器方面做的具体工作,针对具体问题的解决方案,可于公众号回复“蘑菇街”获取详细全文查看。
唯品会
迎战11.11——六个设计要点
要点一——系统模块有效切分
重点解决业务系统在实际运作中业务耦合严重,模块划分不合理,导致模块之间边界不清楚问题。解决方案为,从整个系统角度出发,梳理整个流程,重新做系统定位,将不同业务子系统做物理分离,减少彼此之间的依赖,使各个子系统独立部署,出现问题后能快速采取措施,隔离出问题模块,将故障影响降到最低。
要点二——服务化解耦,集中服务治理
基于Spring的Java开发框架独立自主开发Venus系统, 降低开发复杂度, 提高开发人员开发效率, 提升代码质量, 规范开发流程。
『Venus框架涵盖以下内容』
『Tips』
开放服务平台(OSP):其主要目标是提供服务化的核心远程调用机制,OSP提供了丰富的服务治理能力,如路由、负载均衡、服务保护和优雅降级等,通过OSP,有效的实现了流量控制。
服务限流:在系统流量达到极限时的情况,有自动熔断机制。熔断器是在服务或者周边环境(如网络)出现了异常后主动断开客户端后续的使用,从而避免服务崩溃无法恢复。但是在后续时间熔断将使用小量请求尝试侦测服务是否已经恢复,如果恢复则将服务再次提供给客户端调用。
服务降级:通过对不同业务级别定义不同的降级策略,对除核心主流程以外的功能,根据系统压力情况进行有策略的关闭,从而达到服务降级的目的,例如在线商品信息必须保证优先访问,对于下线的商品信息,可容许在访问容量受限情况下,容许关闭下线商品详情页面的访问等。
要点三——增加异步访问
对于系统间实时性要求不高的操作,如执行时比较耗时,可通过异步处理提高调用者性能,提高响应能力,尤其通过异步调用通知非主要流程,加快了系统主要业务流程的反应速度和性能,异步处理机制可起到缓冲的作用,被通知的下游系统可依据自身能力控制处理数据量,避免遭受超负荷的冲击,保证系统稳定运行,增加了系统可用性。
分布式异步消息队列服务器可在宕机后确保消息不丢失,异步系统有重试机制,从而提高系统可用性、健壮性和扩展性。
要点四——多阶段缓存,降低后端压力
要点五——优化数据库访问
要点六——加强系统监控
为了保证系统在高并发、大流量访问下工作,并且使系统有较强的扩展性,唯品会围绕以上六个系统设计要点在重点实施上做了哪些具体实践,于公众号后台回复“唯品会”获取全文查看。