falcon:高性能、低延迟的FIX引擎

falcon:高性能、低延迟的FIX引擎

在现代金融交易系统中,FIX(Financial Information eXchange)协议是一种广泛使用的消息传递协议,用于买卖双方的交易和订单管理系统。在这样的背景下,高性能和低延迟的FIX引擎显得尤为重要。今天,我们将介绍一个开源项目——falcon,它正是这样一款专为JVM设计的引擎。

项目介绍

falcon是一个为JVM环境设计的高性能、低延迟FIX引擎。它为买卖双方的应用程序,如交易系统和订单管理系统,提供了一个API,以实现FIX协议的连接。这个引擎的核心优势在于其设计理念,即尽可能减少堆分配,以避免对低延迟应用造成灾难性影响的垃圾收集暂停。

项目技术分析

falcon引擎在技术设计上下了不少功夫,以下是一些关键的技术特点:

  • 零拷贝、非阻塞、低延迟NIO网络通信:falcon采用了NIO(非阻塞I/O)网络通信,减少了数据拷贝次数,从而降低了延迟。
  • 低堆分配率:在FIX引擎核心中,falcon尽量减少堆分配,这有助于减少垃圾收集的频率和暂停时间。
  • 小的内存占用:对于会话和消息数据结构,falcon采用了紧凑的设计,减少了内存占用。

这些技术特点使得falcon在低延迟应用中表现优异。例如,在一个回环测试中,falcon实现了8微秒的RTT(往返时间)。

项目及技术应用场景

falcon的应用场景主要集中在金融交易领域,特别是那些对延迟敏感的应用。以下是一些典型的应用场景:

  • 交易系统:在高速交易系统中,低延迟对于捕捉市场机会至关重要。
  • 订单管理系统:订单管理系统需要快速处理大量订单,falcon的高性能特性正好满足这一需求。
  • 市场数据分发:在市场数据分发系统中,快速传递数据可以帮助用户及时做出交易决策。

项目特点

以下是一些falcon项目的显著特点:

  • 极致性能:falcon在性能方面做到了极致,它的8微秒RTT测试结果在行业内是非常出色的。
  • 简洁的API设计:falcon提供了简洁易用的API,使得开发人员可以快速集成并使用。
  • 高度可定制性:falcon允许用户根据具体需求定制和优化其性能,以满足不同场景的需求。

以下是一个使用falcon发送100000条NewOrderSingle消息的示例:

import static java.net.StandardSocketOptions.*;
import java.nio.channels.*;
import java.net.*;
import java.nio.*;

import static falcon.fix.MessageTypes.*;
import static falcon.fix.Versions.*;
import static falcon.fix.Tags.*;
import falcon.fix.*;

public class Example {
  public static void main(String[] args) throws Exception {
    SocketChannel socket = connect("localhost", 7070);

    Session session = new Session(socket, FIX_4_2, "HERMES", "INET");

    session.updateTime();

    session.send(new Message.Builder(Logon)
        .add(new Field(EncryptMethod, "0" ))
        .add(new Field(HeartBtInt,    "30"))
        .build());

    Message newOrder =
      new Message.Builder(NewOrderSingle)
          .add(new Field(EncryptMethod, "0" ))
          .add(new Field(HeartBtInt,    "30"))
          .build();

    for (int i = 0; i < 100000; i++) {
      if ((i % 10000) == 0) {
        session.updateTime();
      }
      session.send(newOrder);
    }

    session.updateTime();

    session.send(new Message.Builder(Logout).build());

    socket.close();
  }

  private static SocketChannel connect(String host, int port) throws Exception {
    InetSocketAddress addr = new InetSocketAddress(host, port);
    SocketChannel socket = SocketChannel.open();
    socket.configureBlocking(false);
    socket.setOption(TCP_NODELAY, true);
    socket.connect(addr);
    socket.finishConnect();
    return socket;
  }
}

在性能测试中,falcon表现出了惊人的速度。以下是一个测试结果:

$ ./falcon-perf-test/bin/falcon-perf-test 1000000
87693.5 messages/second
min/avg/max = 9.8/11.4/19935.3 µs
Percentiles:
  1.00%: 10.15 µs
  5.00%: 10.51 µs
 10.00%: 10.61 µs
 50.00%: 11.12 µs
 90.00%: 11.90 µs
 95.00%: 13.27 µs
 99.00%: 14.53 µs

总结来说,falcon是一个值得关注的开源项目,特别是在金融交易领域。其高性能、低延迟的特性,以及简洁的API设计,使其成为开发高性能交易系统的理想选择。如果你正在寻找一个高效的FIX引擎,falcon绝对值得一试。

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值