自建数据中心的经历分享

banq


Railway 是一家提供云服务平台的公司,专注于帮助开发者快速构建、部署和管理应用程序。它的目标是简化基础设施管理,让开发者能够专注于编写代码,而不必担心底层的基础设施问题。

Railway 最初是在 Google Cloud Platform (GCP) 上运行的,但后来他们决定建立自己的物理基础设施,以更好地控制成本、提高性能,并为客户提供更灵活的服务。通过自建数据中心,Railway 能够优化资源使用、降低延迟,并提供更具竞争力的定价。

以下是他们的经验分享:
Railway 一开始是在 Google 的云平台上运行的。这个平台帮我们起步,但也带来了很多问题,甚至威胁到了我们的生意。更重要的是,依赖这种大平台让我们没法给客户提供最好的服务。

它影响了我们的价格(比如出口费用),限制了我们可以提供的服务水平,还让我们在开发新功能时遇到了很多技术限制。我们经常不知道上游发生了什么问题,尽管我们每年花了很多钱,但得到的支持却像是只花了 100 块钱一样。

所以,去年我们启动了一个叫 Railway Metal 的项目。

九个月后,我们在加利福尼亚的第一个数据中心站点正式投入使用。我们从头开始设计、规划和安装了所有东西,从笼子里的光纤电缆到与互联网公司签订的各种合同。现在,我们还在为另外三个数据中心区域做准备。

为了给客户提供“无基础设施”的云体验,我们需要快速建立自己的物理基础设施。这就是我们今天要讲的内容。

如果你想自己建一个云平台,那么从 2024 年 1 月启动 Railway Metal 项目开始,我们花了五个月时间才让第一批服务器上线。然后又花了三个月时间才放心让用户使用这些硬件。

第一步:找个地方放服务器
在云平台上使用“本地”资源时,你需要一个地方来放服务器,还需要可靠的电源来保持它们运行。当然,还需要足够的冷却系统,防止服务器过热。

一般来说,你有三个主要选择:

  • 新建数据中心:自己买地或租地建数据中心。
  • 笼子托管:在数据中心里租一个用网状墙围起来的私人空间。
  • 机架托管:在数据中心里租单个机架或部分机架。

我们选择了第二种方案:笼子托管。这样我们有了四面墙、一扇安全的门,还有一块空白的空间来放其他设备。

空笼子
空间本身的成本不高,但电力和冷却成本很高。不同地区的电费差异很大,比如在美国西海岸,电费可能不到新加坡的一半。无论你是否使用电力,你都需要按月支付固定费用,以确保电力随时可用。

你需要多少电力?
理想情况下,如果你已经决定要迁移数据中心,你应该对需要多少计算资源有个大致的概念。我们首先设定了目标 vCPU 数量、内存大小和 NVMe 存储容量,以匹配我们在 Google 云平台上的资源。

根据这些数据,我们选择了服务器和 CPU。做这种计算时,有很多因素要考虑——可能值得单独写一篇博客——但对我们来说,最大的因素是功率密度,也就是如何在特定功耗内获得所需的计算能力。

不过,计算电力需求并不像简单相加那么简单,尤其是对于三相供电——Cloudflare 有一篇很棒的博客文章详细介绍了这个主题。

电力是数据中心最关键的资源,停电可能需要很长时间才能恢复。因此,冗余非常重要,每个机架必须有两个完全独立的电源供应。在正常情况下,两个电源会分担负载,但设计必须能够应对一个电源中断的情况。

为了把电力输送到服务器,你还需要一个配电单元 (PDU)。你可以根据插座数量和管理功能来选择 PDU。基本的 PDU 就像高级的延长线,而我们部署的 PDU 可以控制和计量每个插座的用电情况。

这样,笼子里就有了电。

网络连接
没有网络,云计算机器就无法工作。为了实现 Railway 的最低延迟,我们需要建立与世界其他地方的稳定连接。

我们选择了与一级互联网服务提供商 (ISP) 联网的数据中心设施,这些设施是互联网交换中心 (IX) 的一部分,并且可以提供到附近其他数据中心的光纤连接。

部署到 Railway 的应用程序需要通过网络连接到各种终端——无论是澳大利亚悉尼的家庭互联网用户,还是托管在美国 AWS 服务器上的 API。为了让用户获得最佳延迟和最低带宽成本,我们与多家互联网提供商签订了合同,针对不同用例进行优化。

我们根据目标地区网络的成熟度来选择 ISP。与错误的 ISP 合作可能会导致额外的网络跳数(增加延迟),或者在最坏的情况下导致复杂的网络路由。因此,在每个地区,我们至少选择两个独立的网络提供商。

连接后,我们会从每个 ISP 收到完整的互联网路由表,并将它们整合到我们的网络交换机上,以找到每个 IP 前缀的最佳路径。如果你有澳大利亚的用户尝试访问部署在新加坡的应用程序,我们可能会将数据包直接交给 Telstra,因为 Telstra 在澳大利亚拥有最密集的网络覆盖。如果同一个应用程序需要将数据包发送到日本的用户或服务器,我们可能会选择 PCCW,因为它直接与日本的 NTT 对等,并且在亚太地区有广泛的覆盖。

为了实现冗余,我们在每个地区都建立了多个区域,这些站点之间的互连对我们的扩展至关重要。我们使用了多种工具来规划这次扩展,比如暗光纤或波长服务。结果是,你的应用程序不会注意到你的数据库是在同一个房间,还是在相邻建筑物的 4 个街区之外——这是一个功能,而不是缺陷——因为它可以增强对单个数据中心故障的恢复能力。

...

好了,现在你已经找到了喜欢的空间,与数据中心签订了协议,并与多家 ISP 签订了合同,接下来就可以开始安装服务器了,对吧?

嗯,还不完全是。首先,你还需要一些其他东西来给服务器一个温暖舒适的家。

过道、机架和高架基础设施
在数据中心,机架按排排列,机架之间的空间(即过道)用于空气流通。

冷通道是冷空气从数据中心设施吹入的地方,机架中的服务器会吸入这些空气并将其排向后方的热通道。数据中心设施会将这些热空气从热通道中排出。为了获得最佳效率,你不希望这些通道之间的空气混合。

即使你选择使用传统的 19 英寸宽的设备,机架本身也有一定的可变性。你可以选择适合你的设备和布线需求的高度、宽度和深度。

大多数服务器设备都可以在轨道上滑动,以便于维护,因此确保机架尺寸允许这一点很重要。布线和电缆管理也需要一些空间,因此需要在每个机架的拥挤程度与机架中可以容纳的设备数量之间进行权衡。

根据我们的经验,电源和冷却通常是限制因素,而不是实际可用空间。在较新的站点中,我们选择更宽的 800 毫米机架,以便通过将电缆移出排气口来实现更好的气流。

机架式服务器
除了机架之外,你还需要一些基础设施来将电力和数据传送到机架。这可能涉及安装一些架空基础设施和托盘,以便你将光缆从机架边缘布线到每个机架,并在机架之间布线。这是数据中心运营商在报价机架时会添加的内容。

根据你的设计,你需要通过确保架空基础设施、机架本地布线和设备方向一致来优化短电缆路径。由于我们的机架在每个机架中都有密集的交换机到服务器光纤布线,我们购买的交换机的端口朝向机架的背面(这些交换机称为反向气流交换机,因为它们在具有网络端口的一侧排气)。

这样我们就可以对齐电缆托架,使得所有电缆都出现在机架的一侧,并且机架的前部和后部之间没有曲折的电缆。

梯形架和光纤电缆托盘
现在,你已经拥有了空间、签约了 ISP、订购了硬件、获得了机架,并且对如何布置这一切有了很好的了解。但这仍然是一个相当昂贵的乐高积木,放在数据中心的装卸区。要组装它,你现在需要利用人类历史上发明的最通用的编程工具……Microsoft Excel。

首先,让我们回顾一下并发布一个免责声明:整洁有序的布线需要大量的练习;我们首先自己尝试过——结果好坏参半。

我们自己尝试布线

为了正确安装,我们聘请了专业人员,但专业人员需要知道要安装什么。全面的文档包必不可少。布线矩阵和机架高度是向承包商传达如何将服务器架设和接线的常用文档。

布线矩阵描述了每条电缆的端接,指定了连接两侧的设备位置和端口,以及电缆本身的规格(光纤类型、长度等)。机架立面图是机架本身的直观表示,显示了每台设备的位置和方向。

文档编制工作可能非常繁重,我们的每个安装阶段都涉及 60 多个设备、300 多条独立电缆和数十个小细节。所有这些都是手工编写成书面规范和电子表格,我们将其用作安装和调试的基础。从材料运到现场到安装好所有东西大约需要 6-14 天。

这一切似乎与软件、DevOps或你通常认为的“基础设施”相去甚远,这是事实——建造数据中心笼子可能更接近于建造房屋,而不是部署 Terraform 堆栈。

除此之外,每个数据中心设施、承包商和供应商的做法都略有不同,即使是在同一组织内也是如此。运营方面要求你保持警惕并极其注重细节。


金属踏板
安装好的笼子只是一块空白的画布,网络设备需要配置,路由器配置需要写入,RIR(区域互联网注册表)记录需要更新,并且我们必须与Redfish API(服务器主板和 PDU 上的专用控制器的 HTTP API)和 PXE(一种通过网络启动服务器的协议)之类的进行交互,以使一切正常运行。

我们还没有讨论网络的工作原理。我们的设计使用FRR和运行SONiC的白盒网络交换机来构建仅 L3 的软件驱动网络,并与我们的控制平面深度集成。