RPC, вызов удаленной процедуры, вызов удаленной процедуры, определяющий поведение программы на одной машине, вызывающей подпрограмму на другой машине. Функции:
Удаленная реализация перемещена в локальную. По сути, нет никакой разницы между удаленными вызовами и локальными вызовами.
В режиме cs клиент инициирует запрос, а сервер выполняет его после получения параметров запроса.
Скрытие базовой сложности межпроцессных и межсетевых вызовов позволяет нам больше сосредоточиться на бизнес-логике.
1.2 Конкретная структура реализации
dubbo (apache alibaba java)
Мотан (Weibo)
смолы (внутренние для Tencent)
грпц
бережливость
весеннее облако openfeign
1.3 Сценарии применения
Может использоваться для межсетевой связи.
2. Ключевые технические моменты RPC и один вызов процесса RPC
2.1 Процесс RPC
процесс
Клиент вызывает интерфейс и переходит к прокси-классу, собирает запрос и сериализует его, затем кодирует протокол и отправляет его.
Сервер получает запрос, выполняет синтаксический анализ протокола и десериализацию для получения параметров запроса.
Сервер вызывает реализацию интерфейса на основе параметров запроса, а затем собирает ответ.
Ответ возвращается таким же образом
Как соединены два сетевых модуля?
Центр регистрации — это место, где хранятся данные, и лучше всего обеспечить функции мониторинга.Центр регистрации отделен от инфраструктуры RPC. Общие центры регистрации: Zookeeper, Nacos и т. д.
Другие особенности
Маршрутные фильтры доступных поставщиков
Балансировка нагрузки: выберите, какой провайдер использовать из доступных провайдеров.
Ограничение предохранителя: контроль расхода
сетевая обработка
Обработка протокола
Преимущества РПК
Упрощение создания распределенных приложений, разделение служб и легкое расширение.
RPC обычно использует длинные соединения, что устраняет необходимость устанавливать соединение для каждого соединения и снижает нагрузку на сеть.
Для RPC требуется центр регистрации, который может динамически распознавать и визуализировать изменения в услугах.
Богатые функции фонового управления, унифицированное управление службами интерфейса, отсутствие восприятия для вызывающего абонента, унифицированная работа
Оптимизированный протокол, более высокая эффективность, высокая конфиденциальность и безопасность.
Он имеет такие функции, как балансировка нагрузки, автоматический выключатель и ограничение тока.
2.2 Технология сериализации
Любая платформа сериализации: основная идея — дизайн.протокол сериализации,Запишите тип объекта, тип атрибута и значение атрибута в поток двоичных байтов в фиксированном формате для завершения сериализации., а затем считывайте тип объекта, тип атрибута и значение атрибута один за другим в соответствии с фиксированным форматом и заново создайте новый объект на основе этой информации для завершения десериализации.
Метод сериализации
Собственная сериализация JDK
Упрощенный формат обмена текстовыми данными — json/XML
Он имеет хорошую читаемость и удобен для чтения и отладки. Байтовый файл после сериализации с поддержкой нескольких языков является относительно большим и относительно неэффективным. Однако по сравнению с XML поток байтов после сериализации меньше. специально для интерфейсных и третьих лиц, предоставляющих API.
ГессенскийЭто динамический тип, двоичный, поддерживающий межъязыковую структуру Xu Lihua.
Производительность по гессиану намного эффективнее, чем сериализация JDK и JSON. И количество генерируемых байтов также меньше.Очень хорошая совместимость и стабильность.,Поэтому Hessian больше подходит в качестве протокола сериализации для удаленной связи в рамках RPC.
протобуф
Библиотека последовательностей с открытым исходным кодом, запущенная Google, представляет собой легкий и эффективный формат хранения структурированных данных с поддержкой нескольких языков.
Высокая скорость, высокая степень сжатия, небольшой размер. Объем после сериализации намного меньше, чем у JSON и Hessian. Формат конечного цветного диска хорошо расширяется, обновляется и совместим, а также может быть обратно совместим.
Как КНР выбирает структуру сериализации?
Факторы выбора
Безопасность. Первое соображение заключается в том, что если при сериализации есть уязвимости безопасности, то онлайн-сервисы, скорее всего, будут взломаны (собственная сериализация JDK имеет уязвимости).
Совместимость: очень ли хороша совместимость протокола сериализации после обновления версии, является ли он кроссплатформенным, межъязыковым и т. д.
Универсальность: возможность сериализации и десериализации любого типа. Сервер не сможет внезапно вызвать метод интерфейса службы после добавления определенного типа параметра.
Производительность и эффективность. Процесс сериализации и десериализации является необходимым процессом для вызовов RPC. Производительность и эффективность напрямую связаны с общей производительностью и эффективностью инфраструктуры RPC.
Накладные расходы на пространство: размер двоичных данных после сериализации. Чем меньше размер сериализованных байтовых данных, тем меньше объем данных, передаваемых по сети, и тем быстрее данные передаются. Это напрямую связано с запросами RPC. время отклика
Соображения
Избегайте объектов, которые слишком сложны для создания, имеют множество атрибутов и несколько уровней вложенности.
Избегайте слишком больших объектов: больших строк, очень больших массивов и т. д.
Избегайте передачи типов в качестве параметров, которые не поддерживаются платформой сериализации.
Предотвратите возникновение у объектов сложных отношений наследования.
2.3 Протокол связи прикладного уровня-http
2.3.1 Основные понятия
Большинство RPC разрабатывают http самостоятельно, а также поддерживают http1.1.
Что такое ИО
IO — это процесс копирования данных между внутренним компьютером и внешними устройствами. После поступления сетевых данных они сначала сохраняются в области кэша ядра операционной системы и ждут, пока приложение их соберет.
срабатывает по краю
При использовании режима Edge Trigger, когда в отслеживаемом дескрипторе Socket происходит событие, доступное для чтения, сервер просыпается из epoll_wait только один раз. Даже если процесс не вызывает функцию чтения для чтения данных из ядра, он все равно пробуждается только один раз. up один раз. Таким образом, наша программа должна гарантировать, что данные в буфере ядра читаются все сразу.
горизонтальный триггер
При использовании режима горизонтального триггера, когда в отслеживаемом сокете происходит событие, доступное для чтения, сервер постоянно выходит из режима epoll_wait до тех пор, пока данные буфера ядра не будут прочитаны функцией чтения. Цель состоит в том, чтобы сообщить нам, что есть данные, которые необходимо прочитать. читать. .
Управляемый событиями ввод-вывод
После инициирования запроса на чтение дождитесь уведомления о событии готовности к чтению, прежде чем читать данные.
Асинхронный ввод-вывод
После инициации запроса на чтение подождите, пока операционная система уведомит вас о завершении чтения, и полностью передайте функцию операционной системе для реализации.
2.3.2 Каковы модели ввода-вывода операционной системы?
Первый этап чтения блокируется, что мы часто называем блокировкой ввода-вывода. То есть, если первый этап чтения блокируется в ожидании готовности чтения, мы называем это блокировкой ввода-вывода.