Кластеризация мультисервисного приложения - PullRequest
0 голосов
/ 03 февраля 2011

Как указано в заголовке моего вопроса, в настоящее время я сталкиваюсь с проблемой балансировки нагрузки приложения, которое обслуживает несколько служб.

Приложение представляет собой службу хранения, которая хранит файлы пользователей, организованные в сегменты.Сами файлы хранятся не на сервере приложений, а в сетевом хранилище.Серверы приложений используются для шифрования / дешифрования данных и для предоставления нескольких услуг, которые позволяют пользователям получать доступ к своим данным.Эти сервисы в настоящее время включают в себя FTP, SFTP, HTTP, а также JNDI / RMI для внутреннего использования и могут быть улучшены в будущем другими проприетарными или собственными протоколами.

Возможно одновременное обращение к двум группам файлов с двух серверов одновременнопоэтому я хотел бы направить ЛЮБОЙ вызов ЛЮБОГО сервиса на тот же узел кластера, если он все еще работает.Если нет, другой сервер откроет соединение с корзиной и предоставит его пользователям.

Как вы кластеризуете такое приложение?Я посмотрел руководства по кластерам Tomcat и JBoss AS и прочитал несколько статей о кластеризации Java EE, но ничто не могло дать мне представления о том, как достичь своей цели.Я думаю, что одной из моих главных проблем является балансировка нагрузки, и я, вероятно, не смогу использовать здесь какое-либо стандартное решение.

1 Ответ

1 голос
/ 03 февраля 2011

У меня возникнет соблазн создать хеш из имени файла и использовать его, чтобы обеспечить относительно хорошую балансировку нагрузки.

Для упрощенного примера (в C):

hash = 0
for(i = 0; i < strlen(file_name); i++) {
    hash ^= (hash << 5) ^ file_name[i];
}
server_number_for_this_file = hash % total_servers;

Что-то вроде поиска всех файлов в определенной группе, спросите все серверы и объедините ответы. Например, первый сервер может возвращать «hello» и «foo», а второй сервер может возвращать «goodbye» и «bar», поэтому вы должны объединить эти частичные списки, чтобы получить список из 4 файлов.

Примечание: я бы предположил, что содержимое каталога кеша серверов приложений не будет постоянно мешать сетевому хранилищу, так что это также повышает эффективность кеширования (как и в случае с 10 серверами приложений, каждый сервер приложений должен кэшировать только 10% каталога данные содержания вместо 100%).

Конечно, у меня также возникнет соблазн сделать шифрование / дешифрование на клиенте, чтобы данные файла, передаваемые между клиентом и сервером приложений (через ненадежный Интернет?), Были зашифрованы, а не имели «простой текст» поверх ненадежная сеть и только данные шифрования, которые передаются между сервером приложений и сетевым хранилищем (в доверенной сети).

...