Совместно использовать индекс хранения файлов с несколькими открытыми приложениями на Java - PullRequest
1 голос
/ 18 ноября 2008

Я пишу библиотеку HTTP Cache для Java и пытаюсь использовать эту библиотеку в том же приложении, которое запускается дважды. Я хочу иметь возможность совместно использовать кеш между этими экземплярами.

Что является лучшим решением для этого? Я также хочу иметь возможность записи в это же хранилище, и оно должно быть доступно для обоих экземпляров.

Теперь у меня есть основанный на памяти индекс файлов, доступных для кэша, и он не может использоваться несколькими виртуальными машинами. Он запускается между стартапами, но не работает для общего кэша.

В соответствии со спецификацией HTTP я не могу просто сопоставить файлы с URI, поскольку в зависимости от запроса возможна вариация одной и той же полезной нагрузки. Например, у меня может быть запрос, который отличается от заголовка «accept-language»: в этом случае у меня будет отдельный файл для каждого последующего запроса, в котором указан другой язык.

Есть идеи?

Ответы [ 2 ]

1 голос
/ 19 ноября 2008

Во-первых, вы уверены, что хотите написать свой собственный кеш, когда их несколько? Вещи как:

Первые два написаны на Java, а третий доступен с Java. Первые два также относятся к распределенному кешированию, что, я думаю, является общим случаем того, о чем вы просите. Когда они запускаются, они надеются подключиться к другим участникам, чтобы они поддерживали согласованный кеш между экземплярами. Изменения одного отражаются в разных случаях. Их можно настроить для подключения через многоадресную рассылку или с указанием определенных списков серверов.

Memcached, как правило, работает немного по-другому, поскольку он работает внешне по отношению к процессам Java, которые вы запускаете, так что все запускаемые экземпляры Java будут взаимодействовать с общей службой. Вы можете настроить memcached для работы в распределенном режиме, но это делается путем хеширования ключей, чтобы сервер, к которому вы хотите подключиться, мог определяться тем, что вы ищете.

Делать настоящий распределенный кеш с согласованным содержимым очень сложно, поэтому я предлагаю взглянуть на существующую библиотеку. Если вы хотите сделать это самостоятельно, все равно будет полезно посмотреть на перечисленные, чтобы увидеть, как они это делают, и рассмотреть возможность использования чего-то вроде JGroups в качестве основного механизма.

0 голосов
/ 18 ноября 2008

Я думаю, вам стоит взглянуть на WebDav-характеристики . Это расширение HTTP для совместного использования / редактирования / хранения / управления версиями на сервере. Существует реализация в виде модуля Apache , которая позволяет вам быстро приступить к их использованию.

Таким образом, вместо реализации собственной реализации сервера кеша, возможно, вам лучше использовать локальный экземпляр Apache + mod-dav, который доступен для обоих ваших приложений.

Дополнительный бонус: поскольку WebDav является указанным протоколом, вы получаете возможность взаимодействия с большим количеством инструментов бесплатно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...