论坛
潜水/灌水快乐,沉淀知识,认识更多同行。
ToB圈子
加入IT圈,遇到更多同好之人。
朋友圈
看朋友圈动态,了解ToB世界。
ToB门户
了解全球最新的ToB事件
博客
Blog
排行榜
Ranklist
文库
业界最专业的IT文库,上传资料也可以赚钱
下载
分享
Share
导读
Guide
相册
Album
记录
Doing
搜索
本版
文章
帖子
ToB圈子
用户
免费入驻
产品入驻
解决方案入驻
公司入驻
案例入驻
登录
·
注册
只需一步,快速开始
账号登录
立即注册
找回密码
用户名
Email
自动登录
找回密码
密码
登录
立即注册
首页
找靠谱产品
找解决方案
找靠谱公司
找案例
找对的人
专家智库
悬赏任务
圈子
SAAS
IT评测·应用市场-qidao123.com
»
论坛
›
数据库
›
Oracle
›
RPC 如何做到 服务调⽤者可以像调⽤当地接⼝⼀样调⽤长 ...
RPC 如何做到 服务调⽤者可以像调⽤当地接⼝⼀样调⽤长途的服务提供者 ...
锦通
论坛元老
|
2025-2-12 17:17:06
|
显示全部楼层
|
阅读模式
楼主
主题
1015
|
帖子
1015
|
积分
3045
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要
登录
才可以下载或查看,没有账号?
立即注册
x
RPC(Remote Procedure Call,长途过程调用)的焦点目的是让服务调用者能够像调用当地接口一样调用长途服务提供者。为了实现这一目的,RPC 框架通常通过以下几个关键步骤和技术来实现:
1. 定义服务接口
目的
:让调用者知道长途服务提供者提供了哪些方法。
实现
:
服务提供者和调用者共享雷同的接口定义(如 Java 中的接口类)。
接口定义了长途服务的所有方法及其参数和返回值范例。
示例
:
java
复制
public interface UserService {
User getUserById(int id);
}
复制代码
2. 代理模式(Stub 和 Skeleton)
目的
:隐蔽长途调用的复杂性,让调用者像调用当地方法一样调用长途方法。
实现
:
Stub(客户端代理)
:在客户端生成一个代理对象,负责将当地调用转换为网络请求。
Skeleton(服务端代理)
:在服务端接收网络请求,并将其转换为对现实服务方法的调用。
示例
:
客户端调用 UserService.getUserById(1),现实上调用的是 Stub 对象。
Stub 将方法名、参数等序列化后发送到服务端。
Skeleton 接收到请求后,反序列化并调用真正的 UserService 实现。
3. 序列化与反序列化
目的
:将方法调用的参数和返回值转换为可以在网络中传输的格式。
实现
:
使用序列化技术(如 JSON、Protobuf、Thrift、Hessian 等)将对象转换为字节流。
反序列化则将字节流转换回对象。
示例
:
客户端将 getUserById(1) 的参数 1 序列化为字节流。
服务端将字节流反序列化为 1,并调用现实方法。
4. 网络通信
目的
:将序列化后的数据通过网络传输到服务端,并将效果返回给客户端。
实现
:
使用网络协议(如 TCP、HTTP、gRPC 等)举行数据传输。
客户端通过网络将请求发送到服务端。
服务端处置惩罚请求后,将效果通过网络返回给客户端。
示例
:
客户端通过 TCP 连接将请求发送到服务端。
服务端处置惩罚请求后,通过同连续接返回效果。
5. 服务注册与发现
目的
:让客户端能够找到服务提供者的地址。
实现
:
使用服务注册中央(如 ZooKeeper、Consul、Nacos、Eureka 等)。
服务提供者启动时,将自己的地址注册到注册中央。
客户端调用时,从注册中央获取服务提供者的地址。
示例
:
服务提供者启动时,向注册中央注册 UserService 的地址 192.168.1.1:8080。
客户端调用时,从注册中央获取 192.168.1.1:8080,并发送请求。
6. 负载均衡
目的
:在多个服务提供者之间分配请求,克制单点压力过大。
实现
:
客户端从注册中央获取多个服务提供者的地址。
使用负载均衡算法(如轮询、随机、加权等)选择一个服务提供者。
示例
:
客户端从注册中央获取 192.168.1.1:8080 和 192.168.1.2:8080。
使用轮询算法选择 192.168.1.1:8080 发送请求。
7. 透明化调用
目的
:让调用者无需关心长途调用的细节。
实现
:
通过动态代理或代码生成技术,自动生成 Stub 和 Skeleton。
调用者只需调用当地接口,RPC 框架自动处置惩罚长途调用。
示例
:
使用 Java 动态代理生成 UserService 的 Stub。
调用者直接调用 userService.getUserById(1),无需关心网络通信细节。
8. 非常处置惩罚
目的
:处置惩罚网络故障、超时、服务不可用等非常情况。
实现
:
提供重试机制、超时机制、熔断机制等。
将长途非常转换为当地非常,方便调用者处置惩罚。
示例
:
如果服务端不可用,客户端捕获 RemoteException 并举行重试。
9. 性能优化
目的
:进步 RPC 调用的性能。
实现
:
使用高效的序列化协议(如 Protobuf)。
支持异步调用和流式调用。
使用连接池减少网络开销。
示例
:
客户端使用连接池复用 TCP 连接,减少连接建立的开销。
10. 安全性
目的
:确保 RPC 调用的安全性。
实现
:
支持身份验证和授权。
使用 SSL/TLS 加密通信。
示例
:
客户端和服务端通过 TLS 加密通信,防止数据泄露。
总结
RPC 框架通过定义接口、代理模式、序列化、网络通信、服务注册与发现、负载均衡、透明化调用、非常处置惩罚、性能优化和安全性等技术,实现了让服务调用者像调用当地接口一样调用长途服务提供者。常见的 RPC 框架包罗 gRPC、Dubbo、Thrift、Spring Cloud 等。
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
回复
使用道具
举报
0 个回复
倒序浏览
返回列表
快速回复
高级模式
B
Color
Image
Link
Quote
Code
Smilies
您需要登录后才可以回帖
登录
or
立即注册
本版积分规则
发表回复
回帖并转播
回帖后跳转到最后一页
发新帖
回复
锦通
论坛元老
这个人很懒什么都没写!
楼主热帖
vue3 - 最新详细实现 “拖曳式课程表“ ...
快速入手node.js
奇怪,为什么ArrayList初始化容量大小 ...
漏洞利用
医院HIS体系厂家统计
如何成为一位人心所向的管理者?我的经 ...
Kubernetes(k8s)pod详解
理解MVCC
如何在文章中设置灰色文本框(正文底色 ...
Vue实现复制粘贴功能
标签云
AI
运维
CIO
存储
服务器
浏览过的版块
程序人生
快速回复
返回顶部
返回列表