您的位置:首页 > 其它

dubbo介绍与zookeeper单机版安装

2018-03-17 22:38 393 查看
一、RPC

什么是RPC?

RPC(Remote Procedure Call)远程过程调用。见名知意 - 从远程主机调用一个过程/函数。

RPC的目标是:使得本程序调用其它远程主机上的函数,好像调用本程序内的函数一样简单,并且屏蔽编程语言的差异性。

要实现上述目标首先是设计一种通讯协议,称之为:RPC协议

RPC协议不是一个具体的协议,而是一个类型名,代表一类协议,这类协议叫做RPC协议;

RPC协议在TCP/UDP之上,广义上可以跨越平台、语言进行应用间通讯(说广义是因为可以开发一个协议且不支持跨语言);

为什么要用RPC?

其实这是应用开发到一定的阶段的强烈需求驱动的。

如果我们开发简单的单一应用,逻辑简单、用户不多、流量不大,那我们用不着;

当我们的系统访问量增大、业务增多时,我们会发现一台单机运行此系统已经无法承受。此时,我们可以将业务拆分成几个互不关联的应用,分别部署在各自机器上,以划清逻辑并减小压力。此时,我们也可以不需要RPC,因为应用之间是互不关联的。

当我们的业务越来越多、应用也越来越多时,自然的,我们会发现有些功能已经不能简单划分开来或者划分不出来。此时,可以将公共业务逻辑抽离出来,将之组成独立的服务Service应用 。而原有的、新增的应用都可以与那些独立的Service应用 交互,以此来完成完整的业务功能。所以此时,我们急需一种高效的应用程序之间的通讯手段来完成这种需求,所以你看,RPC大显身手的时候来了!

其实#3描述的场景也是服务化 、微服务 和分布式系统架构 的基础场景。即RPC框架就是实现以上结构的有力方式。

有哪些RPC?

有很多RPC框架:CORBAR、Thrift、Dubbo等等。基本上他们分为两种类别:

一种是跨语言的;

一种是同语言的,如果你的分布式应用架构主体都是Java应用,显然我们不应该使用跨语言的RPC来多一层中转浪费效率。

所以,今天介绍下我最近使用的Dubbo框架。

Dubbo 工作原理



Provider

暴露服务方称之为“服务提供者”

Consumer

调用远程服务方称之为“服务消费者”

Registry

服务注册与发现的中心目录服务称之为“服务注册中心”

Monitor

统计服务的调用次调和调用时间的日志服务称之为“服务监控中心”

调用关系说明

1.服务容器负责启动,加载,运行服务提供者。

2.服务提供者在启动时,向注册中心注册自己提供的服务。

3.服务消费者在启动时,向注册中心订阅自己所需的服务。

4.注册中心返回服务提供者地址列表给消费者,如果有变更,注册中心将基于长连接推送变更数据给消费者。

5.服务消费者,从提供者地址列表中,基于软负载均衡算法,选一台提供者进行调用,如果调用失败,再选另一台调用。

6.服务消费者和提供者,在内存中累计调用次数和调用时间,定时每分钟发送一次统计数据到监控中心。

我的整体架构是这样的:

使用Dubbo来服务化(基于Spring);

使用Zookeeper集群作为Dubbo服务的注册中心(Zookeeper简介与安装);

使用Dubbo提供的一个JavaWeb项目作为Dubbo服务管理控制台;

创建了一个服务提供者项目(pom父项目) - 叫dubbo-practice-provider;

创建了一个服务消费者项目(pom父项目) - 叫dubbo-practice-consumer;

Zookeeper安装

1. 下载、解压

我这里使用的是Xftp上传,关于Xftp的安装与使用可以去它的官网https://www.netsarang.com/download/down_xfp5.html

使用的zookeeper版本是zookeeper-3.4.6

下面我们解压开发包,将安装包解压到/usr/local目录下,我们使用的命令是:

tar -zxvf zookeeper-3.4.6.tar.gz  -C /usr/local/


如下所示。



2. 、修改配置文件

我们先在 zookeeper-3.4.6目录下新建一个data目录,命令如下:

mkdir data


下面我们进入到conf目录下,可以看到该目录下有个zoo_sample.cfg文件

# 将原有的zoo_sample.cfg拷贝一份,取名叫`zoo.cfg`
cp conf/zoo_sample.cfg conf/zoo.cfg

# vim修改配置文件
vim conf/zoo.cfg


下面我们来修改zoo.cfg文件,我们使用的命令是vi zoo.cfg,在打开的文件中修改”dataDir”的路径为我们上面创建的data的绝对路径。如下所示。

[root@localhost conf]# vi zoo.cfg

# The number of milliseconds of each tick
tickTime=2000
# The number of ticks that the initial
# synchronization phase can take
initLimit=10
# The number of ticks that can pass between
# sending a request and getting an acknowledgement
syncLimit=5
# the directory where the snapshot is stored.
# do not use /tmp for storage, /tmp here is just
# example sakes.
dataDir=/usr/local/zookeeper-3.4.6/data
# the port at which the clients will connect
clientPort=2181


修改完zoo.cfg之后,按ESC退出编辑模式,然后按Shift+ZZ来保存并退出编辑模式

接下来我们便启动zookepper,我们进入到bin目录下,使用命令

./zkServer.sh start 来启动zookeeper

[root@localhost zookeeper-3.4.6]# ./zkServer.sh start

ZooKeeper JMX enabled by default
Using config: /usr/local/zookeeper-3.4.6/bin/../conf/zoo.cfg
Starting zookeeper ... STARTED

# 以上,启动成功!


启动完之后,我们可以使用./zkServer.sh status来查看启动状态,如下图所示。

[root@localhost zookeeper-3.4.6]#  ./bin/zkServer.sh status
ZooKeeper JMX enabled by default
Using config: /usr/local/zookeeper-3.4.8/bin/../conf/zoo.cfg
Mode: standalone


如果出现端口无法访问的情况,有两种解决方案:

一:在防火墙允许访问的端口中增加8080端口(zookeeper中有个内嵌的管理控制台是通过jetty启动,会占用8080 端口)

vi /etc/sysconfig/iptables




添加完端口后,重启防火墙,如下所示。



二:关闭防火墙,并且设置开机也不启动

[root@localhost conf]#   service iptables stop
关闭防火墙
[root@localhost bin]# chkconfig iptables off
设置开机不启动


参考博客:Zookeeper简介、安装与使用
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: