Имеет ли смысл использовать веб-серверы с отслеживанием состояния?

Я работаю над веб-приложением, которое исторически было построено на стеке PHP / MySQL.

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

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

Это работало какое-то время, пока мы не поняли, что нам нужно масштабирование, поэтому теперь нам нужно больше веб-серверов.

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

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

Какие здесь варианты? Переключиться на ключ-значение в памяти, хранилище данных? Должны ли мы полностью отказаться от сохранения состояния на веб-серверах?

9
задан Yuval Adam 30 December 2010 в 03:56
поделиться