目录
RPC介绍及调用流程
-
远程过程调用,它是一种通过网络从远程计算机程序上请求服务,而不需要了解底层网络技术的协议。为了让你调用远程方法像调用本地方法一样简单。
RPC原理
先简单理解过程:
-
消费方调用服务,client stub将服务内容变成能网络传输的格式,client stub发送到服务端。
-
服务端解码,调用本地服务,返回结果到server stub,server stub在发送消息给消费方。
-
消费方client stub解码,得到结果。
来看详细过程
-
服务消费方(client)调用以本地调用方式调用服务;
-
client stub接收到调用后负责将方法、参数等组装成能够进行网络传输的消息体;
-
client stub找到服务地址,并将消息发送到服务端;
-
server stub收到消息后进行解码;
-
server stub根据解码结果调用本地的服务;
-
本地服务执行并将结果返回给server stub;
-
server stub将返回结果打包成消息并发送至消费方;
-
client stub接收到消息,并进行解码;
-
服务消费方得到最终结果。
SOA 面向服务的架构,也就是把工程按照业务逻辑拆分成服务层、表现层两个工程。服务层中包含业务逻辑,只需要对外提供服务即可。表现层只需要处理和页面的交互,业务逻辑都是调用服务层的服务来实现。SOA架构中有两个主要角色:服务提供者(Provider)和服务使用者(Consumer)。
为什么要用 Dubbo?
-
负载均衡——同一个服务部署在不同的机器时该调用那一台机器上的服务。
-
服务调用链路生成——随着系统的发展,服务越来越多,服务间依赖关系变得错踪复杂,甚至分不清哪个应用要在哪个应用之前启动,架构师都不能完整的描述应用的架构关系。Dubbo 可以为我们解决服务之间互相是如何调用的。
-
服务访问压力以及时长统计、资源调度和治理——基于访问压力实时管理集群容量,提高集群利用率。
-
服务降级——某个服务挂掉之后调用备用服务。
什么是分布式?
分布式就是我们把整个系统拆分成不同的服务然后将这些服务放在不同的服务器上减轻单体服务的压力提高并发量和性能。比如电商系统可以简单地拆分成订单系统、商品系统、登录系统等等,拆分之后的每个服务可以部署在不同的机器上,如果某一个服务的访问量比较大的话也可以将这个服务同时部署在多台机器上。(可以将功能拆分,也可以将一个功能多部署几台服务器)
为什么要分布式?
从开发角度来讲单体应用的代码都集中在一起,而分布式系统的代码根据业务被拆分。所以,每个团队可以负责一个服务的开发,这样提升了开发效率。另外,代码根据业务拆分之后更加便于维护和扩展。
另外,我觉得将系统拆分成分布式之后不光便于系统扩展和维护,更能提高整个系统的性能。
负载均衡改善了跨多个计算资源工作负载分布。负载平衡旨在优化资源使用,最大化吞吐量,最小化响应时间,并避免任何单个资源的过载。使用具有负载平衡而不是单个组件的多个组件可以通过冗余提高可靠性和可用性。负载平衡通常涉及专用软件或硬件。
如果想要自己实现一个 RPC,最简单的方式要实现三个技术点,分别是:
服务寻址 数据流的序列化和反序列化 网络传输
RPC调用流程:
首先客户端以本地调用的方式发起调用,然后将被调用的方法名,参数等打包成消息体,通过网络发送给服务端,然后服务端接收,拆包解码,获取方法名和参数,然后服务端根据方法名和参数进行本地调用,将返回值打包编码成消息发送给客户端,最终得到本次RPC调用的结果。
序列化:就是将对象转化成二进制流的过程。 反序列化:就是将二进制流转化成序列化的过程。
RPC最大的优点:
数据安全性高