RPC 服务
RPC,是一种远程调用方式(Remote Procedure Call),经过RPC咱们能够像调用本地方法同样调用别的机器上的方法,用户将无感服务器与服务器之间的通信。RPC在微服务当中起到至关大的做用,固然RPC不是微服务必须的一种方式,有别的方式也能够实现这种远程调用例如RESTful API就能够实现远程调用。若是有用过SOAP那么你使用RPC将会以为很相似,都是能够直接调用别的机器上的方法。php
随着业务的发展咱们的项目从简单的单体结构逐渐的演化成微服务结构,咱们为何要拆分红微服务呢?那咱们来讲说微服务和单体架构的优缺点。咱们看一下单体架构图。java
单体架构

单体架构优势
- 部署容易,如php写的项目,只要一个文件夹复制到支持php的环境就能够了,java只须要一个jar包
- 测试容易,咱们总体项目只要改了一个地方立刻就能够测试得出结果
- 负载均衡就能够解决,快速部署多个如出一辙的项目在不一样的机器运行分流
单体架构的缺点
- 部署的问题,对于php来讲这点还好,可是对于java的项目来讲,咱们须要从新打包整个项目耗费的时间是很长的
- 代码维护,因为全部的代码都写在一个项目里面,要想要修改某一个功能点那么须要对项目的总体逻辑和设计有较深的理解,不然代码耦合严重,致使维护难,特别对于新入职的员工来讲这将是最容易出现问题的地方
- 开发效率低,随着项目需求的不断改变和新的功能新增,老旧的代码又不敢随便删除,致使整个项目变得笨重,这将会增长你阅读代码的时间
- 扩展性,在高并发的状况下,咱们每每不是整个项目的每个功能都处于高流量高请求的状况下的,不少时候都是某一个功能模块使用的人数比较多,在单体结构下咱们没有办法针对单个功能实现分布式扩展,必须整个项目一块儿部署
微服务架构
在2014年被提出,如今国内不少公司已经使用,微服务是一种架构设计,并非说什么框架或者代替什么。微服务作的事情是按照项目颗粒度进行服务的拆分,把模块单独拿出来作成每个单独的小项目。微服务的主要特色有:每个功能模块是一个小项目、独立运行在不一样进程或者机器上、不一样功能能够又不一样的人员开发独立开发不松耦合、独立部署不须要依赖总体项目就能够启动单个服务、分布式管理。每个服务只要作好本身的事情就行了。在设计微服务的时候还须要考虑到数据库的问题,是全部微服务使用共同一个数据库仍是每个服务单个数据库数据库
微服务优势
- 拆分业务,把总体大项目分割成不一样小项目运行在不一样进程或者机器上实现数据隔离
- 技术栈,每一个服务能够又不一样的团队或者开发者进行开发,外部调用人员不须要操心具体怎么实现的,只须要相似调用本身方法同样或者接口同样按照服务提供者给出来的参数传递便可
- 独立部署,每个服务独立部署,部署一个服务不会影响总体项目,若是部署失败最可能是这个服务的功能缺失,并不影响其余功能的使用
- 按需部署,针对不一样的需求能够给不一样的服务自由扩展服务器,根据服务的规模部署知足需求的实例
- 局部修改,当一个服务有新需求或者其余修改,不须要修改总体项目只要管好本身的服务就行了
微服务缺点
- 运维,微服务因为把业务拆分得细,有可能部署在不一样机器上,所以对于运维人员的管理来讲,这部分的成本会加大
- 接口调整,微服务之间经过接口进行通讯。若是修改某个微服务的API,可能全部使用了该接口的微服务都须要作调整;
- 重复劳动,不少服务可能都会使用到相同的功能。而这个功能并无达到分解为一个微服务的程度,这个时候,可能各个服务都会开发这一功能,致使代码重复。
- 分布式,因为会把不一样服务部署在不一样机器上,那么对于这些服务的调用、容错、网络延迟、分布式事务等等都是一个很大的挑战,固然微服务不必定所有都是部署在不一样服务器上
服务调用

如上图所示,RPC就用于调用者与服务之间的通信,RPC协议可基于TCP、UDP或者HTTP实现,可是更推荐选择TCP。服务器
例如调用者须要调用商品的服务就能够经过RPC或者RESTful API来调用,那么RPC调用和RESTful API二者之间的区别在哪呢?网络
- TCP的支持保持链接,当调用服务的时候不须要每次都进行三次握手才实现。从性能和网络消耗来讲RPC都具有了很好的优点。
- RESTful API 基于HTTP的,也就是说每次调用服务都须要进行三次握手创建起通讯才能够实现调用,当咱们的并发量高的时候这就会浪费不少带宽资源
- 服务对外的话采用RESTful API会比RPC更具有优点,所以看本身团队的服务是对内仍是对外
RPC调用过程

RPC最主要的做用就是用于服务调用
本文做为RPC的使用场景开山篇,对于单体架构和微服务的进行了一个描述。这个就是RPC的一个使用场景,也是最经常使用的一个使用场景。你们只有了解好RPC是什么使用在什么场景才能更好的去使用。架构
Swoft给咱们提供了RPC的底层服务,咱们并不须要去关心底层通信细节和调用的过程。并发
Swoft经过定义接口,实现接口,启动RPC Server 提供接口服务。咱们只须要简单的写好几个类就能够实现一个简单RPC模块。负载均衡