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

1. 数据存储层

    我们介绍过,金融交易系统具有海量数据的特点,但是也并发每种类型的数据都是海量的,而且不同数据对于数据的延时要求不同,即使对于同一种类型的数据,由于使用场景的不同,也会对数据的延时性要求有很大的差异。

    基于上述的特点,造成了金融数据的存储方式也存在很对的差别(待完善)。

数据名称使用场景延时要求数据量存储方式
3年内行情亚秒70亿条/15TIgnite
3年内行情曲线拟合秒级50亿条/8TCassandra
3年内行情策略验证/回测分钟级50亿条/8TCassandra
3年外行情存档--千亿条Hive
报价做市报价亚秒亿条/3TIgnite
监控数据监控大屏分钟级Hive
风控数据风控数据展示秒级Hive/Mysql
利率曲线亚秒Ignite
收益率曲线亚秒Ignite
市场参考数据亚秒Ignite
市场交易数据< 3msIgnite
权限数据< 1ms本地缓存:caffine

    从上表可以看到,由于数据访问时的延时要求不同,数据量的不同,消息体大小的不同,我们需要分类采用不同的存储方案。

2. 哪些场景需要缓存

    对于需要亚秒级响应的数据需要进行缓存。

    另外,交易系统之外的应用如果需要访问,则需要提供网关服务。外部应用主要的请求行情数据和交易数据,例如请求交易数据来完成清算工作。

    外部服务请求的数据比较集中,如果让外部请求直接穿透,会造成交易系统的负载过高,因此,会将请求的结果进行缓存,避免请求频繁到达交易系统的应用。

3. 缓存中间件选型

    redis是业界比较常用的缓存中间件,单节点吞吐量能达到3-4万/s,延时在100-200us左右。而且,搭建集群环境后,可以通过横向扩展来提高吞吐量,并提高数据的存储能力,具有高扩展性。但是,基于key-value模式的redis,有很多场景无法满足。

 3.1 BigKey问题

    由于 redis 只使用单核,所以平均每一个核上 redis 在存储小数据时具有优势。而在 100k 以上的数据中,redis的性能会严重受损。但是,金融交易系统中,大消息体的消息普遍存在,例如,excel报价数据,一个消息体的大小就在3-5M。

3.2 消息过滤问题

    redis是基于key-value模式的缓存,只能通过key来进行消息的查询,无法建立索引来进行更精细的过滤查询。

    以行情为例,根据交易所,产品分类,产品子类,行情来源等字段进行联合筛选的情况普遍存在。有人会说,那么将这些字段按一定的规则生成一个key来进行消息的缓存不久解决了吗?这一方面会导致key的字段过长,而且会导致查询过滤的组合严重受限,不利于扩展。

3.3 多级缓存问题

    redis没有本地缓存的概念,如果需要配合本地缓存来实现多级缓存,那么必须选择另一种本地缓存的缓存框架,导致架构体系变得复杂。

3.4 数据丢失问题

    redis是无法保证数据完全不丢失的。在交易系统中,有些场景严格限制延时性,比如涉及交易的行情数据要求延时在3ms以下,而行情数据的处理过程中涉及填充市场参考数据,如果参考数据在缓存中没有,就需要穿透到数据库进行查询,延时性就很可能达不到了。为了保证行情数据的延时性能达标,必须保证市场参考数据在缓存中不过期,不丢失。

3.5 字段读写问题

    redis对于value是作为一个整体进行操作的,value不能在细化处理了。在交易系统中,很多缓存对象非常大,字段数有时候达到成千多万,如果每次都全量读取,或者全量替换,会造成网络和CPU(序列化/反序列化)的瓶颈。

    基于上述原因,我们并没有采用redis来作为缓存框架,而是采用了ignite来作为缓存中间件。

对比项RedisIgnite
吞吐量3-4w3-4w
延时100-200us100-200us
支持建立索引,按索引进行过滤查询NY
多线程处理NY
支持near cacheNY
数据丢失YN
按字段读写NY
GC(存在一定的性能风险)NY

4. 缓存面临的问题及解决方案

数据一致性

HotKey

BigKey

缓存穿透

缓存击穿

缓存雪崩

多级缓存

1.4 HotKey和BigKey问题严重

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

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

5.1 预加载

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

5.2 冷热分离

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

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

冗余

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

