八:对微服务通讯方式RPC vs REST的理解

版权声明:本文为博主原创文章,觉得稍有帮助,可点赞、转载注明出处。 https://blog.csdn.net/chenghuaying/article/details/81286137

微服务专栏地址

  专栏:微服务
  微服务系列总目录

目录

1. 简介

微服务的服务都是独立进程,服务之间的通讯的效率、稳定性等等关乎着系统是否能高效、稳定运行。常见的通讯方式有RPC及REST,从以下几个方面去理解微服务的服务通讯方式以及选择:

  1. 关于RPC
    1.1 什么是RPC
    1.2 RPC有什么用
    1.3 RPC的框架有哪些
  2. 什么是REST
  3. 两者有什么区别
  4. 微服务通讯该如何选择

补充了一些对于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框架是如何孕育的,其文档的价值早已超出使用指南的范畴。其中的一些设计的细节、原则、编码规范、注意事项等等等等,都值得我们在实际工作中去遵循、实践、体会以及总结。

展开阅读全文

没有更多推荐了,返回首页