远程过程调用:RPC概述

rpc技术

RPC技术解决了分布式系统中,服务与服务之间的调用问题。

RPC技术能够帮助我们更好地解耦服务,提高扩展性、部署灵活性。它还能够提供跨语言支持、协议私密性、数据传输效率高等优点。

RPC技术通常用于分布式计算,它的主要目标是让构建分布式计算(应用)更容易,在提供强大的远程调用能力时不损失本地调用的语义简洁性。为实现该目标,RPC框架需提供一种透明调用机制,让使用者不必显式地区分本地调用和远程调用

如果我们开发简单的应用,业务流程简单、流量不大,根本用不着RPC。但当我们的应用访问量增加和业务增加时,发现单机已无法承受,此时可以根据不同的业务(划分清楚业务逻辑)拆分成几个互不关联的应用,分别部署在不同的机器上。

随着我们的业务越来越多,应用也越来越多,应用与应用相互关联调用,发现有些功能已经不能简单划分开,此时可能就需要用到RPC

1. 什么是RPC

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

RPC的优点

RPC具有许多优点,包括分布式设计、部署灵活、解构服务和扩展性强。

常见的RPC框架

目前市面上有许多常见的RPC框架,包括Dubbo、Motan、Tars、Spring Cloud、gRPC和Thrift等。

2. RPC特性

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

注册中心

RPC框架一般都有注册中心,有丰富的监控管理。发布、下线接口、动态扩展等,对调用方来说是无感知、统一化的操作协议私密,安全性较高。

协议简单

RPC协议更简单内容更小,效率更高。

服务化架构

服务化架构、服务化治理,RPC框架是一个强力的支撑。

3. RPC架构

RPC架构包括四个核心组件,分别是Client,Client Stub,Server以及Server Stub。Stub可以理解为存根

Client是客户端,它负责发起远程调用请求。

Client Stub是客户端存根,它负责将客户端的调用请求序列化为能够进行网络传输的消息体,并通过网络发送给服务端。

Server是服务端,它负责处理客户端的调用请求并返回结果。

Server Stub是服务端存根,它负责接收客户端发送的消息并进行反序列化操作,然后调用本地服务进行处理,并将处理结果序列化后通过网络返回给客户端。

4. RPC调用流程

具体步骤如下:

  1. 服务消费者(client客户端)通过本地调用的方式调用服务。
  2. 客户端存根(client stub)接收到请求后负责将方法、入参等信息序列化(组装)成能够进行网络传输的消息体。
  3. 客户端存根(client stub)找到远程的服务地址,并且将消息通过网络发送给服务端。
  4. 服务端存根(server stub)收到消息后进行解码(反序列化操作)。
  5. 服务端存根(server stub)根据解码结果调用本地的服务进行相关处理。
  6. 本地服务执行具体业务逻辑并将处理结果返回给服务端存根(server stub)。
  7. 服务端存根(server stub)将返回结果重新打包成消息(序列化)并通过网络发送至消费方。
  8. 客户端存根(client stub)接收到消息,并进行解码(反序列化)。
  9. 服务消费方得到最终结果。

5. 涉及到的技术

动态代理

生成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提供服务注册与发现功能。

负载均衡

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

健康检查

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

使用rpc技术的例子

RPC技术被广泛应用于分布式系统中。例如,阿里巴巴的Dubbo/Dubbox、Google的gRPC、Spring Boot/Spring Cloud等都是应用级的服务框架,它们都使用了RPC技术

举个例子,假设我们开发了一个电商系统,需要拆分出用户服务、商品服务、优惠券服务、支付服务、订单服务、物流服务、售后服务等等,这些服务之间都相互调用。这时内部调用最好使用RPC,同时每个服务都可以独立部署,独立上线 from刘金,转载请注明原文链接。感谢!

© 版权声明
THE END
喜欢就支持一下吧
点赞0

Warning: mysqli_query(): (HY000/3): Error writing file '/tmp/MYHwlMJu' (Errcode: 28 - No space left on device) in /www/wwwroot/583.cn/wp-includes/class-wpdb.php on line 2345
admin的头像-五八三
评论 抢沙发
头像
欢迎您留下宝贵的见解!
提交
头像

昵称

图形验证码
取消
昵称代码图片