1. Zookeeper介绍
(1) 什么是Zookeeper?
顾名思义 zookeeper 就是动物园管理员,他是用来管 hadoop(大象)、Hive(蜜蜂)、pig(小 猪)的管理员, Apache Hbase 和 Apache Solr 的分布式集群都用到了 zookeeper;Zookeeper: 是一个分布式的、开源的程序协调服务,是 hadoop 项目下的一个子项目。
(2) Zookeeper的作用是什么?
配置管理、名字服务、分布式锁、集群管理。
2. Zookeeper存储结构
(1) 什么是Znode?
znode 是一个跟 Unix 文件系统路径相似的节点,可以往这个节点存储或获取数据。
(2) Znode节点类型有哪些?
持久节点,持久顺序节点,临时节点,临时自动编号节点
3. Zookeeper安装-单机版
(1) 如何安装Zookeeper单机版?
1.1安装 Linux
1.2安装 JDK
配置环境变量
export JAVA_HOME=/usr/local/jdk
export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
export PATH=$JAVA_HOME/bin:$PATH
1.3上传 Zookeeper
官方资源包可在 http://zookeeper.apache.com 站点中下载。最新发布版本为:3.4.12。
1.4 解压 Zookeeper 压缩包
[root@localhost temp]# tar -zxf zookeeper-3.4.6.tar.gz
[root@localhost temp]# cp zookeeper-3.4.6 /usr/local/zookeeper -r
4. Zookeeper集群原理
(1) Zookeeper集群中的角色主要有哪三类?
领导者Leader 学习者Learner 客户端Client
(2) 请阐述Zookeeper的集群原理是什么?
• Zookeeper的核心是原子广播,这个机制保证了各个Server之间的同步。实现这个机制的协议叫做Zab协议。Zab协议有两种模式,它们分别是恢复模式(选主)和广播模式(同步)。当服务启动或者在领导者崩溃后,Zab就进入了恢复模式,当领导者被选举出来,且大多数Server完成了和leader的状态同步以后,恢复模式就结束了。状态同步保证了leader和Server具有相同的系统状态。
• 为了保证事务的顺序一致性,zookeeper采用了递增的事务id号(zxid)来标识事务。所有的提议(proposal)都在被提出的时候加上了zxid。实现中zxid是一个64位的数字,它高32位是epoch用来标识leader关系是否改变,每次一个leader被选出来,它都会有一个新的epoch,标识当前属于那个leader的统治时期。低32位用于递增计数。
• 每个Server在工作过程中有三种状态:
LOOKING:当前Server不知道leader是谁,正在搜寻
LEADING:当前Server即为选举出来的leader
FOLLOWING:leader已经选举出来,当前Server与之同步
5. Zookeeper创建集群
(1) 如何搭建Zookeeper集群?
如果是在一台计算机上搭建,可以搭建一个伪集群,即ip地址相同端口号不同的集群,可在Linux环境下先解压zookeeper-版本号.tar.gz的文件,然后多复制几个,在每个zookeeper目录中修改conf目录,并增加data目录,里面创建myid目录用于存放集群的id
6. Zookeeper常见命令
(1) 如何启动Zookeeper?
在zookeeper的bin目录下 执行./zkServer.sh start
(2) 如何关闭Zookeeper?
在zookeeper的bin目录下 执行./zkServer.sh stop
(3) 如何查看Zookeeper状态?
在zookeeper的bin目录下 执行./zkServer.sh status
(4) 如何使用Zookeeper客户链接Zookeeper?
在zookeeper的bin目录下 执行./zkCli.sh -server ip:端口
(5) Connect命令的作用是什么?
connect host:port -
(6) Ls命令的作用是什么?
查看列表路径下的资源
(7) Create命令的作用是什么?
创建节点
(8) Get命令的作用是什么?
查看指定节点的数据
7. Dubbo介绍
(1) 什么是Dubbo?
Dubbo 是阿里巴巴公司开源的一个高性能优秀的服务框架,使得应用可通过高性能的 RPC 实现服务的输出和输入功能,可以和 Spring 框架无缝集成。Dubbo 框架,是基于容器 运行的.。容器是 Spring。
(2) 什么是单体架构?
单体架构也称之为单体系统或者是单体应用。就是一种把系统中所有的功能、模块耦合在一个应用中的架构方式。其优点为:项目易于管理、部署简单。缺点:测试成本高、可伸缩性差、可靠性差、迭代困难、跨语言程度差、团队协作难
(3) 什么是SOA架构?
面向服务的架构(SOA)是一个组件模型,它将应用程序拆分成不同功能单元(称为服务)通过这些服务之间定义良好的接口和契约联系起来。接口是采用中立的方式进行定义的,它应该独立于实现服务的硬件平台、操作系统和编程语言。这使得构建在各种各样的系统中的服务可以以一种统一和通用的方式进行交互。
(4) 什么是RPC远程过程调用?
远程过程调用协议,它是一种通过网络从远程计算机程序上请求服务,而不需要了解底 层网络技术的协议。RPC 协议假定某些传输协议的存在,如 TCP 或 UDP,为通信程序之间 携带信息数据。在 OSI 网络通信模型中,RPC 跨越了传输层和应用层。RPC 使得开发包括 网络分布式多程序在内的应用程序更加容易。
8. Dubbo架构图讲解
(1) Registry表示什么含义?
注册中心. 是用于发布和订阅服务的一个平台.用于替代 SOA 结构体系框架中的ESB 服 务总线的。
(2) Consumer表示什么含义?
服务的消费者, 就是服务的客户端.
(3) Provider表示什么含义?
服务的提供者, 就是服务端.
(4) Container表示什么含义?
容器. Dubbo 技术的服务端(Provider), 在启动执行的时候, 必须依赖容器才能正常启动.
默认依赖的就是 spring 容器. 且 Dubbo 技术不能脱离 spring 框架.
(5) Monitor表示什么含义?
监控中心. 是 Dubbo 提供的一个 jar 工程.
9. Dubbo的运行流程
(1) 请阐述Dubbo执行流程?
dubbo运行流程
0 start: 启动 Spring 容器时,自动启动 Dubbo 的 Provider
1 register: Dubbo 的 Provider 在启动后自动会去注册中心注册内容.注册的内容包括:
1.1 Provider 的 IP
1.2 Provider 的端口.
1.3 Provider 对外提供的接口列表.哪些方法.哪些接口类
1.4 Dubbo 的版本.
1.5 访问 Provider 的协议.2 subscribe: 订阅.当 Consumer 启动时,自动去 Registry 获取到所已注册的服务的信息.
3 notify: 通知.当 Provider 的信息发生变化时, 自动由 Registry 向 Consumer 推送通知.
4 invoke: 调用. Consumer 调用 Provider 中方法
4.1 同步请求.消耗一定性能.但是必须是同步请求,因为需要接收调用方法后的结果.
5 count:次数. 每隔 2 分钟,provoider 和 consumer 自动向 Monitor 发送访问次数.Monitor 进行统计.
10. Dubbo支持的协议
(1) Dubbo支持的协议有哪些?
Dubbo协议,RMI协议,Hessian协议
(2) 每个协议的优缺点是什么?
Dubbo 协议(官方推荐协议)
优点:
采用 NIO 复用单一长连接,并使用线程池并发处理请求,减少握手和加大并发效率, 性能较好(推荐使用)
缺点:
大文件上传时,可能出现问题(不使用 Dubbo 文件上传)
RMI(Remote Method Invocation)协议
1) 优点:
JDK 自带的能力。可与原生 RMI 互操作,基于 TCP 协议
2) 缺点:
偶尔连接失败.
Hessian 协议
1) 优点:
可与原生 Hessian 互操作,基于 HTTP 协议
2) 缺点:
需 hessian.jar 支持,http 短连接的开销大
(3) 官方推荐使用什么协议?
Dubbo协议
11. Dubbo支持的注册中心
(1) Dubbo支持哪些注册中心?
Zookeeper,Redis,Multicase,Simple
(2) 每个注册中心的优缺点是什么?
Zookeeper(官方推荐)
1) 优点:
支持分布式.很多周边产品.
2) 缺点:
受限于 Zookeeper 软件的稳定性.Zookeeper 专门分布式辅助软件,稳定较优
Multicast
1) 优点:去中心化,不需要单独安装软件.
2) 缺点: Provider 和 Consumer 和 Registry 不能跨机房(路由)
Redis
1) 优点:
支持集群,性能高
2) 缺点:
要求服务器时间同步.否则可能出现集群失败问题.
Simple
1) 优点:
标准 RPC 服务.没有兼容问题
2) 缺点:
不支持集群.
(3) 官方推荐使用什么技术作为注册中心?
Zookeeper
12. Dubbo入门案例-创建项目
(1) Dubbo坐标是什么?
<groupId>com.alibaba</groupId>
<artifactId>dubbo</artifactId>
<version>2.5.4</version>
13. Dubbo入门案例-创建服务
(1) 什么是服务?
项目中对外界所提供的能力
(2) 什么是服务标准?
接口+接口实现类
(3) 什么是接口?
对外界描述当前服务的信息,如协议类型,服务提供者的地址,发布的服务名
称,服务中方法名称等信息。
(4) 什么是接口实现类?
对发布的接口中的标准的具体实现。
(5) 如何在配置文件中为服务配置名称?
<dubbo:application name="myprovider"/>
(6) 如何在配置文件中配置注册中心地址?
<dubbo:registry address="192.168.44.128:2181,192.168.44.128:2182,192.168.44.128:2183" protocol="zookeeper"></dubbo:registry>
(7) 如何在配置文件中配置协议以及端口?
<dubbo:protocol name="dubbo" port="20880"></dubbo:protocol>
(8) 如何在配置文件中注册接口?
<dubbo:service interface="cn.lrh.service.DubboService" ref="dubboServiceImpl"></dubbo:service>
"dubboServiceImpl" class="cn.lrh.service.impl.DubboServiceImpl"></bean>