1.引言
1.1RPC概念
1.RPC是远程调用(Remote Procedure Call)的缩写形式,是一种跨进程(JVN)的方法调用形式。是目前在Java分布式,微服务体系中,重要的一种通信方式。
1.2 架构演变过程
1.单体架构
1.1单体架构—水平扩展
2.垂直架构
3. RPC架构
2. 单体架构
也叫做单体应用︰就是系统中所有的功能(代码)耦合在了一起。并且生成一个jar[war]。部署在一个tomcat中(JVM一个进程)
2.2 单体架构的问题
1.热点问题(某个模块访问量大,导致其他模块的访问出现问题)
2.扩展性差,新资源的分配力度不精确(问题:门户系统访问量猛增,解决方法:增加机器,增加服务器tomcat。解决方法的问题:但是新增的资源,不能精确给到门户)
3.模块(子系统)耦合度高、相互影响(修改某一个子系统的代码,产生了问题,影响其他的子系统)
4.维护部署成本高(某次发布,只更新了后台管理的(订单模块),但是因为是单体架构,所以会发布整个系统。
5.技术栈受限,必须使用相同的编程语言开发不同的子系统。
2.3 单体架构 - 水平扩展
水平扩展是用来解决硬件资源匮乏,能实现增加带宽,增加并发数等功能,微服务中也有用,比如一个服务做集群
3. 垂直架构
把一个单体架构的应用,按照子系统进行了划分,每个子系统都独立部署在自己的tomcat (JVM\进程)中。多个子系统共享数据库等存储资源。
(TIPS:一个Tomcat就是一个JVM,就是一个进程)
//下面图片中的J,表示"进程",
3.2 垂直架构有限地解决单体架构的部分问题 粒度(子系统)
- 热点问题(子系统级别的热点问题解决了,但是模块的热点问题没有解决)。扩展性差(子系统级别,增加机器,资源分配相对精确)
- 子系统耦合度降低,独立的更新,发版。
- 维护部署成本有所好转
- 技术栈也不要求统一语言(门户PHP,后台管理Java)
4.RPC架构
核心思路:
i. 网络通信
ii. 协议,
iii. 序列化
iv. 代理的创建
4.1 RPC跨进程调用
跨进程调用的背景: 要实现客户端跨进程(JVM)调用服务端的方法,
解决方法:用HTTP协议或TCP协议实现的RPC跨进程调用,实现
(TIPS: HTTP底层虽然是TCP协议,但是他们不能等价,HTTP协议在TCP协议上做了自己的封装
就像是java异常,分为Exeception和Runtime Exeception,虽然R是E的子类,但是Spring做处理的时候,也给他们区别开了)
跨进程调用的本质 — 网络通信传输 参数 和 返回值
4.2 网络编程如果走Http协议(特点)
- Http协议对于程序员来讲最方便的是不用开发服务器(tomcat,resin,weblogic jbass)
- 服务端:服务要通过控制器进行暴露(Servlet Controller)
- 客户端:http请求((不一定通过浏览器,内部之间的调用)HttpClient ,OKHttp,RestTemplate WebClient
4.2.2 问题:
1.需要包一层, 不能直接通过网络调用Service
2.Client代码过于繁琐了new HttpClient()—> Get Post HttpGet HttpPost。不能直接表达业务含义。
3.走Http协议比走TCP协议 传输数据数据量大(HTTP协议中包含了很多和业务无关的头)。慢(HTTP是应用层,TCP是传输层,传输数据时,HTTP需要多走两层,所以慢)
4.2.3 典型的技术实现方案:1 SpringCloud Feign 2 Hession RPC
4.2.4 优势 : Http协议文本类型字符串协议, 跨语言平台好。
4.3 网络编程如果走TCP协议(特点)
- 服务器端自己开发Socket NIO Netty。接受client传递参数,需要调用哪个方法的名字。把结果返回
好处:可以直接进行Service的调用 - 客户端自己开发大量网络相关的代码。接受服务端的返回值
- 自己定义应用协议 自己使用序列化的方式
好处:效率高(无大量的3次握手 4次握手)协议 自定义的二进制 线程管理好
坏处:开发难度大对使用者不友好
4.3.2 典型的技术实现方案:Dubbo
5. RPC设计
5.0 RPC设计目标:让调用者像调用本地方法那样,去调用远端的服务方法
5.1 RPC设计要考虑的核心问题
1.通信方式TCP(Socket NIO Netty Mina) Http
2.TCP(自定义协议)
3.序列化(JSON Protobuf Hessian)
4.在调用者这方创建远端服务类的代理类(代理:通过代理类,为原始类增加额外功能,下面这两个是这里代理类新增的功能)
传输数据
网络通信
5.2 RPC架构衍生的方案
注册中心 核心作用 服务的治理
1.负载均衡
2.健康管理服务管理(心跳重试【延迟队列】)
3.解耦合
熔断
限流
传数据(参数) 做协议的封装 做网络操作