刚过双11,朋友圈中有人对阿里的秒杀、抢购背后的技术吹得极其神乎。甚至有圈友表示将试水限流神器sentinel应用在证券交易场景。小王童鞋从sentinel限流基本业务原理、证券交易业务场景、电商适用而证券交易不适用该限流器,如何防范证券交易订单洪峰来阐述证券交易的常用限流措施。
一、限流器的基本业务原理
限流的初衷是在海量流量到来的情况下,维持业务系统的连续性。本人好友KK打了一个比较恰当的比方:业务系统好比银行,大家去银行挤兑,银行就会崩溃。这个时候怎么办?通常来讲会有三种解决方式:
(1)过载保护,关门,不开放提款服务。这种情况,也出现在早年双11促销活动中。一到零点,秒杀成了扼杀,在那一瞬间,各大电商的系统几乎玩完。这类措施能不用尽量不用,用户体验极差,对企业声誉、信用造成较大的负面影响。
(2)限流:每小时让N个人/市场主体进银行取钱,每天每人最多提供M万元的额度。这类情况也应用在往年双11价格错误,导致秒杀时,适度预防商家被薅羊毛的场景。
(3)服务降级:保证现金流。在不考虑同业拆借业务的情况下,其他业务全部停掉,比如暂停各种贷款业务,将资源都给取钱的用。
(4)流量控制,还可以限制人数(单位时间内的访问次数,比如小王同学10年前,用压测工具访问腾讯,发现腾讯官网每秒只接受20次客户端的访问)限制每人的取款额度(吞吐量),还有限制窗口数(线程数量)等。以上就是sentinel的限流策略。
二 、证券交易业务场景
证券行业的交易是两级交易模式。第一级为核心级别,即交易中心级,我国证券行业的交易中心为沪、深证券交易所及全国中小企业股份转让系统(以下简称两所一司)。第二级为交易平台级别,主要是国内各大证券公司,各类投资者通过交易平台参与证券交易,交易平台主要承担经纪业务功能。日终后,中证登对两所一司的交易流水进行批处理,对券商进行清算交收,券商对投资者进行清算交收工作。即清算也是两级结算模式。如下图所示:

