Заранее прошу прощения, если этот вопрос (по необходимости) может быть несколько широким. Я постараюсь сохранить его в формате действительного вопроса.
В настоящее время я настраиваю серверную часть для обслуживания большого количества статических файлов (а именно изображений). Ожидается, что общий трафик для конечного продукта будет огромным, поэтому необходима масштабируемость и устранение всех видов узких мест.
Мой первоначальный вывод заключается в том, что лучший подход к этому - это создание кластера виртуальных серверов для обработки запросов. Я буду использовать стандартные стратегии балансировки нагрузки, чтобы гарантировать, что клиентские запросы распределяются равномерно между узлами в кластере, так что это не проблема.
Часть, которая является проблема в том, как эффективно хранить сами статические файлы в кластере. Мы ожидаем, что будет присутствовать очень большой объем (диапазон терабайт) данных, и хранение зеркальных копий файлов на каждом узле просто не вариант.
Казалось бы, у меня осталось 2 варианта:
1) Используйте центральный файловый сервер, к которому узлы могут делать запросы. Однако мне трудно понять, как я могу предотвратить превращение этого сервера в узкое место.
2) Используйте 1) в сочетании с каким-то механизмом кеширования на узле, чтобы избежать избыточных запросов к файловому серверу.
3) Другое блестящее решение, которое спасет мою душу и сделает 1) и 2) устаревшими.
Что было бы хорошей стратегией для получения такого типа распространения файлов и какое программное обеспечение для этого доступно?
Заранее большое спасибо!
А последовательный кольцевой хеш является классическим решением такого рода проблем, по крайней мере, алгоритмически. Такие системы, как Swift, memcached, Dynamo, Riak, использовали этот подход для решения этой проблемы.
OpenStack Swift в частности, это хранилище объектов / больших двоичных объектов, которое использует согласованный кольцевой хэш для отслеживания и распределения объектов, контейнеров и т. д. Вы можете использовать Swift или что-то подобное непосредственно для решения вашего сценария или создать собственное решение с использованием согласованного хэш-кольца. Преимущество использования такого решения, как Swift, состоит в том, что его не нужно разрабатывать самостоятельно, плюс он включает такие вещи, как защита данных посредством репликации, управления версиями и т. Д.
Если вам не нужно запускать его самостоятельно, но вместо этого вы заинтересованы в размещенных услугах, таких продуктах, как Файлы Rackspace Cloud (на основе Swift) или Amazon S3 обеспечивают хранение и извлечение объектов через сети CDN (Akamai и CloudFront для Rackspace и Amazon соответственно). CDN значительно повысит эффективность поиска для географически распределенных клиентов.