[缓存] - 3.金融交易系统缓存架构设计

1. 交易数据特点

1.1 数据量极大

交易系统的数据量特大,主要来自以下几种类型的数据。

1.1.1 行情

行情是交易系统最为重要的数据,交易就是在不断变化的行情中寻找时机来实现盈利的。海量的行情主要分成两种,一种是tick数据(也叫逐笔行情),例如彭博行情数据,它会将每一笔交易的行情都发布出来,这种数据量巨大,一天就有4亿多条数据;另一种是每隔500ms发布一次行情,这种相对来说数据量少很多,一天大概1亿条左右。再加上各家公司会根据需求对行情进行进一步的加工,如聚合多种行情形成的聚合行情。数据量一天就会达到数十亿条。

对于行情而言,QPS基本保持在3万/s以上,高峰时段(国内交易时间9:00 - 11:30左右,国外交易时间21:.00 - 23:00)的QPS能达到10万/s。

1.1.2 报价

作为做市商,需要根据行情,通过一定的算法(如跟随当前行情报价、根据设定的差值及当前行情报价,根据行情计算曲线,然后报价)对外报价。由于行情实时变动,导致报价的数据量和QPS也特别高。

1.1.3 权限

由于交易系统要求高安全性,因此,权限的控制粒度必须特别细,加上场景的多样性,导致权限数据量也很大。

1.1.4 监控

监控数据主要包括中间件的监控数据,服务实例的内存和CPU监控数据等,数据量和QPS非常高。

1.2 延时要求极低

行情,报价,交易,权限相关的延时必须极低;监控,

1.3 数据质量根据场景差异明显

例如行情,实时行情延时要求在3ms以内;对于历史行情,如果三年内的行情,延时可以在亚秒级别;对于五年内的行情,延时可以在分钟级别;五年以外的行情,可以存档。

对于订单数据,要求绝对不能丢失,延时在5ms以内。

权限数据,要求不能丢失,且延时在3ms以内。

1.4 HotKey和BigKey问题严重

对于热点交易品种,容易造成HotKey问题;权限也跟着容易照成HotKey问题。聚合行情,报价数据容易造成BigKey问题。

2. 数据存储层

根据数据的特点,以及应用对数据质量的不同要求,对数据的存储方式进行分类和冗余。

hadoop hdfs,mysql,cassandra,ignite

3. 缓存中间件选型

由于我们的场景涉及频繁的查询和过滤,redis这种key/value的模式并不适合;再加上二级缓存的要求,如果使用redis,会使得设计变得非常复杂。因此我们选用了ignite,它的高并发和高性能特点并不亚于redis。

4. 多级缓存

本地缓存可以选用ignite,也可以根据过滤条件的需要,选择caffine或者自研框架。

5. 高性能,高并发解决方案

5.1 预加载

对于热点数据,如权限,市场参考数据,利率曲线等进行预加载,防止造成缓存击穿。

5.2 冷热分离

实时行情,历史行情,历史行情再根据年限分别存储。

5.3 按需存储到不同数据存储组件

冗余

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/682941.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

C#系列-C#EF框架实现事务处理(31)

在C#中使用Entity Framework (EF)框架实现事务处理主要涉及使用DbContext的Database.BeginTransaction方法来创建一个数据库事务,并确保在事务中的所有操作都成功执行后提交事务,或者在发生异常时回滚事务。 下面是一个使用EF Core进行事务处理的简单示…

年后面试,最好不要有这几种心态

大家好,我是老三,大家新年好,我在朋友圈看到有朋友已经在大张旗鼓地“内卷”,为年后的面试做准备。 成功的面试常常是源于实力运气,失败的面试可能会有各种各样的原因,知识点的盲区、和面试官不对眼、经验…

【机器学习案例4】为机器学习算法编码分类数据【含源码】

目录 编码分类数据 序数编码 标签编码 一次性编码 目标编码 目标编码的优点 目标编码的缺点 在现实生活中,收集的原始数据很少采用我们可以直接用于机器学习模型的格式,即数值型数据。因此,需要进行一些预处理,以便以正确的格式呈现数据、选择信息丰富的数据或降低其…

【C++函数探幽】内联函数inline

📙 作者简介 :RO-BERRY 📗 学习方向:致力于C、C、数据结构、TCP/IP、数据库等等一系列知识 📒 日后方向 : 偏向于CPP开发以及大数据方向,欢迎各位关注,谢谢各位的支持 目录 1. 前言2.概念3.特性…

GPT-4带来的思想火花

GPT-4能够以其强大的生成能力和广泛的知识储备激发出众多思想火花。它能够在不同的情境下生成新颖的观点、独特的见解和富有创意的解决方案,这不仅有助于用户突破思维定势,还能促进知识与信息在不同领域的交叉融合。 对于研究者而言,GPT-4可能…

B2088 计算书费

题目描述 下面是一个图书的单价表: 计算概论 28.9 元/本数据结构与算法 32.7 元/本数字逻辑 45.6元/本C程序设计教程 78 元/本人工智能 35 元/本计算机体系结构 86.2 元/本编译原理 27.8元/本操作系统 43 元/本计算机网络 56 元/本JAVA程序设计 65 元/本 依次给定…

