采用多播传送FIX行情数据的推荐方案

理由
FIX协议由一个会话层协议,一个应用层协议和一套域数据字典组成。后两者不依赖于FIX会话。而且,由于FIX会话作为Point-to-point(点-对-点)通信,并不适合于发布/订阅模式(如为大量接收者提供市场数据)。本应用注释文档定义了FIX消息怎样通过多播传输技术(如,IP多播)进行发布。此注释并不描述具体的多播技术,而是讨论如何修改FIX回沪协议以使用该技术进行通信。
会话层概述
为保证在一个多播环境中正确检测消息间隙,除了在下面提到的,一个特定的主题,应只有一个发布者。在本文中,“主题”指的是接收者如何侦听及侦听的对象,以及发布者如何通过它发送信息(如,主题明,TCP侦听端口,等等)。多播技术及其实现的特征(如发布者使用一个主题接收从多个接收者发来的重传请求)将控制是否由一个特定的发布者发送的消息能按照顺序进行传送。一个特定的主题可以有任意数量的订阅者或接收者。
为了检测在会话中存在的消息间隙,在每个消息中的序列号应基于每一个主题进行赋值。如果不这样做,接收者(没有订阅所有主题)将无法检测到消息实际存在的消息间隙。这样,接收者必须为每个主题维护一个期望的序列号。
与标准的FIX会话层协议不同(FIX4.0或更高版本),所有的管理消息将不占用序列号(同FIX3.0一样)。在多播环境下的数据传输类型是单向的(从发布者到接收者),这样将不会出现在双向FIX3.0会话中可能存在的竞争。这样,FIX4.0及后续版本中对管理信息占用一个序列号的需求可以忽略。在这样的情况下,管理消息应包含下一个发送消息的MsgSeqNum而不是占用活增加MsgSeqNum的值。任何发送的会话层消息应增加下一个发送序列号,使得接收者可以检测消息间隙,并至此执行消息间隙处理。
在所有消息中的TargetCompID应设置成一些预先定义好的值(由发布者赋值),如消息发送所基于的主题名。在所有消息中的SenderCompID应设者为预先定义的,由发布者赋值的,用于识别发布者身份的值。
Logon 登陆消息
同通常的双向FIX会话登陆不同,在发布/订阅或多播环境下的登陆应采用从发布者到订阅者的单向方式。用于通知订阅者,发布者会话已经开始。
Heartbeats 心跳消息
Heartbeat消息作为在应用消息交互期间保持链路活动测试包使用。Heartbeat消息应只能由发布者发送。
Resend Request
如果接收者在发布者发送的消息中检测到一个序列号间隙,它可以通过另一个定义好的Resend Request主题发送一个Resend Request消息。当发布者接收到一个Resend Request消息,可选择立即响应、定时响应或根本不响应该请求。由于Reject消息不在多播环境中使用,发布者应忽略无效的Resend Request(如:序列号过大火重复消息)。如果在响应一个Resend Request时,发布者希望跳过一个或多个消息,它应发送一个Sequence Reset/Gap Fill消息用于提示这个间隙应自动填充。由于发布者可能不立即响应,接收应用程序应细细考虑是否为了顺序传递应延迟处理后续消息。
如果要发布多个应用主题,应为每个应用主题定义一个单独的Resend Request主题。为了使应用主题发布者识别请求的主题,Resend Request消息应通过TargetSubID域明确所期望的应用主题。此外,也可以建立一个单独的主题,让接收者在主要的主题外侦听Resend Request响应。
一些多播技术(如:IP多播)不允许发布者响应一个特定订阅者的重传请求,也不提供通过主要的主题分发通道对所有订阅者进行同样的响应。订阅者必须具备忽略比期望序列号小的消息的能力。
Rejects驳回消息
在此模式下,会话层驳回消息将不再使用。
Logout注销消息
同通常的双向FIX会话注销不同,在多播环境下的注销应采用从发布者到订阅者的单向方式。用于通知订阅者,发布者会话已经结束。
Additional Implementation Details 额外的实现细节
与实际商业的多播环境下的更多的实现细节应由参与方制定相关文档,并达成共识。
多播传输技术通常被认为在分发大批量相同数据到大量接收者的一种非常有效的方式。在提供重要交易数据服务的金融组织中,该技术被广泛使用。
IP多播网络提供一个支持将IP数据包转发给一组在多个位置的接收者的机制。IP单播网络支持将IP数据报发送给一个特定位置的单个接收者,而IP广播则支持将IP数据包发送给一个特定位置的所有接收者。
IP多播网络优势的本质在于一个单一的IP数据包可以由一个服务产生,然后被转发给一组感兴趣的接收者。这种方式即优化了应用又优化了网络资源。
由于应用服务器只需对所有的接收者产生一个单一的数据包,服务器容量及执行效率不再受到接收者数量增长的影响(这将影响CPU,内存,网络连接等资源),并且应用服务器不再需要考虑维护会话的开销。同样,由于只有一个单一的数据包需要通过给定的路径转发,那么这些应用数据流发送的网络带宽将会减少。
在结构上,实际的标准网络协议模式是一个稀疏模型模式,数据通过网络到感兴趣的接收者所捆绑的网络设备间进行多播。与推送模式相关的稠密模型模式已经逐渐被淘汰。
作为优化交易数据各方面工作的一部分,FIX正致力于将其规范扩展到多播传输技术和交易数据传输的应用领域。在研究多播数据传输的行业机构的协助下,提出了后面的推荐方案。
Multicast Configuration 多播配置
IP多播在传输层使用UDP协议,应用数据被封装在一个个IP|UDP数据桢中。
当一个服务器能够很容易地发送淹没网络贷款的突发数据的时候,突发控制就至关重要。所有的多播源应当具备某种使其网络带宽能够受控使用的调步(由接收站来控制发送站的传输速率以避免超速或堵塞的一种技术)机制。
由传输设备将需要发送的数据进行逻辑分节是行业的通常做法。然后,这些数据通过一个公认的UDP端口号和一个多播组地址进行传输。这就具备了创建分离的数据通道或链路的效果。
数据通道和数据链路的创建引入一种分级的服务间隔粒度,能够用于创建产品集以及允许共享处理消耗。
然而,太多的间隔粒度将引入网络和其他处理的消耗(例如,将会导致大量的多播组的存在)。所以,在对数据进行分节的时候,注意将多播组的数量保持在一个适当的最小数量。
在多播分划中的一个关键问题是组搅动(?)。任何允许客户订阅/退订分隔粒度太好的组消息的模式反而起不了好作用(如一个股票代码一个组)。分组大小和网络带宽占间得有个取舍。太多分组占用太多带宽,而分组太少没有达到分划的效果。
因此,通常的实践是采取一种引入适当分隔粒度进行内容的逻辑分组,采取允许数据能够通过相对平均地跨越传输通道进行共享数据的方式进行分组。典型的,包含信息内容(如,证券、期权)和数据量(如一组“A到D”的工具集)????。
为了给应用服务提供商,网络服务提供商及订阅者的集成提供便利,使用全球唯一的IP源和目标地址是做好的做法。
对单播IP源地址而言,将会是一个在IANA组织登记的IP地址或对应用或网络服务提供商登记的适当IP地址。对多播目标多播分组地址而言,应用服务提供商应仅使用由IANA或遵循RFC3180的地址。
优化网络和服务资源,通过将多个消息打包围当个的数据包以最小化开销被认为是目前最好的习惯(实践)。这就要求应用程序在某个(最小的)有效时钟周期期满内传送一个数据包,在时钟周期结束前,数据被完整打包。
被传送的数据包应在一个绝对的范围内能被唯一识别,并且这些包应不被它们彼此的关系参照,这也被认为是当前做好的做法。这就使对方问一个特定
考虑应用程序生成的数据包大小。正如上面提到的,推荐在每个包中承载多个消息,以优化处理和转发。然而,一般而言,推荐包的大小不要超过MTU大小,小于1400字节。这也是网络封装发生时必须的。????
Live/Live Configuration
IP数据包(在特定的环境下)在传输过程中可能会发生顺序混乱、重复或丢失。类似IP,UDP是面向无连接的协议,它不提供类似于TCP协议那样的确保不丢包或不发生数据包顺序混乱的机制。由此,应用程序应负责管理数据乱序,重复数据包和数据包丢失。
加入多播组的应用程序接收到多播数据包时应能处理重复的和乱序的数据包。
应用服务提供商应用各种机制为多播应用提供重传服务。此外,应用服务提供商采用常见方法/机制减少订阅者没能接收到数据包的风险。
该方法就是复制每个数据包然后通过另外的通道(多播组|UDP端口)进行传输。这些通道能通过单独的物理网络架构进行传送,以扩展多样性和减少丢包的风险。其目的是期望数据的订阅者或接收者应对两个通道进行侦听,并负责在两者之间进行判断以构建一个单一的集合。
Channel Grouping and Definition 通道分组和定义
应该尽量注意将通道数保持在一个适当的最小数量。作为实际的例子,对于一个总数为20个通道Live/Live配置的情况下,大约需要10个主要的通道。对通道数的限制的一个原因是可能会导致全球唯一多播ID的缺少,多播仅拥有一个有限的IP地址范围。许多因素在确定通道数时需要去考虑。比如,传输数据量的大小是一个决定因素,我们不能期望10个通道仅有1Kbi/s的数据传输率。
通讯通道ID
当前好的实践是将分组、端口等的定义进行分离,从实际的转发机制中构建一个通道。
因此,不鼓励在消息数据内容部分包含IP地址信息(包括多播组地址)。将这些地址从消息数据内容中分离出来也提供了在IP或UDP地址使用方面的伸缩性。
为支持该方法,一个推荐的方法应被用于产品定义和属性的传输,例如:其产品符号在多播组地址中可用。???
Multicast Session Layer 多播会话层
这个部分讨论当通过多播技术传送市场数据时使用的会话层控制。通常,在使用一个多播范列中推荐使用一个轻量级FIX会话层。然而,这里仍然有几个会话层控制对于管理一个多播会话是有用的。
Entitlement授权 
如果通道用户直接连接到供应商的分发网络,其授权可以由供应商在网络边界的PIM过滤或IGMP控制机制来控制。该授权行为可以替代一个登陆验证。但该方法不能用于用户没有直接连接到供应商控制的网络,比如Intenet。为了对模板交换以及在发送者到接收者间使用消息类型进行的通信产生影响,一个单独的会话层登陆是必要的。简而言之,一个显示的由接收者发起的注册一个通道或一组通道的登陆不是必须的。
Sequnce Gap Handling 序列号间隙处理
由于几个原因,在多播场景里,与常规的FIX序列号间隙处理相比,间隙处理将有不同。首先,对于潜在的序列号丢失,Live/Live配置要求质询双方的反馈?。序列号间隙处理仍然能被执行,但其算法必须诊断是否消息序列号是否存在于每一个反馈中。其次,由于可靠性的问题,不推荐通过多播会话创建重传请求。在每一个反馈中,如果序列号不可用,那么对丢失数据的重传带外请求可以使用一个重传请求消息创建。推荐使用一个单独的、使用TCIP-IP协议的的会话连接用于提供重传请求的可靠传送。
通过重传请求消息发起的重传请求,必须指定所请求消息传输的原始主通道。单独的开始和结束序列号是不够的,应为不能保证在所有通道中的唯一性。注意,既然通道的ID是一个主体,那么要改变它们应当在Resend Request消息中创建一个可配置的参数。
Heartbeat心跳
心跳信号用于接收者判断连接的是否仍然活跃。心跳消息必须在每个通道中传送,并携带消息序列号(MsgSeqNum/Tag为34)。每个通道将有其自己的一套序列号,并且在通道中保持唯一,而不是在所有通道中保持唯一。MsgSeqNum能用于接收者验证feed的完整性。如果心跳消息中的MsgSeqNum等于接收者期望接收的下一个序列号,那么feed是完整的。否则,表明feed已经被破坏,此时需要创传或重新连接。
Time Beacon 时间信号灯
时间信号灯消息同HeartBeat心跳信号的有大致形同的作用,用于通告一个通道的活动性。然而,时间信号灯,并不携带下一个希望接收的序列号。
Retransmission of Data
由于UDP是不可靠的,无连接的数据报传输机制,因此应用层应负责处理数据包的重复接收,乱序,和丢失。注意,就包转发而言,TCP和UDP都会因此受到影响。
因此,即便是在LIVE|LIVE这样的多播传递机制里,多数分发关键数据的应用也支持重传机制。
现在,有多种不同特征的重传机制正在进行使用。
事实上,所有这些机制都使用一种“带外”请求机制。带外请求机制被认为是最好并推荐的机制用于使用TCP/IP单播请求模式。基于带内多播的请求则不提倡。
在这种模式下,接收者主机设备将同合适的应用服务提供设备(可以是也可以不是发布多播数据流设备)建立TCP会话,并请求一个或一定范围的数据包的重发。
被请求重发的数据包可以通过多种途径进行传输:1,使用主要的|多播创建组进行重发;2,数据包由TCP/IP单播会话返回;3,数据包由单独的当做重传组进行传输。
推荐使用第3种可选方案,在此,一个或多个分离通道独立于主要的数据生产转发机制被采用,这样仍然可以保持多播的高效率。
多数情况下,当这种模式被采用时,也存在多个多播重传组。如果存在多个组,那么当前最好的实践是将每一个重传组同数据内容关联起来。
Retransmission Channels
推荐运用IP多播来实现重传机制的数据包重传。而且,推荐重传的数据包不应在原始数据包传输的通道上进行传输。
因此,尽力一组重传组,使得期望,或需要接收重传数据的参与这可以加入到其中接收数据。然而,一般而言,期望应用重传机制的参与者通常能加入其特别需要专注的重传组。
重传应总是通过单独的,专门的目的通道进行。一般而言,这里应该有一个单独得通道,发布所有的重传数据。在一些通道连接状态下,一个边界路由将静态的脚如通道,一位着该通道将总是注意活动状态,并且订阅数据源。这个配置具有简单的特性,在这种情况下,所有的重传数据经总是通过一个单独得通道接收。
这种方式的一个小的却缺陷是没有优化使用带宽。重传通道将加载被所有交易参与这请求的数据,不仅仅是接收者侦听的数据。一个可能的替代方案是:在需要重传时连接通道,不需要是则断开。
另一个可能的替代方案是建立多个重传通道,也许是一个主通道就有一个重传通道。这个方法的优点在于接收者可以知道那个数据生成组通过给定的重传通道被接收。缺点则是对保持一个合理的最小数量通道与多播基础设施的增长存在冲突。因此,这个方案不值得推荐。
Application-Level Requests for Retransmission
应用级重传请求经通过Market Data Request消息进行支持。建议重传请求通过一个可靠的请求传递的TCP/IP连接来实现。由请求响应得接收者负责消息接收的确认。为扩展请求的执行有效性,Market Data Request Reject消息能由请求响应者发起,并携带“不能处理”和指明拒绝的理由的响应。
一个重传请求一般由以下几个情况下被创建:
l       在指定了开始和结束时间标签的一个时间范围
l       通道ID
l       责任
l       Book的当前状态
注意,Market Data Request应不请求消息序列号的重传,它在会话层自动被执行。
Multicast Entitlement
使用IP多播技术支持数据发布的常用架构模式是一种单向模式,在此模式下,应用服务提供者发布数据,订阅者则在网络层订阅其需要的数据。
因此,通常当前存在非点-对-点,双向的应用层通讯以支持登录序列交换能够用于验证订阅者是具备接受发布数据的权限。多播不是最好的任意定制接收技术。
因此,一个受信网络提供者(可能是应用服务提供者,或单独的网络服务提供者)应负责在网络层提供一种认证模式。
在非受信的网络中,必须使用数据加密。然而,数据加密通常不在多播交易数据传输中使用。通常,除非数据在非受信网络,比如Internet上进行数据传输时,数据加密通常是没有必要的。由私密专用链路或私密外联网提供的安全性将产生额外的由不易察觉的数据加密引入的延迟。
认证模式最主要的目标应该是提供:1、多播发布数据的安全传输,也同时保证发送者是经认证的;2、数据只分发给受信的接收者。
多播认证为发送者提供了一个数据安全层。只有核准的数据接收者可以加入到一个通道中。它不为发送者提供保护其内部资源的安全,但它协助确保只有核准的接收者获得通道数据。静态配置(Static Configuration)决定谁能够加入到一个通道中。接收者必须在发送者的路由里进行设置,使其能加入到一个多播通道中。
PIM Filters PIM过滤器用于在路由器上提供认证。不必进行LDAP查询或其它验证。
IP多播的特性在于消除了那些在单播传输中的机制,用于认证请求者,并且这里不存在业界普遍认可的替代方式。因此,最常采用的方式是运用网络层,在边界设备中实现,确保数据仅分发给核准的接收者。
Message Header 消息头部
这个部分讨论FIX消息头部,及其在多播环境中的应用。FIX头部,作为应用消息的一部分进行传输,与多播头部不冲突,多播头部指定了其他的一些数据,如发送者的IP地址。由于多播是广播,与单播传输不同,消息能够使用FIX头部的部分域来创建就足够。
在多播环境中,最少应包含BeginString,MsgType,MsgSequNum和BodyLength域。 当前的FIX规范要求提供SenderCompID和TargetCompID。然而,这些域在多播环境会话中将失去作用,只是在点—对—点会话中有用。
当消息被作为一个Resend Request消息的响应被传送时,被重传的消息可以选择携带PosDupFlag域,该域在标准的FIX会话中被使用。

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

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

