синхронный вызов от клиента к серверу и асинхронные вызовы между микросервисами - PullRequest
0 голосов
/ 08 марта 2020

Я немного перегружен дискуссиями о том, использовать ли RMQ / Kafka / Http et c для связи между микро-сервисами. Я надеялся получить некоторое представление об этом. Во-первых, мой клиент - мобильное приложение, которое выполняет синхронный вызов и ожидает ответа.

Интуитивно я бы не хотел, чтобы внутренняя связь между сервером java и классификатором Python была бы синхронной, поскольку Я хотел бы иметь высокую пропускную способность, учитывая, что я мог бы иметь тысячи или миллионы (надеюсь) клиентов, отправляющих запросы одновременно.

Как я могу сделать неблокирующий запрос-ответ, а также получить запрос к тому же клиенту?

клиент <-http -> java <-? -> Python

Ответы [ 2 ]

0 голосов
/ 10 марта 2020

Если вы стремитесь к неблокирующему масштабируемому решению, я рекомендую использовать Kafka в качестве промежуточного уровня между сервером и клиентами.
Таким образом, клиенты отправляют syn c запросы на kafka и ждут сервера ответить.
Между тем на сервере работает многопоточная система потребителей, которая опрашивает (то есть потребляет) пользовательские запросы и отправляет ответы клиентам.

Итак, допустим, клиент Боб отправил запрос, он поставил в очередь в выделенной топике kafka c с миллионами других пользовательских запросов, ожидающих ответа.
Сервер обрабатывает все запросы в тяжелом режиме. load, в конце концов, попадает на событие Боба и, наконец, отправляет ответ через 5 секунд, теперь Боб получил ответ и может закрыть свой «сеанс» для этого запроса (нет фактического сеанса, такого как HTTP, но есть какой-то другой сжатый / закодированный формат, который вы выберете) .
Существуют меры безопасности, которые следует учитывать при выборе формата мероприятия и подробного способа связи, оставим это обсуждение на потом, так как ваш вопрос более базовый c.

0 голосов
/ 09 марта 2020

Из вопроса, который вы разместили, мне приходит в голову, может быть, вы можете добавить промежуточный слой кеша. В этот кэш будут предварительно загружены некоторые данные (в зависимости от объема доступной памяти) сразу после запуска приложения. Вы можете иметь кэш с привязкой по времени или LRU (в зависимости от вашей архитектуры). Redis предоставляет простой и эффективный способ сделать это. Здесь только время будет потрачено на сетевые задержки. Примечание: я новичок в этой платформе и на начальных этапах ответа. Таким образом, любое предложенное улучшение будет оценено. Спасибо.

...