java fix_Java中的低延迟FIX引擎

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

java fix

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

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

相关文章

linux 查看防火墙状态_每天五分钟学习Linux系列之 - 系统安全配置

20年IT从业,二哥的团队使用最多的系统就是Linux,开发,运维的小伙伴们都离不开Linux系统,特别是大数据和人工智能领域更是如此,但由于日常工作忙,小伙伴们没有太多成块的时间系统的学习Linux, 并且现版CentO…

Python3求解旋转矩阵问题

Python3求解旋转矩阵问题原题 https://leetcode-cn.com/problems/spiral-matrix/ 给定一个包含 m x n 个元素的矩阵(m 行, n 列),请按照顺时针螺旋顺序,返回矩阵中的所有元素。 示例 1: 输入: [[ 1, 2, 3 ],[ 4, 5, 6 ],[ 7, 8…

只针对异常的情况才使用异常_如何以及何时使用异常

只针对异常的情况才使用异常本文是我们名为“ 高级Java ”的学院课程的一部分。 本课程旨在帮助您最有效地使用Java。 它讨论了高级主题,包括对象创建,并发,序列化,反射等。 它将指导您完成Java掌握的旅程! 在这里查看…

C++红黑树模拟实现map和set

点击蓝字关注我们一、红黑树及其节点的设计对于底层都是红黑树的map和set来说,他们之间存在的最大的区别就是:对于set是K模型的容器,而map是KV模型的容器。为了更好的灵活兼容实现map和set,就需要在红黑树以及树节点上进行特别的设…

c语言连接mysql_聊聊数据库MySQL、SqlServer、Oracle的区别,哪个更适合你?

一、MySQL优点:体积小、速度快、总体拥有成本低,开源;支持多种操作系统;是开源数据库,提供的接口支持多种语言连接操作 ;MySQL的核心程序采用完全的多线程编程。线程是轻量级的进程,它可以灵活地…

Python3解题:二叉树路径总和问题

Python3解题:二叉树路径总和问题原题 https://leetcode-cn.com/problems/path-sum-ii/ 给定一个二叉树和一个目标和,找到所有从根节点到叶子节点路径总和等于给定目标和的路径。 说明: 叶子节点是指没有子节点的节点。 示例: 给定如下二叉树&#xff…

绩效工作流_流绩效–您的想法

绩效工作流上周,我介绍了一些有关Java 8流性能的基准测试结果。 你们和gal足够有兴趣留下一些想法,还有哪些可以介绍。 这就是我所做的,这里是结果。 总览 最后一篇文章的序言也适用于此。 阅读它,以找出所有数字为何撒谎&#…

C语言访问MCU寄存器的两种方式

点击蓝字关注我们单片机的特殊功能寄存器SFR,是SRAM地址已经确定的SRAM单元,在C语言环境下对其访问归纳起来有两种方法。1、采用标准C的强制类型转换和指针来实现采用标准C的强制转换和指针的概念来实现访问MCU的寄存器,例如:#define DDRB (*…

python中return true的用法_Return True/False何时使用它而不是Return

类比:函数是一个准备好执行任务并给出答案的可克隆助手。任务由函数的参数定义(括号内的内容)。让我们重写这些名称以赋予它们语义意义(即说明我们期望的名称)。在def isXGreaterThanY(..... 在这里,任务的…

08_优先队列

08_优先队列 一、优先队列最大优先队列最大优先队列API设计 最小优先队列最小优先队列API设计最小优先队列代码实现 索引优先队列索引优先队列实现思路索引优先队列API设计索引优先队列代码实现 一、优先队列 :::info 普通的队列是一种先进先出的数据结构,元素在队…

Python3实现红黑树[下篇]

Python3实现红黑树[下篇]我写的红黑树的上篇在这里:https://blog.csdn.net/qq_18138105/article/details/105190887 这是我近期看的文章 https://www.cnblogs.com/gcheeze/p/11186806.html 我看了很多关于红黑树删除的文章和博客,介绍得是相当相当的复…

C语言内存泄露很严重,如何应对?

点击蓝字关注我们1. 前言最近部门不同产品接连出现内存泄漏导致的网上问题,具体表现为单板在现网运行数月以后,因为内存耗尽而导致单板复位现象。**一方面,内存泄漏问题属于低级错误,此类问题遗漏到现网,影响很坏&…

通用编程_通用编程准则

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

python发送邮件outlook_通过Python发送Outlook电子邮件?

I am using Outlook 2003. What is the best way to send email (through Outlook 2003) using Python? 解决方案 For a solution that uses outlook see TheoretiCALs answer below. Otherwise, use the smtplib that comes with python. Note that this will require your e…

Python3实现快速排序 通俗易懂

Python3实现快速排序快速排序 是一种交换排序,属于分治算法。 思路: 对于要排序的元素集合,指定集合的第一个元素为基准点,通过一系列的扫描和交换(见下面的代码),让基准点左边的元素比基准点小,让基准点右…

C++队列queue用法详解(超详细)

点击蓝字关注我们一、定义queue是一种容器转换器模板&#xff0c;调用#include< queue>即可使用队列类。二、queue初始化queue<Type, Container> (<数据类型&#xff0c;容器类型>&#xff09;初始化时必须要有数据类型&#xff0c;容器可省略&#xff0c;省…

redis nosql_Redis教程:NoSQL键值存储

redis nosql课程大纲 Redis是使用ANSI C编写的&#xff0c;具有可选持久性的开源&#xff0c;网络化&#xff0c;内存中键值数据存储。根据DB-Engines.com的月度排名&#xff0c;Redis是最受欢迎的键值存储。 其名称意为“远程词典服务器”。 Redis是BSD许可的&#xff0c;并且…

python随机抽取人名_python实现艾宾浩斯背单词功能,实现自动提取单词、邮件发送,再也不用担心背单词啦...

&#xfeff;已经完成了利用python爬虫实现定时QQ邮箱推送英文文章&#xff0c;辅助学习英语的项目&#xff0c;索性就一口气利用python多做一些自动化辅助英语学习的项目&#xff0c;对自己的编程能力和英文水评也有一定的帮助&#xff0c;于是在两天的努力下&#xff0c;我完…

用不到125行C语言代码就可以编写一个简单的16位虚拟机?

点击蓝字关注我们一位国外的软件工程师分享了这么一篇博文&#xff1a;Writing a simple 16 bit VM in less than 125 lines of C&#xff08;用不到 125 行 C 语言编写一个简单的 16 位虚拟机&#xff09;。博文地址&#xff1a;https://www.andreinc.net/2021/12/01/writing-…

用一个程序生成另一个程序_还有另一个报告生成器?

用一个程序生成另一个程序如果您具有业务应用程序开发的经验&#xff0c;那么很可能会遇到要求该应用程序具有灵活的报告机制的需求。 我工作的公司主要专注于开发业务解决方案&#xff0c;而报告是必不可少的&#xff0c;实际上&#xff0c;它必须包含我们开发的所有企业系统的…