|
|
51CTO旗下网站
|
|
移动端

苏宁合同数据中心系统如何大幅提升服务性能

苏宁易购合同数据中心系统是苏宁合同管理系统中的一个子系统,主要为苏宁价格、结算、商户平台、调拨等系统提供销售、扣点、账期等数据,用于指导销售、账期结算、采购流程管库等。

作者:张冀平来源:51CTO|2018-11-14 10:48

【51CTO.com原创稿件】背景

苏宁易购合同数据中心系统是苏宁合同管理系统中的一个子系统,主要为苏宁价格、结算、商户平台、调拨等系统提供销售、扣点、账期等数据,用于指导销售、账期结算、采购流程管库等。

随着公司业务的快速发展,各系统的调用量和并发量明显增长,现有的合同数据服务接口已不能满足某些系统的性能要求,急需升级和优化该服务接口,提高系统的可用性和稳定性。

系统面临两个紧迫诉求:

1. 接口性能要从原有的并发量1000TPS提升到10000+TPS以上,满足高性能。

2. 系统可以横向扩展,随着业务发展,可以动态的扩容,满足可扩展。

问题分析

未改造前的苏宁合同子系统扣点服务查询逻辑

如图:

存在的问题:

1. 大量的连接查库,造成数据库负载较高

扣点服务查询业务逻辑比较复杂,通常一条数据调用需要多次对数据库进行查询,在调用量大的时候,经常会出现数据库连接不够,数据库负载过高等问题,给数据库造成很大压力。

2. 串行化查询,效率较低

接口调用的时候,通常是一个报文里包含几十条数据,由于是串行查询,每条报文都是逐条查询,导致处理效率较低。

3. 大量的服务调用,造成服务器压力过大

现有的4台Wildfly服务器在并发量大的时候,每台机器的压力都比较大,需要更多的机器来分担压力。

改造方案

1. 增加缓存,预先将热点数据放入缓存

(1) 系统最大的问题,就是IO比较密集,服务并发调用的时候,需要大量的查询数据库。我们想到的方案就是能否把一部分数据提前计算好,放入缓存,当系统调用的时候直接从缓存中取。

(2) 考虑到数据量比较大,生产环境有将近10亿的数据,单台Redis无法容纳这么大的数据,需要做分布式存储。借助苏宁自研的Zedis分布式缓存来实现对数据的存储。

实现方案:

(1)后台通过定时任务预先将做过价格的商品(热点数据)计算好之后,将结果数据写到zedis缓存集群中。

(2)有新的热点数据变动的时候,先将缓存数据清除,再将数据插入库中,更新该商品缓存状态(防止缓存数据与数据库数据不一致)。

(3)后台定时任务查询到缓存状态未处理的数据重新计算结果,将最新的数据写入缓存中。

处理流程,如图:

2. 串行改并行,多线程并发处理数据

(1)调用扣点服务的报文通常都是实时的,也存在一些批量调用的数据,一个报文存在多条调用的数据,未改造前,整个调用都是串行的。

如图:

调用之前花费的时间是各条数据处理时间的总和

(2)多线程改造之后可以并行的处理一个报文的多条数据

如图:

改造后,在后台维护一个线程池,并发处理一个报文的多条数据,花费的时间是处理时间最长的一条数据,处理时间上相较于串行处理有了显著提高。

3. 横向扩展服务器,分散压力

苏宁易购合同管理数据中心子系统是一个分布式系统,天然具备扩展性。随着调用量,并发量的增加,单台Wildfly服务器压力增大,为满足性能要求,根据压测结果,对服务器进行了横向扩展,从以前的4台扩容到30台,分散系统压力。

4. 改造之后的接口调用方案

如图:

接口压测

改造之后,对扣点服务接口进行了压测,压测借助于公司内部的蛙测平台。

压测环境

服务器数量配置

Nginx24C 4G

Wildfly84C 4G

Zedis54C 32G

MySQL58C 16G

测试场景

测试场景1

模拟场景: 无缓存数据库压测

并发用户数: 8000

测试结果界面如下:

测试时间: 2018-10-01 22:40:23 ~2018-10-01 22:45:23

事务执行总量:2355622次;失败:0次; 成功率:100%

wildfly服务器利用率稳定在5%~10%

事务的平均响应时间:624.75ms

TPS:平均 8264.4

测试场景2

模拟场景: 半缓存半数据库压测

并发用户数: 8000

测试结果的界面如下:

测试时间: 2018-10-07 16:18:30~2018-10-07 16:23:30

事务执行总量:3653576次;失败:0次; 成功率:100%

Wildfly服务器利用率稳定在5%~10%

事务的平均响应时间:403.72ms

TPS:平均 12818.3

测试场景3

模拟场景: 全缓存压测

并发用户数: 8000

测试结果界面如下:

测试时间: 2018-09-13 11:42:13~2018-09-13 11:47:13

事务执行总量:10519551次;失败:0次; 成功率:100%

Wildfly服务器利用率稳定在5%~10%

事务的平均响应时间:140.43ms

TPS:平均 36907.3

小结

从压测结果中可以得出,改造之后的服务接口的TPS有了显著提升,从以前的1000TPS提升到10000+TPS以上,满足苏宁外围系统对合同扣点服务接口的性能要求。

回顾这次性能优化,主要从三方面入手:

1. 利用Redis内存级别的存储,实现数据的快速读取。

2. 从程序内部优化,将串行化的处理改成并行化异步处理。

3. 利用分布式可扩展的特点,扩展服务器,分散压力。

从这次扣点服务升级改造中得出,性能优化不仅仅是单一的利用某个技术就可以提升系统的性能,需要全方位综合的解决性能问题,总结的思路有三点:

1. 找到系统性能的瓶颈。

2. 针对性能瓶颈有的放矢做技术方案,选取合适的技术方案。

3. 一定要压测,优化之后是否真正的提升了系统性能,提升了多少。

结束语

2018年是集团高速发展的一年,随着智慧零售,大开发等战略的逐渐落地,公司的业务量数据量不断的增长,同时对系统的性能和稳定性提出来更高的要求。为响应公司提出的“造极”精神,我们也对现有系统进行了迭代升级,不断优化,不断升级。

在造极精神的鼓舞下,围绕快速迭代、质量保证和稳定服务,把极客、极物、极速的造极精神当作我们的工作态度,唯有挑战不可能,才能超越一切可能,冲破极限,进而登峰造极。

作者:张冀平,苏宁易购IT总部员工平台研发中心技术经理,负责公司内部ERP系统的规划架构开发工作。资深码农,十年软件开发经验,对系统架构,性能优化,分布式系统设计有着丰富的实战经验。

【51CTO原创稿件,合作站点转载请注明原文作者和出处为51CTO.com】

【责任编辑:庞桂玉 TEL:(010)68476606】

点赞 0
分享:
大家都在看
猜你喜欢

读 书 +更多

Java EE 5 开发指南

本书是对Java EE各种技术之间互相协作的概览和补充。 本书还展示了如何编写JavaServer Page(JSP)页面或者企业级JavaBean(EJB):探讨了...

订阅51CTO邮刊

点击这里查看样刊

订阅51CTO邮刊