[高并发] - 2. 金融交易系统高并发架构

2024-02-22 04:36

本文主要是介绍[高并发] - 2. 金融交易系统高并发架构,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

1. 高并发场景

[高并发] - 1. 高并发架构综述

上面文章提到的数据都存在高并发场景。

2. 解决方案

2.1 权限

    权限数据的特点是数据量少(一千万),占用的空间大小大概在2G左右,但是性能要求极高。权限数据还有个特点,那就是不读多写少,而且在金融交易系统中,权限的变更一般在非交易时间段做好,例如,每天交易开始前,交易负责人将权限转授权给具体的交易执行人。

   基于上述的特点,权限数据采用 “本地缓存 + 数据库” 模式进行存储,本地缓存全量缓存权限数据,且不设置过期时间;写操作采用read/write through的模式,可以保证数据的一致性。权限服务启动时,即刻加载权限数据,预热模式可以保证缓存的命中率为100%,所有的权限数据完全从缓存中获取。

    资源的定义通常采用点分式,如何快速的查询用户是否具有某个资源的权限呢?最好的办法是对资源的匹配采用前缀匹配树。这种数据结构的缓存需要我们自研。

    对于消息类型的权限,例如某类topic的订阅权限,发布权限,只需要采用caffine等key/value形式的缓存即可。

    为了进一步提高性能,权限的校验结果可以缓存到需要进行权限验证的服务中,而且也同样可以根据服务的业务逻辑,预先进行缓存加载。

    通过以上所描述的:本地缓存,全量数据缓存,前缀匹配树缓存,本地二级缓存,缓存预加载,可以将单节点的权限并发量达到2-3万/s。再通过多节点间的负载均衡,3节点的权限系统完全能够满足当前的业务需求。

2.2 实时行情

    市场行情的特点是数据量大,并发性高,不同场景对实时行情的性能要求截然不同。所以在处理市场行情时,需要分门别类,做好架构设计。实时市场行情由于对延时性的而严格要求,在架构设计上需要特别注意。

    设计的业务包括:报价引擎,手动交易,量化交易,风控计算,下单策略(下单到哪个交易所,是否拆单...)

2.2.1 行情接入服务

    交易所按照通道将行情进行拆分,一个对接服务通常QPS最高在1万/s,延时能够保证小于10ms。那我们怎么保证行情服务的高并发呢?【高可用:热备(只能一个账号登录),连通性检查】   

    (1)只做必要的事

    只进行反序列化和必要字段校验(非当前交易产品校验省略)。

    (2)分流

    当前不进行交易的情接收到之后直接路发送到kafka,由spark任务进行参考数据填充,或者与其他行情聚合后,存入hdfs。

    当前会进行交易的行情发布到高并发组件Disruptor中[但注意,需要顺序处理的行情需要交给同一线程处理(这里的处理方式我们单独写文章阐述)],然后交给多个消费者并行处理,包含参考数据的填充,行情的聚合,通过高性能的分布式ID系统填充ID...

2.2.2 行情分发

    经过上面的分流后,需要真正进行分发的市场行情数据在数据量上有巨大的减小,通过统计,可以降低1/3左右的数据量。但是行情的总体并发量还是非常大,高峰时仍能达到3万/s。

    行情的分发是通过消息中间件来实现的,采用实现了AMQP的消息中间件,通过高可扩展的集群模式,能够将处理能力达到10万/s,满足当前的业务需求。

    消息中间件需要非常好的处理慢消费者问题,以免影响其他的正常消费者。例如踢出慢消费者,将慢消费者对应队列的消息进行覆盖、丢弃,甚至直接删除对应的队列,进行队列重建。

 

2.2.3 行情订阅

    根据业务逻辑尽量缩小订阅的行情范围,需要考虑流量的突发,做好限流和降级的兜底方案。如果订阅范围已经最小化了,业务逻辑也很单一了,由于行情有需要顺序处理,这种情况下,节点基本不能通过横向扩展来进行负载均衡,这种情况下:

    (1)提高硬件配置:提高内存,增加CPU核数...

    (2)冷备:高可用还需需要做的,但是如果多个节点同时去订阅,会增加消息中间件的负载,一般采用冷备;

    (3)行情的主动丢弃:消费能力实在跟不上的时候,需求主动丢弃一些行情,丢弃的逻辑可以根据业务需求进行定制化,例如同一产品的行情,使用最新的行情覆盖之前未被消费的行情。

2.2.4 行情stale

    还有一种导致行情并发性极高的场景,那就是每天闭市后,需要将行情支撑stale,如果不加以限流,会导致QPS达到10万/s以上。但是这种场景比较好处理,因为已经闭市,不再影响交易,直接对其进行限流,保证QPS在1万/s以下,慢慢消费处理。

