通过为超过2.35亿个网站提供TLS证书,Let’s Encrypt有助于保护大部分的网络。数据库是Let's Encrypt管理证书颁发方式的核心。如果此数据库的性能不够好,则可能会导致我们的订阅者出现API错误和超时。数据库性能是我们在满足服务水平目标的同时进行扩展的最关键的因素。 2020年末,我们升级了数据库服务器,并对结果感到非常满意。
我们的CA软件Boulder使用MySQL风格的架构和查询来管理订户帐户和整个证书颁发过程。它设计用于单个MySQL,MariaDB或Percona数据库。我们目前将MariaDB与InnoDB数据库引擎一起使用。
为了最小化复杂性,我们对单个数据库运行CA。最小化复杂度有利于安全性,可靠性并减轻维护负担。在任何给定时间,我们都有许多活动的数据库副本,并且我们将一些读取操作定向到副本数据库服务器,以减少主数据库上的负载。
这种设计的结果是我们的数据库机必须非常强大。最终,我们可能需要将单个数据库分片或拆分为多个数据库,但是到目前为止,硬件的进步已使我们避免了这种情况。
上一代数据库硬件功能强大,但经常被推到极限。对于下一代产品,我们希望在相同的2U外形尺寸下几乎将所有性能指标提高一倍以上。为了实现这一目标,我们需要AMD EPYC芯片,而Dell的PowerEdge R7525是理想选择。规格如下:
通过使用AMD EPYC,我们能够获得64个物理CPU内核,同时保持较高的时钟速度:2.9GHz基础和3.4GHz增强。更重要的是,EPYC提供了128个PCIe v4.0通道,这使我们可以在一台计算机上放置24个NVMe驱动器。 NVMe的速度非常快(比上一代数据库服务器中的SATA SSD快5.7倍),因为它使用PCIe而不是SATA。但是,PCIe通道通常非常有限:现代消费类芯片通常只有16条通道,而英特尔的Xeon芯片则只有48条通道。通过每个芯片提供128条PCI通道(v4.0,不少于v4.0),AMD EPYC使得大包装成为可能。一台计算机中包含多个NVMe驱动器。稍后我们将详细讨论NVMe。
我们首先查看处理请求的中位数时间,因为它最能反映订户的体验。升级之前,我们在约90毫秒内解决了中位数API请求。升级使该指标降低至约9毫秒!
我们可以清楚地看到我们的旧CPU达到了极限。在升级主数据库服务器的前一周,其CPU使用率(来自/ proc / stat)平均超过90%:
新的AMD EPYC CPU占25%。您可以在此图中看到我们在9月15日将新数据库服务器从副本服务器(只读)升级为主要数据库(读/写)的位置。
升级大大减少了我们的整体数据库延迟。平均查询响应时间(来自INFORMATION_SCHEMA)约为0.45毫秒。
NVMe驱动器由于其令人难以置信的性能而变得越来越受欢迎。但是直到最近,由于NVMe使用PCIe通道,几乎不可能在一台计算机上同时获得许多。这些限制非常有限:英特尔的Xeon处理器仅带有48个PCIe v3通道,其中一些已被芯片组和附加卡(如网络适配器和GPU)用尽。在其余的通道中,您无法容纳许多NVMe驱动器。
AMD最新一代的EPYC处理器带有128条PCIe通道,是Intel提供的两倍以上,它们是PCIe v4!这足以装满装有NVMe驱动器的2U服务器(在我们的示例中为24个)。
一旦服务器上装有NVMe驱动器,就必须决定如何管理它们。我们上一代的数据库服务器在RAID-10配置中使用了硬件RAID,但是NVMe没有有效的硬件RAID,因此我们需要另一种解决方案。一种选择是软件RAID(Linux mdraid),但是我们对OpenZFS提出了一些建议,并决定尝试一下。我们对此感到非常满意!
关于如何最好地为NVMe驱动器池和数据库工作负载设置和优化OpenZFS的信息不多,所以我们想分享我们学到的知识。您可以在此GitHub存储库中找到有关我们的设置的详细信息。
由于越来越多的人依靠Let's Encrypt来获得TLS / SSL提供的安全性和隐私性,因此必须进行数据库升级。 设备非常昂贵,对于我们的SRE团队来说,规划和执行过渡是一项艰巨的任务,但我们在整个过程中收获颇丰。 我们依靠支持者的贡献来提供我们的服务。 如果您的公司或组织想赞助Let's Encrypt,请发送电子邮件给我们:[email protected]。 如果您力所能及,我们要求您作出个人贡献。