TigerBeetle: как отказ от динамической памяти и io_uring дают субмиллисекундные задержки
TigerBeetle Core System Architecture: Deconstructing Performance Engineering

TigerBeetle, специализированная база данных для финансовых реестров на Zig, достигает пропускной способности в сотни тысяч транзакций в секунду с предсказуемыми субмиллисекундными задержками. Архитектура основана на полном отказе от динамического выделения памяти после инициализации, прямом вводе-выводе через io_uring с нулевым копированием и однопоточном цикле выполнения с репликацией Viewstamped Replication (VSR). В статье разбираются ключевые принципы: статическое выделение памяти, фиксированные 128-байтные структуры для счетов и переводов, а также использование возможностей компиляции Zig для контроля выравнивания и безопасности.
TigerBeetle’s architectural choices stand out as a masterclass in modern performance engineering.
- hoppp
Очень жаль, что они не превратили это в фреймворк для зависимостей или баз данных, где пользователи могли бы определять свою собственную бизнес-логику, чтобы заменить двойную бухгалтерию, переиспользуя всю системную архитектуру, сетевые возможности, консенсус и т.д. Это было бы что-то вроде новой парадигмы, где можно создавать кастомные базы данных с произвольной логикой записей, построенные на этом стеке.
- jorangreef
Йоран из TigerBeetle! Я создал TB. Готов ответить на вопросы!
- kilroy123
Их симуляция потрясающая: https://sim.tigerbeetle.com
- teabee89
"Используя однопоточный цикл выполнения, TigerBeetle идеально согласует свою программную архитектуру с физическими реалиями современного железа." Может кто-нибудь объяснить, почему однопоточный цикл выполнения лучше согласуется с физическими реалиями современного железа?
- SPascareli13
Потрясающая статья, и очень доступная. Так вот, батчинг запросов — это то, что, как мне кажется, всегда должно сильно повышать производительность, но большинство серверных реализаций делают это довольно сложным, но труднее всего мне понять, как удерживать низкую задержку, если несколько клиентов отправляют запросы, объединённые в один батч? Общая задержка для всех клиентов всегда равна задержке самого медленного.