一、分布式基本知识
1.1) 架构演变
先给出dubbo官方的图,图片表示了架构的演变。然后我说一下自己的理解。
应用最开始是单体应用,即一个应用包括了所有应用模块。
随后就是垂直应用架构,也就是将系统拆分为多个应用模块。
随后就是RPC架构,之前的垂直应用架构其实可以说是在一个进程内的通讯,而RPC就是一种进步,RPC是进程之间的通讯,远程过程调用就是这么来的。
有了RPC之后,虽然可以实现进程之间的通讯,但是服务器集群后的服务器资源利用有些时候容易造成浪费,比如有个系统,一般情况都是不能很好地预估需要分配多少机器的,很容易造成一种情况就是业务访问很频繁的模块分配了不足的机器,而访问不是很频繁的模块分配了太多的机器,这种情况就不能实现资源的很好利用,所以针对这种情况就有了SOA(Service Oriented Architecture)的出现,SOA其实就是一个服务注册中心,可以实现资源调度,合理地分配资源,提高资源调度,是一个治理中心。
1.2)、分布式基本概念
所以我们了解了架构演变之后,就可以更好的理解分布式,分布式其实就是一种可以实现不同进程之间通讯的架构,然后进程之间怎么通讯的?一般都是通过RPC框架实现。比如Java方面的,Dubbo框架或者Spring Cloud。
二、RPC简介
2.1) RPC概念
RPC:全称远程过程调用,是一种进程间的通信的方式,它所做的事情就是实现进程内的通信,允许调用另外一个地址空间,可以是共享网络里的另外一台机器。
2.2) RPC核心模块
RPC有两个核心模块:通信和序列化
三、Dubbo原理简介
3.1) Dubbo简介
Dubbo是阿里巴巴开源的一款Java RPC框架,现在已经捐赠给Apache
官网:http://dubbo.apache.org/
3.2) 核心功能
a、智能容错和负载均衡
b、服务注册和发现
c、面向接口的远程方法调用
3.3) 原理简介
上图是Dubbo官方的图
角色
Provider:暴露服务的服务提供者
Container:服务运行的容器
Consumer:调用远程服务的消费者
Registry:服务注册和发现的注册中心
Minitor:统计服务调用次数和时间的监控中心
调用
下面根据我的理解说明一下
0:服务器容器负责启动、加载、运行服务提供者
1:服务提供者在启动后就可以向注册中心暴露服务
2:服务消费者在启动后就可以向注册中心订阅想要的服务
3:注册中心向服务消费者返回服务调用列表
4:服务消费者基于软负载均衡算法调用服务提供者的服务,这个服务提供者有可能是一个服务提供者列表,调用那个服务提供者就是根据负载均衡来调用了
5:服务提供者和服务消费者定时将保存在内存中的服务调用次数和服务调用时间推送给监控中心
四、Dubbo安装部署
4.1) Zookeeper安装
因为没有实践过linux系统的安装,所以本博客只介绍window系统的安装,当然linux安装dubbo环境也不会难。
下载Zookeeper
https://archive.apache.org/dist/zookeeper/
ps:先下载Zookeeper,因为3.5.X的都是公测版或者内测版,所以有可能不太稳定,不建议下载。
修改配置文件
解压下载好的Zookeeper压缩文件,zookeeper-3.4.13的配置文件在conf文件夹下面,可以看到里面有个zoo_sample.cfg的文件,我们需要修改文件名称,不然会出现文件找不到,将文件名称改为zoo.cfg
这里主要改一下Zookeeper临时文件夹,默认是linux系统的tmp/zookeeper,我修改后的配置如下:
# 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.
# Linux系统下的临时目录
# dataDir=/tmp/zookeeper
dataDir=../tmp/zookeeper
# the port at which the clients will connect
clientPort=2181
# the maximum number of client connections.
# increase this if you need to handle more clients
#maxClientCnxns=60
#
# Be sure to read the maintenance section of the
# administrator guide before turning on autopurge.
#
# http://zookeeper.apache.org/doc/current/zookeeperAdmin.html#sc_maintenance
#
# The number of snapshots to retain in dataDir
#autopurge.snapRetainCount=3
# Purge task interval in hours
# Set to "0" to disable auto purge feature
#autopurge.purgeInterval=1
启动Zookeeper
在bin目录下面,有个zkServer.cmd文件,这是Zookeeper服务端启动的文件,点击启动
zkCli.cmd是客户端启动文件,我们点击启动,Zookeeper是一个树形目录结构的
### get根目录
[zk: localhost:2181(CONNECTED) 1] get /
cZxid = 0x0
ctime = Thu Jan 01 08:00:00 CST 1970
mZxid = 0x0
mtime = Thu Jan 01 08:00:00 CST 1970
pZxid = 0x0
cversion = -1
dataVersion = 0
aclVersion = 0
ephemeralOwner = 0x0
dataLength = 0
numChildren = 1
### 看一下根目录下面有什么,默认有Zookeeper这个目录
[zk: localhost:2181(CONNECTED) 2] ls /
[zookeeper]
### 在根目录下面创建一个taoshop的目录,并写值"mytest"
[zk: localhost:2181(CONNECTED) 3] create -e /taoshop mytest
Created /taoshop
### 查看一下,创建成功
[zk: localhost:2181(CONNECTED) 4] ls /
[taoshop, zookeeper]
### 查看一下taoshop目录下面有什么,可以看到"mytest"这个保存的值
[zk: localhost:2181(CONNECTED) 5] get /taoshop
mytest
cZxid = 0x6
ctime = Sun Nov 04 20:54:19 CST 2018
mZxid = 0x6
mtime = Sun Nov 04 20:54:19 CST 2018
pZxid = 0x6
cversion = 0
dataVersion = 0
aclVersion = 0
ephemeralOwner = 0x1000250f2010000
dataLength = 6
numChildren = 0
4.2) Dubbo监控平台部署
下载一下Dubbo提供的监控平台,可以先去下载master分支,有看到一个develop分支,不过感觉develop分支的还没稳定下来,根据自己需要下载,我就是下载master版本的
https://github.com/apache/incubator-dubbo-ops/tree/master
可以git clone一下https://github.com/apache/incubator-dubbo-ops.git
git clone https://github.com/apache/incubator-dubbo-ops.git
然后到dubbo-admin下面打包一下
incubator-dubbo-ops-master/dubbo-admin
mvn clean package
完成后,到该目录下面,cmd运行
java -jar dubbo-admin-0.0.1-SNAPSHOT.jar
访问Dubbo监控平台
输入账号密码root/root