C++ //练习 7.3 修改7.1.1节(第229页)的交易处理程序,令其使用这些成员。

C Primer&#xff08;第5版&#xff09; 练习 7.3 练习 7.3 修改7.1.1节&#xff08;第229页&#xff09;的交易处理程序&#xff0c;令其使用这些成员。 环境&#xff1a;Linux Ubuntu&#xff08;云服务器&#xff09; 工具&#xff1a;vim 代码块 /********************…

CCF编程能力等级认证GESP—C++2级—20231209

CCF编程能力等级认证GESP—C2级—20231209 单选题&#xff08;每题 2 分&#xff0c;共 30 分&#xff09;判断题&#xff08;每题 2 分&#xff0c;共 20 分&#xff09;编程题 (每题 25 分&#xff0c;共 50 分)小杨做题小杨的 H 字矩阵 参考答案单选题判断题编程题1编程题2 …

【Apache Superset】从概述、安装到运用,一篇掌握!

文章目录 什么是 Superset&#xff1f;Superset 的优势安装安装 Anaconda 包管理工具创建 Superset 的 Python 环境 下载 Superset 依赖更新工具安装 Superset配置 MySQL 元数据库初始化 Superset 数据库报错一报错二报错三数据库初始化完成 初始化 Superset报错一警告信息 启动…

【解决(几乎)任何机器学习问题】:超参数优化篇(超详细)

这篇文章相当长&#xff0c;您可以添加至收藏夹&#xff0c;以便在后续有空时候悠闲地阅读。 有了优秀的模型&#xff0c;就有了优化超参数以获得最佳得分模型的难题。那么&#xff0c;什么是超参数优化呢&#xff1f;假设您的机器学习项⽬有⼀个简单的流程。有⼀个数据集&…

【算法设计与分析】反转链表 ||

&#x1f4dd;个人主页&#xff1a;五敷有你 &#x1f525;系列专栏&#xff1a;算法分析与设计 ⛺️稳中求进&#xff0c;晒太阳 题目 给你单链表的头指针 head 和两个整数 left 和 right &#xff0c;其中 left < right 。请你反转从位置 left 到位置 right 的链表…

【MySQL】外键约束的删除和更新总结

&#x1f308;个人主页: Aileen_0v0 &#x1f525;热门专栏: 华为鸿蒙系统学习|计算机网络|数据结构与算法 ​&#x1f4ab;个人格言:“没有罗马,那就自己创造罗马~” #mermaid-svg-7niJLSFaPo0wso60 {font-family:"trebuchet ms",verdana,arial,sans-serif;font-siz…

【Linux 02】权限基本概念

文章目录 &#x1f308; Ⅰ 权限概念&#x1f308; Ⅱ 权限管理1. 文件访问者分类 (角色)2. 文件类型和访问权限 (事物属性)3. 文件权限值表示方法 &#x1f308; Ⅲ 权限修改1. chmod 设置文件访问权限2. chown 修改文件拥有者3. chgrp 修改文件或目录的所属组 &#x1f308; …

Hive——企业调优经验

前言 本篇文章主要整理hive-3.1.2版本的企业调优经验&#xff0c;有误请指出~ 一、性能评估和优化 1.1 Explain查询计划 使用explain命令可以分析查询计划&#xff0c;查看计划中的资源消耗情况&#xff0c;定位潜在的性能问题&#xff0c;并进行相应的优化。 explain执行计划…

LabVIEW荧光显微镜下微管运动仿真系统开发

LabVIEW荧光显微镜下微管运动仿真系统开发 在生物医学研究中&#xff0c;对微管运动的观察和分析至关重要。介绍了一个基于LabVIEW的仿真系统&#xff0c;模拟荧光显微镜下微管的运动过程。该系统提供了一个高效、可靠的工具&#xff0c;用于研究微管与运动蛋白&#xff08;如…

汉诺塔问题——递归算法与非递归算法

一、问题描述 汉诺塔问题是一个经典的问题。汉诺塔&#xff08;Hanoi Tower&#xff09;&#xff0c;又称河内塔&#xff0c;源于印度一个古老传说。大梵天创造世界的时候做了三根金刚石柱子&#xff0c;在一根柱子上从下往上按照大小顺序摞着64片黄金圆盘。大梵天命令…

Spring 用法学习总结(一)之基于 XML 注入属性

