每天执行1.6亿任务的高盛证券资料库,如何建立可观察性

高盛是全球超大型投资集团之一, 他们有一套用来分析庞大证券交易风险和估价的关键平台SecDB,来协助高盛集团旗下的交易员,评估什么时候买哪一些股票的风险有多大。这个平台,正是让高盛证券交易员们一年获利数十亿美元的关键系统。

SecDB平台已经用了30年,每天要执行1.6亿个任务,目前负责维护这套系统的开发人力超过了3千人。这套系统还设计了自己专属的程式语言Slang,多年来累计超过了2亿行Slang的程式码。目前全球有1万3千名使用者,不只是交易员,还有许多分析人员。这套系统一但出现问题,甚至发生短暂当机,不只会影响了高盛的证券交易的风险评估,甚至连高盛银行的业务都会有影响。这是高盛全集团的关键系统之一。

SecDB串接全球上万资料库,可支援25亿个连线数

为了支援各种不同的使用情境,SecDB平台也发展出了许多原生应用,串接了1万多个分散在全球的物件资料库,所能支援的连线数超过25亿个连线,每秒接收的流入资料频宽多达164TB, 对外流出的资料频宽,更是达到每秒8PB的海量资料。可以说,SecDB和伴随的相关应用,组合成了一个庞大的分析生态圈,而SecDB平台就是其中的关键核心。

如何强化一个发展了30年的庞大老旧系统,是非常困难的挑战,尤其近几年,这套系统韧性面对的局势,每一年都在改变,可能来自各式各样的新兴网路威胁,新兴金融使用情境,新兴技术的汰换和进化,这些变化再再考验了SecDB系统的韧性。为了更彻底掌握SecDB系统的运作情况,3年前,高盛开始打造这套关键系统的可观察性能力。

原本的SecDB平台为了提供高速分析能力,采用了记忆体式键值(Key-value)资料库,并采取了丛集架构的设计,由一个保持最终一致性的复写丛集群组,高盛称其为Ring AP,把资料写入到这个丛集群组中的任何一个资料库节点成员,来建立高度分散式的效能。

在这个群组中的资料库节点,例如有纽约SecDB资料库,伦敦SecDB,香港SecDB资料库,彼此之间还会透过一支同步程式SecSync,可以自动更新和移除彼此不一致的地方来确保,资料库的最终一致性。

旧有时间序列资料分析工具,不擅长即时维运分析

数十年来,SecDB资料库团队也打造过好几种监控机制,最近主要使用的监控矩阵SecDB Metrics,是以时间序列资料库来搜集各种事件后,进行例行检查,也能用来 来诊断各式各样的已知问题。例如资料库组态可用记忆体限制、连线限制数的问题等。而资料库管理人员也常用一款时间序列资料分析工具PlotTool,运用各种数值分析,来了解这些时间序列资料的维运效能 。

例如高盛资料库管理人员曾用PlotTool来绘制出资料库所用记忆体的变化趋势,原有标准配置的记忆体配置上限是 60GB,但从分析趋势可以看到资料库的记忆体用量需求越来越大,就可以在特定时间后,将上限值拉高到70GB。用这样的绘图工具来看记忆体用量的长期变化趋势,可 以更视觉化地观察维运作法上需要调整之处。

高盛用了多年的时间序列资料库和PlotTool都是好用的维运工具,虽然有用,但是还是有所不足,因为这些适合用来观察长期趋势,而不是即时性的系统监控机制。尤其,就有监测矩阵所用的时间序列资料库,适合用来储存即时的金融资料和分析这些金融资料,但是,不擅长用于即时维运系统讯号的处理。

3年前,高盛开始另外用批次处理程式,来产生各种分析报表,若有异常或需要注意的讯号,也只能透过电子邮件通知相关人员来处理,时效性比较不足。

可是,这几年来,SecDB平台串接的资料库越来越多,产生的电子邮件通知数量和各种维护问题越来越多,高盛发现,他们需要一个平台,可以立即注意到关键事件出现。

采用开源事件监控平台Prometheus打造可观察性架构

