Возникла задача синхронизации нескольких серверов, обрабатывающих запросы от клиентов. Сервера находятся за load balancing и сессия не привязывается к конкретному серверу.
Проблема возникла абсолютно классическая: клиент шлет запросы на обновления его состояния, они выполняются в различном порядке различными серверами, что, в итоге, приводит к неверному состоянию. Требуется выбирать состояние, проверять очередность и сохранять. Но на период между выборкой и сохранением нужно блокировать состояние. Отсюда и возникает эта задача.
Так как состояние храниться в базе и в кеше (memcached) то неясно, через что производить блокировку.
Если через базу, то в случае масштабирования серверов баз данных (а мы используем MS SQL) master-slave этот подход не будет работать.
В memcached я не нашел механизмов синхронизации (может кто знает?)
И думается мне, что лучше взять еще один сервер БД (или что-то специализированное для этого) и делать через него синхронизацию.
Вопрос состоит в том, как лучше поступить? И какие средства существуют для этого?
Сервер реализован на платформе .NET 3.5.