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架构图:

节点角色说明:

节点

角色说明

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上消费提供者的服务。

Dubbo简介及其与ZooKeeper的关系的更多相关文章

  1. Dubbo简单介绍及其和zookeeper的关系

    何为Dubbo ​ Dubbox 是一个分布式服务框架,其前身是阿里巴巴开源项目Dubbo ,被国内电商及互联网项目中使用,后期阿里巴巴停止了该项目的维护,当当网便在Dubbo基础上进行优化,并继续维 ...

  2. Dubbo简介与基本概念

    场景 分布式系统的发展演变以及RPC简介: https://blog.csdn.net/BADAO_LIUMANG_QIZHI/article/details/103555049 Dubbo简介 Ap ...

  3. dubbo入门学习 三 dubbo简介

    http://dubbo.apache.org/zh-cn/docs/user/references/protocol/dubbo.html Dubbo简介 1. Dubbo:一个分布式.高性能.透明 ...

  4. dubbo源码解析-zookeeper创建节点

    前言 在之前dubbo源码解析-本地暴露中的前言部分提到了两道高频的面试题,其中一道dubbo中zookeeper做注册中心,如果注册中心集群都挂掉,那发布者和订阅者还能通信吗?在上周的dubbo源码 ...

  5. HBase与Zookeeper的关系

    HBase与Zookeeper的关系 一.HBase与Zookeeper的关系 Zookeeper Client Master RegionServer 一.HBase与Zookeeper的关系 Cl ...

  6. Dubbo服务注册到Zookeeper,对外提供服务的实际类 ref(如:SleepServiceImpl)保存在哪里

    Dubbo服务注册到Zookeeper,其注册的内容为实际对外提供的服务的实现.这个实现保存在哪里(至于具体客户端使用时怎么取后后续阐述)?可以看看Dubbo如何处理的. 对于@DubboServic ...

  7. dubbo与zookeeper的关系

    Dubbo建议使用Zookeeper作为服务的注册中心. 1.   Zookeeper的作用: zookeeper用来注册服务和进行负载均衡,哪一个服务由哪一个机器来提供必需让调用者知道,简单来说就是 ...

  8. Dubbo原理简介、与Zookeeper整合利用

    官方文档:http://dubbo.io/books/dubbo-user-book/ Dubbo的简单介绍 Dubbo是一个分布式服务框架,架构如图: 节点角色说明: Provider: 暴露服务的 ...

  9. dubbo和zookeeper的关系

    转载前言:网络上很多教程没有描述zookeeper和dubbo到底是什么关系.分别扮演了什么角色等信息,都是说一些似是而非的话,这里终于找到一篇文章,比较生动地描述了注册中心和微服务框架之间的关系,以 ...

  10. 2. Dubbo和Zookeeper的关系

    转自:https://www.cnblogs.com/hirampeng/p/9540243.html Dubbo建议使用Zookeeper作为服务的注册中心. 1.   Zookeeper的作用: ...

随机推荐

  1. FastAPI与Alembic:数据库迁移的隐秘艺术

    title: FastAPI与Alembic:数据库迁移的隐秘艺术 date: 2025/05/13 02:02:31 updated: 2025/05/13 02:02:31 author: cmd ...

  2. Kubernetes 调度器打分算法详解:LeastAllocated 与 NodeAffinity

    1️⃣ NodeResourcesLeastAllocated(资源最少分配) 目标 优先将 Pod 调度到资源使用率最低的节点,防止热点节点,尽量实现负载均衡. 打分算法原理 对每个节点计算 CPU ...

  3. Java面试题:浅谈Spring Bean的生命周期

    摘要:如果熟悉Spring 中 Bean的生命周期,可以加深对Spring的认知,故综述一下Bean的生命周期. 前言   Spring中Bean的生命周期是找工作的时候会被问到的高频面试题,主要用于 ...

  4. 2024杭电钉耙2-1003 HDOJ7447 绝对不模拟的简单魔方

    欢迎您来我的网站看这篇题解! Problem 有一个魔方可能被拧了不超过三次,同时还弄丢了一个角块上的两个贴纸.现在把这两个贴纸贴回去,请问有没有贴错? 只可能拧侧面,不会拧中间层,且每次只能拧 \( ...

  5. 基于腾讯云EdgeOne的自适应webp转换

    基于腾讯云EdgeOne的自适应webp转换 EdgeOne是腾讯云提出的边缘计算相关产品,和CloudFlare的小黄云类似,实际上大致等于CDN+安全防护,同时它还提供了边缘函数来提供我们使用,我 ...

  6. Mysql基线核查

    查看版本信息 select @@version 查看默认创建的测试库和测试用户 show databases like "test%"; select * from mysql.u ...

  7. LLM 上下文长度详细介绍

    1.概述 在<Token:大语言模型的"语言乐高",一切智能的基石>与<LLM 输出配置 (LLM output configuration)>这两篇博文中 ...

  8. linux系统磁盘快速创建多个分区

    # 创建分区 [root@centos7 ~]# cat parted.sh parted --script /dev/sdb \ mklabel gpt \ mkpart primary 1MiB ...

  9. STL:迭代器与常用算法

    迭代器 C++ STL(Standard Template Library,标准模板库)中迭代器与常用算法是泛型编程的核心组成部分.它们配合使用,可以对容器进行高效.统一的操作.下面是对它们的系统性总 ...

  10. 第k个数

    第K个数 给定一个长度为 n 的整数数列,以及一个整数 k,请用快速选择算法求出数列从小到大排序后的第 k 个数. 所用方法和基本原理 快速选择算法是基于快速排序思想的一种选择算法.其基本原理如下: ...