深入浅出RPC---1、RPC架构-灵析社区

提笔写架构

RPC是什么

RPC概述

在单体架构体系时期,我们写一个函数都是在本地注入调用就行了。但是在互联网公司,服务都是部署在不同服务器上的分布式系统,如何调用呢?

RPC 全称 Remote Procedure Call——远程过程调用。RPC技术简单说就是为了解决远程调用服务的一种技术,在提供强大的远程调用能力时不损失本地调用的语义简洁性。

RPC框架

Dubbo:国内最早开源的 RPC 框架,由阿里巴巴公司开发并于 2011 年末对外开源,仅支持 Java 语言。

Motan:微博内部使用的 RPC 框架,于 2016 年对外开源,仅支持 Java 语言。 Tars:腾讯内部使用的 RPC 框架,于2017 年对外开源,仅支持 C++ 语言。

Spring Cloud:国外 Pivotal 公司 2014 年对外开源的 RPC框架,提供了丰富的生态组件。

gRPC:Google 于 2015 年对外开源的跨语言 RPC 框架,支持多种语言。

Thrift:最初是由 Facebook 开发的内部系统跨语言的 RPC 框架,2007 年贡献给了 Apache 基金,成为Apache 开源项目之一,支持多种语言。

RPC框架优点

RPC框架一般使用长链接,不必每次通信都要3次握手,减少网络开销。

RPC框架一般都有注册中心,有丰富的监控管理

发布、下线接口、动态扩展等,对调用方来说是无感知、统一化的操作 协议私密,安全性较高 RPC

协议更简单内容更小,效率更高,服务化架构、服务化治理,RPC框架是一个强力的支撑。

应用场景

特征:

长链接通讯;

注册发布机制;

安全性,没有暴露资源操作;

微服务支持;

应用举例:

分布式操作系统的进程间通讯;

构造分布式设计的软件环境;

远程数据库服务;

分布式应用程序设计;

分布式程序的调试;

RPC原理

RPC架构

调用流程

具体调用过程如下:

服务消费者(client客户端)通过本地调用的方式调用服务。

客户端存根(client stub)接收到请求后负责将方法、入参等信息序列化(组装)成能够进行网络传输的消息 体。

客户端存根(client stub)找到远程的服务地址,并且将消息通过网络发送给服务端。

服务端存根(server stub)收到消息后进行解码(反序列化操作)。

服务端存根(server stub)根据解码结果调用本地的服务进行相关处理。

本地服务执行具体业务逻辑并将处理结果返回给服务端存根(server stub)。

服务端存根(server stub)将返回结果重新打包成消息(序列化)并通过网络发送至消费方。

客户端存根(client stub)接收到消息,并进行解码(反序列化)。

服务消费方得到最终结果。

涉及技术

动态代理 生成Client Stub(客户端存根)和Server Stub(服务端存根)的时候需要用到java动态代理技术。

序列化 在网络中,所有的数据都将会被转化为字节进行传送,需要对这些参数进行序列化和反序列化操作。 目前主流高效的开源序列化框架有Kryo、fastjson、Hessian、Protobuf等。

NIO通信 Java 提供了 NIO 的解决方案,Java 7 也提供了更优秀的 NIO.2 支持。可以采用Netty或者mina框架来解决 NIO数据传输的问题。开源的RPC框架Dubbo就是采用NIO通信,集成支持netty、mina、grizzly。

服务注册中心 通过注册中心,让客户端连接调用服务端所发布的服务。主流的注册中心组件:Redis、Zookeeper、Consul 、Etcd。Dubbo采用的是ZooKeeper提供服务注册与发现功能。

负载均衡 在高并发的场景下,需要多个节点或集群来提升整体吞吐能力。

健康检查 健康检查包括,客户端心跳和服务端主动探测两种方式。

阅读量:2030

点赞量:0

收藏量:0