Nginx с ASGI или Memcached - PullRequest
       98

Nginx с ASGI или Memcached

0 голосов
/ 04 июля 2019

Попытка выяснить, что является лучшим методом для масштабируемого приложения.

  1. NGINX <-> ASGI (многие) <-> Starlete / FastAPI <-> Процессы

  2. NGINX <-> Clojure / Memcached вещь <-> Starlete / FastAPI <-> Процессы

  3. NGINX-> Clojure / Memcached вещь-> Starlete /FastAPI -> Процессы-> NGINX

  4. NGINX -> ASGI (многие) -> Starlete / FastAPI-> Процессы-> ASGI (многие) -> NGINX

Процесс мышления ... в традиционной методологии у вас есть какая-то зависимость процесса от каждого из этих приложений для ответа.В среде с множеством микросервисов (представьте 3+ слоя) вы должны полагаться на каждый из них, чтобы не дать сбой / тайм-аут для ответа.

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

Если у вас есть способ! Захватить информацию nginx, чтобы сохранить ch с каким-то уникальным идентификатором, вы можете передать его в нечто вроде memcached, чтобы у вас был односторонний поток информации.Ни один механизм FastAPI не должен сохранять состояние от другого приложения, и идея состоит в том, что каждый микросервис не имеет состояния, никогда не ожидая ответа от другого.

Имеет ли эта модель больше смысла, чем традиционная модель, теперь, когда asgi сделал приложениесервер намного быстрее, чем они были традиционно?

Я склоняюсь к варианту 4, используя какой-то memcached между реплицированными серверами ASGI.Таким образом, после завершения процессов они могут случайным образом вызывать любой ASGI с уникальным идентификатором запроса nginx и отвечать на определенный запрос nginx из любого asgi.Мое главное беспокойство ... это пошло бы против некоторой парадигмы того, как работает asgi, чтобы сделать его медленнее, чем предполагалось?

Что я в основном хотел бы сделать, это взять область действия из asgi и добавить ее в memcachedinstance.Then, когда некоторый обрабатывающий узел отправляет запрос к некоторой ферме asgi-серверов, он берет область видимости из memcached и создает одноразовое ожидание (send) (хотя это звучит немного странно при написании), которое знает, какой nginx chотправить обратно?В противном случае ответ все еще зависит от времени работы asgi (против реплицированного memcached).

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

Спасибо

...