头图

https://www.bilibili.com/vide...

引子

Bloomberg 有很多标签:全球财经媒体巨头;创始人担任过纽约市长、竞选过美国总统;它也是世界上最大的科技公司之一,其开山之作彭博终端,是全球近 33 万财经用户的决策和交易工具, 至今仍为 Bloomberg 帝国带来 85%的收入,也是汤森路透这样的老牌媒体集团和新锐们垂涎却无法撼动的基石。

不过,在这些显赫的标签背后,Bloomberg 既是开源软件的重度使用者,也是许多超级开源社区如 OpenStack、Apache 基金会、和 C++ 的重要贡献者。

大家好!我是 Koala。 在云计算基础设施、大数据、和编程语言方面,Bloomberg 都有着大量的技术投入,今天,我们就一起去探秘它和开源的故事。

彭博终端是一种怎样的存在?

作为大众,我们日常接收的通常是 Bloomberg 提供的商业、金融和新闻资讯。而作为专业机构和个人,每一天 所依赖的可能就是 Bloomberg Terminal,即彭博终端了。

创立于 1981 年的 Bloomberg LP,第二年即推出了彭博终端,希望以开创性的技术、为当时信息传播缓慢且低效的行业带来全面变革,也为证券经纪们提供更轻松的工作工具。

虽然,今天 一台彭博终端的年租用费用高达 2.4 万美元;虽然,它依然还保留着老旧的界面、和笨重的键盘,但来自全球近 33 万的订阅用户对它就是重度依赖,而且以拥有一台彭博终端为身份的象征。
那么,传说中的彭博终端究竟是怎样的一种利器呢?

彭博终端是一个向专业人士提供彭博专业服务和解决方案的统一平台,拥有数以万计的数据库和应用程序。它将金融及周边信息都整合在一个平台上,向用户提供权威性的经济评论和观点;同时,以彭博终端为核心,它还提供多种金融解决方案;此外,它打造的即时通讯系统 Instant Bloomberg 被称为华尔街的 Facebook,交易员们在上面交流各种金融产品的价格,甚至是小道消息。I IB you 已是金融圈的暗语。

Bloomberg 的“新闻+终端”模式,是它始终难以被模仿和超越的护城河。至今,彭博终端提供的服务依然是 Bloomberg 帝国 85%收入的来源。

打造彭博终端的技术挑战

每天早上 9 点 29 分,当全球任何一个金融市场开市钟声即将敲响之际,大量市场数据也将涌入 Bloomberg 的数据基础设施中枢 Ticker Plant。

Bloomberg 自身不创造数据,但是,每一天,Ticker Plant 要存储和传输全球各种金融工具输入的交易和报价,处理数千亿条的数据信息、200 万条的新闻资讯、和超过 10 亿条的电邮与即时通信,然后再将这些事件聚合、丰富、存储和传输到彭博终端。

Bloomberg 的 6000 人技术开发团队,就在 Ticker Plant 里,打造着包括硬件、应用程序、网络和界面在内的基础设施和工具。

而由于全球金融市场的区域性分布,Ticker Plant 不仅需要 24 小时昼夜运转,还要应对多时段的峰值数据。这些,都给 Bloomberg 提出了可扩展性、高性能、低延迟、和稳定性的技术挑战。

开源的使用者和贡献者

面对这些挑战,Bloomberg 采取的是“开源优先”的原则。正如 Bloomberg 开源社区负责人兼 CTO 办公室成员 Kevin Fleming 在接受采访时所解读的:”在可能的情况下,我们在应用程序和基础设施的开发中,优先使用开源工具而不是商业工具。当工具的源代码可用时,你可以灵活地了解它的工作原理、修改它并支持它;不受供应商消失,或优先级改变的影响。开源工具让我们能够掌控自己的命运,如果某个工具对我们足够重要,我们甚至可以组建一个内部团队来为该工具提供支持和增强功能。”

同时,Bloomberg 也以 Take…and give back 的开源理念,在适当的时候将一些增强功能回馈给开源社区。
接下来,我们就从云计算基础设施、大数据、和编程语言三个方向一探他们在开源软件上的选择和贡献。

云时代基础设施 - OpenStack 和 Ceph

不久前,开源云软件 OpenStack 背后的 OpenInfra 基金会发文,欢迎 Bloomberg 成为它的金牌会员。

2013 年,当 Bloomberg 在构建它的私有云基础设施时,对于技术栈的设计,提出了高可用性、可水平拓展、架构健壮、以及离线状态下可部署和运行等方面的要求。

在虚拟化基础设施的选择上,当时的市场中既有商业化产品也有开源软件。最终,Bloomberg 选择了在开源的 OpenStack 上部署和运行一系列开源软件,例如 Hypervisor OS 采用了 Ubuntu、对象和块存储采用了 Ceph、数据库用了 MySQL+Galera、消息队列使用了 RabbitMQ3、日志采用了 Elasticsearch Kibana 。

投入 OpenStack 一年后,Bloomberg 的数据中心 中 就部署了数百台用于运行 OpenStack 的服务器。

谈到对 OpenStack 的贡献,Bloomberg 曾说,十年前加入 OpenStack 时,虽然社区中已有大量的厂商和初创公司,但成熟的公司并不多。而随着 Bloomberg 的加入,更多成熟公司加入到了 OpenStack 社区,为 OpenStack 生态增添了很多新的功能,支持了 OpenStack 云平台的开发、发展和成功。

而对于云基础设施中的存储,Bloomberg 则选择了 Ceph。

