Як поділитися активами між декількома веб-серверами?


16

У мене є кілька веб-серверів Linux, приєднаних до балансиру навантаження, і я люблю ділитися активами (такими як зображення, відео та інші речі) між цими серверами. Який найкращий спосіб зробити це?

Наразі я встановив на файловому сервері всі веб-сервери, але я переживаю, щоб він знизився під великим трафіком. Як я можу уникнути цього?

Заздалегідь спасибі.


Тут корисні такі речі, як Cassandra (бази даних NoSQL).
Alexis Wilke

Чи вважаєте Ви використовувати Varnish для поліпшення продуктивності при великому трафіку? en.wikipedia.org/wiki/Varnish_%28software%29
Thorbjørn Ravn Andersen

Відповіді:


12

Існує кілька способів зробити це, виходячи з ваших потреб.

  • Використовуйте центральний файловий сервер, встановлений на Fx NFS на веб-серверах
  • Те саме, що вище, але надмірно, тож якщо один спускається, інший бере на себе
  • Використовуйте якийсь інструмент синхронізації (наприклад, rsync) та розмістіть файли локально на веб-серверах. Потім встановіть cronjob для синхронізації файлів між серверами через певний інтервал.
  • Використовуйте CDN, такі як Amazon S3, Akamai тощо.

Перші два найкращі, якщо у вас з’являється багато нових файлів. Третє було б ідеальним рішенням, якщо ви не додаєте та не змінюєте файли, які часто, оскільки користувачі отримують 404 на статичному вмісті, ще не синхронізованому.

Останній варіант може бути ідеальним у багатьох відношеннях, але може виявитися найдорожчим із 4-х. Вам також потрібно переписати свої веб-сайти, щоб підтримати це.


Велика проблема з rsync полягає в тому, що ви, ймовірно, отримаєте 404, якщо ви завантажуєте нові дані, і rsync відбувається не дуже швидко ... Також така система, як Cassandra (точка 4), безкоштовна, хоча, звичайно, має 10 серверів, це не безкоштовно ... так, можливо, я мушу сказати, що не вимагає додаткової оплати (хоча для її роботи потрібне певне програмування)
Alexis Wilke

@AlexisWilke - Ти маєш рацію щодо rsync, і я теж якось згадував це у відповіді. Я зараз це уточнив у відповіді.
Фредерік Нільсен

Re: # 3, "мертвий час" між новим активом, розгорнутим та новим синхронізованим активом, можна звести до мінімуму, якщо ви будете використовувати вахту файлової системи (наприклад, сторожа Facebook ) та швидкий інструмент синхронізації (наприклад, csync2 ). Ні, затримка ніколи не знизиться до нуля, але це дуже мінімально і може бути легше розгорнутись, ніж інші альтернативи.
pepoluan

2

Ще один чудовий спосіб зменшити навантаження на веб-сервери та виконати балансування навантаження - це з допомогою кальмарів (а саме squid3). Налаштуйте його як зворотний проксі з кешуванням. Він буде кешувати статичний вміст, такий як зображення тощо, або на жорсткий диск (за замовчуванням), або в оперативну пам'ять (швидше і найкраще), якщо ви встановите його таким чином. Він здатний здійснювати кругообіг до інших серверів кальмарів, а також якщо якийсь один конкретний вузол перевантажений.


1
Я думаю, що таке кешування не вдається, якщо ви хочете дуже динамічний веб-сайт. Тому що при великій динамізмі вам потрібно все-таки вдаритись по одному головному сервісу заходу, щоб отримати багато даних. Я думаю, що натомість користувач розглядає поділ бекенд-роботи.
Alexis Wilke

1
Ваша відповідь правильна щодо потенційно зменшення навантаження, але не відповідає на питання про спільний доступ до файлів активів між декількома серверами.

