Перейти до вмісту

LeoFS

Матеріал з Вікіпедії — вільної енциклопедії.
LeoFS
ТипРозподілене об'єктне сховище даних
АвторЙосуке Хара (головний архітектор)
РозробникLeo Project
Перший випуск4 липня 2012
Стабільний випуск1.4.4 (3 червня 2020)
Операційна системаLinux
Мова програмуванняErlang
ЛіцензіяApache License 2.0
Репозиторійhttps://github.com/leo-project/leofs
Вебсайтleo-project.github.io/leofs/

LeoFS — вільна розподілена система об'єктного зберігання даних, призначена насамперед для неструктурованих даних: зображень, відео, документів, журналів подій та інших файлів. Написана переважно мовою Erlang і працює на платформі Erlang/OTP. На відміну від сховища, розміщеного на одному сервері, LeoFS розподіляє об'єкти між кількома вузлами та підтримує збереження їхніх копій для підвищення відмовостійкості. Система надає інтерфейси, сумісні з Amazon S3, REST і NFS версії 3.[1]

Проєкт виник у японській компанії Rakuten, де LeoFS використовували для зберігання та видавання великої кількості зображень. Його головним архітектором і розробником був Йосуке Хара (Yosuke Hara). Вихідний код розповсюджується на умовах ліцензії Apache License 2.0.[2][3][4]

Архітектура

[ред. | ред. код]

LeoFS утворює кластер із серверів, які виконують різні завдання. Його основними складниками є LeoGateway, LeoStorage та LeoManager. Такий поділ відокремлює приймання клієнтських запитів від фізичного зберігання об'єктів та керування кластером.[5]

LeoGateway — вузол, через який клієнтські програми звертаються до сховища. Він приймає запити через підтримувані мережеві інтерфейси, визначає потрібні вузли зберігання та повертає клієнтові результат. Для оброблення HTTP-з'єднань використовується Cowboy, вебсервер для Erlang. У шлюзі також реалізовано кешування об'єктів в оперативній пам'яті й на диску, що дає змогу зменшувати кількість звернень до серверів зберігання.[6]

LeoStorage безпосередньо записує, читає та видаляє об'єкти й пов'язані з ними метадані. Вузли цього типу відповідають також за реплікацію даних — створення їхніх копій на інших серверах — і відновлення копій після виявлення розбіжностей або збоїв. Це дозволяє продовжувати роботу сховища за недоступності частини вузлів залежно від конфігурації кластера.[7]

LeoManager керує конфігурацією кластера, стежить за станом вузлів і поширює між ними відомості про розміщення об'єктів. Ці відомості представлені структурою RING, побудованою на розподіленій геш-таблиці. Вона допомагає визначити, на якому вузлі слід шукати конкретний об'єкт. Для зберігання й реплікації керівної інформації між вузлами LeoManager використовується база даних Mnesia. Керувати кластером можна за допомогою командного інструмента leofs-adm.[8]

Розміщення та зберігання об'єктів

[ред. | ред. код]

Для розподілу об'єктів між вузлами LeoFS застосовує узгоджене хешування. Коли клієнт надсилає запит, шлюз за інформацією з RING визначає потрібний вузол LeoStorage. У разі зміни складу кластера система може перерозподіляти об'єкти між серверами.[6][9]

На диску LeoStorage зберігає вміст об'єктів у контейнерах формату AVS (ARIA Vector Storage). Записи до них додаються послідовно, а метадані індексуються окремо, з використанням сховища типу «ключ—значення» LevelDB. Така організація зменшує потребу в довільному пошуку позиції запису на диску, але потребує періодичного ущільнення контейнерів, щоб прибирати застарілі дані.[7]

Великі об'єкти шлюз може розділяти на частини, які зберігаються та реплікуються як окремі об'єкти. Під час читання їх збирають у початковому порядку. У документації наведено типовий розмір частини 5 МБ із можливістю зміни цього параметра.[7]

Узгодженість і відмовостійкість

[ред. | ред. код]

LeoFS використовує модель кінцевої узгодженості (англ. eventual consistency). Це означає, що після оновлення об'єкта різні вузли певний час можуть мати неоднакові версії даних, але механізми реплікації та відновлення мають поступово усувати розбіжності. Такий підхід надає перевагу доступності системи за умов мережевих збоїв, хоча не гарантує негайної однаковості всіх копій.[9]

Адміністратор може налаштовувати кількість копій об'єкта (n) та кількість копій, потрібних для успішного завершення операцій запису (w), читання (r) і видалення (d). Вибір цих параметрів впливає на співвідношення між доступністю даних, узгодженістю та швидкодією. Також передбачено реплікацію між окремими кластерами, зокрема розташованими в різних центрах оброблення даних.[9][10]

