Dubbo简介及其与ZooKeeper的关系

原创 图南 图南随笔 2019-09-21

 

| Dubbo与ZooKeeper系列文章

  1. ZooKeeper简介及安装
  2. ZooKeeper CLI 详解
  3. Dubbo简介及其与ZooKeeper的关系(本文)


| 分布式与集群

比喻例子:小饭店原来只有一个厨师,切菜洗菜备料炒菜全干,后来客人多了,厨房一个厨师忙不过来,又请了一个厨师,两个厨师都炒一样的菜,这两个厨师的关系是集群,为了让厨师专心炒菜,把菜做到极致,又请了个配菜师负责切菜,备菜,备料,厨师和配菜师的关系是分布式,一个配菜师也忙不过来,又请了一个配菜师,这两个配菜师的关系是集群。分布式讲究的是协作,一个事件的发生可以触发多个事件同时进行不同的业务运算。而集群中的成员功能是一样的。

 

| dubbo是什么

假如A工程想调用B工程中的方法,import不进来,这时候就需要远程调用了,怎么远程调用呢?

有人会说可以使用HttpGet/HttpPost进行远程调用,这种方式适合访问量比较小,业务简单的情况下。访问量特别大,业务非常复杂的时候,会产生以下问题:

 

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

 

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

 

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

 

Dubbo是阿里巴巴公司开源的一个高性能优秀的服务框架,使得应用可通过高性能的 RPC 实现服务的输出和输入功能,可以和Spring框架无缝集成。

Dubbo提供了三大核心能力:

  • 面向接口的远程方法调用:透明化的远程方法调用,就像调用本地方法一样调用远程方法,只需简单配置,没有任何API侵入。
  • 智能容错和负载均衡:软负载均衡及容错机制,可在内网替代F5等硬件负载均衡器,降低成本,减少单点。
  • 服务自动注册和发现:不再需要写死服务提供方地址,注册中心基于接口名查询服务提供者的IP地址,并且能够平滑添加或删除服务提供者。


| dubbo架构

dubbo架构图:

dubbo连接zookeeper如何清理缓存 dubbo zookeeper关系_负载均衡

 

节点角色说明:

节点

角色说明

Provider

暴露服务的服务提供方

Consumer

调用远程服务的服务消费方

Registry

服务注册与发现的注册中心

Monitor

统计服务的调用次数和调用时间的监控中心

Container

服务运行容器

 

调用关系说明:

  1. 服务容器负责启动,加载,运行服务提供者。
  2. 服务提供者在启动时,向注册中心注册自己提供的服务。
  3. 服务消费者在启动时,向注册中心订阅自己所需的服务。
  4. 注册中心返回服务提供者地址列表给消费者,如果有变更,注册中心将基于长连接推送变更数据给消费者。
  5. 服务消费者,从提供者地址列表中,基于软负载均衡算法,选一台提供者进行调用,如果调用失败,再选另一台调用。
  6. 服务消费者和提供者,在内存中累计调用次数和调用时间,定时每分钟发送一次统计数据到监控中心。

Dubbo 架构具有连通性、健壮性、伸缩性、以及向未来架构的升级性。

 

| dubbo和zookeeper的关系

简单来说,打个比方:dubbo就是动物园的动物,zookeeper是动物园。如果游客想看动物的话那么就去动物园看。比如你要看老虎,那么动物园有你才能看到。换句话说我们把很多不同的dubbo(动物)放到zookeeper(动物园中)提供给我们游客进行观赏。这个过程中三个关键:场所、提供者、消费者。

再说一个分布式的项目,提供者与消费者被拆分了开来,部署在不同的tomcat中,我在消费者中需要调用提供者的接口,但是两个运行在不同tomcat下的服务无法直接互调接口,那么就可以通过zookeeper和dubbo实现。就好比把动物放到动物园,我们要看了直接去动物园就行。而不能直接去动物生活的地方去看,会有性命安全之忧(比如你去看老虎)。

我们通过dubbo建立提供者服务,并且到zookeeper上面注册,填写对应的zookeeper服务所在的IP及端口号。即zokeeper (注册中心)主要功能是服务注册与发现的注册中心,dubbo(远程服务调用的分布式框架)主要实现应用与zokeeper等注册中心链接调用的工具(类jdbc工具类)。

 

下篇文章会介绍一下zookeeper的安装及提供者通过dubbo把服务注册到zookeeper,消费者通过dubbo来从zookeeper上消费提供者的服务。