@AlexisWilke це робить (виходить з ладу), якщо у вас неправильно налаштована кальмари. Відрегулюйте спосіб кешування (або якщо він кеширує) у налаштуваннях, але ви можете виявити, що жодна сторінка не буває абсолютно динамічною. Завжди є щось, що можна кешувати. Крім того, Андре, він дуже допомагає в обміні активами, як описано в заголовку, але обміну файлами не так багато. Питання полягало в тому, як уберегти сайти від пониження під великим навантаженням. Кальмар відмінно справляється з цим.
Aihngel Tech

1

Оскільки зазвичай потреба в більшій кількості серверів виходить з ресурсів, необхідних для запуску динамічних веб-сайтів / ап, розгляньте розміщення статичних активів в іншому піддомені / домені. (наприклад, static.yourdomain.com)

Потім ви можете використовувати інший сервер / сервери для їх розміщення. Статичний хостинг файлів використовує не дуже багато ресурсів, тому вам знадобиться значно менше серверів для вашого статичного вмісту. Ви також звільнить деякі ресурси на серверах для динамічного вмісту.

Залежно від балансира завантаження, ви також можете це зробити на тому ж домені, коли балансир навантажень вирішує, який сервер використовувати для якого запиту, але якщо ви використовуєте окремий домен, ви можете помістити статичні активи на CDN досить легко, якщо потреба повинна виникнути!


1

Одне з вирішень цієї проблеми, яку я застосував, - це мати основну копію файлів для читання / запису файлів на спільному диску NFS, але також зберігати копію лише для читання на кожному веб-сервері, щоб помилка хоста NFS ставила файл-доступ в режимі лише для читання, а не втрачати їх повністю.

  • Файли живуть на центральному хості, спільним з веб-хостами через кріплення NFS
  • rsync працює завжди 15 хвилин, щоб зберегти копію лише для читання на кожному веб-хості свіжою.
  • check_linkБаш скрипт працює кожну хвилину , щоб переконатися , що монтування NFS все ще там , і якщо не обмінює символічне посилання на читання тільки копіювати.

Більш детальну інформацію ви знайдете в цій статті від того, як я вперше створив цю систему.

Вгору:

  • Читання файлів дуже доступне
  • Для записів файлів немає перегонових умов
  • Нові файли миттєво доступні для всіх веб-хостів.

Недоліки:

  • трохи складний.
  • кількість масштабів копій для читання з кількістю веб-хостів, що може бути надмірним, якщо у вас багато більше двох.
  • Запис файлів недоступний.
  • Потенціал до 1 хвилини простою перед переходом на копію лише для читання.

0

Ви можете розглянути базу даних NoSQL. Вони розроблені для роботи над кластерами, забезпечують можливу узгодженість. Але будьте обережні, вони не є кислотними.

Ось вступ, який допоможе вам вирішити, який тип баз даних NoSQL ви хочете для своєї мети.

Ось перелік ресурсів, пов’язаних із доступним NoSQL.


4
Як ця відповідь допомагає у проблемі синхронізації файлів?
тит

@titus У NoSQL, коли є запис на одному з вузлів, він буде реплікуватися на інші вузли кластера. Кассандра написання рівнів послідовності може допомогти зробити це зрозумілим
Azzy

так що шлях - це зберігати всі файли в NoSQL db?
тит

@titus ви можете, але бази даних NoSQL можуть зробити набагато більше, ніж зберігати файли. Все залежить від ваших потреб.
Azzy

2
ОП попросило вирішити конкретну проблему: " декілька веб-серверів Linux, приєднаних до балансира завантаження ... діляться активами (такими як зображення, відео та інші речі) між цими серверами. " Ваша відповідь дуже загальна, чи можете ви підказати та поясніть конкретні інструменти (а краще їх конфігурації) для вирішення проблеми?
kdbanman

0

Чому б не спробувати рішення DFS, вони забезпечують високий рівень надмірності, і обсяг може бути розподілений між стільки, скільки ви хочете. Gluster - це мій улюблений і його дуже просто встановити та налаштувати в будь-якому відомому дистрибутиві Linux

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.