浅谈业务场景中缓存的使用

业务场景中缓存的使用 一、背景二、缓存分类1.本地缓存2.分布式缓存 三、缓存读写模式1.读请求2.写请求 四、缓存穿透1.缓存空对象2.请求校验3.请求来源限制4.布隆过滤器 五、缓存击穿1.改变过期时间2.串行访问数据库 六、缓存雪崩1.避免集中过期2.提前更新缓存 七、缓存与数据…

Day52- 单调栈part03

一、柱状图中最大的矩形 题目一:84. 柱状图中最大的矩形 84. 柱状图中最大的矩形 给定 n 个非负整数,用来表示柱状图中各个柱子的高度。每个柱子彼此相邻,且宽度为 1 。 求在该柱状图中,能够勾勒出来的矩形的最大面积 栈中保…

【MATLAB】鲸鱼算法优化混合核极限学习机(WOA-HKELM)回归预测算法

有意向获取代码,请转文末观看代码获取方式~也可转原文链接获取~ 1 基本定义 鲸鱼算法优化混合核极限学习机(WOA-HKELM)回归预测算法是一种结合鲸鱼优化算法和混合核极限学习机的混合算法。其原理主要包含以下几个步骤: 初始化&am…

UniApp学习之旅:从入门到快速上手

随着移动互联网的迅猛发展,跨平台应用开发成为了开发者们的热门选择。UniApp,作为一款使用Vue.js开发所有前端应用的框架,因其简单、高效、易上手的特性,受到了广大开发者的青睐。本文将带你走进UniApp的世界,从基础学…

【leetcode】深搜、暴搜、回溯、剪枝(C++)2

深搜、暴搜、回溯、剪枝(C)2 一、括号生成1、题目描述2、代码3、解析 二、组合1、题目描述2、代码3、解析 三、目标和1、题目描述2、代码3、解析 四、组合总和1、题目描述2、代码3、解析 五、字母大小写全排列1、题目描述2、代码3、解析 六、优美的排列1…

Spring Cloud Gateway:使用RestController动态更新路由

相关类介绍 动态路由(自己控制,非注册中心控制)涉及两个很重要的Bean: RouteDefinitionWriter:用于添加、修改、删除路由规则。RouteDefinitionLocator:用于查询路由规则。 以及一个相关事件&#xff1a…

鸿蒙视频播放器,主要包括视频获取和视频播放功能:

鸿蒙视频播放器,主要包括视频获取和视频播放功能: 1 获取本地视频或者网络视频。 2 通过media.createAVPlayer创建播放器AVPlayer,然后进行视频播放。 3 通过VideoController进行AVPlayerState的状态管理,如开始,停止&…

C++古老算法介绍

本篇文章我们来介绍一下常用算法 1.贪心算法 贪心算法(Greedy Algorithm)是一种解决问题的策略,它在每一步都做出当前看来最优的选择,而不考虑全局最优解。(局部最优解得到整体最优解)贪心算法通常适用于满…

2.15 字符串练习

1、选择题 1.1、有以下程序 int main() { char a[7]"a0\0a0\0";int i,j; isizeof(a); jstrlen(a); printf("%d %d\n",i,j); } //strlen求出字符串的长度,其实是字符串中字符的个数,不包括\0 程序运行后的输出结果是 C…

【BIP39和BIP44】

现在的区块链地址通常是基于BIP39和BIP44提案的,这两个提案定义了助记词和确定性钱包的标准。 BIP39(确定性钱包种子助记词): BIP39提案描述了一种生成和恢复助记词的方法,这些助记词可以用于生成加密货币的私钥和地址。 助记词…

K210开发环境搭建(VS Code)

一、新建一个文件夹,就叫K210 二、再K210文件夹里面再新建一个文件夹,就叫CMake 三、找到官方提供的资料包里的cmake安装包, 或者直接去cmake官方下载网址进行下载 CMake官方下载网址:https://cmake.org/download/ 四、双击安装…

12.object.assign和扩展运算法是深拷贝还是浅拷贝,两者区别

扩展运算符: let outObj {inObj: {a: 1, b: 2} } let newObj {...outObj} newObj.inObj.a 2 console.log(outObj) // {inObj: {a: 2, b: 2}}Object.assign(): let outObj {inObj: {a: 1, b: 2} } let newObj Object.assign({}, outObj) newObj.inObj.a 2 co…

Screw自动生成数据库文档

Screw简介 官方地址 Screw可以根据数据库中的表自动生成HTML、Word、Markdown格式的文档。 Springboot 3.1集成 生成Springboot项目 Spring Initializr Maven依赖 <dependency><groupId>cn.smallbun.screw</groupId><artifactId>screw-core</…

Nginx实战:日志按天分割

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 目录 前言 一、方式1&#xff1a;定时任务执行分割脚本 1.分割日志脚本 2.添加定时任务 二、方式2&#xff1a;logrotate配置分割 1.logrotate简单介绍 2.新增切割ngi…