Дизайн услуги "Я жив" - PullRequest
       28

Дизайн услуги "Я жив"

5 голосов
/ 04 ноября 2010

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

Система основана на .Net в Интернете, поэтому мы собираемся сделать это с помощью кода AJAX / JSONP, который пингует сервер каждые 2 минуты.

Существует большое количество пользователей, поэтому пинг каждые 2 минуты вызывает ок.600 пингов в секунду.

Поэтому мы намереваемся разместить эту службу на своем собственном сервере и хранить всю информацию в памяти, используя Velocity.

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

Вопрос в том, можем ли мы записывать данные непосредственно в кэш скорости для каждого пинга?Или это приведет к блокировке?Должны ли мы сначала записывать в очередь, а затем обновлять кэш из очереди?

В то же время, когда мы обновляем кэш, другие пользователи будут запрашивать информацию для каждой группы.

1 Ответ

2 голосов
/ 05 ноября 2010

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

Это повысит вероятность того, что вы обновите один и тот же элемент в одно и то же время около нуля (поскольку каждый клиент будет обновлять только каждые 2 минуты)

Это позволит вам воспользоваться преимуществамиОптимистическая модель параллелизма для скорости, как описано в MSDN по ссылке ниже, без потери данных.

http://msdn.microsoft.com/en-us/library/ee790890.aspx

...