zoukankan      html  css  js  c++  java
  • 如何理解 RPC 远程服务调用?

    RPC 远程服务调用是分布式服务架构的基础。

    RPC(Remote Procedure Call)是一种进程间通信方式,它是一种通过网络从远程计算机程序上请求服务,而不需要了解底层网络技术的协议。

    RPC 允许程序调用另一个地址空间的过程或函数,而不用程序员显式编码这个远程调用的细节。即无论是调用本地接口/服务的还是远程的接口/服务,本质上编写的调用代码基本相同。

    比如两台服务器 A、B,一个应用部署在 A 服务器上,想要调用 B 服务器上应用提供的函数或者方法,由于不在一个内存空间,则不能直接调用,这时候就可以应用 RPC 框架的实现来解决。

    常见RPC 框架

    Apache Dubbo

    Dubbo 是阿里开源,目前已经成为 Apache 顶级项目。Dubbo 可以通过高性能的 RPC 实现服务的输出和输入,支持服务治理,提供了控制台界面,可以独立应用,也可以和 Spring 框架无缝集成。

    Dubbo 在设计中采用了微内核架构,基于对 Java SPI 机制的扩展实现,Dubbo 对分布式服务调用核心功能都开放了扩展点,包括服务调用的负载均衡策略、序列化协议、传输协议等,使用者都可以添加自定义实现。

    Google 的 gRPC

    gRPC 是 Google 开发的高性能、通用的开源 RPC 框架,gRPC 使用 ProtoBuf 来定义服务,ProtoBuf 是 Google 开发的一种数据序列化协议,性能比较高,压缩和传输效率高,语法也比较简单。另外,gRPC 支持多种语言,并能够基于语言自动生成客户端和服务端功能库。

    Apache Thrift

    Thrift 起源于 Facebook,和 Dubbo 一样,后来被提交 Apache 基金会将 Thrift 作为一个开源项目。Facebook 创造 Thrift 的目的是为了解决 Facebook 各系统间大数据量的传输通信,以及系统间语言环境不同需要跨平台的问题。

    Thrift 支持多种编程语言,如 Java、C++、Python、PHP、Ruby 等,可以在多种不同的语言之间通信。应用 Thrift,需要在一个语言无关的 IDL 文件里,定义数据类型和服务接口,然后生成用来构建 RPC 客户和服务器所需的代码。

    Thrift 主要的优点是跨语言;缺点是,由于需要定义独立的 IDL 文件,如果对服务进行修改,当数据结构发生变化时,必须重新编辑 IDL 文件、重新编译和生成相关的代码,修改起来比较繁琐。

    RPC 框架用到哪些技术

    如何建立通信

    实现分布式服务框架,首先要解决不同节点之间通讯的问题,需要在客户端和服务器之间建立 TCP 连接,远程过程调用的所有交换的数据都在这个连接里传输。

    一般来说,建立通信可以使用成熟的网络通信框架,比如 Java 语言中的 Netty。在 Dubbo中就应用了 Netty。

    如何进行网络传输

    建立通信之后,节点之间数据传输采用什么协议,也就是选择什么样的二进制数据格式组织;传输的数据如何序列化和反序列化,比如在 Dubbo 中,传输协议默认使用 Dubbo 协议,序列化支持选择 Hessian、Kryo、Protobuf 等不同方式。

    如何进行服务注册和发现

    服务注册,需要服务提供者启动后主动把服务注册到注册中心,注册中心存储了该服务的 IP、端口、调用方式(协议、序列化方式)等信息。

    服务发现,当服务消费者第一次调用服务时,会通过注册中心找到相应的服务提供方地址列表,并缓存到本地,以供后续使用。当消费者再次调用服务时,不会再去请求注册中心,而是直接通过负载均衡算法从 IP 列表中取一个服务提供者调用服务。

  • 相关阅读:
    Importing data in R 1
    R Tidyverse dplyr包学习笔记2
    搭建PHP开发环境
    R parallel包学习笔记2
    测试笔试单选题(持续更新ing)
    http cookie管理中cookie police下部分参数含意
    全国省市县区域信息最新数据库脚本(mysql版本)
    Jmeter运行后出现乱码
    从自身谈在成熟与幼稚公司做测试的差别
    SQL查询中用到的函数
  • 原文地址:https://www.cnblogs.com/zz-ksw/p/13721267.html
Copyright © 2011-2022 走看看