最近学了一堆中间件:分布式服务框架、消息中间件、搜索服务。。。。
但是我发现我还是不会写代码。。。。。。。
算了,脚步先停一停,在巩固下分布式服务框架。之前学习dubbo时,没有在本地创建分布式服务,今天在本地建一下。。。。
分布式服务本地搭建
zookeeper
ZooKeeper 一个最常用的使用场景就是用于担任服务生产者和服务消费者的注册中心。
服务生产者将自己提供的服务注册到 ZooKeeper 中心,服务的消费者在进行服务调用的时候先到 ZooKeeper 中查找服务,获取到服务生产者的详细信息之后,再去调用服务生产者的内容与数据。
接下来,我们使用zookeeper作为Dubbo的注册中心(Dubbo 官方推荐使用 ZooKeeper 注册中心)
关于 ZooKeeper 的一些重要概念:
-
ZooKeeper 本身就是一个分布式程序(只要半数以上节点存活,ZooKeeper 就能正常服务)。
-
为了保证高可用,最好是以集群形态来部署 ZooKeeper,这样只要集群中大部分机器是可用的(能够容忍一定的机器故障),那么 ZooKeeper 本身仍然是可用的。
-
ZooKeeper 将数据保存在内存中,这也就保证了 高吞吐量和低延迟(但是内存限制了能够存储的容量不太大,此限制也是保持 Znode 中存储的数据量较小的进一步原因)。
-
ZooKeeper 底层其实只提供了两个功能:①管理(存储、读取)用户程序提交的数据;②为用户程序提交数据节点监听服务。
可构建集群
为了保证高可用,最好是以集群形态来部署 ZooKeeper,这样只要集群中大部分机器是可用的(能够容忍一定的机器故障),那么 ZooKeeper 本身仍然是可用的。
客户端在使用 ZooKeeper 时,需要知道集群机器列表,通过与集群中的某一台机器建立 TCP 连接来使用服务。
客户端使用这个 TCP 链接来发送请求、获取结果、获取监听事件以及发送心跳包。如果这个连接异常断开了,客户端可以连接到另外的机器上。
ZooKeeper 官方提供的架构图:
上图中每一个 Server 代表一个安装 ZooKeeper 服务的服务器。组成 ZooKeeper 服务的服务器都会在内存中维护当前的服务器状态,并且每台服务器之间都互相保持着通信。
集群间通过 Zab 协议(Zookeeper Atomic Broadcast)来保持数据的一致性。
ZooKeeper 集群角色介绍
最典型集群模式:Master/Slave 模式(主备模式)。
在这种模式中,通常 Master 服务器作为主服务器提供写服务,其他的 Slave 服务器从服务器通过异步复制的方式获取 Master 服务器最新的数据提供读服务。
但是,在 ZooKeeper 中没有选择传统的 Master/Slave 概念,而是引入了Leader、Follower 和 Observer 三种角色。
如下图所示:
ZooKeeper 集群中的所有机器通过一个 Leader 选举过程来选定一台称为 “Leader” 的机器。
Leader 既可以为客户端提供写服务又能提供读服务。除了 Leader 外,Follower 和 Observer 都只能提供读服务。
Follower 和 Observer 唯一的区别在于 Observer 机器不参与 Leader 的选举过程,也不参与写操作的“过半写成功”策略,因此 Observer 机器可以在不影响写性能的情况下提升集群的读性能。
zookeeper下载安装
下载
https://www.apache.org/dyn/closer.lua/zookeeper/zookeeper-3.7.0/apache-zookeeper-3.7.0-bin.tar.gz
安装
下载压缩文件后,将文件解压,解压后直接开箱使用就可了。。
启动zookeeper服务
zkServer.cmd、启动zookeeper客户端zkCli.cmd
备注:启动zookeeper服务时可能会闪退,解决办法:复制zoo_sample.cfg并重命名为zoo.cfg.重启zookeeper即可。
zookeeper服务端客户端均启动成功后,我们在进行客户端操作,我们来看看zookeeper到底是个什么玩意??????
发现他就是一个操作内存的玩意,向内存中写数据,从内存中读数据,怪不得注册中心用zk呢,原来这个zk好用啊,快啊
zookeeper的端口是2181,因此注册中心的地址就是ip+2181
Dubbo下载安装
。。。。。。。。。。。。。。
也不知道怎么回事,最近对学习提不起兴趣,或许是因为我这一个月天天都在学习的事情吧。。。。。。。。。。
学了,感觉用起来的时候也是不会,,,,,唉,怎么可能一个月吃一个胖子呢,java生态这么广,,,,我还是踏实慢慢来吧,或许我需要休息一下。。。。。
没事,能学多少学多少吧,清明节我可能真的要好好休息一下了。。。。。。。。。。。。。。。
至于分布式服务环境的本地搭建就先算了吧。。。。。。。。。。还是用公司现成的分布式服务框架吧。