Атомарный доступ для чтения и записи - PullRequest
0 голосов
/ 08 июля 2010

В веб-службе, над которой я работаю, данные пользователя должны обновляться в фоновом режиме - например, сносить и хранить их твиты. Поскольку эти обновления могут выполняться несколькими серверами, я хочу убедиться, что только один может одновременно обновлять данные любого отдельного пользователя. Поэтому (я считаю) мне нужен метод атомарного чтения (пользователь уже обновляется) и записи (нет? Тогда я собираюсь начать обновление). Чего мне следует избегать, так это:

  1. Сервер 1 отправляет запрос, чтобы проверить, обновляется ли пользователь.
  2. Сервер 2 отправляет запрос, чтобы проверить, обновляется ли пользователь.
  3. Сервер 1 получает ответ о том, что пользователь не обновляется.
  4. Сервер 2 получает ответ о том, что пользователь не обновляется.
  5. Сервер 1 начинает загружать твиты.
  6. Сервер 2 начинает загружать тот же набор твитов.
  7. Безумие !!!

Шаги 1 и 3 должны быть объединены в атомарную операцию чтения + записи, так что Шаг 2 должен будет дождаться завершения шага 3, прежде чем будет получен ответ. Существует ли простой механизм для эффективного обеспечения «блокировки» доступа к чему-либо на нескольких серверах, похожий на ключевое слово synchronized в Java (но, очевидно, распределенный по всем серверам)?

1 Ответ

0 голосов
/ 08 июля 2010

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

http://en.wikipedia.org/wiki/Dekker%27s_algorithm

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