三、sentinel限流器的适用性分析
淘宝电商交易场景适用此限流器而证券交易场景不适用。业务系统建设往往以领域驱动(业务驱动建模)开展。现从业务角度分析原因如下:
第一,淘宝交易的前半段是非担保交易,而证券交易的全流程是担保交易。淘宝交易双11秒杀主要是0点秒杀,由于营销策略所致,绝大多数交易集中在0点左右。一来,淘宝针对的客户群是完全不确定的客户群体。而证券交易客户群体相对固定,即卖方为持有该证券标的或拥有在该市场融券资格的合格投资者,买方为持有足额资金的投资者或拥有在该市场融券资格的合格投资者。淘宝交易买方参与秒杀至付款前,是没有交易成本的。而证券交易的担保交易要求,对违约行为几乎零容忍。投资者报单是有报单成本的,即投资者发出买入/卖出证券订单请求,证券公司根据报单信息,对其资金账户进行对应的资金额度/证券数量进行冻结,确保履约的正常进行。虽然我国证券账户开户数量接近2亿户,活跃用户仅千万级,证券交易投资者带来的证券交易申报订单流量远小于淘宝双11促销带来的交易申报订单流量。
第二,两者的用户对接方式不同。淘宝交易场景是买方与卖方直接对接淘宝,而证券交易主要是投资者对接证券公司,每个投资者对接的证券公司不尽相同。证券公司经纪业务主要收入来源为交易佣金。淘宝平台的佣金是独家经营,对流量进行控制,双11促销的限时促销策略,热点商品的买家购入需求大于促销库存数量。而对于平台而言,只要在热点商品充分成交的前提下限制流量,对平台来说是没有任何损失的。但对于投资者来说,证券公司是证券交易平台,同一证券的交易委托,投资者可以通过证券公司实现,证券公司从事经纪业务是有一定的竞争关系。出于经营考量,证券公司的限流意愿不是很强烈。其次在技术层面,证券公司的角色主要提供信息代理转发消息服务,而且投资者分布在不同的证券公司下,各证券公司就是分流的节点之一。流量压力小,场景上不会出现流量压力。
第三,交易方式限制流量洪峰形成。沪深证券交易所盘中采取连续竞价方式,事件驱动,快速撮合,在途订单消化速度快。其次,同一证券交易买卖其实是一个小封闭环境。对于海量流量,可以采用在分而治之策略,将消息分发至不同的交易队列。较限流策略,订单分发更适用于证券交易场景。
第四,法律层面,证券交易也不适用淘宝系统这种比较粗暴的限流方式。投资者通过交易软件,向证券公司提交证券买卖申报订单,证券公司冻结投资者对应的资金额或证券数量,向交易所转发交易申报订单,实际与投资者形成了较为完备的委托代理合同。既然形成了合同,证券公司层面就有义务将申报订单顺利送到至证券交易所的交易主机,不得随意拦截申报订单。
四、如何防范证券交易订单洪峰
证券交易场所不适用sentinel限流策略,但仍然有限流的实际需要。通常而言,交易所的流量洪峰在开市初的第0~3秒左右,合理地控制流量对于其业务系统的连续性运行至关重要。绝大多数证券交易所期望证券有一定的流动性,促进买卖成交,不希望行情剧烈波动。个人认为(有些是猜测,猜错/猜错不负责)证券交易所的流量控制策略主要是通过业务规则来限制投资者对同一标的申报的订单数量来完成。
第一,合理设置投资者门槛。证券市场是有一定的投资者门槛限制的。创业板,科创板都有一定的投资者门槛限制。通过限制用户数量来限制流量的爆发,从而限制瞬时海量订单的产生订单。
第二,限制在途订单数量。由于证券交易所开市期交易主要是通过连续竞价方式完成订单撮合。故可以限制在途订单数量。所谓在途订单,即已进入交易主机的订单队列,没有完成订单撮合/撤销的有效订单。通常来讲,证券交易所的证券交易方式主要有竞价交易和盘后协议转让(俗称“大宗交易”)两种。大宗交易单笔数量要求较大,流量洪峰只可能出现在竞价阶段。而竞价阶段,可以限制在途订单数量来完成流量的控制。以某证券交易所为例,A股的盘后单笔数量不低于30万股,100股为1手,可以限制投资者对于该只证券买/卖单向在途订单不得超过3000笔且单向在途订单数量未超过3000手。这么限制,一来可以防止投资机构通过恶意操作市场;二来也能示意持仓量较大投资者转向盘后大宗或者固定价格成交,为竞价交易进行分流;三来,只限制在途订单数,没有限制当日的交易订单申报数量,对广大投资者,特别是中小投资者是没有限制要求的。此条纯属个人猜测,不对真实性负责。
第三,对于限价申报,价格稳定机制的基础上进行有效申报。比如,证券交易所的行情刷新是3秒更新一次。以科创板为例,在连续竞价阶段的限价申报,应当符合(一)买入申报价格不得高于买入基准价格的102%;(二)卖出申报价格不得低于卖出基准价格的98%。买入(卖出)基准价格,为即时揭示的最低卖出(最高买入)申报价格;无即时揭示的最低卖出(最高买入)申报价格的,为即时揭示的最高买入(最低卖出)申报价格;无即时揭示的最高买入(最低卖出)申报价格的,为最新成交价;当日无成交的,为前收盘价。
第四,技术层面,根据交易引用弹性资源分配策略。通常而言,每只股票的交易活跃度是不同的,最活跃证券交易需要的软硬件资源(以下简称算力)是远高于最不活跃的证券。如果交易所运用X86架构服务器进行证券交易,则与之匹配的策略大概率是分而治之,容器运行某只/某几只股票的交易,并配上业务连续性保障机制或策略。每只股票每天交易的活跃度不一样,故会根据上一日交易量乘以大于1的系数进行分配算力,甚至会运用大数据,挖掘与该股票相关舆情信息、政策信息开市前追加算力,还可以准备一定的机动算力,午间休市释放算力给交易活跃度突然陡增的证券。其实这种情况极少出现,连续竞价撮合机制需要的资源不高,通过交易队列,排队撮合能快速实现。行情3秒一快照,交易快慢最多也就毫秒级,对于投资者来说是透明的,不影响投资者进行投资决策。




