图表平台可能犯的最昂贵的错误,是为每个浏览器标签页打开一个 WebSocket。这笔账你没法辩解:10,000 名同时在线的交易者,每人看三个品种,你就打开了 30,000 个上游连接。大多数市场数据供应商不到中午就会对你限流。不限流的那些,会给你寄来一张同样让你吃不消的账单。
分发模式
Vera Charts 在服务器端进行分发:无论有多少客户端在看,每个品种只有一个上游连接。当第一个标签页订阅 BTCUSDT 时,我们打开上游 WebSocket。当第一万个标签页订阅时,我们只是把它加入内存中的订阅者集合,并开始向它的 SSE 通道推送同样的报价流。
当最后一个标签页取消订阅时,我们会让上游连接再保持几秒钟(因为几乎总有人会重新打开),然后再关闭它。从供应商的角度看,即使有一万名交易者在看,我们每个品种也只是一个客户端。
这如何对应到供应商成本
加密货币方面,我们使用 Binance 的公开 WebSocket:不需要 API 密钥,在我们的规模下没有速率限制,也没有按消息计费。这是简单的情况。外汇方面,每家供应商要么按品种收费、要么按报价收费,正是分发模式让这个平台在经济上可行。我们为自己订阅的品种付费,而不是为订阅我们的标签页付费。
这是我们的自营交易公司合作伙伴最关心的架构部分。他们不希望平台的市场数据账单随交易者人数线性增长。有了分发模式,就不会。账单随不重复品种的覆盖范围增长,而这个范围是有上限的。
哪些方面不妥协
- 报价保真:每个订阅者都能收到每一笔报价。分发不做采样,也不做批处理。
- 背压处理:慢速订阅者无法拖慢上游。它们会被排队,如果落后太多就会被断开。
- 品种白名单:客户端不能请求任意品种。服务器在打开新的上游连接之前会执行白名单检查。
如果你正在为公司评估平台,而谈话还没有涉及上游连接,那就问一问。答案能告诉你很多信息:当你的规模扩大时,平台的账单会如何变化。