首页 > 其他分享 >Dubbo/Zookeeper笔记

Dubbo/Zookeeper笔记

时间:2022-08-25 09:14:26浏览次数:88  
标签:Dubbo 调用 服务 中心 Zookeeper 笔记 注册 服务提供者 架构

分布式基础:Doubbo/Zookeeper

分布式理论

一、什么是分布式系统?

  1. 分布式系统是若干个独立计算机的集合,这些计算机对于用户来说就像单个相关系统

  2. 分布式系统是一组通过网络进行通信、为了完成共同的任务而协调工作的计算机节点组成的系统。

  3. 分布式系统的出现是为了用廉价的、普通的机器完成单个计算机无法完成的计算、存储任务。其目的是利用更多的机器,处理更多的数据

二、Dubbo背景

dubbo原本是阿里巴巴的现在是apache的

dubbo文档链接https://dubbo.apache.org/zh/docs/v2.7/user/preface/background/

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

1.单一应用架构

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

适用于小型网站、小型管理系统、将所有的功能都部署到一个功能里,简单易学
缺点:

  • 性能扩展比较难
  • 协同开发问题
  • 不利于升级维护

2.垂直应用架构

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

通过切分业务来实现各个模块独立部署,降低了维护和部署的难度,团队各司其职更易管理,性能扩展也更方便,更有针对性
缺点:

  • 公用模块无法重复利用,开发性的浪费

3.分布式服务架构

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

4.垂直应用架构

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

5.流动计算架构

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

二、RPC

什么是RPC

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

  • 它是一种通过网络从远程计算机程序上请求服务,而不需要了解底层网络技术的协议。也就是说两台服务器A,B,一个应用部署在A服务器上,想要调用B服务器上应用提供的方法,由于不在一个内存空间,不能直接调用,需要通过网络来表达调用的语义和传达调用的数据

RPC工作原理

RPC 调用分以下两种:

  • 同步调用: 客户方等待调用执行完成并返回结果。
  • 异步调用: 客户方调用后不用等待执行结果返回,但依然可以通过回调通知等方式获取返回结果。若客户方不关心调用返回结果,则变成单向异步调用,单向调用不用返回结果。

一次完整的RPC调用流程(同步调用,异步另说)如下:

1)服务消费方(client)调用以本地调用方式调用服务;

2)client stub接收到调用后负责将方法、参数等组装成能够进行网络传输的消息体;

3)client stub找到服务地址,并将消息发送到服务端;

4)server stub收到消息后进行解码;

5)server stub根据解码结果调用本地的服务;

6)本地服务执行并将结果返回给server stub;

7)server stub将返回结果打包成消息并发送至消费方;

8)client stub接收到消息,并进行解码;

9)服务消费方得到最终结果。

RPC框架的目标就是要2~8这些步骤都封装起来,让用户对这些细节透明。

三、什么是Doubbo

Apache Dubbo |ˈdʌbəʊ| 提供了六大核心能力:面向接口代理的高性能RPC调用,智能容错和负载均衡,服务自动注册和发现,高度可扩展能力,运行期流量调度,可视化的服务治理与运维。

Dubbo 架构

节点角色说明

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

调用关系说明

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

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

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

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

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

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

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

连通性

  • 注册中心负责服务地址的注册与查找,相当于目录服务,服务提供者和消费者只在启动时与注册中心交互,注册中心不转发请求,压力较小

  • 监控中心负责统计各服务调用次数,调用时间等,统计先在内存汇总后每分钟一次发送到监控中心服务器,并以报表展示

  • 服务提供者向注册中心注册其提供的服务,并汇报调用时间到监控中心,此时间不包含网络开销

  • 服务消费者向注册中心获取服务提供者地址列表,并根据负载算法直接调用提供者,同时汇报调用时间到监控中心,此时间包含网络开销

  • 注册中心,服务提供者,服务消费者三者之间均为长连接,监控中心除外

  • 注册中心通过长连接感知服务提供者的存在,服务提供者宕机,注册中心将立即推送事件通知消费者

  • 注册中心和监控中心全部宕机,不影响已运行的提供者和消费者,消费者在本地缓存了提供者列表

  • 注册中心和监控中心都是可选的,服务消费者可以直连服务提供者

健壮性

  • 监控中心宕掉不影响使用,只是丢失部分采样数据

  • 数据库宕掉后,注册中心仍能通过缓存提供服务列表查询,但不能注册新服务

  • 注册中心对等集群,任意一台宕掉后,将自动切换到另一台

  • 注册中心全部宕掉后,服务提供者和服务消费者仍能通过本地缓存通讯

  • 服务提供者无状态,任意一台宕掉后,不影响使用

  • 服务提供者全部宕掉后,服务消费者应用将无法使用,并无限次重连等待服务提供者恢复

伸缩性

  • 注册中心为对等集群,可动态增加机器部署实例,所有客户端将自动发现新的注册中心

  • 服务提供者无状态,可动态增加机器部署实例,注册中心将推送新的服务提供者信息给消费者

升级性

当服务集群规模进一步扩大,带动IT治理结构进一步升级,需要实现动态部署,进行流动计算,现有分布式服务架构不会带来阻力。下图是未来可能的一种架构:

节点角色说明
节点 角色说明
Deployer 自动部署服务的本地代理
Repository 仓库用于存储服务应用发布包
Scheduler 调度中心基于访问压力自动增减服务提供者
Admin 统一管理控制台
Registry 服务注册与发现的注册中心
Monitor 统计服务的调用次数和调用时间的监控中心

标签:Dubbo,调用,服务,中心,Zookeeper,笔记,注册,服务提供者,架构
From: https://www.cnblogs.com/yanzhong/p/16623048.html

相关文章

  • 2022-08-24 第五组 赖哲栋 学习笔记
    JavaScriptJavaScript脚本语言,解释型,主要用来给HTML网页增加动态功能通常的js是运行在浏览器环境下的JS的两种模型DOM:文档对象模型documentBOM:浏览器对象模型wind......
  • Java学习笔记5
    抽象类抽象类和其中抽象方法由abstract修饰,继承抽象类的所有方法必须由子类实现。Java的类是单继承,但是可以继承多个接口抽象类不能new实例化接口普通类:只有具体实......
  • 背包学习笔记
    ##前言最近学习了背包,来写篇学习笔记。如果你想认真看这篇笔记,可以参考配套题单,这些题目在下文练习题中也会提到。目录什么是背包01背包无优化空间优化......
  • HCIA学习笔记二十三:RSTP快速生成树的配置
    一、拓扑图• 在交换机拖出3台S5700,然后选择设备连线,点击Copper进行设备接线,完成后开启设备。二、RSTP模式配置[SW1]stpmoderstp[SW2]stpmoderstp[SW3]stpmod......
  • C学习笔记:memcpy与memmove函数探索
    #define_CRT_SECURE_NO_WARNINGS1#include<stdio.h>voidmy_memcpy(void*des,constvoid*src,size_tk){ while(k--) { *(char*)des=*(char*)src; ++(cha......
  • 824笔记(闭包,递归,浅/深拷贝)
    闭包闭包:有权访问另一个函数作用域中变量的函数,一个作用域可以访问另外一个函数内部的局部变量作用:延伸了变量的作用范围特性:变量或者参数不会被垃圾回收机制回收函......
  • Kubernetes学习笔记(二十一):备份
    kubectlgetall--all-namespaces-oyaml>all-deploy-services.yaml与其备份单个资源,不如备份ETCD:etcd.service--data-dir=/var/lib/etcdetcd也自带快照功能ET......
  • .net笔记
    分库分表-分库(功能拆分):数据库的线程是有限的,多个数据库增加了线程资源,这就是分库分表的目的分库分表-分表(数据拆分):当一个表超过2kw数据后,查询会变慢,索引会失去效用,此时分......
  • 操作系统学习笔记5 | 用户级线程 && 内核级线程
    在上一部分中,我们了解到操作系统实现多进程图像需要组织、切换、考虑进程之间的影响,组织就是用PCB的队列实现,用到了一些简单的数据结构知识。而本部分重点就是进程之间的切......
  • 双流网络two stream network学习笔记草稿(待整理)
    卷积神经网络比较擅长学习局部的特征,而非物体移动的规律先将运动信息抽取好(光流),再让CNN去学习这种(运动信息到动作分类间的)映射空间流的输入是单帧图片,而时间流的输入是一系......