2.3 历史行情

    历史行情的数据量大,并发性高,但是由于对延时性的要求不高,可以采用的架构比较多。

2.3.1 存档,报表

    本着数据就是石油的观点,我们需要尽可能的将接入的行情进行保存,毕竟买市场行情也是花了很多钱的。

    采用吞吐量高的消息中间件kafka进行行情转发,并且尽可能的不丢失行情(在实时行情中,可以适当丢弃)。为了提高吞吐量,可以放宽延时性能。

2.3.2 算法分析和策略回归

    为了验证量化算法和策略,需要使用历史行情。这些场景不会,也不该对交易产生影响。对延时要求不是特别高,但是由于涉及到的数据量大,而且延时也不能太高,否则策略可能要花很长的时间才能跑完。因此,我们将这部分需要进行验证的行情进行缓存,采用的是分布式缓存ignite。

2.3.3 curve计算

    这个的业务场景设计到绝大部分行情,缓存放不下,而且对延时性要求介于缓存和hdfs之间,我们采用列式存储db cassandra进行存储,也可以作为hdfs的一种数据备份。

    通过上面的分析,我们直到行情根据数据量,延时要求,是否进行交易,进行了不同的设计来满足架构要求。cassandra和ignite的集群模式能够达到并发性的要求。

2.4 交易

    交易的特点是每天的量不算大,在百万级别,但是由于量化交易和做市交易的存在,导致QPS在高峰时能够达到1万/s,而且需要保证数据不丢失。 【高可用,DB和file同时存储】

2.4.1 价格填充

    报价引擎。

2.4.2 权限校验

    2.1已经阐述过。

2.4.3 风控检查

    为了提高性能,风控检查是内部计算的,准确度不高,但效率高。

2.4.4 订单下发

    到此之后,订单对延时性的要求已经没有了,只需要关系每次交易所下发的成交信息来更新订单状态即可。

    就近机房下方到交易所。

2.4.5 订单状态维护

    接收到下发的交易信息后,更新订单状态。

2.5 监控

    监控的特点是数据量大,写并发性高,读并发性低,而且数据的丢失容忍度大,延时可以接收分钟级别。因此采用spark进行统计,采样,计算,输出。

2.6 报价

    报价的数据量大,并发性高,而且消息体特别大,对延时性要求也比较高。我们采用snapshot与delta并行的架构来达到要求。

    通常交易员会维护多个产品的报价,维护的产品越多,会导致封装的对象越大,而且字段也很多,如果其中任何一个产品的一个字段变动都触发一次整体消息传输,对导致带宽,延时,吞吐量都受到极大的影响,因此,我们维护一个时间点的snashot,然后每个字段变更,只发送这个字段的变更delta数据,可以极大的提高吞吐量,还能降低延时。当delta的变动超过一定比例时,更新一次snapshot。

2.7 风控

    风控的主要特点是结算特定截面的数据,计算完毕之后同一推送消息,所以导致间隔式的高并发场景。我们的解决方案是,每隔计算界面使用version区分,计算完一部分指标就推送一部分指标,展示的时候等到需要展示的指标全部有最新version数据后同一使用最新version同一展示给交易员查询。

    这个不会导致内存由于存储了两个version的风控指标数据而剧增,因此风控一天的数据量也就500万左右,每个切面的数据总量占内存也就在几百兆。

这篇关于[高并发] - 2. 金融交易系统高并发架构的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/734142

相关文章

mybatis的整体架构

mybatis的整体架构分为三层: 1.基础支持层 该层包括:数据源模块、事务管理模块、缓存模块、Binding模块、反射模块、类型转换模块、日志模块、资源加载模块、解析器模块 2.核心处理层 该层包括:配置解析、参数映射、SQL解析、SQL执行、结果集映射、插件 3.接口层 该层包括:SqlSession 基础支持层 该层保护mybatis的基础模块,它们为核心处理层提供了良好的支撑。

不懂推荐算法也能设计推荐系统

本文以商业化应用推荐为例,告诉我们不懂推荐算法的产品,也能从产品侧出发, 设计出一款不错的推荐系统。 相信很多新手产品,看到算法二字,多是懵圈的。 什么排序算法、最短路径等都是相对传统的算法(注:传统是指科班出身的产品都会接触过)。但对于推荐算法,多数产品对着网上搜到的资源,都会无从下手。特别当某些推荐算法 和 “AI”扯上关系后,更是加大了理解的难度。 但,不了解推荐算法,就无法做推荐系

