总览

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%的时间。

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

较高的延迟是由操作系统引起的。 大约每毫秒发生一次中断,持续约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

Java中的低延迟FIX引擎相关推荐

  1. java fix_Java中的低延迟FIX引擎

    java fix 总览 Chronicle FIX是我们的Low Latency FIX引擎和Java数据库. 是什么使它与众不同? 是为Java中的超低GC *设计的. 支持字符串和日期时间的方式可 ...

  2. Java中的低GC:使用原语而不是包装器

    总览 有两个很好的理由在可能的地方使用原语而不是包装器. 明晰. 通过使用原语,您可以清楚地知道null值是不合适的. 性能. 使用原语通常更快. 清晰度通常比性能更重要,并且是使用它们的最佳理由. ...

  3. 实时音视频聊天中超低延迟架构的思考与技术实践

    1.前言 从直播在线上抓娃娃,不断变化的是玩法的创新,始终不变的是对超低延迟的苛求.实时架构是超低延迟的基石,如何在信源编码.信道编码和实时传输整个链条来构建实时架构?在实时架构的基础之上,如果通过优 ...

  4. 在Chrome、Firefox等浏览器中实现低延迟播放海康、大华RTSP

    现在到处是摄像头的时代,随着网络带宽的不断提速和智能手机的普及催生出火热的网络直播行业,新冠病毒的大流行又使网络视频会议系统成为商务会议的必然选择,因此RTSP实时视频流播放及处理不再局限于安防行业. ...

  5. 在Chrome、Firefox等高版本浏览器中实现低延迟播放海康、大华RTSP

    一.背景 现在到处是摄像头的时代,随着带宽的不断提速和智能手机的普及催生出火热的网络直播行业,新冠病毒的大流行又使网络视频会议系统成为商务会议的必然选择,因此RTSP实时视频流播放及处理不再局限于安防 ...

  6. 什么是延迟?如何在直播中实现低延迟

    什么是延迟? 简单来说: 延迟或滞后就是延迟. 当你进行流媒体直播时,你正在捕捉视频并通过互联网广播给你的观众. 延迟是指在下列情况下的时间量: 你的相机记录你的视频 和你的观众能够看到你刚刚录制的内 ...

  7. Java Lambdas和低延迟

    总览 有关在Java和低延迟中使用Lambda的主要问题是: 它们会产生垃圾吗,您能做些什么吗? 背景 我正在开发一个支持不同有线协议的库. 这样的想法是,您可以描述要写入/读取的数据,并且有线协议确 ...

  8. Java中的低耦合高内聚法则

    java框架模式_低耦合高内聚法则 定义:一个对象应该对其他对象保持最少的了解. 问题由来:类与类之间的关系越来越密切,耦合度越来越大,当一个类发生改变时,对另外一个类的影响也越大. 解决方案:尽量降 ...

  9. 周志明:深入java虚拟机_虚拟面板:在低延迟环境中使用Java

    周志明:深入java虚拟机 Java越来越多地用于低延迟工作,而以前的C和C ++早已成为Java的实际选择. InfoQ聚集了该领域的四位专家,讨论了驱动趋势的因素以及在这种情况下使用Java的一些 ...

最新文章

  1. pandas中的DataFrame数据结构
  2. 对应chd5.14的spark_GitHub - shixiaopengql/BigData-News: 基于Spark2.2新闻网大数据实时系统项目...
  3. 【oracle】关于创建表时用default指定默认值的坑
  4. linux内核中的hook函数详解,linux内核中的hook函数详解
  5. CTS(2)---CTS、CTS-V、GTS版本更新,及其注意事项
  6. dvd在线租赁问题 matlab,DVD在线租赁问题.doc
  7. 百度百城优品微信商城上线
  8. 【毕业设计】翻译词霸的实现
  9. matlab 离散点求导_如何用matlab求离散型数值的导数
  10. python程序只能在安装了python环境的计算机上_Python程序只能在安装了Python环境的计算机上以源代码形式运行。...
  11. Altium Designer四层板设计教程
  12. PAT (Advanced Level) Practice 1043 Is It a Binary Search Tree (25 分) 凌宸1642
  13. 2005。1。22,闹洞房安排。
  14. 原生Js弹窗插件|web弹出层组件|对话框
  15. pi/4dqpsk的matlab及FPGA仿真
  16. linux--- 连接数据库
  17. cpu设计和实现(流水线暂停)
  18. MAC电脑删除系统自带的软件
  19. 真正的互联网诞生:TCP/IP协议的出现
  20. C语言 - 指针 1.2:指针和数组

热门文章

  1. 《下辈子还教书》经典语录(1)
  2. 比特(bit)和字节(byte)(1byte=8bit)
  3. 文件上传与下载----SpringMVC
  4. mysql自动插入的时间不对 差8小时
  5. java语言中的访问权限控制符有哪些,18.Java的访问控制符
  6. 回归模型和分类模型的区别
  7. 怎么实现阴影效果呢?
  8. java记录类型_Java中的记录类型
  9. spring 配置只读事务_只读副本和Spring Data第3部分:配置两个实体管理器
  10. switch字符串jdk_应用新的JDK 11字符串方法