相关文章

AJAX 异步加载技术

AJAX 异步 JavaScript 和 XML。 AJAX 是一种用于创建快速动态网页的技术。 通过在后台与服务器进行少量数据交换,AJAX 可以使网页实现异步更新。这意味着可以在不重新加载整个网页的情况下,对网页的某部分进行更新。 传统的网页(不使用 AJAX…

linux分辨率和用户有关吗,Linux系统在高分屏非正常分辨率显示

问题描述:win10重装为Ubuntu16.04,在1920x1080的显示屏上,linux系统分辨率只有800x600xrandr # 查看当前显示分辨率#输出:[Screen 0: minimum 800 x 600, current 800 x 600, maximum 800 x 600]可以看出显示屏最小为800x600&…

数据透视表和数据交叉表_数据透视表的数据提取

数据透视表和数据交叉表Consider the data of healthcare drugs as provided in the excel sheet. The concept of pivot tables in python allows you to extract the significance from a large detailed dataset. A pivot table helps in tracking only the required inform…

金融信息交换协议(FIX)v5.0

1. 什么是FIXFinancial Information eXchange(FIX)金融信息交换协议的制定是由多个致力于提升其相互间交易流程效率的金融机构和经纪商于1992年共同发起。这些企业把他们及他们的行业视为一个整体,认为能够从对交易指示,交易指令及交易执行的高效电子数…

观光公交

【问题描述】 风景迷人的小城 Y 市,拥有 n 个美丽的景点。由于慕名而来的游客越来越多,Y 市特意安排了一辆观光公交车,为游客提供更便捷的交通服务。观光公交车在第 0 分钟出现在 1 号景点,随后依次前往 2、3、4……n 号景点。从…

linux行命令测网速,Linux命令行测试网速的方法

最近给服务器调整了互联网带宽的限速策略,调到100M让自己网站也爽一下。一般在windows上我喜欢用speedtest.net来测试,测速结果也被大家认可。在linux上speedtest.net提供了一个命令行工具speedtest-cli,用起来很方便,这里分享一下…

Delphi XE2获取汉字拼音首字母

function CnPYIndex(const CnString: string): string;{ 返回中文的拼音首字母}const ChinaCode: array[0..25, 0..1] of Integer ((1601, 1636), (1637, 1832), (1833, 2077), (2078, 2273), (2274, 2301), (2302, 2432), (2433, 2593), (2594, 2786), (9999, 0000), …

图像处理傅里叶变换图像变化_傅里叶变换和图像床单视图。

图像处理傅里叶变换图像变化What do Fourier Transforms do? What do the Fourier modes represent? Why are Fourier Transforms notoriously popular for data compression? These are the questions this article aims to address using an interesting analogy to repre…

HDUOJ 1062 TEXT REVERSE

#include<iostream> #include<stdlib.h> #include <iomanip> #include<stack> using namespace std;int main(){//次数int n 0;while (cin >> n) {//这里需要读一个字符&#xff0c;需要消除换行符的影响getchar();while (n--) {char c;stack&l…

VC++的windows服务

项目建立&#xff1a; VS2008->ATL项目->服务exe 服务部署&#xff1a; 在VS2008中新建的ATL项目&#xff0c;在网上看到的流程中都会有注册服务这一项。 但是对服务的注册都是只给了一个指令&#xff0c;一句话带过&#xff0c;没有给出具体的操作步骤 经过多次试验…

linux中gradle编译慢,【Linux】解决linux下android studio用gradle构建从jcenter或maven下载依赖太慢...

一个简单的办法&#xff0c;修改项目根目录下的build.gradle&#xff0c;将jcenter()或者mavenCentral()替换掉即可&#xff1a;allprojects {repositories {maven{ url http://maven.oschina.net/content/groups/public/}}}但如果你有很多个项目的话&#xff0c;一个一个的改估…

MFC程序需要的函数库及头文件--《深入浅出MFC》

Windows程序调用的函数可分为2部分&#xff1a;C Runtimes Windows API。 C Runtimes&#xff1a; LIBC.LIB -- C Runtime函数库的静态链接版本 MSVSRT.LIB--C Runtime库的动态链接版本&#xff08;如果要链接这一函数&#xff0c;你的程序执行时必须有MSVCRT40.DLL在场&#…

C#DNS域名解析工具(DnsLookup)

C#DNS域名解析工具(DnsLookup) DNS域名解析工具&#xff1a;DnsLookup 输入域名后点击Resolve按钮即可。 主要实现代码如下&#xff1a; private void btnResolve_Click ( object sender, EventArgs e ) {lstIPs.Items.Clear ( ); //首先把结果里的ListBox清空 try {IPHostE…

python.day05

一 字典 定义:dict, 以{},表示.每一项用逗号隔开,内部元素用key:value的形式来保存数据.例如 {"jj":"林俊杰","jay:周杰伦"} 特点:查询效率非常高,通过key来查找元素 内部使用key来计算一个内存地址(暂时),hash算法,key必须不可变的数据类型(ke…

滞后分析rstudio_使用RStudio进行A / B测试分析

滞后分析rstudioThe purpose of this article is to provide some guide on how to conduct analysis of a sample scenario A/B test results using R, evaluate the results and draw conclusions based on the analysis.本文的目的是提供一些指南&#xff0c;说明如何使用R对…

Linux程序实现弹框,jQuery实现弹出框 效果绝对美观

使用到JQeury写的几个比较好的Popup DialogBox,觉得不错。和大家分享下。使用它们结合.net可以实现很好的效果。1.jqpopup:是个可以拖拽,缩放并可以在它上面显示html页面上任何一个控件组合的控件。可以和后面的主页面通信。使用方法:先调用这几个js文件,可以自提供的下载地址下…

Interesting visualization tools for profiling.

Interesting visualization tools for profiling. http://dtrace.org/blogs/brendan/2012/03/17/linux-kernel-performance-flame-graphs/ http://dtrace.org/blogs/brendan/2013/07/01/detecting-outliers/

MySQL的事务-原子性

MySQL的事务处理具有ACID的特性&#xff0c;即原子性&#xff08;Atomicity)、一致性&#xff08;Consistency&#xff09;、隔离性&#xff08;Isolation&#xff09;和持久性&#xff08;Durability&#xff09;。 1. 原子性指的是事务中所有操作都是原子性的&#xff0c;要…

codeforces CF438D The Child and Sequence 线段树

$ \Rightarrow $ 戳我进CF原题 D. The Child and Sequencetime limit per test: 4 secondsmemory limit per test: 256 megabytesinput: standard inputoutput: standard outputAt the childrens day, the child came to Pickss house, and messed his house up. Picks was ang…

大型网站架构演变

今天我们来谈谈一个网站一般是如何一步步来构建起系统架构的&#xff0c;虽然我们希望网站一开始就能有一个很好的架构&#xff0c;但马克思告诉我们事物是在发展中不断前进的&#xff0c;网站架构也是随着业务的扩大、用户的需求不断完善的&#xff0c;下面是一个网站架构逐步…