Я создаю приложение, которое должно распределять стандартный файловый сервер по нескольким сайтам по глобальной сети. По сути, каждому сайту нужно написать много разных файлов разного размера (некоторые в диапазоне 100 мегабайт, но большинство меньше), и приложение написано так, чтобы столкновения не были проблемой. Я хотел бы настроить систему, которая отвечает следующим требованиям:
- Каждый сайт может хранить файлы в общем «пространстве имен». То есть все файлы будут отображаться в одной файловой системе.
- Каждый сайт не будет отправлять данные через глобальную сеть без необходимости. Т.е. на каждой стороне WAN будет локальное хранилище, которое будет «объединено» в одну и ту же логическую файловую систему.
- Linux & Free ($$$) - это плюс
По сути, что-то вроде центрального ресурса NFS будет отвечать большинству требований, однако не позволит локально записанным данным оставаться локальными. Все данные с удаленных сторон глобальной сети будут постоянно копироваться локально.
Я посмотрел на Luster и провел с ним несколько успешных тестов, однако, похоже, что файлы распределяются довольно равномерно по распределенному хранилищу. Я просмотрел документацию и не нашел ничего, что автоматически «предпочтет» локальное хранилище, а не удаленное. Даже кое-что, что пошло с хранением самой низкой задержки, было бы хорошо. Это будет работать большую часть времени, что будет соответствовать требованиям этого приложения.
Некоторые ответы на некоторые вопросы, заданные ниже:
- Узлы сервера: 2 или 3 для запуска. Каждый сервер будет иметь десятки одновременных подключений клиентов для чтения / записи.
- Топология WAN является полной сеткой и надежной. (крупная корпорация, стоимость не так ограничена, как бюрократизм)
- Отказ клиента: на самом деле я не думал о сбое клиента (главным образом потому, что наше текущее приложение не делает этого только на одном сайте). Я предположил, что практический ответ заключается в том, что серверы на каждом географически распределенном сайте должны быть едиными точками отказа для клиентов, которых они обслуживают. Хотя, если вы думаете о чем-то конкретном здесь, я думаю, что это будет весьма уместно для обсуждения.
- Roll-my-own: я думал о rsync / unison, однако мне понадобится немного причудливой логики, чтобы сделать «динамическую» часть этой работы без проблем. То есть файл выглядит локальным, но извлекается только по требованию.
- MS-DFS: Это определенно то, что я должен изучить. Моей главной проблемой было бы неуверенность в конфигурации / надежности / производительности сервера NFS в Windows, так как многие из подключающихся клиентов являются клиентами NFS.