Внутреннее устройство 2U-сервера Dell PowerEdge R7525. Два серебристых прямоугольника посередине — процессоры AMD EPYC 7542. Сверху и снизу от них планки оперативной памяти по 64 ГБ каждая. На левом краю фотографии — 24 диска NVMe, такое возможно только на EPYC
Let's Encrypt — крупнейший удостоверяющий центр в интернете, на его бесплатных TLS-сертификатах работает более 235 млн сайтов. В сердце УЦ находится база данных, на основе которой происходит управление сертификатами. Важно, чтобы её производительность была на уровне, иначе мы увидим ошибки API и таймауты при выдаче сертификатов.
В конце 2020 года некоммерческая организация сделала апгрейд своих серверов.
Основное программное обеспечение Let's Encrypt — опенсорсный удостоверяющий центр Boulder с поддержкой протокола ACME. Он использует схемы и запросы в стиле MySQL для управления аккаунтами пользователей и всем процессом выдачи сертификатов. Опенсорсный УЦ работает с одной базой данных MySQL, MariaDB или Percona. В настоящее время используется MariaDB с движком InnoDB.
УЦ запускается с одной базой данных, чтобы минимизировать сложность. Разработчики говорят, что это хорошо для безопасности, надёжности и простоты технического обслуживания. У Let's Encrypt есть несколько реплик БД, активных в любой момент времени, и некоторые операции чтения направляются на серверы реплик, чтобы уменьшить нагрузку на основную БД.
Одним из следствий такой конструкции является то, что серверы должны быть достаточно мощными. Если бы серверы не справлялись, то в конце концов Let's Encrypt пришлось бы разбить одну БД на несколько, но проведённый апгрейд позволил этого избежать.
Технические характеристики
Прошлые серверы были мощными, но регулярно доходили до пиковой производительности. Для нового поколения поставили цель более чем удвоить почти все показатели производительности в том же форм-факторе 2U. Для этого выбрали процессоры EPYC AMD и посчитали оптимальным вариантом сервер Dell PowerEdge R7525. Вот его технические характеристики, в сравнении со старыми серверами:
Предыдущее поколение | Новое поколение | |
CPU | 2x Intel Xeon E5-2650 Всего 24 ядра / 48 потоков |
2x AMD EPYC 7542 Всего 64 ядра / 128 потоков |
Память | 1 ТБ 2400MT/с | 2 ТБ 3200MT/с |
Диски | 24x 3,8 ТБ Samsung PM883 SATA SSD 560/540 МБ/с чтение/запись |
24x 6,4 ТБ Intel P4610 NVMe SSD 3200/3200 МБ/с чтение/запись |
Как видим, количество ядер и объём памяти действительно удвоились, а производительность SSD номинально выросла более чем в пять раз.
1 — ручка, 2 — модуль расширения Riser 1, 3 — первый блок питания, 4 — модуль расширения Riser 2, 5 — радиатор для первого процессора, 6 — разъёмы памяти DIMM для первого процессора, 7 — вентиляторы, 8 — служебная метка, 9 — задняя панель и системная плата SSD, 10 — каркас для вентиляторов, 11 — разъёмы памяти DIMM для второго процессора, 12 — радиатор для второго процессора, 13 — материнская плата, 14 — второй блок питания, 15 — модуль расширения Riser 3, 16 — модуль расширения Riser 4
В каждом сервере установлены два процессора AMD EPYC, в общей сложности 64 физических ядра. Тактовая частота 2,9 ГГц с разгоном до 3,4 ГГц под нагрузкой. Что ещё более важно, EPYC даёт 128 линий PCIe v4.0. Это позволяет разместить в одной машине 24 диска NVMe. Это невероятно быстрые диски (в 5,7 раз быстрее твёрдотельных накопителей SATA на серверах предыдущего поколения), потому что они используют PCIe вместо SATA. Количество линий PCIe обычно весьма ограничено: на процессорах для массового рынка обычно всего 16 линий, а на чипах Intel Xeon их 48. Здесь процессоры AMD EPYC выгодно отличаются со 128 линиями PCIe на чип, позволяя установить большое количество накопителей NVMe на каждую машину.
Влияние на производительность
Let's Encrypt приводит среднее время обработки запроса, потому что этот показатель сильнее всего чувствуется со стороны пользователей. Перед обновлением медианный запрос к API занимал около 90 мс. После апгрейда — около 9 мс!
На следующем графике видно, что старые процессоры работали на пределе. За неделю до апгрейда загрузка процессора на первичном сервере БД (из /proc/stat) в среднем превышала 90%:
Новые процессоры AMD EPYC работают примерно на 25% от своей максимальной мощности. Это видно на графике, где 15 сентября новый сервер повысили с реплики (только для чтения) до первичного (чтение/запись).
Обновление значительно уменьшило общую задержку БД. Среднее время ответа (от INFORMATION_SCHEMA) раньше составляло около 0,45 мс.
Теперь запросы обрабатываются в среднем в три раза быстрее, примерно за 0,15 мс.
OpenZFS и NVMe
Сегодня диски NVMe становятся всё более популярными благодаря невероятной производительности. Однако до недавнего времени было почти невозможно поставить на один сервер много NVMe, потому что они используют линии PCIe, а процессор поддерживает ограниченное количество таких линий, как мы уже говорили. Intel Xeon поддерживает 48 линий PCIe v3, и некоторые из них используются чипсетом, сетевым адаптером и графическим процессором. Остаётся немного линий для NVMe.
Последнее поколение процессоров AMD EPYC поддерживает 128 линий PCIe — более чем двукратное превышение по сравнению с Intel, и это PCIe v4! Этого достаточно, чтобы под завязку упаковать дисками NVMe сервер 2U (у Dell поместилось 24 штуки).
Когда у вас сервер, полный дисков NVMe, нужно решить, как ими управлять. В предыдущем поколении серверов Let's Encrypt был устроен аппаратный RAID в конфигурации RAID-10, но эффективного аппаратного RAID для NVMe не существует, поэтому пришлось искать другое решение. Как один из вариантов рассматривался программный RAID (mdraid в Linux), но разработчикам посоветовали OpenZFS. Они решили попробовать, и вполне удовлетворены результатом.
Они говорят, что в интернете мало информации, как лучше всего настроить и оптимизировать OpenZFS для пула дисков NVMe и рабочей нагрузки БД, поэтому они подробно задокументировали собственный опыт. Возможно, кому-то пригодится.
Let's Encrypt говорит, что этот апгрейд был необходимым и в каком-то смысле вынужденным, потому что количество пользователей бесплатного УЦ постоянно растёт, как и количество выдаваемых сертификатов TLS. Серверы довольно дорогие и апгрейд представлял серьёзную техническую задачу для инженеров организации, но всё прошло удачно.
Let's Encrypt — некоммерческий удостоверяющий центр, который существует за счёт спонсорской помощи и индивидуальных пожертвований.