Как спроектировать инфраструктуру RPC?

Java

Многие языки имеют встроенную технологию RPC. Java RMI .NET удаленное взаимодействие В древности было много попыток:

  • Архитектура брокера запросов общедоступных объектов Corba (Common ObjectRequest Broker Architecture), техническая спецификация общей структуры брокера запросов объектов, предложенная организацией OMG в 1991 году. Базовая структура основана на объектно-ориентированной модели и состоит из языка определения интерфейса OMG (OMG IDL), посредника запросов объектов (ORB) и стандартного протокола IIOP (Internet Inter ORB Protocol, также известного как сетевой протокол обмена ORB). состоит из 3-х ключевых модулей.
  • COM (компонентная объектная модель, модель компонентных объектов) — это компонентная технология, предложенная Microsoft в 1993 году. Это независимая от платформы, не зависящая от языка, прозрачная по местоположению и поддерживаемая сетью промежуточная технология. Божественная книга «Сущность COM» в сознании многих программистов старшего поколения.

1 Рассмотрим пользователя

Определить интерфейс процесса

Клиент использует сгенерированный прокси-объект-заглушку

2 Дизайн клиента

Клиент создает прокси-объект для интерфейса процесса.

Фабрика клиентских прокси, которая может генерировать прокси-объекты интерфейсов с помощью динамического прокси JDK (или реализации AOP).

  • ClientStubInvocationHandler

  • Фиксирован ли протокол сообщений?При чем тут это?

Глядя на широту поддержки протоколов фреймворком, если он поддерживает несколько протоколов, он будет гибким и изменяющимся, он связан с конкретными службами, Поставщик услуг может выбрать протокол 1, а поставщик услуг B может выбрать протокол 2.

  • Какой протокол сообщений использует служба? Откуда берется эта информация?

Из полученной служебной информации требуется средство поиска служебной информации.

把发现者设计出来, 要求:可灵活支持多种发现机制

  • Если вы хотите поддерживать несколько протоколов, как должен быть спроектирован класс?

проблема: ➢ Какие параметры и возвращаемые значения должны быть определены для методов маршалинга и демаршаллинга? ➢ Операционными объектами маршалинга и демаршаллинга являются запросы и ответы, причем содержание запросов и ответов различно. Удовлетворены ли два метода сортировки и десортировки?

Уровень клиентского протокола разработки

Классы запросов и ответов, определяющие стандарты фреймворка

  1. Расширение уровней протокола до четырех

Протокол сообщений независим как уровень (требуются и клиент, и сервер)

Сетевой уровень отправить запрос, получить ответ
Чтобы инициировать сетевой запрос, вы должны знать адрес службы

  • Полная диаграмма классов клиента

Во время реализации уровень протокола включает в себя важную концепцию

  • Сериализация и десериализация параметров

3 Сервер дизайна

3.1 RPCServer

Когда приходит запрос клиента, серверу сначала нужно получить запрос через RPCServer.

  • RPCServer

3.2 Мышление

Что еще нужно сделать после того, как RPCServer получит запрос клиента?

Сетевой уровень обеспечивает многопоточность в RPCServer для обработки запросов, а уровень протокола сообщений повторно использует дизайн клиента. (разработать请求处理类, чтобы завершить работу над сетевым уровнем. )

3.3 RequestHandler

После того, как RPCServer получает запрос, он передает запрос RequestHandler для обработки. RequestHandler вызывает уровень протокола, чтобы преобразовать сообщение запроса в объект запроса, а затем вызывает процедуру!

человеческая пытка

➢ Как RequestHandler получает объект процесса? ➢ Что в запросе? ➢ Имя службы, имя метода, тип параметра, значение параметра ➢ Требуется ли модуль регистрации процессов?

Ознакомиться с дизайном после

过程注册模块: Разрешить пользователям регистрировать свои процедуры в среде RPC. ➢过程暴露模块: Если вы хотите опубликовать (представить) регистрацию службы, раскрытие может быть реализовано тем же классом

  1. Сетевой уровень, реализованный в RPCServer: Netty, с использованием RequestHandler
  2. Модуль ServiceRegister реализует регистрацию и публикацию службы.
  3. Реализовать обработку протокола сообщений и вызовы процедур в RequestHandler.

Код

  • Во-первых, пользователю необходимо установить свой порт и протокол.