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

栏目: Java · 发布时间: 5年前

内容简介:苏宁易购合同数据中心系统是苏宁合同管理系统中的一个子系统,主要为苏宁价格、结算、商户平台、调拨等系统提供销售、扣点、账期等数据,用于指导销售、账期结算、采购流程管库等。随着公司业务的快速发展,各系统的调用量和并发量明显增长,现有的合同数据服务接口已不能满足某些系统的性能要求,急需升级和优化该服务接口,提高系统的可用性和稳定性。1. 接口性能要从原有的并发量1000TPS提升到10000+TPS以上,满足高性能。

【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】


以上所述就是小编给大家介绍的《苏宁合同数据中心系统如何大幅提升服务性能》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

The Intersectional Internet

The Intersectional Internet

Safiya Umoja Noble、Brendesha M. Tynes / Peter Lang Publishing / 2016

From race, sex, class, and culture, the multidisciplinary field of Internet studies needs theoretical and methodological approaches that allow us to question the organization of social relations that ......一起来看看 《The Intersectional Internet》 这本书的介绍吧!

CSS 压缩/解压工具
CSS 压缩/解压工具

在线压缩/解压 CSS 代码

XML、JSON 在线转换
XML、JSON 在线转换

在线XML、JSON转换工具

正则表达式在线测试
正则表达式在线测试

正则表达式在线测试