Доступ до даних

[ред. | ред. код]

Основним способом роботи з LeoFS є програмний інтерфейс, сумісний з Amazon S3. Завдяки цьому клієнти можуть виконувати типові операції з контейнерами (buckets) та об'єктами, використовуючи інструменти й бібліотеки для S3. Підтримка сумісного інтерфейсу не означає повної реалізації всіх функцій сервісу Amazon S3: набір доступних операцій залежить від версії LeoFS.[4][6]

Система також надає інтерфейс REST через HTTP і підтримує NFSv3, завдяки якому до даних можна звертатися через мережеву файлову систему. Підтримку NFS додали у гілці LeoFS 1.1, а в наступних випусках її розвивали.[4][6]

Історія розвитку

[ред. | ред. код]

Розробка LeoFS була пов'язана з потребою компанії Rakuten зберігати значні обсяги неструктурованих даних. За програмою технологічної конференції Rakuten 2013 року, Йосуке Хара працював головним архітектором і розробником LeoFS від 2010 року. 4 липня 2012 року Rakuten оприлюднила LeoFS як програмне забезпечення з відкритим кодом. Уже у вересні того року Хара повідомив у списку розсилання спільноти Erlang про випуск LeoFS 0.10.1.[3][11][12]

У 2013 році проєкт представили на конференції Erlang Factory у Сан-Франциско як розподілену систему, яку використовувала Rakuten для зберігання й видавання зображень. У 2014 році Йосуке Хара виступив із доповіддю про архітектуру LeoFS та досвід її використання в Rakuten на заході асоціації Storage Networking Industry Association (SNIA).[2][13]

Проєкт продовжували розвивати впродовж 2010-х років. У версіях 1.1—1.3 розширювали мережеві інтерфейси, зокрема підтримку NFSv3 та сумісність із S3. Останнім випуском, позначеним на сторінці GitHub Releases як найновіший станом на жовтень 2026 року, є LeoFS 1.4.4 від 3 червня 2020 року.[4][14]

У травні 2026 року супроводжувачі колекції портів FreeBSD вилучили з неї LeoFS, зазначивши причинами відсутність нових випусків упродовж кількох років і залежність від застарілої версії Erlang. Це характеризує стан підтримки пакета у FreeBSD, але саме по собі не означає припинення існування вихідного коду проєкту.[15]

Див. також

[ред. | ред. код]

Примітки

[ред. | ред. код]
  1. ↑ LeoFS, A Storage System for a Data Lake and the Web. LeoFS Documentation (англ.). Процитовано 21 жовтня 2026.
  2. 1 2 Erlang Factory SF Bay Area 2013 — Talks. Code Sync (англ.). Процитовано 21 жовтня 2026.
  3. 1 2 Speakers: Rakuten Technology Conference 2013. Rakuten Technology Conference (англ.). Процитовано 21 жовтня 2026.
  4. 1 2 3 4 LeoFS — A Storage System for a Data Lake and the Web. GitHub (англ.). Leo Project. Процитовано 21 жовтня 2026.
  5. ↑ LeoFS' Architecture. LeoFS Documentation (англ.). Процитовано 21 жовтня 2026.
  6. 1 2 3 4 LeoGateway's Architecture. LeoFS Documentation (англ.). Процитовано 21 жовтня 2026.
  7. 1 2 3 LeoStorage's Architecture. LeoFS Documentation (англ.). Процитовано 21 жовтня 2026.
  8. ↑ LeoManager's Architecture. LeoFS Documentation (англ.). Процитовано 21 жовтня 2026.
  9. 1 2 3 Cluster Settings. LeoFS Documentation (англ.). Процитовано 21 жовтня 2026.
  10. ↑ Multi Data Center Replication. LeoFS Documentation (англ.). Процитовано 21 жовтня 2026.
  11. ↑ Rakuten Technology Conference 2012: Session List. Rakuten Technology Conference (англ.). Процитовано 21 жовтня 2026.
  12. ↑ Yosuke Hara (12 вересня 2012). [erlang-questions] [ANN] LeoFS v0.10.1 (S3 Compatible Storage). erlang-questions (англ.). Процитовано 21 жовтня 2026.
  13. ↑ Yosuke Hara (16 вересня 2014). Reliable, Scaling and High Performance Storage System: LeoFS. SNIA Educational Library (англ.). Процитовано 21 жовтня 2026.
  14. ↑ Releases · leo-project/leofs. GitHub (англ.). Leo Project. Процитовано 21 жовтня 2026.
  15. ↑ databases/leofs: Highly scalable, fault-tolerant distributed file system. FreshPorts (англ.). Процитовано 21 жовтня 2026.

Посилання

[ред. | ред. код]