Java中的低延迟FIX引擎

总览

Chronicle FIX是我们的Low Latency FIX引擎和Java数据库。

是什么使它与众不同?

  • 是为Java中的超低GC *设计的。
  • 支持字符串和日期时间的方式可以最大程度地减少垃圾和开销。
  • 可自定义为仅包含您期望的字段。
  • 使用通常在二进制解析器和生成器中使用的优化,例如一次读取/写入4或8个字节,以提高效率。
  • 建立在低延迟持久性上,以最大程度地减少日志记录的延迟。
  • 针对低延迟网卡(例如Solarflare)进行了优化。

*超低GC意味着平均每条消息可产生少于一个字节的垃圾
如果您将总垃圾率保持在每小时不足1 GB,则24 GB的Eden可能需要一整天才能填满,并且您不会得到任何次要的GC。 每小时产生的速度不到200 MB,您可以在没有GC的情况下运行一周。

但是Java不慢吗?

Java可能比C ++慢,但编写得好Java可以比编写得不好的C ++应用程序快。 即仅仅因为某些东西是用C ++编写的,并不能保证它会更快。

正在测试什么?

“解析器测试”乘以解析本机内存中的214字节新顺序单次FIX消息所花费的时间。 从SocketChannel读取后,将字段的所有值设置为一个对象。 在此测试中,使用Strings设置文本字段,因为这是用Java处理文本数据的更自然的方法。 我们有更快的替代方案,例如支持8位字符串。

“生成器测试”乘以从包含字符串和时间戳的数据中生成214字节的New Order Single FIX消息所需的时间,并将其写入本机内存需要多长时间。 例如准备写入套接字通道。

注意:字符串和时间戳字段是最昂贵的。 有6个字符串和两个时间戳。

在每个测试中,配置为使用SampleTime的JMH运行了10分钟。

FIX延迟高达99.9

该图显示了解析和生成中等大小的FIX消息的等待时间。 在解析和生成中, 延迟都小于一微秒,超过了99.9%的时间。

但是较高的百分位数呢? 这些看起来不太好。 这是因为我正在使用的计算机有一些来自操作系统的噪音,例如我已将其最小化但无法关闭的中断。

FIX延迟

较高的延迟是由操作系统引起的。 大约每毫秒发生一次中断,持续约2微秒,甚至更罕见的5到7-8微秒的延迟。 在更好的服务器上,我仍然希望会有中断,但是中断发生的频率会降低。

下一步是什么?

下一步是将性能测试与Chronicle Journal集成在一起,以查看持久性的影响。 Journal是专门的持久性工具,类似于Chronicle Queue v4,但已针对特定用例进行了调整。 在这种情况下,我们需要日记不仅要保留每条消息约150纳秒的时间,而且要比Queue具有更高的一致性。 虽然Queue对SSD的写入性能非常好,但大约有1000的写入中有1到100的写入中有1签名延迟,这反映了您对磁盘子系统的选择。 即,它直接影响99.9%的延迟。 我们可以使用Journal来缓冲此延迟,以显着减少影响。

什么是FIX数据库?

MongoDB是为JSON消息优化的数据库。 Chronicle FIX是为FIX消息优化的数据库。 它将数据存储在FIX中,并支持对FIX字段的查询,例如; 给我所有有关客户订单ID的消息,或者给我所有在特定时间发送的消息,或者给我在传输时间和接收消息之间最延迟的消息。

Chronicle-FIX是最快的Java代码FIX引擎吗?

我们已经看到了各种FIX引擎引用的许多基准统计数据。 尽管基准数字可以使您大致了解处理的数量级,但是几乎可以肯定它们并不能使您确切了解代码的运行速度。

任何人都容易宣称自己拥有最快的FIX引擎并提供一些基准测试数据,但是很难像样地进行比较。 基准将始终被优化以适合其所运行的软件。 那么,对所有引擎而言,公平的测试到底是什么呢? 即使您找到了一个公平的测试,每个人都同意,您必须操纵多少代码才能获得基准测试? 用户编写代码时自然会这样做吗?

因此,问题是,Chronicle-FIX最快的FIX引擎是否有些无关紧要。 我们当然知道,我们处于正确的球场。 最重要的是,Chronicle-FIX已获得咨询许可的方式,以确保针对您的用例进行了优化,我们将与您合作,确保您的代码可以达到我们在基准测试中发布的结果。

