某证券清算系统的一次性能调优

标签: 证券 清算 系统 | 发表时间:2018-11-06 22:56 | 作者:xugangqiang
出处:http://www.iteye.com

1.     场景

 

上线前,用户预估平均一天交易量约一万条,峰值约两万条。项目上线第一天,交易量有4万条。对于这4万条左右的交易信息的清算,花了一个多小时(清算时需要我们系统发指令给清算所,由清算所按照我们系统的指令进行清算,最后把结果通过MQ返回给我们)。用户提出以后交易的峰值可能达到一天5万条。

 

 

 

2.     任务

 

我们按照2倍的处理能力,定下一天10万条交易信息的处理量的目标。按照一条交易信息对应3个MQ消息计算,在清算窗口内(5点半开始到8点半关闭),需要处理30万个消息,平均每小时10万。同时观察到处理性能随着时间是线性逐步下降的。

 

 

3.     行动

 

系统主要涉及异步MQ通信(SSL和AMS双重加密),JVM处理,数据读取以及数据存储等方面,性能优化从这几个方面入手。

 

A.    数据存储方面 – 提升25%

 

a.     考虑到清算后是T+3交割,因此系统只要保存4天内的数据即可(热数据)。如果用户有查询需求,可以从归档表(冷数据表)进行查询。超过1年的数据则可以归集到离线数据库。这样处理后,由于热数据总量基本是恒定的,而且减小了数据总量,读数据的性能提高了20%左右,也不会随时间下降。

 

b.     经过研究,sybase针对主键会有clustered index,由于主键不是递增的,因此新的数据插入可能会导致数据存储物理顺序重排,因此把primary key改成unique key。此项修改系统性能约提升了5%。

 

B.     JVM代码方面 – 提升30%

 

a.     系统从MQ收到消息后,是先落数据库,然后马上确认消息被消费掉。同时这里还会把每个消息以文件的形式写到NFS上。考虑到数据库和MQ在同一个事物里面,不需要担心数据的丢失,这里对“消息以文件的形式写到NFS”这个操作放到另外一个线程池里做异步化处理。系统性能提升约10%。

 

b.     每条消息被java代码处理后,原先系统会记录系统的操作日志(什么时候,处理了什么消息,处理结果是什么)。考虑到性能问题,以及这里是单个JVM,不涉及分布式,这个系统日志也做异步化处理。如果记录日志出错,则马上邮件通知运维组的同事马上处理。这里的关键是,只要系统的关键业务处理都正常,则系统的结果就是正确的,操作日志不应该影响这个业务的处理结果。系统性能提升约15%。

 

c.     清算所的消息的大小有明确上限,因此每个消息能承载的交易信息条数有上限。原先的上限设的比较小。我重新计算每条交易信息的字节数,再重新计算出每个消息能承载的交易信息的上限,把个数从1000调整到了1800。这个调整系统性能上升约5%。

 

C.    数据读取方面 – 提升100%

 

a.     针对每条SQL语句,我们找DBA帮忙分析,看是否hit到正确的索引上面。同时每天晚上系统停止运行后,都去重建索引,更新统计数据,确保索引会正常工作。

 

b.     优化SQL语句,例如有的select * from table A, table B,改成 select columnA, column from A inner join B on A.key=B.key。显式使用正确的join,效率会比fromA,B要好。

 

c.     减少数据库读取次数。原先的设计者可能考虑到数据量比较大,担心内存不够,因此所有待处理的消息不是全部一次性读取到内存里面。后来我经过测试,每条消息上限最大10K,按照最多30万条消息(实际上消息是分阶段过来的,不会一下子30万全部过来),总的内存占用不会超过3G,因此完全可以一次性把全部待处理消息全部读取进来,处理完后再处理下一批。

 

4.     结果  

经过不断优化后再测试,每小时可以处理12万个消息,可以满足用户需求。主要感触是要有主人翁精神,本着用户至上的精神,要想尽办法满足业务的需求,给客户‘如沐春风’的感觉。在技术上,要知其然并知其所以然,理解背后的原理,灵活运用到项目上。只有对业务有深入的理解, 在技术上大胆假设,小心求证,才能让技术更好的为业务服务。

 



已有 0 人发表留言,猛击->> 这里<<-参与讨论


ITeye推荐



相关 [证券 清算 系统] 推荐:

某证券清算系统的一次性能调优

- - Java - 编程语言 - ITeye博客
上线前,用户预估平均一天交易量约一万条,峰值约两万条. 项目上线第一天,交易量有4万条. 对于这4万条左右的交易信息的清算,花了一个多小时(清算时需要我们系统发指令给清算所,由清算所按照我们系统的指令进行清算,最后把结果通过MQ返回给我们). 用户提出以后交易的峰值可能达到一天5万条. 我们按照2倍的处理能力,定下一天10万条交易信息的处理量的目标.

[转]跨行清算系统的实现原理

