Люди просили створити надійний механізм обміну файлами. Сьогодні ми раді представити новий модуль файлового сервера з відкритим вихідним кодом. Як найновіший компонент екосистеми Psono, він вирішує декілька проблем:
І саме тут Psono стає у пригоді. Psono було розроблено з урахуванням усіх цих проблем і є надзвичайно гнучким.
Отже, як це виглядає для користувача, запитаєте ви. Просто.
Достатньо просто, сподіваюся.
Під капотом клієнт виконує дещо складніші кроки, однак вони приховані від користувача:
Завдяки цьому механізму ми можемо вирішити проблему з будь-яким розміром файлів, адже файли розбиваються на частини. Ми можемо розподіляти завантаження по декількох серверах навіть для одного файлу. Усі файли (як і все інше у psono) шифруються до того, як покинуть клієнт, і тільки потім надсилаються на сервер.
Верхня частина показує типовий сценарій. Relay-сервер (простий зворотний проксі) віддає статичні файли (веб-клієнт). Веб-клієнт відкривається в браузері, який потім звертається до REST API серверу. Сервер використовує базу даних Postgres для зберігання всієї постійної інформації. Веб-клієнт Psono і сервер Psono можна вважати безстанними, усі дані зберігаються в базі даних Postgres.
Якщо ви хочете підключити файловий сервер, спочатку треба створити налаштування шарду та кластера на сервері, а потім ці налаштування використати для конфігурації самого файлового сервера. Коли файловий сервер запускається, він автоматично реєструється і далі кожні 10 секунд повідомляє про свою доступність. Якщо файловий сервер зупиняється, сервер це розпізнає і перестає надсилати клієнтів на "мертвий" сервер. Коли він повертається до роботи, він знову реєструється і починає отримувати запити від клієнтів. На зображенні вище ми зберігаємо всі частини у локальному сховищі та маємо Relay-сервер (може бути той самий, що й для звичайного сервера або веб-клієнта для невеликих середовищ) для SSL-офлоуду.
Окрім локального сховища, можна використовувати різні сховища та навіть поєднувати їх.
Наразі підтримуються (окрім локального сховища) Amazon S3, GCP Cloud Storage та Azure Blob Storage.
Можна використовувати декілька файлових серверів для вирішення, наприклад, проблем із продуктивністю через обмеження пропускної здатності. Можливо, у вас є працівники, які працюють віддалено, при цьому в офісі — дуже слабке інтернет-з’єднання. Інше використання — захистити локальні файли ще краще і
Одна із конфігурацій, яка вирішує проблему зі швидкістю і забезпечує кращу ізоляцію, може виглядати так:
Ця конфігурація спільно використовує увесь трафік шарду "external" між сайтами у двох напрямках: зовнішні користувачі можуть завантажувати файли для подальшого скачування співробітниками і навпаки.
Внутрішній шард, натомість, ніколи не синхронізується у віддалену локацію і залишається більш захищеним. Оскільки файли у шарді "external" синхронізуються лише один раз, коли вони змінюються, сто працівників можуть отримати файл із цього шарду, не скачуючи його сто раз із віддаленої локації. Якщо ж ви завантажуєте файл, то можете поділитися ним із 100 зовнішніми користувачами без потреби завантажувати його 100 разів.
Перевага у пропускній здатності також може допомогти з’єднати віддалені локації за схожою схемою:
У цій схемі кожен сайт має свій файловий сервер, і всі файли поширюються між офісами. Запис іде лише у конкретний шард, а це дозволяє налаштувати односторонню синхронізацію кожного шарду. Така схема дасть змогу працівникам у Нью-Йорку отримувати файли без затримок.
Наступний важливий момент — балансування навантаження. Це чудово, якщо у вас кілька співробітників, що не "забивають" канал. Якщо ж у вас 1000 користувачів, що регулярно підключаються до файлового сервера, це створить обмеження пропускної здатності для одного сервера. На щастя, Psono може впоратися з цим. Ось два варіанти балансування завантаження, які пропонує файловий сервер Psono.
Можливо, у вас уже є балансувальник навантаження, який ви хочете використовувати. Тоді ваша схема виглядатиме так:
У цій конфігурації loadbalancer використовується для SSL-офлоуду. Два файлові сервери позаду нього виконують обробку запитів. Обидва використовують один і той самий шард, тому або шард потрібно синхронізувати, або ж організувати спільне сховище. Можна використати GlusterFS чи звичайний rsync.
Альтернатива — дозволити самому клієнтові займатися балансуванням і зекономити на налаштуваннях та витратах. Варіант без виділеного loadbalancer може виглядати так:
Усі ці схеми можна комбінувати, наприклад, 3 кластери по 2 сервери. Кожен кластер обслуговує той самий шард і має синхронізоване (або спільне) сховище в основі.
Сподіваюся, мені вдалося показати вам широкі можливості нового та потужного модуля файлового сервера Psono.