如何使用Chronicle FIX?

Chronicle FIX的源代码位于github上,但仅提供给具有许可证的人员。 这种想法是,如果您需要一个非常快速的FIX引擎(以亚微秒为单位来衡量您的时间),我们可以帮助您以最佳的方式将其集成到您的软件中。 可能是您被现有的数据模型和代码库所束缚,在这种情况下,我们拥有可以大大降低数据转换成本的技术-实际上,我们甚至没有中间数据模型。 在一个绿色的项目中,我们可以向您展示如何最好地围绕Chronicle-FIX构建代码。

请通过sales@chronicle.software与我们联系以获取更多信息。

结论

FIX编年史很快。 尽管QuickFIX的解析和生成时间不足50微秒,但Chronicle FIX在大多数情况下都可以在2微秒内完成这两项。

我们将提供更多有关持久性如何执行以及数据库如何工作的文档。

翻译自: https://www.javacodegeeks.com/2015/09/low-latency-fix-engine-in-java.html

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

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

相关文章

VIJOS1212 Way Selection

题意:有 r 个人并知道他们的坐标和他们的速度,有 a 个目的地也知道坐标,规定时间为 t,求能到达目的地的最多人数(当然一个目的地只能被一个人占领)。 题解:核心算法 -> 匈牙利算法 CODE: /* Author: JDD…

钓鱼文件名反转office远程模板

本文内容涉及程序/技术原理可能带有攻击性,仅用于安全研究和教学使用,务必在模拟环境下进行实验,请勿将其用于其他用途。因此造成的后果自行承担,如有违反国家法律则自行承担全部法律责任,与作者及分享者无关 0x01 件…

hihoCoder 1092 : Have Lunch Together

题目大意:小hi和小ho去咖啡厅喝咖啡,咖啡厅可以看作是n * m的矩阵,每个点要么为空,要么被人、障碍物、椅子所占据,小hi和小ho想要找两个相邻的椅子。起初两个人都在同一个点,求两人到达满足要求的椅子所移动…

html5测试题整理--针对标签的概念性

1.哪个元素被称为媒体元素的子元素&#xff1f; 答案&#xff1a;<track>。 <track> 标签为媒体元素&#xff08;比如 <audio> and <video>&#xff09;规定外部文本轨道。这个元素用于规定字幕文件或其他包含文本的文件&#xff0c;当媒体播放时&am…

Cobalt Strike特征修改

在红蓝对抗以及hvv等等情况下&#xff0c;我们都会用到 Cobalt Strike&#xff0c;那么它也是安全公司重点关注的对象&#xff0c;跟msf类似&#xff0c;但CS操作相对比MSF使用简单&#xff0c;同时也有一个强大的插件库。那么&#xff0c;这么红的工具&#xff0c;特征方面安全…

通用编程准则

本文是我们名为“ 高级Java ”的学院课程的一部分。 本课程旨在帮助您最有效地使用Java。 它讨论了高级主题&#xff0c;包括对象创建&#xff0c;并发&#xff0c;序列化&#xff0c;反射等。 它将指导您完成Java掌握的过程&#xff01; 在这里查看 &#xff01; 目录 1.简…

工厂模式与抽象工厂模式

1、工厂模式&#xff1a;定义了一组创建对象的接口&#xff0c;但是由子类决定要实例化的类是哪一个。工厂方法把类的实例化推迟到子类中。 现在考虑有PizzaStore有一些子类&#xff08;加盟店&#xff09;&#xff0c;他们有可能对pizza的做法进行一些改良&#xff0c;即creat…

数据类型转换为false的有哪些?

看图&#xff0c;看选项你就明白啦

CS通过(CDN+证书)powershell上线详细版

0x00 简介 这个应该叫做域前置技术&#xff1a; 大致图示&#xff1a; 攻击流量通过CDN节点将流量转发到真实的C2服务器CDN节点ip通过识别请求的Host头进行流量转可以有效的躲避一些安全设备&#xff0c;也有这一定的反溯源功能&#xff0c;因为流量都去了CDN上 之前看了一些…

SGU185 Two shortest(最小费用最大流/最大流)

题目求一张图两条边不重复的最短路。 一开始我用费用流做。 源点到1连容量2费用0的边&#xff1b;所有边&#xff0c;连u到v和v到u容量1费用cost的边。 总共最多会增广两次&#xff0c;比较两次求得的费用&#xff0c;然后输出路径。 然而死MLE不过。。 看了题解&#xff0c;是…

那些操作会引起回流(reflow)?

reflow(回流)是指浏览器为了重新渲染部分或者全部的文档,重新计算文档中的元素的位置和几何构造的过程。 因为回流可能导致整个Dom树的重新构造,所以是性能的一大杀手。 以下操作会引起回流&#xff1a; ① 改变窗口大小 ② font-size大小改变 ③ 增加或者移除样式表 …

红蓝对抗之流量加密(Openssl加密传输、MSF流量加密、CS修改profile进行流量加密)

本篇文章转载于:https://blog.csdn.net/q20010619/article/details/122006433?utm_mediumdistribute.pc_relevant.none-task-blog-2defaultbaidujs_utm_term~default-1-122006433-blog-122810834.pc_relevant_default&spm1001.2101.3001.4242.2&utm_relevant_index4 文…

有var d = new Date(‘20xx-m-09‘),可以设置为m+1月份的操作是?

setMonth(n)&#xff0c;这里是0-11分别对应1-12月 d.setDate(n); n表示一个月中的一天的一个数值&#xff08;1 ~ 31&#xff09;: 0 为上一个月的最后一天 -1 为上一个月最后一天之前的一天 如果当月有 31 天: 32 为下个月的第一天 如果当月有 30 天: 32 为下一个月的第二…

如何以及何时使用例外

本文是我们名为“ 高级Java ”的学院课程的一部分。 本课程旨在帮助您最有效地使用Java。 它讨论了高级主题&#xff0c;包括对象创建&#xff0c;并发&#xff0c;序列化&#xff0c;反射等。 它将指导您完成Java掌握的过程&#xff01; 在这里查看 &#xff01; 目录 1.简…

域前置 配置cdn-解决HTTPS-SSL通讯被朔源IP封锁问题

域前置 配置cdn URL -解决HTTPS-SSL通讯被朔源IP封锁问题 https://mp.weixin.qq.com/s/MghFgegdp3l3tFE3hOvcYw

深入理解Java引用类型

深入理解Java引用类型 在Java中类型可分为两大类&#xff1a;值类型与引用类型。值类型就是基本数据类型&#xff08;如int ,double 等&#xff09;&#xff0c;而引用类型,是指除了基本的变量类型之外的所有类型&#xff08;如通过 class 定义的类型&#xff09;。所有的类型在…

值得一谈的鸿蒙2.0,程序员们拿起你们手中的编译器撸一下hello world

一款“面向未来”、面向全场景(移动办公、运动健康、社交通信、媒体娱乐等)的分布式操作系统 。现已开源,名为OpenHarmony。 2019年8月9日,华为在HDC开发者大会上正式发布鸿蒙系统。 2020年9月10日,华为在HDC开发者大会上如约发布鸿蒙 2.0,并面向应用开发者发布Beta版本…

GitHack使用方法

ctf小白刚下载这个&#xff0c;不知道怎么用。现在会用啦就记录一下~ 下载地址&#xff1a;https://github.com/lijiejie/GitHack 下载下来后&#xff0c;通过cmd使用&#xff0c;如下图所示&#xff1a; 总结&#xff08;命令&#xff09;&#xff1a; GitHack.py http://XXXX…

工厂方法模式和抽象工厂模式

有一个抽象的产品类 Product 具体的产品类 Product1 Product2.。。。 工厂方法&#xff1a; 1、创建抽象的工厂类&#xff1a;Creator&#xff1a; public abstract class Creator{ public abstract <T extends Product> T createProduct(Class<T> c); } 2、具体实…

值得一谈的鸿蒙2.0,赶紧撸一下hello world

一款“面向未来”、面向全场景&#xff08;移动办公、运动健康、社交通信、媒体娱乐等&#xff09;的分布式操作系统 。现已开源&#xff0c;名为OpenHarmony。2019年8月9日&#xff0c;华为在HDC开发者大会上正式发布鸿蒙系统。2020年9月10日&#xff0c;华为在HDC开发者大会上…