1、什么是RPC
RPC—Remote Procedure Call 远程过程调用
网上有一篇博客说的很简练,拿洗衣服来说:
本地过程调用:如果你想洗衣服,直接去卫生间把洗衣机的开关打开就行
远程调用:你在外面逛街,想起来家里还有衣服没有洗,就打电话:老公把洗衣机开关打开洗衣服;
2、分布式与集群:
可以说分布式促使RPC的应运而生,分布式和集群的概念,看到网上有一个很形象的例子:
集群:例如如果我们开发一个系统,小明负责需求、开发、测试、部署,由于工作量大,小明忙不过来就请了一个小花来帮忙开发,小花做的事情和小明一样也是需求、开发、测试,部署,小明和小花就是集群的关系坐着同一件事,可以相互替代,当小明请假的时候小花能顶上;
部署同一个服务至多个服务器是集群
分布式:为了让小明和小花专心的开发,公司招聘了需求、测试、部署人员,小明和小花与这些需求、测试、部署人员就是分布式关系;
将一个项目拆分成多个业务系统,部署至不同的服务器是分布式
3、分布式与RPC
我们将一个项目拆分成多个业务,例如我们开发了一个系统"拼多多"吧,我们将拼多多的商城这个项目拆分成了“查看商品系统”、“订单系统”、“库存系统”,“支付系统”,“登陆系统”、等多个模块,如果我看好了一款商品,准备下单,我在查看商品系统点击下单,其实调用的是订单系统的业务;非查看商品系统本地的方法栈的调用;
本地调用
分布式
分布式的促使了RPC的应运而生,其中远程调用的解决方法:
1、server2中对外提供接口,例如restful的接口,例如:http://ip:port/serverName/add?userId=1&password=123&orderid=1223
嗯是的,这样调用每次是不是需要构建请求的url地址,准备httpRequest包装发送的参数
2、在server1中使用代理对象,
spring IOC注入的方式在使用时@autowired 自动注入,spring框架发现CartService在配置文件中配置过,spring框架不找对象,交给dubbo框架dubbo框架运行动态代理
使用:
dubbo,用socket联接提供者,把接口名,方法名,参数发给提供者,提供者用反射运行方法,把结果通过socket返回来
配置
RPC解决了分布式系统之间调用的问题,让调用者像调用本地方法一样,不用去关注远程服务的逻辑
4、RPC的几个应用的框架:
dubbo:
1、服务提供者将ip及port发给注册中心;
2、zk注册中心将提供者消息发给消费者;
3、消费者获取服务列表,远程调用提供者;
thift:
最近在学习这个东西,先把处理的图黏贴一下吧:
后续文章会有介绍应用
springcloud:
先说下springclound的五大神兽吧
服务发现——Netflix Eureka
客服端负载均衡——Netflix Ribbon
断路器——Netflix Hystrix
服务网关——Netflix Zuul
分布式配置——Spring Cloud Config
也在继续学习后续会有章节介绍