Ceph 是一个统一的分布式存储系统,具有高性能、高可用性、高可扩展性,和支持块、文件、和对象多种存储接口、支持多语言驱动的丰富特性。而且在当时,经过多年的发展,Ceph 已经得到了众多云计算厂商的支持并被广泛应用。红帽和 OpenStack 都可以与 Ceph 整合、以支持虚拟机镜像的后端存储。

在 Bloomberg,它的存储工程团队,为彭博终端的 6000 名应用程序开发人员、管理着超过 100 PB 的容量和内部云,承担着存储的设计、构建和维护工作。

由于 Bloomberg 在存储方面的投入,当 2020 年 3 月下旬因疫情导致全球股市暴跌时,当时,彭博终端上来自全球资本市场的数据几乎翻了一番,某几日的信息量甚至达到了 2400 亿条,但 Bloomberg 的存储系统经受住了考验。

Apache 软件基金会

Bloomberg 对开源软件的广泛使用,也使他们与 Apache 软件基金会产生了联系。目前,Bloomberg 是它的金牌赞助人。

从 2012 年至今,Bloomberg 已参与了 Apache 数十个开源项目的开发和贡献。 这些项目支持了 Bloomberg 的数据科学工作流程、数据处理工作流程和网络服务,以及公司运营的其它内部和外部服务。

在这些开源项目中,就有知名的 Hadoop 和 Solr。

对于 Bloomberg 来说,在他们面临的技术挑战中,包括了大规模数据存储、低延迟检索、海量请求、以及分布式计算和存储环境下的高可用性。 而 Hadoop 以及 HDFS、HBase、Hive、Oozie、YARN/Spark 等开源软件,则是他们大规模、高可用数据应用的基础。

目前,Bloomberg 的 Hadoop 基础架构团队管理的集群可以处理 10 PB 级别的存储,这些集群分布在 1000 台服务器上,每天运行上千亿个请求。

搜索引擎是彭博终端的另一项重要功能。Bloomberg 的搜索基础设施团队认为,搜索不只是针对文本,更是关于数字,而且是大量的数字。 为了使客户能对这些数字进行研究、判断和决策,Bloomberg 必须提供灵活、准确和及时的分析工具。而 Solr 就是 Bloomberg 用来构建这些分析工具的重要开源软件。

Apache Solr 是用 Java 编写的企业级搜索平台,提供了搜索相关的一系列高级功能,并且因为具有很强的扩展性和容错性,因此被广泛应用于企业搜索和分析用例。

在 2015 年,Bloomberg 搜索基础设施团队,利用 Solr 所构建的工具,就为 100 个以上的应用提供了搜索服务。而到 2019 年,利用 Solr 构建的 Bloomberg 搜索,已可以将分布在数百台机器上的上千个 Solr 云服务中的信息统一起来。

业内最好的 C++ 工程师都在为 Bloomberg 工作

最近,一篇文章的标题是这样的:《业内最好的 C++工程师都在为 Bloomberg 工作》。
在 Bloomberg,有近 6000 名工程师在写 C++。可以说,Bloomberg 是金融行业最大的 C++ 用户之一,也是头号赞助商。

Bloomberg 对语言的热爱,源自它的工程师们相信,选择正确工具的重要性。他们的大多数软件用 C++ 、JavaScript、TypeScript 和 Python 编写,同时他们也是这些开源社区的积极贡献者。
Bloomberg 与 C++ 的历史源远流长。最初,彭博终端的服务器端是用编程语言 Fortran 开发的,之后用 C 语言编写,再之后,客户端和服务器端都已向 C++ 和嵌入式 JavaScript 过渡。
C++ 是 Bloomberg 的核心编程语言之一。 在毫秒级敏感的金融行业,代码要有可扩展、可靠、和低延迟的特性。因此,Bloomberg 用 C++ 构建了从底层库、组件,到性能最高的金融应用程序和交易系统的所有内容。

C++ 在 Bloomberg 的使用之广,体现在 Bloomberg 有上万个 C++ 项目、约 2000 个 C++ 库。它还成立了专门的的开发环境小组 BDE,负责为上千名 Bloomberg 开发者提供一组 C++ 软件库、开发工具、和方法论。

Bloomberg 对 C++ 社区的贡献也具有独到之处。虽然现代 C++ 提供了许多新功能,但随着语言变得越来越复杂,在处理大型企业应用程序时,风险仍然很高。凭着对 C++ 的历史经验积累,以及在大规模应用上的实践体验,去年底,Bloomberg 传奇程序员、C++ 专家 John Lakos,与他们的其它三位资深 C++ 专家还合著了《Embracing Modern C++ safely》一书,分享并提醒大家 注意谨慎应用现代 C++ 的一些特性。

ending

对于 Bloomberg ,开源不是一个时髦的词汇,而是每一天的工作。

就在 2 个月前,Bloomberg 又开源了 Memray 这个 Python 的内存分析器,并迅速在 GitHub 上受到关注。

在 Bloomberg,有 3000 多名工程师使用 Python 编写代码和运行数据分析。 Memray 这个项目旨在使开发人员能够分析应用程序中的分配,以帮助减少内存使用、发现内存泄漏并识别代码中导致低效分配的热点。

Memray 这个例子, 再次证明了 Bloomberg 的开源优先理念。

因为拥有彭博终端,成立后的 Bloomberg 仅用 20 年的时间,就超越了有着 150 年历史的路透集团,成为全球最大的金融信息服务提供商。

时间流过四十年,彭博终端依然是为 Bloomberg 帝国带来主要收入的常青树;而无论是老牌传媒集团或是新锐们如何想复制和分一杯羹,彭博终端始终是 Bloomberg 无法被撼动的基石。


aryu
2.8k 声望602 粉丝