- - 行业应用 - ITeye博客
最近看了很多银联方面的清算系统的设计原理,对于跨行清算系统有了很大的了解,写这篇文章的目的是在于从一个程序员的角度去思考一个跨行清算系统的架构是如何实现的以及整个过程中我们有哪些思想是可以借鉴的. 由于金融里面涉及到太多的专业名词,包括借贷,备付金,头寸,调拨等等,这里不会涉及到这些,取而代之的是以大家可以理解的概念去解释.

网上支付跨行清算系统(第二代支付系统)与大小额支付系统有什么区别?

- - 知乎每日精选
题主已经在说明里大体列出了各个系统的主要却别. 我尝试说明下我所认知的各个支付系统之间的区别吧. 有不周到的地方,欢迎指正和讨论. 二代支付系统是一个很庞大的系统,题主所列举出的这些系统都包涵在二代支付系统里. 前段时间升级的二代支付系统,主要是解决小额系统的批量定时问题以及清算中心迁移问题,其中还包括由于一代支付系统建成时间长了以后不能应对现在业务需求以及接口紧张的问题等等.

证券创新之翼——阿里金融云

- - 博客园_知识库
  云计算被视为继大型计算机、个人计算机、互联网之后的第4次IT产业革命,顺应了当前各行业整合计算资源和服务能力的要求,成为引领当今世界信息技术变革的主力军. 越来越多的金融企业认识到只有与云计算结合,才能更好地支持业务发展和创新. 本文将结合阿里金融云的特性,讲述券商IT系统上云的最佳实战经验.   阿里金融云于2013年底正式上线,主要面向银行、证券、基金、保险和信托等金融企业.

关于证券公司自主研发的几点思考

- - 知乎每日精选
面向个人的券商的经纪业务与互联网业务并无本质区别. 反观互联网企业,大到腾讯、百度、阿里、网易、搜狐、小到创业公司无一例外地都是自主开发面向客户的系统. 腾讯、百度、阿里均有几万名开发人员. 在证券领域内的东方财富网,也拥有600多开发人员,所有系统均自主开发,在收购同信证券后,组建了200多人的开发团队进行集中交易系统的自主研发.

Kafka 在华泰证券的探索与实践

- - IT瘾-dev
(1)高可用双活架构. 如图 3 所示,Kafka 高可用特性依赖于 zookeeper 来实现,由于 zookeeper 的 paxos 算法特性,故 zookeeper 采用同城三中心部署方式,保证 zookeeper 本身高可用,通常其中两个数据中心部署偶数台机器,另一数据中心部署单台机器. Kafkabroker 跨数据中心两节点部署,所有 topic 的 partition 保证在两中心都有副本.

美国证交会将首次代币发行归类为证券

- - Solidot
美国证券交易委员会 (SEC) 宣布,首次代币发行((Initial Coin Offerings,或简称 ICO)可被视为证券并受联邦证券法律的监管. 根据 SEC 的说法,代币代表着发行企业的权益,并被卖给投资者,以换取名为 “以太坊( Ethereum )” 的虚拟货币. 投资者获得一定的投票权和所有权以及代币,这些代币也可以在某些二级平台上出售.

招商证券2018年度投资策略会行业观点汇总

- -
A股2018年投资展望——潮平两岸阔,风正一帆悬. 根据我们对经济变量、企业盈利、资金面、政策环境等多重因素的考量,我们对A股2018年表现持乐观态度,我们预计上证指数全年较年初有10~15%的上行空间. 投资主线聚焦创新驱动、中高端消费和绿色低碳和金融. 2018年宏观经济展望——预计明年将会呈现货币政策稳健、投资增速下行通胀可控、利率缓慢下行,经济增速企稳,经济增长结构出现调整.

壳系统

- Vernsu - It Talks-魏武挥的blog
经常有人被我问到“你用什么浏览器”时的答案是:傲游啦360啦,但事实上,这些都不是真正的浏览器,从技术角度讲,充其量只是在IE浏览器上加一个壳罢了. 在国外,壳浏览器是以“皮肤”的形式存在,纯属为了美化浏览器而用. 但在中国,壳浏览器成了一门生意. 奇虎的主要收入来源并非来自那个由于一场商战而赫赫有名的安全卫士,而是来自于360浏览器(它有两个版本,分别以IE和Chrome为内核).

秒杀系统

- - 开源软件 - ITeye博客
秒杀系统架构分析与实战. (反馈非常好的文章,推荐). (1)查询商品;(2)创建订单;(3)扣减库存;(4)更新订单;(5)付款;(6)卖家发货. (1)低廉价格;(2)大幅推广;(3)瞬时售空;(4)一般是定时上架;(5)时间短、瞬时并发量高;. 假设某网站秒杀活动只推出一件商品,预计会吸引1万人参加活动,也就说最大并发请求数是10000,秒杀系统需要面对的技术挑战有:.