Я работаю над веб-приложением, которое исторически было построено на стеке PHP / MySQL.
Одной из ключевых операций приложения было выполнение сложных вычислений, которые требовали итерации по каждой строкевся таблица БД.Само собой разумеется, это было серьезное узкое место.Поэтому было принято решение переписать весь процесс на Java.
Это дало нам два преимущества.Одним из них было то, что Java, как язык, был намного быстрее, чем процесс PHP.Вторым было то, что мы могли поддерживать весь набор данных в памяти сервера приложений Java.Так что теперь мы можем выполнять операции с большими вычислениями в памяти, и все происходит намного быстрее.
Это работало некоторое время, пока мы не поняли, что нам нужно масштабировать, поэтому нам нужно больше веб-серверов.
Проблема в том, что согласно текущему проекту все они должны поддерживать одно и то же состояние.Все они запрашивают базу данных, обрабатывают данные и сохраняют их в памяти.Но что происходит, когда вам нужно изменить эти данные?Как все серверы поддерживают согласованность?
Мне эта архитектура кажется ущербной.Выигрыш в производительности при хранении всех данных в памяти очевиден, но это серьезно затрудняет масштабируемость.
Какие варианты здесь?Переключиться на хранение данных в памяти, ключ-значение?Должны ли мы полностью отказаться от состояния удержания внутри веб-серверов?