文章目录
- 一.什么是分布式系统
- 二.Zookeeper的配置中心
- 三.Zookeeper的使用
- 四.RPC(远程过程调用)
一.什么是分布式系统
分布式系统是若干独立计算机的集合,这计算机对用户来说就像单个相关系统。比如可以把大项目按功能划分为很多的模块,单独一个系统处理订单,一个处理用户登录,一个处理后台等等。分布式系统就是:多台计算机构成,计算机之间通过网络进行通信 ,彼此进行交互 ,共同目标 。
二.Zookeeper的配置中心
数据发布/订阅即所谓的配置中心:发布者将数据发布到ZooKeeper一系列节点上面,订阅者进行数据订阅,当数据有变化时,可以及时得到数据的变化通知,达到动态获取数据的目的。
ZooKeeper 采用的是推拉结合的方式。
1、推: 服务端会推给注册了监控节点的客户端 Wathcer 事件通知
2、拉: 客户端获得通知后,然后主动到服务端拉取最新的数据
Watch机制就是订阅发布功能,其实说白了就是观察者模式。watche机制分为添加数据和监听节点。
Curator在这方面做了优化,Curator引入了Cache的概念用来实现对ZooKeeper服务器端进行事件监听。Cache是Curator对事件监听的包装,其对事件的监听可以近似看做是一个本地缓存视图和远程ZooKeeper视图的对比过程。而且Curator会自动的再次监听,我们就不需要自己手动的重复监听了。
Curator中的cache共有三种
NodeCache(监听和缓存根节点变化)
PathChildrenCache(监听和缓存子节点变化)
TreeCache(监听和缓存根节点变化和子节点变化)
三.Zookeeper的使用
先打开zkServer服务端,再打开zkCli客户端
常用的命令总结:
四.RPC(远程过程调用)
Java中的RPC框架比较多,广泛使用的有RMI、Hessian、Dubbo、spring Cloud等
Remote Procedure Call 远程过程调用,是分布式架构的核心,按响应方式分如下两种:
同步调用:客户端调用服务方方法,等待直到服务方返回结果或者超时,再继续自己的操作。
异步调用:客户端把消息发送给中间件,不再等待服务端返回,直接继续自己的操作。
简单来说一个RPC架构里包含如下4个组件:
1、 客户端(Client):服务调用者
2、 客户端存根(Client Stub):存放服务端地址信息,将客户端的请求参数打包成网络消息,再通过网络发送给服务方
3、 服务端存根(Server Stub):接受客户端发送过来的消息并解包,再调用本地服务
4、 服务端(Server):服务提供者。
1、 服务调用方(client)调用以本地调用方式调用服务;
2、 client stub接收到调用后负责将方法、参数等组装成能够进行网络传输的消息体
在Java里就是序列化的过程
3、 client stub找到服务地址,并将消息通过网络发送到服务端;
4、 server stub收到消息后进行解码,在Java里就是反序列化的过程;
5、 server stub根据解码结果调用本地的服务;
6、 本地服务执行处理逻辑;
7、 本地服务将结果返回给server stub;
8、 server stub将返回结果打包成消息,Java里的序列化;
9、 server stub将打包后的消息通过网络并发送至消费方;
10、 client stub接收到消息,并进行解码, Java里的反序列化;
11、 服务调用方(client)得到最终结果。