网站首页 > 博客文章 正文
有许多流行的RPC框架可用于构建分布式系统和服务间的通信,以下是一些常见的7大RPC框架@mikechen
本篇已收于mikechen原创超30万字《阿里架构师进阶专题合集》里面。
分布式RPC
分布式RPC(Remote Procedure Call)是指在分布式系统中,通过网络调用远程计算机上的函数或过程,就像调用本地函数一样。
分布式RPC原理
分布式(RPC)通信工作流程,如下图所示:
主要包含,如下步骤:
- 客户端发起请求: 客户端调用本地的代理对象,这个代理对象负责与远程服务器通信,客户端不需要了解底层的网络通信细节,只需调用本地的接口。
- 序列化请求: 代理对象将客户端的请求(包括:方法名、参数......等)序列化为网络可以传输的格式,如:JSON、XML或二进制格式...等等。
- 发送请求: 序列化后的请求通过网络发送到远程服务器。
- 服务器接收请求: 服务器接收请求后,将请求数据反序列化,恢复成原始的调用信息(比如:方法名、参数....等)。
- 执行请求: 服务器调用实际的服务方法,处理请求,并将结果返回。
- 序列化响应: 服务器将结果序列化为网络可以传输的格式。
- 发送响应: 序列化后的响应通过网络发送回客户端。
- 客户端接收响应: 客户端接收响应后,将响应数据反序列化,恢复成原始的返回结果,并将结果返回给调用者。
分布式RPC主流框架
1.gRPC
gRPC是Google开源的高性能RPC框架,基于Protocol Buffers进行序列化,支持多种编程语言。
gRPC支持多种编程语言,包括Java、C++、Python等,并提供了强大的代码生成工具。
gRPC基于HTTP/2协议,具有高效的双向流、多路复用和头部压缩等特性。
提供了多种调用方式,包括简单RPC、服务器流式RPC、客户端流式RPC和双向流式RPC。
2.Apache Thrift
Thriftt是一个RPC框架(RPC是远程过程调用),与Dubbo类似,最初由Facebook开发,后面进入Apache开源项目。
Thrift架构,如下图所示:
Thrift支持多种编程语言,包括C++、Java、Python等,并提供了代码生成工具。
Thrift使用自定义的IDL(接口定义语言)来定义服务和数据类型,支持多种数据传输格式,如二进制、JSON和压缩格式。
提供了多种传输协议,包括TCP、HTTP和Zlib压缩协议等,可根据需求进行选择。
3.Apache Dubbo
阿里巴巴开源的高性能RPC框架,支持服务治理和多种协议,适用于Java生态系统。
Dubbo主要包含如下几个核心组件:
Dubbo支持多种协议,包括dubbo、REST、HTTP和WebService等,可根据需求进行选择。
提供了丰富的服务治理功能,如负载均衡、集群容错、动态路由和服务降级等。
4.Spring Cloud Netflix
基于Netflix OSS开发的Spring Cloud组件,包括Ribbon、Feign和Hystrix等,提供了基于HTTP的RPC风格的服务调用和负载均衡等功能。
5.ZeroMQ
快速消息传递库,提供了轻量级的消息传递机制,可以用于构建RPC系统。
6.Apache Avro
Apache基金会的开源数据序列化系统,也可以用于构建RPC框架。
7.gRPC-Web
gRPC的Web版本,允许在Web浏览器中直接使用gRPC进行跨域通信。
每个框架都有其独特的特点和适用场景,选择适合你的项目需求、编程语言和生态系统的RPC框架非常重要。
本篇已收于mikechen原创超30万字《阿里架构师进阶专题合集》里面。
- 上一篇: 你还以为码农仅仅是自嘲吗?
- 下一篇: 微信百度字节小程序包过大解决方案(实战经验总结)
猜你喜欢
- 2025-05-30 你还以为码农仅仅是自嘲吗?
- 2025-05-30 开源数字货币交易所开发学习笔记(2)——SpringCloud
- 2025-05-30 企业开发必备的6个Spring Cloud微服务开源项目
- 2025-05-30 Spring 云微服务的组件测试
- 2025-05-30 springCloud网关Zuul和GateWay区别
- 2025-05-30 软件系统如何设计可扩展架构?方法论,Java实战代码
- 2025-05-30 Java七大热门技术框架源码解析(完结)
- 2025-05-30 大白话详解Spring Cloud服务降级与熔断
- 2025-05-30 不会SpringCloud?这篇文章搞定它!
- 2025-05-30 基于layui+springcloud的企业级微服务框架
你 发表评论:
欢迎- 05-30springboot 集成redisson 以及分布式锁的使用
- 05-30去哪儿技术面:10亿数据如何最快速插入MySQL?
- 05-30redis介绍
- 05-30redission YYDS
- 05-30手把手教你springboot集成mybatis
- 05-30mybatis根据表逆向自动化生成代码:自动生成实体类、mapper文件
- 05-30越来越大的微信小程序
- 05-30SpringBoot之数据访问——访问SQL数据库!
- 408℃手把手教程「JavaWeb」优雅的SpringMvc+Mybatis整合之路
- 407℃用AI Agent治理微服务的复杂性问题|QCon
- 390℃初次使用IntelliJ IDEA新建Maven项目
- 385℃Maven技术方案最全手册(mavena)
- 383℃IT全明星|IntelliJ IDEA学习笔记(四、idea中怎么创建maven项目)
- 381℃IntelliJ IDEA 2018版本和2022版本创建 Maven 项目对比
- 379℃InfoQ 2024 年趋势报告:架构篇(infoq+2024+年趋势报告:架构篇分析)
- 375℃从头搭建 IntelliJ IDEA 环境(intellij idea建包)
- 最近发表
- 标签列表
-
- powershellfor (55)
- messagesource (56)
- aspose.pdf破解版 (56)
- promise.race (63)
- 2019cad序列号和密钥激活码 (62)
- window.performance (66)
- qt删除文件夹 (72)
- mysqlcaching_sha2_password (64)
- ubuntu升级gcc (58)
- nacos启动失败 (64)
- ssh-add (70)
- jwt漏洞 (58)
- macos14下载 (58)
- yarnnode (62)
- abstractqueuedsynchronizer (64)
- source~/.bashrc没有那个文件或目录 (65)
- springboot整合activiti工作流 (70)
- jmeter插件下载 (61)
- 抓包分析 (60)
- idea创建mavenweb项目 (65)
- vue回到顶部 (57)
- qcombobox样式表 (68)
- vue数组concat (56)
- tomcatundertow (58)
- pastemac (61)
本文暂时没有评论,来添加一个吧(●'◡'●)