八:对微服务通讯方式RPC vs REST的理解
微服务专栏地址
专栏:微服务
微服务系列总目录
目录
- 微服务专栏地址
- 目录
- 1. 简介
- 2. 关于RPC
- 2.1 什么是RPC
- 2.2 RPC有什么用
- 2.3 RPC的框架有哪些
- 2.3.1 服务治理型
- 2.3.2 多语言型
- 3. 什么是REST
- 4. 两者有什么区别
- 5. 微服务通讯该如何选择
- 6. RPC框架dubbo 的服务调用原理图解
- 6.1 服务提供
- 6.2 服务消费
- 6.3 Dubbo官方文档感触
1. 简介
微服务的服务都是独立进程,服务之间的通讯的效率、稳定性等等关乎着系统是否能高效、稳定运行。常见的通讯方式有RPC及REST,从以下几个方面去理解微服务的服务通讯方式以及选择:
- 关于RPC
1.1 什么是RPC
1.2 RPC有什么用
1.3 RPC的框架有哪些 - 什么是REST
- 两者有什么区别
- 微服务通讯该如何选择
补充了一些对于dubbo的体会
2. 关于RPC
2.1 什么是RPC
RPC(Remote Procedure Call):远程过程调用,它是一种通过网络从远程计算机程序上请求服务,而不需要了解底层网络技术的协议。
理解:是一种用于网络上不同程序之间的远程通讯的协议,内部封装了底层网络技术细节。
2.2 RPC有什么用
用以满足分布式系统架构中不同的系统之间的远程通信和相互调用。
2.3 RPC的框架有哪些
2.3.1 服务治理型
- dubbo:出身于阿里巴巴开源的RPC框架,已于2018年2月15日宣布进入 Apache 孵化器,期待成为apache顶级项目,并且全面拥抱Spring Cloud,git地址也已变更为https://github.com/apache/incubator-dubbo
- dubbox:当当网对dubbo的升级
- motan:是新浪微博开源的一套轻量级、方便使用的RPC框架
2.3.2 多语言型
只作简单了解,不是重点,有兴趣的可以点击链接了解详细内容
- rpcx是Go语言生态圈的Dubbo, 比Dubbo更轻量,实现了Dubbo的许多特性,借助于Go语言优秀的并发特性和简洁语法,可以使用较少的代码实现分布式的RPC服务。
- gRPC是Google开发的高性能、通用的开源RPC框架,其由Google主要面向移动应用开发并基于HTTP/2协议标准而设计,基于ProtoBuf(Protocol Buffers)序列化协议开发,且支持众多开发语言。本身它不是分布式的,所以要实现上面的框架的功能需要进一步的开发。
- thrift是Apache的一个跨语言的高性能的服务框架,也得到了广泛的应用。
3. 什么是REST
REST :representational state transfer 表述性状态转移,是一种架构风格。偷个懒,传送门:REST wiki
4. 两者有什么区别
从以下各个角度进行对比
维度 | RPC | REST |
---|---|---|
耦合性 | 强耦合 | 松散耦合 |
消息协议 | 二进制thrift、protobuf、avro | 文本型XML、JSON |
通讯协议 | TCP为主,也可以是HTTP | HTTP/HTTP2 |
性能 | 高 | 一般低于RPC |
接口契约IDL | Thrift、protobuf idl | Swagger |
客户端 | 强类型客户端、一般自动生成,可支持多语言客户端 | 一般http client可访问,也可支持多语言 |
案例 | dubbo、motan、tars、grpc、thrift | spring boot/mvc、Jax-rs |
开发者友好 | 客户端比较方便,但是二进制消息不可读 | 文本消息开发者可读、浏览器可直接访问查看结果 |
对外开放 | 需要转换成REST/文本协议 | 直接对外开放 |
5. 微服务通讯该如何选择
仍是需要从实际情况去考虑,个人理解的几点
- 对性能有着严格的要求:RPC
- 考虑学习成本,团队成员的上手难度以及开发效率成本:REST
- 对外开放的需求,rpc需要进一步转换,而rest可直接对外开放:REST
- 代码耦合度要求松散耦合:REST
- 与其他框架集成的难度低,微服务框架基本支持rest:REST
- 异步需求,rest需要额外的实现手段,如通过中间件等:RPC
6. RPC框架dubbo 的服务调用原理图解
暂时留个占位符,有想法把dubbo的学习结合实践整理出来、先放个传送门:Apache Dubbo
Dubbo现在已经成为Apache的孵化项目,官网地址也已改成:http://dubbo.apache.org/#!/?lang=zh-cn,有兴趣的可以移步。其中有一环节
6.1 服务提供
原理分析传送门
6.2 服务消费
原理分析传送门
6.3 Dubbo官方文档感触
开发指南,Dubbo的文档包含了使用、运维、测试报告、开发指南、 以及设计原则。真心的感觉是从一个框架从无到有,从设计到实现到扩展到运维,各个角度去揭示了一个顶级的RPC框架是如何孕育的,其文档的价值早已超出使用指南的范畴。其中的一些设计的细节、原则、编码规范、注意事项等等等等,都值得我们在实际工作中去遵循、实践、体会以及总结。
八:对微服务通讯方式RPC vs REST的理解相关推荐
- Spring Cloud之(十八)微服务网关GateWay
十八.微服务网关GateWay Zuul 1.x 是一个基于阻塞 IO 的 API Gateway 以及 Servlet:直到 2018 年 5 月,Zuul 2.x(基于Netty,也是非阻塞的,支 ...
- 微服务架构之 —— RPC框架
RPC简介 RPC是什么 Remote Procedure Call,远程过程调用. 首先来说本地方法调用,假设在main方法中调用一个本地的方法multiply(同一个进程内的方法调用).无非是做了 ...
- 基于AKF可扩展模型的微服务拆分方式
前言 当我们需要分布式系统提供更强的性能时,该怎样扩展系统呢?什么时候该加机器?什么时候该重构代码?扩容时,究竟该选择哈希算法还是最小连接数算法,才能有效提升性能? 在面对 Scalability 可 ...
- 微服务应用、框架、架构,理解【二】
大型分布式系统具有复杂性.隐匿性.配合性和易变性四大难题,不会存在任何单一软件工程上的突破,能让开发生产力得到一个数量级上的提升. 1.单体架构应用的困境 一个典型的单体架构应用就是将一个应用中所有的 ...
- .net core 微服务通讯组件Orleans的使用与配置
Orleans非常好用 并且支持.net core 社区也非常活跃 Orleans2.0+在国内的教程偏少 多数是1.5版本的教程 在这里写上四篇Orleans教程 目录 1.Orleans的入门教程 ...
- 企业级工作流解决方案(八)--微服务Tcp消息传输模型之服务端处理
服务端启动 服务端启动主要做几件事情,1. 从配置文件读取服务配置(主要是服务监听端口和编解码配置),2. 注册编解码器工厂,3. 启动dotnetty监听端口,4. 读取配置文件,解析全局消息处理模 ...
- 微服务架构核心20讲
1.微服务总体技术架构体系是怎样设计的 2.微服务最经典的三种服务发现机制 3.微服务 API 服务网关(一)原理 4.微服务 API 服务网关(二)开源网关 Zuul 5.跟 Netflix 学习微 ...
- 微服务开源框架TARS的RPC源码解析 之 初识TARS C++服务端
作者:Cony 导语:微服务开源框架TARS的RPC调用包含客户端与服务端,<微服务开源框架TARS的RPC源码解析>系列文章将从初识客户端.客户端的同步及异步调用.初识服务端.服务端的工 ...
- go语言微服务之RPC协议
目录 1 什么是RPC 2 RPC 使用的步骤 3 RPC相关函数 4 代码实现 4.1 服务端代码实现 4.2客户端代码实现 4.3程序实现结果 1 什么是RPC Remote Procedur ...
最新文章
- 奥鹏数据库应用系统设计下列关于php_南开19秋学期(1709、1803、1809、1903、1909)《数据库应用系统设计》在线作业【标准答案】668...
- 网站优化——网站索引量骤降从网站优化找原因
- 课程笔记|吴恩达Coursera机器学习 Week1 笔记-机器学习基础
- mysql利用tgz恢复_Mysql备份与恢复方法_MySQL
- 计算机游戏动漫制作自我鉴定,动漫设计专业自我鉴定
- 王道机试指南读后总结-4(有迷宫问题)
- 调试安装php源码,Xdebug的安装与配置,帮助调试PHP程序
- 浅谈分块二元Hermite插值
- python中返回上一步操作_返回上一步的快捷键-百度经验
- mysql select 列名_Mysql查询出所有列名
- 利用R语言进行主成分分析的步骤
- iPhone如何下载Skype_详细教程
- LeetCode——Maxium Depth of Binary Tree
- 堆叠实验-典型配置H3C IRF
- 2811: [Apio2012]Guard
- SpringBoot + Excel 读写技术与实际问题解决
- 【Linux 命令】chroot
- EasyExcel - API
- Orleans 2.0 官方文档 —— 3.1 核心概念 - 什么是grain
- java写的软件有哪些?