dubbo+zookeeper简单入门

分布式 Dubbo + Zookeeper简单入门

什么是Java分布式应用

​ 一个大型的系统往往被分为几个子系统来做,一个子系统可以部署在一台机器的多个JVM上,也可以部署在多台机器上。但是每一个系统不是独立的,不是完全独立的。需要相互通信,共同实现业务功能。一句话来说:分布式就是通过计算机网络将后端工作分布到多台主机上,多个主机一起协同完成工作。目的就是利用更过的机器,处理更多的数据等。

RPC是什么

RPC(Remote Procedure Call)远程过程调用,是一种进程间通信方式,他是一种技术的思想,而不是规范。他允许程序调用另一个地址空间(通常是共享网络的另一台机器上)的过程或函数,而不用程序员显式编码这个远程调用的细节。即程序员无论是调用本地的还是远程的函数,本质上编写的调用代码基本相同。

也就是说两台服务器A和B,一个应用部署在A服务器上,想要调用B服务器上应用提供的函数或方法,由于不在一个内存空间,不能直接调用,需要通过网络来表达调用的语义和传达调用的数据。为什么要用RPC?就是无法在一个进程内,甚至一个计算机内通过本地调用的方式完成需求,比如不同的系统间的通讯,甚至不同的组织间的通讯,由于计算能力需要横向扩展,需要在多台机器组成的集群上部署应用。RPC就是要像调用本地的函数一样去调用远程函数。
dubbo+zookeeper简单入门_第1张图片
dubbo+zookeeper简单入门_第2张图片

RPC两个核心模块:通讯、序列化。

Dubbo概念

Dubbo官网

Apache Dubbo 是一款高性能、轻量级的开源Java RPC框架,它提供了三大核心能力:面向接口的远程方法调用,智能容错和负载均衡,以及服务自动注册和发现。

​ 随着互联网的发展,网站应用的规模不断扩大,常规的垂直应用架构已无法应对,分布式服务架构以及流动计算架构势在必行,亟需一个治理系统确保架构有条不紊的演进。

dubbo+zookeeper简单入门_第3张图片

单一应用架构

当网站流量很小时,只需一个应用,将所有功能都部署在一起,以减少部署节点和成本。此时,用于简化增删改查工作量的数据访问框架(ORM)是关键。

垂直应用架构

当访问量逐渐增大,单一应用增加机器带来的加速度越来越小,提升效率的方法之一是将应用拆成互不相干的几个应用,以提升效率。此时,用于加速前端页面开发的Web框架(MVC)是关键。

分布式服务架构

当垂直应用越来越多,应用之间交互不可避免,将核心业务抽取出来,作为独立的服务,逐渐形成稳定的服务中心,使前端应用能更快速的响应多变的市场需求。此时,用于提高业务复用及整合的分布式服务框架(RPC)是关键。

流动计算架构

当服务越来越多,容量的评估,小服务资源的浪费等问题逐渐显现,此时需增加一个调度中心基于访问压力实时管理集群容量,提高集群利用率。此时,用于提高机器利用率的资源调度和治理中心(SOA)是关键。

需求

dubbo+zookeeper简单入门_第4张图片

在大规模服务化之前,应用可能只是通过 RMI 或 Hessian 等工具,简单的暴露和引用远程服务,通过配置服务的URL地址进行调用,通过 F5 等硬件进行负载均衡。

当服务越来越多时,服务 URL 配置管理变得非常困难,F5 硬件负载均衡器的单点压力也越来越大。 此时需要一个服务注册中心,动态地注册和发现服务,使服务的位置透明。并通过在消费方获取服务提供方地址列表,实现软负载均衡和 Failover,降低对 F5 硬件负载均衡器的依赖,也能减少部分成本。

当进一步发展,服务间依赖关系变得错踪复杂,甚至分不清哪个应用要在哪个应用之前启动,架构师都不能完整的描述应用的架构关系。 这时,需要自动画出应用间的依赖关系图,以帮助架构师理清关系。

接着,服务的调用量越来越大,服务的容量问题就暴露出来,这个服务需要多少机器支撑?什么时候该加机器? 为了解决这些问题,第一步,要将服务现在每天的调用量,响应时间,都统计出来,作为容量规划的参考指标。其次,要可以动态调整权重,在线上,将某台机器的权重一直加大,并在加大的过程中记录响应时间的变化,直到响应时间到达阈值,记录此时的访问量,再以此访问量乘以机器数反推总容量。

以上是 Dubbo 最基本的几个需求。

架构

dubbo+zookeeper简单入门_第5张图片

节点 角色说明
Provider 暴露服务的服务提供方
Consumer 调用远程服务的服务消费方
Registry 服务注册与发现的注册中心
Monitor 统计服务的调用次数和调用时间的监控中心
Container 服务运行容器
调用关系说明

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

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

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

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

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

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

Dubbo 架构具有以下几个特点,分别是连通性、健壮性、伸缩性、以及向未来架构的升级性。

安装Zookeeper

下载zookeeper:下载地址

我下载的是最新版的zookeeper-3.6.1 要下载带有bin的,然后解压。

dubbo+zookeeper简单入门_第6张图片

运行/bin/zkServer.cmd 初次运行直接闪退,这是我们要在zkServer.cmd中末尾加入pause,再打开就不会闪退了,并且会提示报错信息,然而找到原因是因为没有zoo.cfg配置文件。在/conf/下zoo_sample.cfg复制一份并命名为zoo.cfg

Dubbo文档也有安装教程地址

修改完后启动zkServer.cmd

测试:zkCli.cmd

ls / :列出zookeeper根下的的节点

create-e /williamc 973182914 创建一个节点

get /williamc 得到节点的值

安装Dubbo-admin(Dubbo管理控制台)

Dubbo是一个jar包,帮我们的java程序连接到zookeeper,利用zookeeper消费和提供服务。 Dubbo为了我们能够更好地监控dubbo服务,官方提供了一个可视化的监控程序dubbo-admin,这个监控用不用都可以。

1.在github安装 地址

​ dubbo-admin常用的是master 现在出了一个develop(视图更加美观 vue)

2.解压dubbo-admin-master.zip 并进入目录

​ 在dubbo-admin\src\main\resources可以看到相关配置 这里要指定好zookeeper地址

#
# Licensed to the Apache Software Foundation (ASF) under one or more
# contributor license agreements.  See the NOTICE file distributed with
# this work for additional information regarding copyright ownership.
# The ASF licenses this file to You under the Apache License, Version 2.0
# (the "License"); you may not use this file except in compliance with
# the License.  You may obtain a copy of the License at
#
#     http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
#

server.port=7001
spring.velocity.cache=false
spring.velocity.charset=UTF-8
spring.velocity.layout-url=/templates/default.vm
spring.messages.fallback-to-system-locale=false
spring.messages.basename=i18n/message
spring.root.password=root
spring.guest.password=guest

dubbo.registry.address=zookeeper://127.0.0.1:2181

3.然后打包dubbo-admin

​ 打开cmd命令行:mvn clean package

4.打包好后进入dubbo-admin\target

​ 打开cmd命令行:java -jar dubbo-admin-0.0.1-SNAPSHOT.jar

运行好后就可以访问localhost:7001(前提是要先运行zkServer.cmd)用户名和密码都是root,进入之后就可以看到Dubbo管理控制台。

dubbo+zookeeper简单入门_第7张图片

如果用dubbo-admin-develop 在Dubbo文档也有安装教程地址

SpringBoot整合Dubbo+Zookeeper

你可能感兴趣的:(Dubbo+Zookeeper,java,分布式)