说明:大概是3年前在一个Saas平台中接触到dubbo,此博文是复习笔记,分享给需要的读者。学习dubbo要有一定的java和maven基础,因为此演示系统全程都离不开maven。此演示侧重Registry(Zookeeper)笔者称其为”Dubbo第一炮”。 (很久没玩dubbo了,博文用于复习与交流)
此演示主要内容
- Dubbo简述
(i) 什么是dubbo,它是用来干嘛的?
官方定义:
Apache Dubbo™ (incubating) is a high-performance, java based open source RPC framework。
民间定义:高性能的分布式框架或微服务框架。
说明:关于dubbo的发音,笔者喜欢叫它”打波”,有的人叫它“丢波”,呵呵……
(ii) Dubbo工作原理图
-
zookeeper简介和原理
(i)简介:
zookeeper是一个开源的分布式协调服务,由雅虎创建,是 Google Chubby 的开源实现。
分布式应用程序可以基于 ZooKeeper 实现诸如数据发布/订阅、负载均衡、命名服务、分布式协调/通知、集群管理、Master 选举、配置维护,名字服务、分布式同步、分布式锁和分布式队列、队列管理、组服务等功能。(ii) zookeeper原理
zookeeper是以Fast Paxos算法为基础的,Paxos 算法存在活锁的问题,即当有多个proposer交错提交时,
有可能互相排斥导致没有一个proposer能提交成功,而Fast Paxos作了一些优化,通过选举产生一个leader (领导者),
只有leader才能提交proposer,具体算法可见Fast Paxos。因此,要想弄懂ZooKeeper首先得对Fast Paxos有所了解。ZooKeeper的基本运转流程:
1、选举Leader。
2、同步数据。
3、选举Leader过程中算法有很多,但要达到的选举标准是一致的。
4、Leader要具有最高的执行ID,类似root权限。
5、集群中大多数的机器得到响应并接受选出的Leader
3.zookeeper实战(dubbo环境搭建)
Dubbo原理图中看到注册中心一职,其实就是由zookeeper来担当的。当然还有其它的工具也能担当,比如: Multicast, Simple等。
3.1 zookeeper下载安装
首先需要安装JdK,从Oracle的Java网站下载,安装很简单,就不再详述。
其中zookeeper的下载地址是:
http://www.apache.org/dyn/closer.cgi/zookeeper/ (这里的压缩包不用安装,直接解压即可)
https://mirrors.tuna.tsinghua.edu.cn/apache/zookeeper/(笔者下载的是这个
zookeeper-3.4.12.tar.gz版本)
3.2 创建zookeeper启动时加载的配置文件
在 “zookeeper安装目录”\conf目录下,拷贝zoo_sample.cfg并重命令为zoo.cfg,因为 Zookeeper 在启动时会加载此名称的文件作为默认配置文件。
此配置文件属性项说明:
(1)tickTime: Zookeeper服务器之间或客户端与服务器之间维持心跳的时间间隔,单位毫秒
(2) initLimit: Zookeeper 集群时leader与follower服务器之间初始化连接时,维持心跳的时间长度,
超过这个时间服务器之间的连接则失败,单位毫秒(多台zookeeper服务器集群时选举一台作为
leader其它的作为follower)
(3) syncLimit: Leader 与 Follower 之间发送消息,请求和应答时间长度。
(4)dataDir:存储快照的目录。不要将/tmp用于存储数据目录. 默认情况下,
Zookeeper 将写数据的日志文件也保存在这个目录里。
(5) dataLogDir:日志文件存放目录
(6)clientPort:这个端口就是客户端连接 Zookeeper 服务器的端口,
Zookeeper 会监听这个端口,接受客户端的访问请求
3.3 启动Zookeeper
(i)在zookeeper安装目录\bin目录下的双周zkServer.cmd,成功启动后会看到以下输出信息:
[myid:] - INFO [main:NIOServerCnxnFactory@89] - binding to port 0.0.0.0/0.0.0.0:2181
(ii)开一个新的cmd窗口,输入jps,看到以下信息,说明zookeeper访问成功
C:\Users\Administrator.FV>jps
6500 QuorumPeerMain
6260
2656 Jps
(iii)Ctrl + c 或直接关闭弹出来的cmd窗口来关闭zookeeper
注意:这是一种独占式的程序运行方式(与后台进程不一样,独占式运行的程序不能关闭,关闭了窗口程序也就关闭了,那么zookeeper提供的服务也没了)
4.dubbo-admin管理平台安装
(i) 简介:
Where is dubbo-admin?
dubbo-admin has been moved from core repository to
https://github.com/apache/incubator-dubbo-ops since 2.6.1
dubbo与jdk版本匹配,Currently, dubbo keeps 3 versions evolve in parallel:
2.7.x (master): requires Java 1.8, major feature branch.
2.6.x: requires Java 1.6, minor feature & bugfix branch, GA, production ready.
2.5.x: requires Java 1.6, maintenance branch, only accept security vulnerability
and critical bugfix, expected to be EOL soon.
(ii) dubbo-admin的作用
对服务提供者、服务消费者、访问量、负载均衡等功能的管理和维护
(iii) 下载和打包dubbo-admin源码成dubbo-admin.war
环境说明:设置好jdk,maven环境后,在cmd中输入命令:mvn -v命令得到的信息
包括jdk,maven,platform encoding,OS如下:
Apache Maven 3.0.5
Maven home: D:\maven\apache-maven-3.0.5
Java version: 1.8.0_31, vendor: Oracle Corporation
Java home: D:\Program Files\Java\jdk1.8.0_31\jre
Default locale: zh_CN, platform encoding: GBK
OS name: "windows 7", version: "6.1", arch: "x86", family: "dos"
dubbo的资源下载地址:
https://github.com/alibaba/dubbo(下面的操作需要读者有一定的maven基础,并且保持网络畅通)
选择Branch:2.5.x–>Clone or download–>Download Zip,成功下载后为incubator-dubbo-2.5.x.zip ,并解压
发现里面有dubbo-admin源码,发现里面有pom.xml文件(那么它是一个maven工程)
如果使用的是linux git clone url来下载,那url这样获取:选择Branch:2.5.x–>Clone or download–>点击"像格式刷一样的图标"就复制上url了, 例如:https://github.com/apache/incubator-dubbo.git
用maven工具将dubbo-admin打成war包(dubbo-admin.war)用于部署到tomcat服务器上,运行这个war项目。(这步是关键,很多人败在此处,只要你懂maven一切都easy)
如果你不想打自己打dubbo-admin.war,可以下载笔者在百度网盘提供的分享:
dubbo-admin.war链接:
https://pan.baidu.com/s/1MlmNQSoX7U5bpKkBpBD2ow 提取码:6c79 (@author:拈花为何不一笑)
方式一 ,手工操作:
1。安装和设置jdk和maven的环境变量(注意jdk版本要与dubbo相匹配)
2.maven 打成war包,修改dubbo-admin目录中的pom.xml文件-->找到packaging内容-->修改成这样"<packaging>war</packaging>"
3。打开cmd,利用cd命令进入incubator-dubbo-2.5.x.zip解压后的目录的dubbo-admin目录中,
比如笔者的为:E:\java\JavaEE框架\duboo框架\dubbo源码_版本2.5.x\incubator-dubbo-2.5.x\dubbo-admin,则输入命令:
cd E:\2.java\1.java学习体系(路线)\5.JavaEE框架\7 duboo框架\dubbo源码_版本2.5.x\incubator-dubbo-2.5.x\dubbo-admin
e:
E:\2.java\1.java学习体系(路线)\5.JavaEE框架\7 duboo框架\dubbo源码_版本2.5.x\incubator-dubbo-2.5.x\dubbo-admin>mvn package -Dmaven.test.skip=true
遇到问题:
[ERROR] 错误: 读取F:\java\maven\repository\org\springframework\spring-context\3.2.16.RELEASE\spring-context-3.2.16.RELEASE.jar
时出错; invalid LOC header (bad signature),基本上都是这样的10多个,说明下载的jar包有问题,按照路径删除,重新运行mvn package -Dmaven.test.skip=true
会自动进行下载,并打包
遇到上面错误后,先执行命令:mvn clean,再执行mvn package -Dmaven.test.skip=true即可。
上面命令执行成功后,到dubbo-admin\target\下找到dubbo-admin.war包
方式二,利用Eclipse/idea工具先导入maven工程dubbo-admin,在Eclipse/idea中间接调用maven来
给dubbo-admin打成war包,原理跟方式一相同,这个会遇到环境不兼容的问题,要自己去解决。
报错build path 时不兼容,换成相应的jdk版本,再右键项目--> maven-->update project...
即可解决。
方式三,前两种方式都是在window系统中进行的,而第三种,我们来linux下玩一玩, 原理其实还是跟方式一是相同的。
1、安装jdk (如何在linux 中安装软件在此不细述,可参考笔者的其它博文)
2、安装maven
3、安装tomcat(可省略,tomcat部署在windows上)
4、安装zookeeper
5、打包dubbo-admin(利用maven工具)
git clone https://github.com/apache/incubator-dubbo.git #从github中下载dubbo
tar -zxvf incubator-dubbo-2.5.x.zip #解压
cd /usr/local/incubator-dubbo-2.5.x/dubbo-admin/ #进入到dubbo-admin目录中
mvn package -Dmaven.test.skip=true #打包dubbo-admin成dubbo.war包,同理可以使用vim工具来修改pom.xml中打包方式设置成war即可
5.项目部署和管理
(i) 首先,启动Zookeeper(参照上面的3.3)
(ii) 然后,部署dubbo-admin.war和启动tomcat服务器
a) 部署dubbo-admin.war到tomcat安装目录下的webapps中,
b) 接着,启动tomcat服务器,例如笔者的为D:\apache\apache-tomcat-5.5.23\webapps\ ,
c) 再然后进入D:\apache\apache-tomcat-5.5.23\bin目录中双击startup.bat 那么tomcat服务器就启
动了,启动时我们来看看输出信息,找到了dubbo-admin-2.5.10.war的信息,成功被部署了。
说明:在windwos环境下当环境变量CATALINA_HOME指定哪个tomcat服务器安装目录(当安装了多个版本号的tomcat服务器时),startup.bat就运行那个tomcat服务器, 笔者实践验证过。
(iii) 最后,访问和管理
访问dubbo-admin应用,浏览器中输入http://localhost:8080/dubbo-admin-2.5.10/
弹出一个框要求输入用户/密码(位于部署在tomcat webapps目录中的
dubbo-admin-2.5.10/WEB-INF/dubbo.properties文件中,里面的密码跟用户名相同,有两个密码root和guest),输入用户名和密码时来看看tomcat服务器输出的信息
浏览器中弹出对话框信息,正确输入用户名和密码后,进入dubbo-admin管理系统
那么一个简单的dubbo-zookeeper-admin环境体验体验就OK了