百度网盘&#xff1a; &#x1f449; Spring学习书籍链接 Spring学习 1 Spring框架概述2 Spring容器3 基于XML方式创建对象4 基于XML方式注入属性4.1 通过set方法注入属性4.2 通过构造器注入属性4.3 使用p命名空间注入属性4.4 注入bean与自动装配4.5 注入集合4.6 注入外部属性…

auto.js教程(autojs教程、autox.js、autoxjs)笔记(二)环境搭建——2、安卓手机投屏软件scrcpy的安装和使用(scrcpy教程)

参考文章&#xff1a;【自动化技术】Autojs从入门到精通 参考文章&#xff1a;AutoXJS开发入门简介菜鸟教程 参考文章&#xff1a;关于Auto.js的下架说明 参考文章&#xff1a;Auto.js 4.1.0 文档 文章目录 005--【环境搭建】2、安卓手机投屏软件scrcpy的安装和使用scrcpy官…

【1024】我的创作纪念日

机缘 1024天了&#xff0c;开始在这里学习编程知识、IT技能&#xff0c;CSDN让我发现了一群热爱学习和分享的小伙伴&#xff0c;也逐渐在这里稳定下来。 收获 不知不觉已经两年多过去了&#xff0c;通过不断的分享&#xff0c;不仅自己的知识技能得到了提升&#xff0c;能帮…

腾讯云4核8G服务器多少钱?

腾讯云4核8G服务器多少钱&#xff1f;轻量应用服务器4核8G12M带宽一年446元、646元15个月&#xff0c;云服务器CVM标准型S5实例4核8G配置价格15个月1437.3元&#xff0c;5年6490.44元&#xff0c;标准型SA2服务器1444.8元一年&#xff0c;在txy.wiki可以查询详细配置和精准报价…

SpringCloud-Hystrix:服务熔断与服务降级

8. Hystrix&#xff1a;服务熔断 分布式系统面临的问题 复杂分布式体系结构中的应用程序有数十个依赖关系&#xff0c;每个依赖关系在某些时候将不可避免失败&#xff01; 8.1 服务雪崩 多个微服务之间调用的时候&#xff0c;假设微服务A调用微服务B和微服务C&#xff0c;微服…

B2科目二考试项目笔记

B2科目二考试项目笔记 1 桩考1.1 右起点倒库1.2 移库&#xff08;左→右&#xff09;1.3 驶向左起点1.4 左起点倒库1.5 驶向右起点 2 侧方停车考试阶段&#xff08;从路边开始&#xff09;&#xff1a; 3 直角转弯4 坡道定点停车和起步5 单边桥6 通过限速限宽门7 曲线行驶8 连续…

[数学建模] 计算差分方程的收敛点

[数学建模] 计算差分方程的收敛点 差分方程&#xff1a;差分方程描述的是在离散时间下系统状态之间的关系。与微分方程不同&#xff0c;差分方程处理的是在不同时间点上系统状态的变化。通常用来模拟动态系统&#xff0c;如在离散时间点上更新状态并预测未来状态。 收敛点&…

Selenium图表自动化开篇

目录 前言&#xff1a; 使用 Canvas 或者 SVG 渲染 选择哪种渲染器 代码触发 ECharts 中组件的行为 前言&#xff1a; 图表自动化一直以来是自动化测试中的痛点&#xff0c;也是难点&#xff0c;痛点在于目前越来越多公司开始构建自己的BI报表平台但是没有合适的自动化测试…

计算机设计大赛 深度学习OCR中文识别 - opencv python

文章目录 0 前言1 课题背景2 实现效果3 文本区域检测网络-CTPN4 文本识别网络-CRNN5 最后 0 前言 &#x1f525; 优质竞赛项目系列&#xff0c;今天要分享的是 &#x1f6a9; **基于深度学习OCR中文识别系统 ** 该项目较为新颖&#xff0c;适合作为竞赛课题方向&#xff0c;…

使用bpmn-js 配置颜色

本篇文章介绍如何使用bpmn-js给图例配置颜色。该示例展示了如何向BPMN图添加颜色的多种不同方法。 通过层叠设置颜色 这种方式比较简单&#xff0c;直接通过设置图片的CSS层叠样式就可实现。 .highlight-overlay {background-color: green; /* color elements as green */opa…