dubbo+zookeeper
引言:
根据公司项目计划我先学习 dubbo+zookeeper 先不看JeeSite 企业信息管理系统基础框架,后期自己跟进吧,iBase4J 先看这个。。。。。
zookeeper :
前言:
ZooKeeper 是一个开源的分布式协调服务,由雅虎创建,是 Google Chubby 的开源实现。分布式应用程序可以基于 ZooKeeper 实现诸如数据发布/订阅、负载均衡、命名服务、分布式协调/通知、集群管理、Master 选举、分布式锁和分布式队列等功能。-------->这句话我理解的是Zookeeper 是服务,
先学概念吧:我理解的分布式:一个公司会大致分总裁 ,副总裁,经理 ,副经理,员工 等 这就是一个分布式 。总裁把工作分步到各个下属 ,下属再往下分另一个下属,当合作公司需要东西就跟总裁要,总裁跟下属要而总裁就是ZooKeeper。
ZooKeeper被设计用来存储协调数据:状态信息,配置,位置信息等。这种元信息通常是以千字节为单位的,如果不是字节的话。
ZooKeeper具有1M的内置完整性检查,以防止它被用作大型数据存储,但通常用于存储更小的数据。
ZooKeeper 服务本身通过一组包含该服务的机器进行复制。这些机器在持久性存储中维护数据树的内存映像以及事务日志和快照。由于数据保存在内存中,ZooKeeper能够获得非常高的吞吐量和低延迟数量。内存数据库的缺点是ZooKeeper可以管理的数据库的大小受限于内存。
这个限制是进一步的原因,以保持在znodes存储的数据量小。
集群角色:
ZooKeeper 有三种:Leader Follower Observer 。一个 ZooKeeper 集群同一时刻只会有一个 Leader,其他都是 Follower 或 Observer。
我边安装部署边学吧:ZooKeeper的安装包括单机模式安装,以及集群模式安装。--->单机模式(stand-alone)、集群模式和集群伪分布模式。
Zookeeper 可以运行在多个系统平台上,如下图
系统 | 开发环境 | 生产环境 |
---|---|---|
Linux | 支持 | 支持 |
Solaris | 支持 | 支持 |
FreeBSD | 支持 | 支持 |
Windows | 支持 | 不支持 |
MacOS | 支持 | 不支持 |
ZooKeeper是用Java编写的,运行在Java环境上,因此,在部署zk的机器上需要安装Java运行环境。为了正常运行zk,我们需要JRE1.6或者以上的版本。 对于集群模式下的ZooKeeper部署,3个ZooKeeper服务进程是建议的最小进程数量,而且不同的服务进程建议部署在不同的物理机器上面,以减少机器宕机带来的风险,以实现ZooKeeper集群的高可用。
我下载ZooKeeper 地址:http://mirrors.hust.edu.cn/apache/zookeeper
解压后目录:
- bin目录
zk的可执行脚本目录,包括zk服务进程,zk客户端,等脚本。其中,.sh是Linux环境下的脚本,.cmd是Windows环境下的脚本。 - conf目录
配置文件目录。zoo_sample.cfg为样例配置文件,需要修改为自己的名称,一般为zoo.cfg(ZooKeeper 配置很简单,每个节点的配置文件(zoo.cfg)都是一样的,只有 myid 文件不一样。myid 的值必须是 zoo.cfg中server.{数值}的{数值}部分。)。log4j.properties为日志配置文件。 - lib
zk依赖的包。 - contrib目录 (其实我解压完没有这个目录呢)
一些用于操作zk的工具包。 - recipes目录
zk某些用法的代码示例
好下面单机安装:
是指只部署一个zk进程,客户端直接与该zk进程进行通信。上面提到,conf目录下提供了配置的样例zoo_sample.cfg,要将zk运行起来,需要将其名称修改为zoo.cfg。打开后:
- tickTime
时长单位为毫秒,为zk使用的基本时间度量单位。例如,1 * tickTime是客户端与zk服务端的心跳时间,2 * tickTime是客户端会话的超时时间。
tickTime的默认值为2000毫秒,更低的tickTime值可以更快地发现超时问题,但也会导致更高的网络流量(心跳消息)和更高的CPU使用率(会话的跟踪处理)。(以后慢慢懂。。。。。) - clientPort
zk服务进程监听的TCP端口,默认情况下,服务端会监听2181端口。 - dataDir
无默认配置,必须配置,用于配置存储快照文件的目录。如果没有配置dataLogDir,那么事务日志也会存储在此目录。
启动:
在Windows环境下,进入到bin目录,并且启动zkServer.cmd,这个脚本中会启动一个java进程
dubbo:是一个分布式服务框架(按照分层的方式来架构)由阿里巴巴开源
Dubbo采用的是一种非常简单的模型,要么是提供方提供服务,要么是消费方消费服务,所以基于这一点可以抽象出服务提供方(Provider)和服务消费方(Consumer)两个角色。
包括基于接口的远程调用,容错和负载均衡,以及自动服务注册和发现。达博框架广泛应用于阿里巴巴内外,其他公司包括京东,当当,qunar,kaola等。每天为2千多个服务提供大于30亿次访问量支持,并被广泛应用于阿里巴巴集团的各成员站点以及别的公司的业务中。
Dubbo提供三个关键功能,
zookeeper相当一个文件系统,可以用来存储数据,所谓的注册到zk上去,就是把接口信息写到zk上去保存起来。通过命令可以清楚看到dubbo其实把接口调用信息全都注册到zk上了,通过我们通过另一个dubbo(注册在相同的zk上)去消费,dubbo上记录了接口的调用信息就可以,通过这些信息去调用接口。可以看到下面记录哪个IP,哪个端口号。以下是个人理解:记录的信息,其实zookeeper只负责注册,调用方法是由dubbo去调就是zookeeper的配置管理功能体现。还有zookeeper在这里还有负载均衡的体现,dubbo上有三个默认负载均衡算法,RandomLoadBalance(随机算法),RoundRobinLoadBalance(轮询算法),LeastActiveLoadBalance(最少活跃算法)。zookeeper将用你选择的算法,为你选择一台机器,因此zookeeper就帮你负载均衡了。