Nginx с ASGI или Memcached
Попытка выяснить, что является лучшим методом для масштабируемого приложения.
NGINX <-> ASGI(много) <-> Starlete/FastAPI <-> Процессы
NGINX <-> Clojure / Memcached вещь <-> Starlete/FastAPI <-> Процессы
NGINX->Clojure/Memcached вещь->Starlete/FastAPI -> Процессы-> NGINX
NGINX -> ASGI(много)->Starlete/FastAPI-> Процессы-> ASGI(много)->NGINX
Мыслительный процесс... в традиционной методологии у вас есть какая-то зависимость процесса от каждого из этих приложений для ответа. В среде с множеством микросервисов (представьте 3+ слоя) вы должны полагаться на каждый из них, чтобы не дать сбой / тайм-аут для ответа.
ASGI должен улучшить производительность на стороне сервера приложений. Но мы все еще полагаемся на ответ на запрос, предполагая, что все микросервисы выполняют свою работу и не имеют скрытых действий или узких мест.
Если у вас есть способ! Захватить информацию nginx, чтобы сохранить ch с каким-то уникальным идентификатором, вы можете передать его в нечто вроде memcached, чтобы у вас был односторонний поток информации. Ни один механизм FastAPI не должен сохранять состояние от другого приложения, и идея заключается в том, что каждый микросервис не имеет состояния и никогда не ожидает ответа от другого.
Имеет ли эта модель больше смысла, чем традиционная модель, теперь, когда asgi сделала сервер приложений намного быстрее, чем они были традиционно?
Я склоняюсь к варианту 4, используя какой-то memcached между реплицированными серверами ASGI. Таким образом, после завершения процессов они могут случайным образом вызывать любой ASGI с уникальным идентификатором запроса nginx и отвечать на определенный запрос nginx из любого asgi. Моя главная проблема заключается в том... не противоречит ли это парадигме того, как работает asgi, чтобы сделать его медленнее, чем предполагалось?
В основном я хотел бы взять область действия из asgi и добавить ее к экземпляру memcached. Затем, когда какой-либо обрабатывающий узел отправляет запрос на какую-либо ферму серверов asgi, он берет область действия из memcached и создает один раз, ожидаемый (send) (хотя это звучит немного странно при написании), который знает, на какой nginx ch отправлять обратно? В противном случае ответ все еще зависит от времени работы asgi (против реплицированного memcached).
Это улучшит производительность системы или это просто перебор? Иногда я чувствую, что это может быть хуже, чем традиционная модель, которая посылает ответ.
Спасибо