Рано утром в выходной я смотрел новости перед компьютером, и вдруг моя девушка закричала: ого, в Ханчжоу идет сильный снег, иди и смотри. Я проигнорировал ее, поэтому она подбежала и потянула меня.
RPC — это аббревиатура удаленного вызова процедур, что переводится как удаленный вызов процедур. представляет собой компьютерный протокол связи.
Зачем нужны удаленные звонки
существуетКак объяснить девушке, что такое раздачаКак показано в этой статье, чтобы улучшить качество обслуживания в отеле, отель превратился из шеф-повара, отвечающего за все, в несколько ролей, таких как шеф-повар, овощерезка и овощерезка.
Когда в ресторане есть только один шеф-повар, когда шеф-повар хочет приготовить вкусную томатную яичницу, ему нужно самому помыть помидоры, нарезать помидоры, взбить яйца и обжарить. Весь процесс можно выполнить самостоятельно без участия других людей. Это старое централизованное приложение, где все делает один компьютер.
制作番茄炒蛋{
厨师->洗菜->切菜->炒菜
}
С развитием отеля необходимо уточнить разделение труда и предоставить профессионалам возможность заниматься профессиональными делами. Таким образом, повар больше не единственный, кто участвует во всем процессе приготовления пищи. Требуется несколько ролей: шеф-повар отвечает за приготовление помидоров и яиц, шеф-повар отвечает за нарезку, а шеф-повар отвечает только за приготовление пищи.
Однако при четком разделении труда процесс приготовления яичницы с помидорами уже не является процессом одного человека. Этот процесс требует многостороннего сотрудничества. Прежде чем повар приготовит блюдо, он должен сначала уведомить повара и мастера по разделке, а приготовление пищи может быть выполнено только после того, как предварительная работа будет готова.
制作番茄炒蛋{
备菜师->洗菜
切菜师->切菜
厨师->炒菜
}
В этом случае шеф-повару приходится полагаться на многих посторонних для участия в приготовлении пищи. И когда он уведомляет овощерезку, чтобы она помогла ему помыть овощи, и овощерезку, чтобы помочь ему нарезать овощи, этот процесс представляет собой удаленный вызов процедуры.
В большинстве случаев официант идет прямо на кухню, чтобы сделать заказ, а затем человек на задней кухне раздает меню приготовителю, измельчителю и шеф-повару соответственно.
Этот процесс очень похож на процесс в компьютерной системе. Современные крупные веб-сайты развертываются распределенным образом. Взяв в качестве примера процесс заказа, он может включать несколько систем, таких как логистика, оплата, инвентаризация, красные конверты и т. д., и несколько систем развернуты на разных машинах и отвечают за разные команды. Для реализации процесса заказа необходимо использовать удаленные звонки.
下单{
库存->减少库存
支付->扣款
红包->红包抵用
物流->生成物流信息
}
Что такое удаленный вызов процедуры
RPC относится к процессу на компьютере A, который вызывает процесс на другом компьютере B. Вызывающий процесс на A приостанавливается, и начинается выполнение вызванного процесса на B. Когда значение возвращается на A, процесс A продолжает выполняться. . Вызывающий может передать информацию вызываемому с помощью параметров, а затем получить информацию через возвращаемый результат. И этот процесс прозрачен для разработчиков.
Как и в примере с задней кухней, официант передает меню на заднюю кухню, шеф-повар говорит повару и посудомойщику, чтобы они начали работу, и ждет, пока они закончат свою работу. После того, как мойщики и мойщики закончили свою работу, повара начинают готовить. Этот процесс фактически прозрачен для официанта, и ему не нужно заботиться о том, как готовят на кухне.
Если у нас есть способ вызвать удаленную службу, как локальную службу, но сделать вызывающую сторону прозрачной для деталей сетевого взаимодействия, это значительно повысит производительность, например, выполняемую потребителем службы.orderService.buy("HHKB键盘")Когда, по сути, вызывается удаленная служба. Этот метод на самом деле является RPC. Инструменты, обеспечивающие эту функциональность, называются платформами RPC.
В структуре RPC есть три основные роли: поставщик, потребитель и реестр. Как показано ниже:
В этом лучше разбираются и поставщик услуг, и потребитель услуг, то есть мойщик овощей и повар на задней кухне. Повар — потребитель услуг, а посудомойщик — их поставщик. Повара полагаются на услуги мойщиков овощей.
Что такое сервисный реестр?
На самом деле это легче понять. Для такого большого ресторана может быть много поваров (кластерное развертывание), а также много мойщиков овощей (кластерное развертывание). И когда повар хочет, чтобы мойщик овощей помогал мыть овощи, он не будет напрямую находить определенную мойку овощей, а уведомит посредника, этим человеком может быть руководитель бригады мойщиков овощей, или это может быть специальный шеф-повар-координатор кухни. персонал. Он знает, сколько посудомоечных машин на всей кухне, и кто сегодня придет на работу (требуется регистрация в сервисе). Более того, он также может динамически распределять задачи (балансировка нагрузки) в соответствии с занятостью каждой овощечистки.
Этим посредником является служба реестра.
Технологии, необходимые для реализации RPC
Есть много вопросов, которые необходимо учитывать в зрелой среде RPC. Здесь представлены только основные технологии, необходимые для реализации удаленного вызова. Заинтересованные друзья могут найти некоторые коды среды RPC с открытым исходным кодом, чтобы увидеть.
Динамический прокси
Генерация клиентской заглушки и заглушки сервера требует использования технологии динамического прокси Java.Мы можем использовать собственный механизм динамического прокси JDK, и мы можем использовать некоторые платформы инструментов байт-кода с открытым исходным кодом, такие как CgLib, Javassist и т. д.
Сериализация
Чтобы передавать и получать объекты Java по сети, нам необходимо их сериализовать и десериализовать.
Можно использовать собственный механизм сериализации Java, но его эффективность очень низкая.Рекомендуется использовать некоторые открытые и зрелые технологии сериализации, такие как: protobuf, Thrift, hessian, Kryo, Msgpack.
NIO
В настоящее время многие RPC-фреймворки напрямую основаны на netty, коммуникационном фреймворке ввода-вывода, например HSF, dubbo и Hadoop Avro от Alibaba. Netty рекомендуется в качестве базового коммуникационного фреймворка.
Реестр услуг
Дополнительные технологии: Redis, Zookeeper, Consul и т. д.
Ссылка: https://www.jianshu.com/p/dbfac2b876b1
Платформа RPC с открытым исходным кодом
Dubbo
Dubbo — это высокопроизводительная и превосходная инфраструктура служб Java с открытым исходным кодом от Alibaba, которая позволяет приложениям реализовывать функции вывода и ввода служб с помощью высокопроизводительного RPC и может быть легко интегрирована с инфраструктурой Spring. Теперь он вошел в инкубатор Apache.
Motan
Motan — это среда Java RPC с открытым исходным кодом от Sina Weibo. Открытый исходный код в мае 2016 года. Motan широко используется на платформе Weibo, ежедневно совершая около 100 миллиардов звонков в сотни сервисов.
gRPC
gRPC — это высокопроизводительная инфраструктура RPC общего назначения с открытым исходным кодом, разработанная Google. Она в основном разработана Google для разработки мобильных приложений и разработана на основе стандарта протокола HTTP/2. Она разработана на основе ProtoBuf (Protocol Buffers ) протокол сериализации и поддерживает множество языков разработки. Он не распространяется сам по себе, поэтому для реализации функций вышеуказанного фреймворка требуется дальнейшее развитие.
thrift
Thrift — это межъязыковая высокопроизводительная сервисная структура Apache, которая также широко используется.