百度/小米/滴滴/京东,中台架构比较

小米中台建设实践 01 小米的三大中台建设:业务+数据+技术 业务中台--从业务说起 在中台建设中,需要规范化的服务接口、一致整合化的数据、容器化的技术组件以及弹性的基础设施。并结合业务情况,判定是否真的需要中台。 小米参考了业界优秀的案例包括移动中台、数据中台、业务中台、技术中台等,再结合其业务发展历程及业务现状,整理了中台架构的核心方法论,一是企业如何共享服务,二是如何为业务提供便利。

基于人工智能的图像分类系统

目录 引言项目背景环境准备 硬件要求软件安装与配置系统设计 系统架构关键技术代码示例 数据预处理模型训练模型预测应用场景结论 1. 引言 图像分类是计算机视觉中的一个重要任务,目标是自动识别图像中的对象类别。通过卷积神经网络(CNN)等深度学习技术,我们可以构建高效的图像分类系统,广泛应用于自动驾驶、医疗影像诊断、监控分析等领域。本文将介绍如何构建一个基于人工智能的图像分类系统,包括环境

水位雨量在线监测系统概述及应用介绍

在当今社会,随着科技的飞速发展,各种智能监测系统已成为保障公共安全、促进资源管理和环境保护的重要工具。其中,水位雨量在线监测系统作为自然灾害预警、水资源管理及水利工程运行的关键技术,其重要性不言而喻。 一、水位雨量在线监测系统的基本原理 水位雨量在线监测系统主要由数据采集单元、数据传输网络、数据处理中心及用户终端四大部分构成,形成了一个完整的闭环系统。 数据采集单元:这是系统的“眼睛”,

嵌入式QT开发:构建高效智能的嵌入式系统

摘要: 本文深入探讨了嵌入式 QT 相关的各个方面。从 QT 框架的基础架构和核心概念出发,详细阐述了其在嵌入式环境中的优势与特点。文中分析了嵌入式 QT 的开发环境搭建过程,包括交叉编译工具链的配置等关键步骤。进一步探讨了嵌入式 QT 的界面设计与开发,涵盖了从基本控件的使用到复杂界面布局的构建。同时也深入研究了信号与槽机制在嵌入式系统中的应用,以及嵌入式 QT 与硬件设备的交互,包括输入输出设

JAVA智听未来一站式有声阅读平台听书系统小程序源码

智听未来,一站式有声阅读平台听书系统 🌟 开篇:遇见未来,从“智听”开始 在这个快节奏的时代,你是否渴望在忙碌的间隙,找到一片属于自己的宁静角落?是否梦想着能随时随地,沉浸在知识的海洋,或是故事的奇幻世界里?今天,就让我带你一起探索“智听未来”——这一站式有声阅读平台听书系统,它正悄悄改变着我们的阅读方式,让未来触手可及! 📚 第一站:海量资源,应有尽有 走进“智听

【区块链 + 人才服务】可信教育区块链治理系统 | FISCO BCOS应用案例

伴随着区块链技术的不断完善,其在教育信息化中的应用也在持续发展。利用区块链数据共识、不可篡改的特性, 将与教育相关的数据要素在区块链上进行存证确权,在确保数据可信的前提下,促进教育的公平、透明、开放,为教育教学质量提升赋能,实现教育数据的安全共享、高等教育体系的智慧治理。 可信教育区块链治理系统的顶层治理架构由教育部、高校、企业、学生等多方角色共同参与建设、维护,支撑教育资源共享、教学质量评估、

软考系统规划与管理师考试证书含金量高吗?

2024年软考系统规划与管理师考试报名时间节点: 报名时间:2024年上半年软考将于3月中旬陆续开始报名 考试时间:上半年5月25日到28日,下半年11月9日到12日 分数线:所有科目成绩均须达到45分以上(包括45分)方可通过考试 成绩查询:可在“中国计算机技术职业资格网”上查询软考成绩 出成绩时间:预计在11月左右 证书领取时间:一般在考试成绩公布后3~4个月,各地领取时间有所不同

系统架构师考试学习笔记第三篇——架构设计高级知识(20)通信系统架构设计理论与实践

本章知识考点:         第20课时主要学习通信系统架构设计的理论和工作中的实践。根据新版考试大纲,本课时知识点会涉及案例分析题(25分),而在历年考试中,案例题对该部分内容的考查并不多,虽在综合知识选择题目中经常考查,但分值也不高。本课时内容侧重于对知识点的记忆和理解,按照以往的出题规律,通信系统架构设计基础知识点多来源于教材内的基础网络设备、网络架构和教材外最新时事热点技术。本课时知识