微服务专栏地址
目录
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. 两者有什么区别
从以下各个角度进行对比
扫描二维码关注公众号,回复: 2563156 查看本文章
维度 | 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框架是如何孕育的,其文档的价值早已超出使用指南的范畴。其中的一些设计的细节、原则、编码规范、注意事项等等等等,都值得我们在实际工作中去遵循、实践、体会以及总结。