Хабр Курсы для всех
РЕКЛАМА
Практикум, Хекслет, SkyPro, авторские курсы — собрали всех и попросили скидки. Осталось выбрать!
Об rpc ещё писали в незнамо каких лохматых годах.
С самого начала создания первой сети, Святым Граалем сетевых вычислений было предоставления программных интерфейсов для доступа к удалённым сетевым ресурсам таким же образом, как к локальным. Сеть становится "прозрачной".
Один пример прозрачности сети — знаменитый RPC (удалённый вызов процедур, remote procedure call), система разработанная для того, чтобы вы могли вызывать процедуры (подпрограммы), выполняющиеся на другом компьютере, по сети точно так же, как если бы они выполнялись локально. На это угробили чёртову пропасть энергии.
Звучит логично, правильно?
Неправильно.
Заключение: В следующий раз, когда кто-то попытается продать вам программный продукт, который позволяет вам обращаться к сетевым ресурсам также как к локальным, убегайте как только можете в противоположном направлении.
RPC поверх HTTP — ещё большее зло, которое, в принципе, могло придумать человечество.
Но практика показывает, что плохие вещи почему-то набирают бОльшую популярность, чем хорошие.
RPC поверх HTTP — ещё большее зло, которое, в принципе, могло придумать человечество
— Не совсем уловил, как прописываются правила, соединяющие клиентов и обработчиков>Есть 2 варианта, один описан в 5 разделе — например если обработчик должен обрабатывать команду «start», обработчик отправляет серверу json:
'{"name": "start"}' и после того как клиент отправит запрос на url /start, клиент и обработчик будут «соединены» (но только на 1 команду т.к. вторая команда от клиента может быть другая на другой обработчик).— Может ли быть несколько обработчиков по одной теме?Да, множество обрабочтиков и множество клиентов на одни и теже «темы» (очереди) работают хорошо.
— Как послать сообщение конкретному обработчику из нескольких?Для этого обрабочик может добавить список команд которые могут содержать идентификатор, например
'{"name": "start:15,start"}', таким образом обработчик одновременно обслуживает 2 команды «start:15» и «start» (где 15 — это идентификатор). А клиенты в свою очередь могут получить список всех обработчиков из "/rpc/details" и работать с выбраным (подобный подход так же используется и для MQ систем).Не совсем уловил, как прописываются правила, соединяющие клиентов и обработчиковТеперь нужно просто задать тот же url для клиента и обработчика, пример:
curl localhost:8001/calc/sum -d '{"data": "data"}'Воркер:curl localhost:8001/calc/sum -H 'type: get'— Как послать сообщение конкретному обработчику из нескольких?Для этого можно просто указать id воркера в headers, пример:
curl localhost:8001/calc/sum -H 'worker-id: 15'Следовало бы так же протестировать все компоненты на разных хостахИзначально тест и проводился на разных хостах (в Digital Ocean), но видимо там сеть была не быстрая и многие тесты показывали одинаковый* результат, но мы тестируем не скорость сети, а сервер/прокси, поэтому было решено тестировать без влияния сети (ведь у всех разные сети).
grpc, если клиент на столько неэффективен, следовало бы его исключить.Мне кажется это может быть полезной информацией для питон разработчиков, чтобы потом не удивлятся когда GRPC будет уже внедрен.
envoy не пробовали?Нет, но возможно в следующий тест будет включён.
но это значит что GRPC на 20% быстрее вашего решения1. Не значит, тестовые конфигурации разные.
а вы использовали паносный язык специально что бы это сокрытьPython совершенно ни причем, т.к. на других тестах он показывает замечательную производительность, все вопросы к официальной библиотеке grpc.
Если Python используется исключительно как простейший прикладной интерфейс, какой смысл вообще писать "на Python"? Например, библиотека для работы с gRPC в .NET написана 100% на .NET, работает так же быстро как библиотека на Go.
Но, получается вы пишите про протоколы, а сравниваете какие-то библиотеки, при чём через прокладку на Python-е. Как будто это имеет это имеет какое-то отношение к нему.
Очень странные бенчмарки, не заявлена какая задача решалась, и зачем всё это было.
Бенчмарк RPC систем (и Inverted Json)