高盛SecDB平台团队和SRE团队讨论后,决定使用开源事件监控平台Prometheus,用这个Prometheus 自己的数据查询语言PromQL来开发监控机制,并改用Prometheus的通报管理功能Alertmanager来发送异常通报。

为了避免影响到原有的资料库,高盛打造了一只探测程式,并在SecDB所在的每一台主机上,会放了一个Daemon程序,可以和外部的探测程式沟通,将搜集这台主机上的运作状态Log数据,这只探测程式还会将各种事件和Log资料,整理成Prometheus格式的资料,再汇入到SRE团队管理的Prometheus主机上,最后,资料库团队可以在Prometheus所有SecDB平台的状态仪表板。

在这个SecDB仪表板上,可以看过过去6个小时内,每一分钟,每一台SecDC主机的数据变化,例如每一分钟使用了多少记忆体,资料库读取的利用率有多高等等。 透过这些搜集主机状态的观察手段,可以建立整个Ring AP丛集群组中,每一台主机、每一个资料库的监测仪表板。

高盛使用了PromQL规则来定义各种事件的触发条件,来判断不同事件需要驱动哪一种等级的维运高风险通报。多数不紧急的事件只需要发出后续追踪处理的通知,但是对于关键事件,则会触发一个特别的通报机制称为 PagerDuty,直接发布通报给待命工程师。

尽可能避免影响原有平台,采用指标伺服器从旁搜集遥测资料

高盛SecDB团队打造可观察性功能时,有一个大前提是,尽可能避免影响到SecDB平台的系统来搜集需要的SecDB平台Log资料。所以,他们后来的作法,不是在SecDB平台系统中增加监测机制,而是改在每一个SecDB所部署的主机上,用Daemon程序来安装一个指标伺服器(Metrics Server),用来可以提供这台主机的即时资料库遥测,一但主机发生任何状况发生,都可以立即看到。这个指标伺服器,跟主机上的SecDB平台资料库,共用同样的记忆体,位在同样的环境中,也就可以用来代表SecDB所在主机的状态。这个即时监测手段,让高盛的资料库团队能够用新的角度来思考他们的基础架构。

不过,这个指标伺服器,因为高并发运作和锁定问题,无法使用现成的Prometheus函式库,后来,高盛干脆自己开发了新版的指标伺服器元件。新版指标伺服器不只可以搜集主机数据,还可以搜集到资料库内部的遥测数据,包括资料库透过内部工作流程进行交易的状态资讯,这就大大提供了过去看不到的透明度。多达二、三十种资料库的运作行为,像是新增一笔纪录,删除纪录,开始交易,交易资讯取得等行为,都可以即时看到状态资讯的变化。

新版指标伺服器不只可以搜集到SecDB所在主机的遥测数据,连资料库内部运作行为的数据也能搜集

因为这套DecDB在全球各地都有节点,如纽约SecDB资料库节点、伦敦节点、香港节点等,后来,高盛将这套监控架构发展成了全球多区域的架构,每个区域各有一套自己的Prometheus,遥测资料先集中到各地SecDB的Prometheus后,再把资料汇入到SRE团队的Prometheus上来提供整合性仪表板。高盛SRE团队也会提供了SecDB的SLO达成情况,方便资料库团队追踪每一天的维运状态。 

因为SecDB是全球运作,而且是24小时都不能停,而且得支援全球不同时区的需求。每个区域会有6个待命工程师,每周轮流接手,来和全球的待命团队(SRE)成员合作。为了各区域值班待命工程师的工作衔接,也让他们有能力处理更多示警通报的管理,高盛还打造了一个SOS系统,纪录每一起事件的处理情况,方便不同区域之间的工作交接。

高盛打造了一个SOS系统,来纪录每一起事件的处理清况,方便全球不同时区团队的工作交接。

2023年,高盛完成了SecDB平台的可观察性架构之后,开始将这个机制延伸到其他SecDB平台的各种相关应用,预计在2024年涵盖到所有相关应用,都要纳入同一套可观察性架构下。