几种组播行情方案对比

几种组播行情方案对比

1.通过组播技术发布行情的优点与缺点

优点:节省流量公平性好

通过组播发送行情数据时:同一份行情数据在网络上无复制,因此可以极大地节省流量;同一份行情几乎同时在所有端口上发出,因此公平性较好。

事实上很多主流交换机在实现组播时,并不能实现完全的公平,这是公认的事实,但即便这样,组播技术在公平性上已经比TCP技术有了质的飞越了。

缺点:对网络质量要求高

相比于TCP协议具备完善的丢包重传,拥塞控制等机制,组播以UDP协议为载体,网络产生拥塞时可能发生丢包;传播链路复杂时,还会发生乱序。如果对数据质量要求较高,那么就要在软件层面或网络环境层面加以处理。

解决该问题目前有以下几种思路:

1)提高网络质量

一般的解决方案是仅在局部的专用网络中提供组播数据,一方面,广域网的环境不可控,极易发生丢包、乱序这样的问题,应用组播技术非常困难;另一方面,如果组播数据仅在专用网络中传播,这样丢包的几率就会变得极低,服务器和客户端仅实现简单的丢包补发功能即可满足应用要求。

2)软件层面实现丢包重传、拥塞控制等机制

这相当于把TCP协议的一些功能在组播上又实现了一遍,软件复杂性会极大地增加,然而收效其实并不明显,即性价比不高。

比较经济的做法是仅在可控的网络环境中提供组播数据,提供简单的丢包补齐功能即可。这也是业界的主流做法(不这样做的要么死的很惨,要么用户体验极差,比如想不开要在不可控网络上提供组播行情的,以及想不开要基于UDP实现TCP功能的)。

下面将简述几种常见的做法(下面几种做法的前提均是仅在可控的网络环境下提供服务)。

方案1.UDP(组播)实时+TCP查询

客户一方面需要加入组播组,接收实时行情,并检查是否发生了丢包;另一方面,需要临时发起或长期保留一个TCP连接,在检测到发生丢包时,通过TCP连接查询。

这种方案的优点有:1)程序实现较为简单,组播程序直接对着组播套接字发送即可,无需处理任何交互;2)客户使用简单,检测到丢包后直接发送查询请求并等待查询结果返回即可。3) 可应对一种潜在的需求,即在广域网提供行情服务时,即使UDP通道几乎不可用,也可通过TCP查询通道获取行情数据。

这种方案的缺点有:1)仍然保留了双向交流通道,设计软件时仍需考虑一系列的网络攻击、漏洞探测和利用、补发公平性、数据一致性等问题;比如查询的结果应该是基于已经发送出去的行情的,如果客户发现能查询到还未发送的行情,他就会不停地发起查询,从而获得更多的行情信息,这样一方面会对系统造成很大的压力,另一方面对其他客户也不公平。而为了避免类似的行为,开发人员就需要编写一系列的行为检测和应对的代码,让系统变得复杂。2)网络短暂拥堵时,客户集中发起查询请求,可能加剧网络拥堵。3)运维复杂,一方面需要设置防火墙,增加设备投入和人力投入;一方面客户会对行情查询功能提出各种各样的需求,或者要求排查各种问题等,运维人员不胜其扰,客户也常常不满意。

目前上期所的L1行情以及郑商所L2行情是采用这种思路建设的。

方案2.全部UDP(组播)

客户与交易所之间只有交易所->客户的单向feed通道,客户只需加入组播组即可接收到行情(通常还需要先将客户机接入指定网络,并由运维人员开通网络权限)。

除了实时行情外,客户还需要基础的合约定义信息(比如当日涨跌幅限制等)以及在发生丢包时补齐数据,因此除了实时行情通道外,交易所通常还需要提供合约定义信息轮播通道,以及最新行情快照的轮播通道。

该方案的优点有:1)全部单向化,与客户无交互,软件层面无需防范攻击;2)网络上可以使用一层交换机,单向交换机,无需防火墙,网络运维简单,时延表现以及公平性都很好;3)运维简单,只需布置一台与客户所处位置相同的服务器,保存收到的所有数据,客户有异议时拿出比对即可。

该方案的缺点有:1)无法在广域网上提供服务(不过在广域网上收行情的一般都不太在乎时延,所以让他们通过二级转发商接收即可);2)组播程序相比方案1相对复杂(但是拿掉了方案1的TCP服务器,这点复杂还是非常容易接受的)

目前行业巨头CME采用的是这种方案(详情参见:CME MDP 3.0),值得一提的是,在网络质量较差时,其行情产品的接收体验并不好,举个例子来讲:CME的订单薄行情发的不是快照,而是add、del、chg的更新指令,所以一旦发现丢包,必须停止从实时通道接收行情,否则就会发生档位错乱的情况,必须先切换到恢复行情通道,补齐行情后再切入实时行情通道。如果网络质量不好,客户就得频繁在实时通道和恢复通道之间切换,体验很不好。

欧洲的Euronext交易所也是采用的全部组播化的方案,据其技术人员介绍,该所行情系统之前也是UDP实时+TCP补发的设计,当时出现了一些安全问题和运维问题等;改成全部组播化之后,整个世界都清净了。

国内交易所组播化方案

相比国外交易所大都走向全部组播化,国内交易所在组播化方面进度不一。

最保守的有通过TCP提供行情的,比如中金所的L1和L2、郑商所的L1(郑商所其实也有UDP的L1行情,但限于当时的网络传输条件,采用的是UDP单播技术而非UDP组播技术)。

稍微激进点的有通过TCP+UDP的方式提供行情的,比如上期所的L1、郑商所的L2(L2行情用户远不如L1行情用户多,因此上期所更为激进)。

最激进的是某证券交易所,在行情量非常大的情况下,还在广域网上提供组播行情,导致用户体验较差(当然这也是没办法的事情,TCP发行情已经不行了,只能强上组播)。

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注