带你手写基于 Spring 的可插拔式 RPC 框架(一)介绍

目录:
带你手写基于 Spring 的可插拔式 RPC 框架(一)介绍
带你手写基于 Spring 的可插拔式 RPC 框架(二)总体结构
带你手写基于 Spring 的可插拔式 RPC 框架(三)通讯协议模块
带你手写基于 Spring 的可插拔式 RPC 框架(四)代理类的注入与服务启动
带你手写基于 Spring 的可插拔式 RPC 框架(五)注册中心html

源码在第五篇博客的末尾程序员

概述

首先这篇文章是要带你们来实现一个框架,听到框架你们可能会以为很是高大上,其实这和咱们平时写业务员代码没什么区别,可是框架是要给别人使用的,因此咱们要换位思考,怎么才能让别人用着舒服,怎么样才能让咱们的框架性能优异。经过本身写一个框架,咱们能学到的有不少,能让咱们脱离 CURD,在更高的层面上去思考。web

目的

写这个框架最主要的目的是要让你们了解整个框架的设计思想和用到的技术,并非让你们关注代码,固然我实现的代码必定不是完美的,还有不少须要改进的地方,但愿你们不吝赐教,一块儿进步。设计模式

提早准备

若是把全部细节给你们讲清楚,那彻底能够出一本书了。咱们的文章固然也会将细节,不过但愿你们有一些知识储备,这样咱们才能重点去关注设计思想,了解如何去设计这个 RPC 框架,把本身想不通的地方给想明白了。服务器

提早学习的知识

  1. Netty 框架,但愿你们对这个框架有个基础的了解,可以编写简单的客户端服务端通讯的 Demo,若是没学过能够临时补一下。传送门->Netty
  2. 动态代理,其实不只仅是动态代理,基本的设计模式是每一个程序员必备的,而动态代理使用的又很是普遍,你们至少要对动态代理的概念有所了解。
  3. Dubbo 的使用经历,若是你用过 Dubbo 的话对于理解咱们接下来的文章有很大的帮助。

解决了什么问题

这个框架到底解决了什么问题?咱们在什么场景下须要使用这个框架那?咱们先来了解一个概念。
微服务架构
微服务架构旨在将原来传统的单体的 web 程序进行解耦,按功能进行划分,将原来的大应用拆分红一个一个小的服务。这样很大程度上提升了整个系统的可伸缩行,能够高效的应对各类各样的并发和数据压力。
来看官方定义:
一、一些由独立的服务共同组成系统
二、单独部署,跑在本身的进程中
三、每一个服务为独立的业务开发
四、分布式管理
五、很是强调隔离性网络

微服务已经成为目前互联网公司的标配了,使用微服务时咱们须要思考一个问题,原来是在一个程序内,如今被拆分红不一样的程序,并且颇有可能部署在不一样的服务器上。那么服务之间如何通讯那?架构

RPC
RPC 是一种远程调用协议,他能够高效准确的完成服务之间的相互调用,并且最重要的是用户不须要关心 RPC 协议的底层实现,网络传输使用 Http,Netty,仍是 Socket 均可以。
有人可能会有疑问,我用 http 请求,里面写上目标的 ip,端口,加上参数不是也能调用服务而且返回数据吗?为何要引入 RPC 这个概念那?并发

若是你能思考到这,说明你已经很厉害了,懂得在使用工具时思考为何。
对于直接使用 http 请求来讲,适合接口较少,服务之间相互调用很少的状况,并且须要指定地址,端口等等信息。优势就是简单直接,可是没法应对高并发以及复杂服务交互的状况。
RPC 就是为了解决上面的问题而生的,首先用户只须要调用服务便可,链接和发送数据交给底层协议去完成,另外对于高并发支持很是好,另外提供服务治理,注册中心等功能。适合大型网站,服务复杂,高并发的状况。框架

从一个点看 RPC 的架构
使用过 Dubbo 等 RPC 框架的应该知道,咱们能够像调用本地方法同样调用另外一个服务器上的服务,有的人可能不明白这句话时什么意思,代码演示一下。分布式

UserService 是另外一个服务器上的服务,咱们能够像调用本地方法同样调用,不用管底层协议,不够用管 UserService 在哪一个服务器上。

UserService userService = ProxyFactory.getProxy(UserService.class);
User user = userService.get("11112");

那么咱们是如何把在另一个服务器上的服务拿到咱们本地来的那?有人看上面的 ProxyFactory 可能就已经猜出来了,使用的是动态代理,咱们在本地获取到了接口的代理类,在 invoke 方法中将参数传给对应的服务,服务端在接收到数据后,使用反射调用对应的实现类,完成处理后将结果返回给调用端。

若是你不明白上面的解释,咱们用一张图来解释这个过程:

简单点说,RPC 帮咱们把对应的请求发过去,服务端有一个服务器一直接收这种请求,收到数据后调用服务对应的处理方法处理后返回给调用端。

相关文章
相关标签/搜索