Хабр Курсы для всех
РЕКЛАМА
Практикум, Хекслет, SkyPro, авторские курсы — собрали всех и попросили скидки. Осталось выбрать!
RPC технологии — наиболее старые технологии. Наиболее яркие представители RPC, это — CORBA и DCOM.
Детали реализации и принципиальные отличия распределенных систем были слишком велики, чтобы решаться с помощью автоматически генерируемого кода. Постепенно пришло понимание, что факт того, что системы связывает ненадежная, медленная, низкоскоростная среда, должен быть явно отражен в коде программы.
Я не могу проследить тут логику. Кодогенерация RPC имплентацию за вас не сделает. Реализация транспорта (ненадежная, медленная, низкоскоростная среда) может быть отделена от сгенерированного кода и вообще не является проблемой присущей только RPC.
Как именно помогает с этим Messaging?..
Response GetPerson(Request request)
Cинхронность RPC в настоящее время никак не предпочтительна.
Но Ваше (и мое) понятие этого термина существенно отличается от того, что приводится в этой статье.
Response GetPerson(Request request)void Send(Message msg);
...
class GetPersonRequest: Message
{
Guid PersonId;
}
У вас сложилась модель, в которой RPC — Messaging ложится на термины synchronous — asynchronous. В моей модели такой явной связи нет. Но я не претендую на истину. Я видел рассуждения, подтверждающие вашу мысль. Думаю в этом что-то есть.
Да, вы правы. Я именно об этом и говорил.
RPC технологии
Поэтому вы не заметите, не должны заметить, никакой разницы между вызовом локальной функции и вызовом удаленной функции.
Messaging
[...]
Появились технологии веб-сервисов.
Не совсем понятно, почему появились контракты, которые по сути являются Envelope (конвертами) для входных аргументов.
Сервис представлял из себя набор операций (Operation), каждая из которых на входе принимала запрос (Request) и выдавала ответ (Response). Клиент явным образом посылал (Sent) запрос, сервис явным образом получал (Receive) его и отвечал (Sent), высылая ответ. Клиент получал (Receive) ответ и на этом вызов завершался.
Запросы и ответы явным образом преобразуются к формату, предназначенному для передачи по проводам.
Чаще всего это массив байт
Основной принцип REST в том, что операции-функции резко ограничили и оставили только набор операций CRUD: Create — Read — Update — Delete.
К примеру, вызов функции
EntityAddress ReadEntityAddress(string param1, string param2)
выразится в таком виде:
GET: entityAddress?param1=value1¶m2=value2
GET /entities/187/address — это, скорее всего, REST.response = fibonacci_rpc.call(30) — это RPC, потому что для него это синхронный блокирующий вызов (и транспорт для него не имеет значения). Для кода FibonacciRpcClient, который явным образом взамодействует с очередями, сообщениями и корреляцией, это типичный messaging.Я тупо о том, какие термины всплывают в каком контексте. Грубо определил три контектса. Грубо раскидал термины по ним. Никто не определял эти контектсы с научной, непротиворечивой точки зрения.
RPC, Messaging, REST: Терминология