Открыт код распределённой файловой системы TernFS

Компания XTX Markets открыла исходный код файловой системы TernFS, спроектированной для создания распределённого хранилища, охватывающего несколько территориально разделённых датацентров и способного хранить до десятков эксабайт данных, триллионов файлов и сотен миллиардов каталогов, с которыми могут одновременно взаимодействовать миллионы клиентов. Код проекта написан на языках С++ и Go и распространяется под лицензией GPLv2. Спецификации протокола и клиентские библиотеки поставляются под лицензией Apache 2.0.

ФС оптимизирована для нагрузок, свойственных системам машинного обучения — запись и чтение файлов, не изменяемых после создания и содержащих больше нескольких мегабайт данных. ФС не рассчитана на частое создание новых каталогов и частое перемещение файлов между каталогами. Присутствуют возможности как для восстановления удалённых по ошибке файлов или каталогов, так и для настройки политик полного безвозвратного удаления. Содержимое ФС может реплицироваться между несколькими датацентрами в разных регионах. Узлы хранения могут включать различные типы накопителей (на основе дисков и flash-памяти).

Одним из требований при проектировании было отсутствие единой точки отказа и обеспечение высокой надёжности хранения — аварийные отключения питания не должны приводить к повреждению ФС, а файлы не могут оказаться записанными частично (для чтения доступны только полностью записанные файлы). Система устойчива к выходу из строя отдельных накопителей, узлов с метаданными и узлов хранения. Возможно выполнение обслуживания хранилища без остановки работы.

Внедрение хранилища на базе TernFS в компании XTX Markets началось летом 2023 года, после полутора лет разработки ФС. В середине 2024 года все системы машинного обучения XTX Markets были переведены на TernFS. В настоящее время хранилище образует более 30 тысяч дисков и 10 тысяч Flash-накопителей, размещённых в трех датацентрах. Общий объём хранимых данных оценивается в 500 петабайт, а пиковая производительность — несколько петабайт в секунду. Хранилище используется в кластере, насчитывающем более 100 тысяч вычислительных узлов. Инцидентов, приводящих к потере данных, за два года эксплуатации не случалось.

Среди ограничений TernFS: записанные файлы не могут быть изменены; низкая эффективность работы с файлами размером меньше 2 МБ; низкая производительность операции создания и удаления каталогов; отсутствие разделения прав доступа.

Компоненты, образующие кластер хранения TernFS:

  • Узлы хранения метаданных, отвечающие за управление информацией о структуре каталогов и атрибутах файлов.
  • Узлы координации работы (CDC — Cross-Directory Coordinator), выполняющие транзакции, охватывающие разные каталоги.
  • Сервисы хранения, обеспечивающие хранение содержимого файлов.
  • Реестр, содержащий информацию о всех остальные сервисах и выполняющий мониторинг за их работой.
  • Клиентские службы для обращения пользователей к ФС:
    • ternweb — доступ к хранилищу через Web API.
    • terncli — интерфейс командной строки.
    • ternfs.ko — модуль для ядра Linux, позволяющий монтировать хранилище для работы как с локальной ФС.
    • ternfuse — реализация клиента для работы с ФС, использующая подсистему FUSE.
    • terns3 — реализация API Amazon S3.

  • Фоновые процессы:
    • GC — сборщик мусора, освобождающий просроченные снапшоты (удалённые, но не очищенные файлы) и очищающий блоки для необратимо удаляемых файлов.

    • scrubber — выявление деградации данных и восстановление.
    • migrator — исключение из хранилища сбойных дисков.

                                     
 ┌────────────────┐                    
 │ Metadata Shard ◄─────────┐          
 └─┬────▲─────────┘         │          
   │    │                   │          
   │    │                   │          
   │ ┌──┴──┐                │          
   │ │ CDC ◄──────────┐     │          
   │ └──┬──┘          │     │          
   │    │             │ ┌───┴────┐     
   │    │             └─┤        │     
 ┌─▼────▼────┐          │ Client │     
 │ Registry  ◄──────────┤        │     
 └──────▲────┘          └─┬──────┘     
        │                 │            
        │                 │            
 ┌──────┴────────┐        │            
 │ Block Service ◄────────┘            
 └───────────────┘



Источник: http://www.opennet.ru/opennews/art.shtml? num=63927

©  OpenNet