2011-05-13 1 views
0

Я читал о различных механизмах кэширования между машинами (Redis, Velocity, nMemCached и т. Д.). Кажется, все они требуют центральной машины для управления кешем.Самоустанавливающийся кеш памяти - он существует?

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

Контекст: У меня есть приложение, которое развертывает около 100 пользователей в пределах одной подсети через ClickOnce. Каждый из этих пользователей получает доступ к ресурсу через WAN (по всей стране и в некоторых случаях через океан), который выполняет очень интенсивные вычисления с использованием ЦП и занимает значительное время.

В результате приложение выглядит вялым. Я сделал все, что мог, чтобы облегчить это, бросив долгоживущие запросы на отдельные потоки. Но это доводит вас до сих пор. Я добавил локальное кэширование (через SQL Compact DB), который работает очень хорошо, но большинство пользователей обращаются к подобной информации, и вместе они оказывают небольшое давление на вычислительный сервер. Я думаю, что могу перейти на следующий уровень, если я могу отправить кеш в памяти с моим приложением, которое может без труда работать с другими машинами для создания сетевого кэширования.

+0

Разве машины не должны были знать друг о друге? Я думаю, что там находится центральная машина. – mellamokb

+0

UDP-трансляция должна быть возможна внутри подсети. – CodesInChaos

+0

@CodeInChaos - правильно, вот что я имел в виду. – AngryHacker

ответ

2

Вы тот, кто знает, что будет лучше, но наличие «серверного приложения», которое координировало бы всю партию, могло бы быть хорошим:

  1. Пользователь1 запрашивает сервер «Мне нужен X».
  2. Сервер сообщает User1 «Ну, попросите его в DataBase»
  3. User2 запрашивает сервер «Мне нужен X.»
  4. Сервер сообщает User2 «User1 получил».
  5. ...
  6. User1 сообщает серверу «Я больше не хочу X».

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

2

Если вы не хотите мастер-машину или не хотите полагаться на конкретный сетевой макет/установку, вы можете рассмотреть вариант «равный-равному» в качестве опции. WCF имеет поддержку со стороны сверстников. Вот ссылка, которая выглядит несколько актуальной для ваших нужд: How To Design State Sharing In A Peer Network