分布式通信的两种方式:HTTP通信(SpringCloud微服务)与RPC通信(Dubbo)。
首先来回顾一下计算机网络的七层协议:物理层,数据链路层,网络层,传输层,会话层,表示层,应用层
TCP属于传输层协议
HTTP是建立在tcp之上的应用层协议
socket是针对tcp或udp的具体接口实现,提供了在传输层进行网络编程的方法
RPC(Remote Procedure Call:远程过程调用):一种进程间通信方式。允许像调用本地服务一样调用远程服务
包含四个核心组件
客户端(client):服务的调用方
服务端(server):服务提供方
客户端存根(client stub,即,助手):将客户端请求参数打包成网络消息,再发给服务方
服务端存根(server stub,即,助手):接收客户端发来的消息,将消息解包,并调用本地方法
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-owDnOcKj-1578409168771)(mdpic/9248810-b7fa6420a22c221e.jpg)]
架构图片
为什么需要RPC,而不是简单的HTTP接口?
刚开始还是菜鸟的时候,时常把RPC和HTTP搞混淆,本身概念还没理解清楚,心里就浮躁的不行,导致闹出了不少笑话。
RPC(Remote Promote Call) 一种进程间通信方式。允许像调用本地服务一样调用远程服务。
RPC框架的主要目标就是让远程服务调用更简单、透明。
RPC框架负责屏蔽底层的传输方式(TCP或者UDP)、序列化方式(XML/JSON/二进制)和通信细节。开发人员在使用的时候只需要了解谁在什么位置提供了什么样的远程服务接口即可,并不需要关心底层通信细节和调用过程。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-cpTiSekA-1578409168787)(mdpic/803118-20170314181622166-721980934.png)]
HTTP协议是应用层的超文本传送协议,它是Web的基础。
HTTP协议位于TCP/IP协议之上的应用层。
基于HTTP协议的客户/服务器模式的信息交换过程,分四个过程:建立连接、发送请求信息、发送响应信息、关闭连接。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-p4Uv23Uz-1578409168792)(mdpic/20180414144059148.png)]
- 第七层:应用层 定义了用于在网络中进行通信和数据传输的接口 - 用户程式;提供标准服务,比如虚拟终端、文件以及任务的传输 和处理;
- 第六层:表示层 掩盖不同系统间的数据格式的不同性; 指定独立结构的数据传输格式; 数据的编码和解码;加密和解密;压缩和 解压缩
- 第五层:会话层 管理用户会话和对话; 控制用户间逻辑连接的建立和挂断;报告上一层发生的错误
- 第四层:传输层 管理网络中端到端的信息传送; 通过错误纠正和流控制机制提供可靠且有序的数据包传送; 提供面向无连接的数 据包的传送;
- 第三层:网络层 定义网络设备间如何传输数据; 根据唯一的网络设备地址路由数据包;提供流和拥塞控制以防止网络资源的损耗
- 第二层:数据链路层 定义操作通信连接的程序; 封装数据包为数据帧; 监测和纠正数据包传输错误
- 第一层:物理层 定义通过网络设备发送数据的物理方式; 作为网络媒介和设备间的接口;定义光学、电气以及机械特性。
可以看到 HTTP 和 RPC 并不是一个并行概念。
RPC是一种概念,http也是rpc实现的一种方式。
用http交互其实就已经属于rpc了。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-MvBxNMhg-1578409168796)(mdpic/803118-20170314190016948-135397649.png)]
MVC架构:当业务规模很小时,将所有功能都不熟在同一个进程中,通过双机或者负载均衡器实现负债分流;此时,分离前后台逻辑的MVC架构是关键。
PRC架构:当垂直应用越来越多,应用之间交互不可避免,将核心和公共业务抽取出来,作为独立的服务,实现前后台逻辑分离。此时,用于提高业务复用及拆分的RPC框架是关键。
SOA架构:随着业务发展,服务数量越来越多,服务生命周期管控和运行态的治理成为瓶颈,此时用于提升服务质量的SOA服务治理是关键。
微服务架构:通过服务的原子化拆分,以及微服务的独立打包、部署和升级,小团队的交付周期将缩短,运维成本也将大幅度下降。
是关键。
SOA架构:随着业务发展,服务数量越来越多,服务生命周期管控和运行态的治理成为瓶颈,此时用于提升服务质量的SOA服务治理是关键。
微服务架构:通过服务的原子化拆分,以及微服务的独立打包、部署和升级,小团队的交付周期将缩短,运维成本也将大幅度下降。