(三)四种流行的RPC框架(Dubbo/Motan/Thrift/Grpc)
目录
● Dubbo
● Motan
● Thrift
● Grpc
上述四种流行RPC框架的对比
● Dubbo
本来阿里2014年就不在维护Dubbo了,直到2017年9月份又恢复了维护,可能一来是用户量很多,哪怕是在不维护的情况下还是有很多的用户,二来是微服务比较火,比较看好微服务的方向。以下是Dubbo的架构模型(实线表示同步调用,虚线表示异步调用):
第1、2步:蓝色的箭头表示在服务初始化的时候做的工作,可以理解为服务提供者和消费者在启动的时候做的事情。在服务提供者启动时,服务提供者把服务注册到注册中心(比如说Zookeeper),消费者在启动的时候也会和注册中心打交道,订阅自己需要的服务。
第3步:注册中心会返回服务提供者的地址给消费者,如果服务提供者的地址有变化,注册中心会把变更通知到消费者。
第4步:服务消费者会从服务提供者地址列表中基于一些负载均衡算法,选择一个服务提供者进行调用,调用失败的时候会再选择另外一个服务提供者。
消费者和提供者以及注册中心之间使用的是长连接,服务的消费者和提供者会在内存中累计服务调用的次数,并且定时将调用的信息发送到监控中心;消费者和提供者之间通信采用的是非阻塞I/O(即NIO);Dubbo的序列化使用的是阿里修改过的hession序列化方式,Dubbo是基于java来进行开发的,所以也支持java的客户端和服务端。里边儿的服务注册、服务订阅、通知以及监控都是Dubbo为我们做好了的,有着比较完善的服务治理。
● Motan
2016年5月份正式开源,号称是每天支撑了微博的千亿级别的调用量,它使用起来比较简单,通过Spring的配置,不需要额外的代码就可以拥有分布式的调用能力。以下为Motan的架构模型:
Motan的服务提供者——RPC Server,服务调用方——RPC Client,服务注册中心——Registry,三个角色,和Dubbo类似。Server会向注册中心注册服务,Client使用服务需要先向注册中心Registry进行订阅,client根据Registry的返回列表与具体的Server建立连接,进行RPC通讯,当Server发生变更的时候,Registry也会同步变更,然后同步的通知到Client。
服务的消费者和提供者进行调用的时候,默认使用的是Motan的协议,用hession进行序列化,motan也提供了服务治理的功能,包括服务的发现,服务的摘除、高可用以及负载均衡,Motan也是基于Java来开发的,即语言上只支持Java。
● Thrift
2007年由Facebook开发的,2008年进入了Apache开源项目,它是跨语言的RPC框架。其架构图如下:
从上图中可以看到,最开始 需要API负责定义一个文件,然后通过Thrift来生成对应的各种语言的代码,生成之后,服务的提供者和消费者都需要把这个代码引入进去,服务端把接口进行一个实现,消费者使用API的存根去直接调用提供者。
目前支持的语言比较多,比如常见的C++、Java、Python、Ruby、C#、PHP等。Thrift属于C/S模式,它通过代码生成工具将接口定义的文件生成服务器端和客户端的代码,当然,服务端和客户端可以是不同语言的,从而实现了客户端和服务端之间跨语言的支持。传输的序列化也支持很多种,比如:二进制模式、压缩模式、JSON模式以及Debug模式,我们可以在开发的过程中使用Debug模式和JSON模式来方便的看到我们传输的数据,在线上环境使用二进制模式或压缩模式来提升性能。在通讯模式上也支持很多种,它支持阻塞的I/O和NIO,还有专门用来传输文件的传输方式。在线程模型上,它也支持很多种,比如简单的单线程模式、线程池模式、多线程使用非阻塞I/O模式。这样我们可以在不同的业务场景中使用更适合的技术来实现RPC调用。Thrift并没有服务治理相关的功能,消费者只能使用服务提供者IP和端口号来进行访问,如果要向Dubbo和Motan那样实现服务治理,需要我们自己把 服务提供者实现注册、消费者去注册中心寻找这个过程 实现。
● Grpc
和Thrift类似,需要写API的定义文件,文件的格式是protobuf的,需要生成各个语言的接口,然后才能实现跨语言的调用,所以它和Thrift一样支持跨语言,Grpc的文件传输都是用的protobuf,protobuf是一个效率特别高(可以说是业界最高)的序列化方式,谷歌面向的应用是移动端的,所以它没有采用Socket,而是基于HTTP2(协议编码和传输机制的效率要低于传统的Socket)的一个协议标准。
上述四种流行RPC框架的对比
开发语言 | 服务治理 | 多种序列化 | 多种注册中心 | 管理中心 | 跨语言通讯 | 整体性能 | |
Dubbo | Java | ✔ | ✔ | ✔ | ✔ | ✘ | 3 |
Maton | Java | ✔ | ✔ | ✔ | ✔ | ✘ | 4 |
Thrift | 跨语言 | ✘ | 只支持thrift | ✘ | ✘ | ✔ | 5 |
Grpc | 跨语言 | ✘ | 只支持protobuf | ✘ | ✘ | ✔ | 3 |
(三)四种流行的RPC框架(Dubbo/Motan/Thrift/Grpc)相关推荐
- 流行的rpc框架性能测试对比
本文转载自鸟窝的博客 流行的rpc框架benchmark 2018新春版 目录 [−] 本文测试的RPC框架 测试场景 模拟业务处理时间 测试数据 测试client 测试指标 测试环境 测试结果 处理 ...
- RPC 框架 Dubbo 从理解到使用(一)
技术架构演变 学习 Dubbo 之前我们有必要先来了解一下互联网技术架构的演变过程及通信方式,方便我们搞清楚为什么需要使用基于 RPC 思想的系列框架. 单一应用架构 通俗地讲,"单体应用( ...
- 什么是RPC?RPC框架dubbo的核心流程
一.REST 与 RPC: 1.什么是 REST 和 RPC 协议: 在单体应用中,各模块间的调用是通过编程语言级别的方法函数来实现,但分布式系统运行在多台机器上,一般来说,每个服务实例都是一个进程, ...
- 【Java23】maven加强,分布式RPC框架Dubbo
文章目录 1.maven的继承 2.maven的聚合 3.RPC 4.软件演进 5.Dubbo和注册中心zookeeper 6.Dubbo创建接口工程 7.Dubbo创建服务提供者(Provider) ...
- 【RPC框架、RPC框架必会的基本知识、手写一个RPC框架案例、优秀的RPC框架Dubbo、Dubbo和SpringCloud框架比较】
一.RPC框架必会的基本知识 1.1 什么是RPC? RPC(Remote Procedure Call --远程过程调用),它是一种通过网络从远程计算机程序上请求服务,而不需要了解底层网络的技术. ...
- php中流行的rpc框架有哪些?
什么是rpc框架 先回答第一个问题:什么是RPC框架? 如果用一句话概括RPC就是:远程调用框架(Remote Procedure Call) 那什么是远程调用? 通常我们调用一个php中的方法,比如 ...
- PHP 中流行的 rpc 框架有哪些
目录 PHP 中流行的 rpc 框架有哪些 第1章 什么是rpc框架 1.1 什么是 RPC 框架 1.2 那什么是远程调用? 第2章 RPC与Socket有什么区别 第3章 RPC与REST有什么区 ...
- rpc是什么?php中流行的rpc框架有哪些?
什么是rpc框架 先回答第一个问题:什么是RPC框架?如果用一句话概括RPC就是:远程调用框架(Remote Procedure Call) 那什么是远程调用? 通常我们调用一个php中的方法,比如这 ...
- [转]php中流行的rpc框架有哪些?
什么是rpc框架 先回答第一个问题:什么是RPC框架? 如果用一句话概括RPC就是:远程调用框架(Remote Procedure Call) 那什么是远程调用? 通常我们调用一个php中的方法,比如 ...
最新文章
- GitHub 中 Merge pull request 的 3 中选项说明
- 年化收益14%的投资机会,出手吗?
- Data Mapper
- 本地连接阿里云RDS
- C#中as与is的用法
- STM32 电机教程 25 - ST MCLIB实战之开环svpwm控制
- mysql之数据库主从复制配置报错1677
- DCASE挑战赛原始提案文件(详细信息)
- java socket send_java socket编程
- 微软1月补丁星期二值得关注的蠕虫及其它
- 3dmax软件怎么贴图
- 基于 GMDSS 的电子海图定位仿真研究
- ZJ-笔记本风扇异响
- PL/SQL 工具远程连接Oracle数据库方法,plsql免安装oracle客户端直接配置oci实战演示
- 阿里P9又有新瓜,而我却是技术圈的一股清流
- 游戏渲染建模常用到的相关名词 AlvinCR个人理解-(烘焙、法线、LOD、UV坐标、各向异性)
- MD5加密算法的原理和应用
- 报错Content type ‘multipart/form-data;boundary=----WebKitFormBoundaryTz0sivpVO7U0H70m;charset=UTF-8‘ n
- JavaScript---js实现从本地上传图片
- tr 去除空行_Shell去除空格和空行的方法