Dubbo——Dubbo初识(1)

2023-10-28

背景

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

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

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

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

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

需求

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

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

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

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

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

架构

在这里插入图片描述
节点角色说明

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

调用关系说明

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

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

连通性
  • 注册中心负责服务地址的注册与查找,相当于目录服务,服务提供者和消费者只在启动时与注册中心交互,注册中心不转发请求,压力较小
  • 监控中心负责统计各服务调用次数,调用时间等,统计先在内存汇总后每分钟一次发送到监控中心服务器,并以报表展示
  • 服务提供者向注册中心注册其提供的服务,并汇报调用时间到监控中心,此时间不包含网络开销
  • 服务消费者向注册中心获取服务提供者地址列表,并根据负载算法直接调用提供者,同时汇报调用时间到监控中心,此时间包含网络开销
  • 注册中心,服务提供者,服务消费者三者之间均为长连接,监控中心除外
  • 注册中心通过长连接感知服务提供者的存在,服务提供者宕机,注册中心将立即推送事件通知消费者
  • 注册中心和监控中心全部宕机,不影响已运行的提供者和消费者,消费者在本地缓存了提供者列表
  • 注册中心和监控中心都是可选的,服务消费者可以直连服务提供者

什么是长连接?
首先这里所说的连接是指网络传输层的使用TCP协议经过三次握手建立的连接;长连接是指建立的连接长期保持,不管此时有无数据包的发送;有长连接自然也有短连接,短连接是指双方有数据发送时,就建立连接,发送几次请求后,就主动或者被动断开连接。

长连接与心跳:
https://www.jianshu.com/p/c6af08f853d0

健壮性
  • 监控中心宕掉不影响使用,只是丢失部分采样数据
  • 数据库宕掉后,注册中心仍能通过缓存提供服务列表查询,但不能注册新服务
  • 注册中心对等集群,任意一台宕掉后,将自动切换到另一台
  • 注册中心全部宕掉后,服务提供者和服务消费者仍能通过本地缓存通讯
  • 服务提供者无状态,任意一台宕掉后,不影响使用
  • 服务提供者全部宕掉后,服务消费者应用将无法使用,并无限次重连等待服务提供者恢复
升级性

当服务集群规模进一步扩大,带动IT治理结构进一步升级,需要实现动态部署,进行流动计算,现有分布式服务架构不会带来阻力。下图是未来可能的一种架构:
在这里插入图片描述
节点角色说明

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

使用

本地服务Spring配置
local.xml:

<bean id=“xxxService” class=“com.xxx.XxxServiceImpl” />
<bean id=“xxxAction” class=“com.xxx.XxxAction”>
    <property name=“xxxService” ref=“xxxService” />
</bean>

远程服务 Spring 配置
在本地服务的基础上,只需做简单配置,即可完成远程化:
将上面的 local.xml 配置拆分成两份,将服务定义部分放在服务提供方 remote-provider.xml,将服务引用部分放在服务消费方 remote-consumer.xml。 并在提供方增加暴露服务配置 <dubbo:service>,在消费方增加引用服务配置 <dubbo:reference>

remote-provider.xml:

<!-- 和本地服务一样实现远程服务 -->
<bean id=“xxxService” class=“com.xxx.XxxServiceImpl” /> 
<!-- 增加暴露远程服务配置 -->
<dubbo:service interface=“com.xxx.XxxService” ref=“xxxService” /> 

remote-consumer.xml:

<!-- 增加引用远程服务配置 -->
<dubbo:reference id=“xxxService” interface=“com.xxx.XxxService” />
<!-- 和本地服务一样使用远程服务 -->
<bean id=“xxxAction” class=“com.xxx.XxxAction”> 
    <property name=“xxxService” ref=“xxxService” />
</bean>
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Dubbo——Dubbo初识(1) 的相关文章

  • Redis缓存击穿、雪崩、穿透!(超详细)

    缓存的击穿 穿透和雪崩应该是再熟悉不过的词了 也是面试常问的高频试题 不过 对于这三大缓存的问题 有很多人背过了解决方案 却少有人能把思路给理清的 而且 网络上仍然充斥着 大量不太靠谱的解决方案 难免误人子弟 我的这篇文章 则会对这三大缓存
  • k8s-多节点部署efk-dial tcp 172.20.2.134:5601: getsockopt: connection refused

    异常信息 Error dial tcp 172 20 0 145 5601 getsockopt connection refused Trying to reach http 172 20 0 145 5601 分析 部署好efk后 通过
  • Dubbo——快速启动(2)

    快速启动 Dubbo 采用全 Spring 配置方式 透明化接入应用 对应用没有任何 API 侵入 只需用 Spring 加载 Dubbo 的配置即可 Dubbo 基于 Spring 的 Schema 扩展 进行加载 mvn
  • Distributed Database System —— Multi-raft协议介绍

    文章目录 Multi Raft协议 Multi Raft需要解决的问题 Multi Raft实现细节 Cockroach Multi Raft Raft Consistency of Range Replicas Range Leaders
  • Spark一路火花带闪电——Pair RDD常用算子(参数及其返回值)探究

    文章目录 转化算子 行动算子 转化算子 以键值对集合 1 2 3 4 3 6 为例 RDD U T 注意下面的函数 对应U和T reduceByKey f T T gt T RDD U T 合并具有相同值的键 rdd reduceByKey
  • Dubbo——Dubbo初识(1)

    背景 随着互联网的发展 网站应用的规模不断扩大 常规的垂直应用架构已无法应对 分布式服务架构以及流动计算架构势在必行 亟需一个治理系统确保架构有条不紊的演进 单一应用架构 当网站流量很小时 只需一个应用 将所有功能都部署在一起 以减少部署节
  • Hadoop是小象——YARN / Split&Block

    了解Hadoop架构 Hadoop可运行于一般的商用服务器上 具有高容错 高可靠性 高扩展性等特点 特别适合写一次 读多次的场景 其架构如下 HDFS 分布式文件存储 可靠性由心跳机制和冗余提供 YARN 分布式资源管理 MapReduce
  • Spark一路火花带闪电——Spark底层原理介绍

    文章目录 Spark计算引擎原理 1 1 术语 1 1 1 Application Spark应用程序 1 1 2 Driver 驱动程序 1 1 3 Cluster Manager 资源管理器 1 1 4 Executor 执行器 1 1
  • 基于Spring Cloud Alibaba 分布式微服务高并发数据平台化(中台)思想+多租户saas企业开发架构技术选型和设计方案

    基于Spring Cloud Alibaba 分布式微服务高并发数据平台化 中台 思想 多租户saas设计的企业开发架构 支持源码二次开发 支持其他业务系统集成 集中式应用权限管理 支持拓展其他任意子项目 架构源码可以加我WX haiwab
  • 分布式系统之Raft算法

    介绍 Raft是一种为了管理日志复制的分布式一致性算法 Raft 出现之前 Paxos 一直是分布式一致性算法的标准 Paxos 难以理解 更难以实现 Raft 的设计目标是简化 Paxos 使得算法既容易理解 也容易实现 Paxos 和
  • 数据库架构演变过程

    背景 在互联网初创时期 企业往往采用单体架构去搭建自己的应用系统 但是 随着企业的不断壮大 系统访问量不断随之上升 数据量也急剧增长 数据的存储是首先要解决的问题 在这个大数据时代 数据就是企业的命根子 数据库的单体架构很难满足数据的存储
  • Hadoop是小象——Hadoop集群安装配置

    文章目录 所需软件 集群网络配置 集群SSH免密登陆设置 Hadoop安装配置 所需软件 Linux所需软件包括 JavaTM1 5 x 必须安装 建议选择Sun公司发行的Java版本 以前安装过 ssh 必须安装并且保证 sshd一直运行
  • Springcloud五大组件

    1 什么是springcloud springcloud是一系列框架的有序集合 它利用springboot的开发便利性巧妙地简化了分布式系统基础设施的开发 如服务发现注册 配置中心 消息总线 负载均衡 断路器 数据监控等 都可以用sprin
  • Apache架构师都遵循的30条设计原则

    Srinath 通过不懈的努力最终总结出了 30 条架构原则 他主张架构师的角色应该由开发团队本身去扮演 而不是专门有个架构师团队或部门 Srinath 认为架构师应该扮演的角色是一个引导者 讨论发起者 花草修建者 而不是定义者和构建者 S
  • Distributed Database System —— Mysql Binlog不止是主从同步

    文章目录 引入 Binlog应用场景 读写分离 数据恢复 保证数据最终一致性 异地多活 引入 Mysql 5 0以后 支持通过binary log 二进制日志 以支持主从复制 复制允许将来自一个MySQL数据库服务器 master 的数据复
  • Zookeeper——zookeeper基础

    在深入了解ZooKeeper的运作之前 让我们来看看ZooKeeper的基本概念 我们将在本章中讨论以下主题 Architecture 架构 Hierarchical namespace 层次命名空间 Session 会话 Watches
  • 应用使用Druid连接池经常性断链问题分析

    前段时间有应用使用Druid连接池经常的提示断链报错 整个问题排查分析过程很有意思 这里将Druid连接池 数据库层以及负载均衡层的配置分析下 记录整个问题的分析过程 同时梳理下Druid连接池的配置和连接保活及回收机制 1 问题背景 应用
  • Distributed System Transaction —— 2PL

    文章目录 2PL 并发控制常见的方式有2PL MVCC等方式 2PL 两阶段锁 two phase locking 是用来解决多线程之间的竞态条件的 其算法非常简单 数据库中的每一个数据对象都有两种锁 S hared lock 和 e X
  • 什么是分布式架构

    一 分布式架构定义 什么是分布式架构 分布式系统 distributed system 是建立在网络之上的软件系统 内聚性 是指每一个数据库分布节点高度自治 有本地的数据库管理系统 透明性 是指每一个数据库分布节点对用户的应用来说都是透明的
  • Dubbo远程传输协议详解

    前言 上次小编为大家带来了Dubbo调用及容错机制详解 不知道大家有没有去看小编最后留下的问题 欢迎对文章进行评论也希望大家和小编多多交流 今天接着为大家带来Dubbo的内容 传输协议 上次调用机制中并没有涉及Dubbo传输的协议 这次容小

随机推荐

  • 图文:创建一个 idea + gradle + Springboot + MyBatis 项目

    最近项目用到了 springboot gradle 此文记录第一次使用 idea 创建 gradle springboot项目 部分参考网上资料 如有侵权 请联系我删除 1 new project gt spring initializr
  • 在IDEA中右键New没有创建Vue文件选项解决办法

    第一步 进入目录settings gt Editor gt File and Code Templates 第二步 添加模板步骤 模板内容如下所示
  • Docker部署fastdfs单机版

    1 拉取镜像 docker pull registry cn beijing aliyuncs com tianzuo fastdfs 2 创建映射目录 mkdir p home Data mkdir p home Html Data是fa
  • 452页24万字智慧城市顶层设计及智慧应用解决方案

    智慧城市总体设计 2 1 智慧城市核心技术 2 1 1 物联网 智慧城市是一个有机结合的大系统 涵盖了更透切的感知 更全面的互连 更深入的智能 物联网是智慧城市中非常重要的元素 它侧重于底层感知信息的采集与传输 城市范围内泛在网方面的建设
  • scss中引入字体找不到的问题

    scss中引入字体找不到的问题 在项目中引入一个字体文件 路径写法都没错 但是就是找不到这个文件 最终解决 使用 即可
  • 印度 IT人才那么多,为何出不了牛逼的互联网公司?

    作为世界上人口第二多的大国 印度一直都是IT互联网人才的原产地和输出地 在硅谷 有大量中高层管理人员来自印度 谷歌 微软等行业巨擎都由印度人担任首席执行官 可见印度的IT人才有多牛 虽然印度在国内外拥有相当多优质的IT人才 人口基数也足够庞
  • mysql数据库where语句_MySQL数据库入门——where子句,组合where的子句

    select语句的where子句指定搜索条件过滤显示的数据 1 使用where子句 在 select 语句中 where子句在from子句之后给出 返回满足指定搜索条件的数据 select prod name prod price from
  • [QT入门篇]3 QObject的拷贝构造函数与赋值运算符

    本文主要是针对QObject的拷贝构造函数和赋值运算符进行说明 先来看一下拷贝构造函数定义 拷贝构造函数 又称复制构造函数 是一种特殊的构造函数 它由编译器调用来完成一些基于同一类的其他对象的构建及初始化 其唯一的形参必须是引用 但并不限制
  • H-Permutation Counting 排列组合+并查集判环

    原题链接 输入 3 1 1 2 输出 3 说明 In the first sample all valid permutations are 1 2 3 1 3 2 1 2 3 1 3 2 and 2 3 1 2 3 1 so the an
  • phpmyadmin打开很慢的解决方法

    这篇文章主要介绍了phpmyadmin打开很慢的解决方法 一般这个问题的原因是phpmyadmin的版本检测造成的 因为phpmyadmin的官网有时会打不开 这时只要取消代码中的版本检测即可解决这个问题 需要的朋友可以参考下 phpmya
  • sort函数排序用法

    具体用法在上一篇博客中已经说明了 主要是sort函数实现了将数组数按从大到小的顺序给进行了排列 要注意的一点就是在头文件中声明 include跟 include 其次就是在调用函数时可以是sort a begin a end 也可以是表示具
  • LeetCode题目笔记——1351. 统计有序矩阵中的负数

    文章目录 题目描述 题目链接 题目难度 简单 方法一 暴力 代码 Python 方法二 二分搜索 代码 Python 方法三 倒序遍历 代码 Python 总结 题目描述 给你一个 m n 的矩阵 grid 矩阵中的元素无论是按行还是按列
  • 通过JS自动隐藏手机浏览器的地址栏

    大家通过手机自带浏览器打开百度 淘宝 在首页加载完毕后 会自动隐藏页面上方的地址栏 加之这些网站针对手机浏览器做了优化 乍看之下 还真难区分这是WEB APP还是Native App 如下左侧图片为通过safari打开淘宝网的首页 要不是因
  • 深入理解iOS API系列(一) textField:shouldChangeCharactersInRange:replacementString:

    前言 深入理解iOS API系列是一个较深解读iOS API的博文集 限于时间和作者精力 内容并不会全部原创 但是涵盖的内容 应该是广大iOS开发者 特别是初中级开发者经常误解或理解不够深刻的部分 主要是深入理解代理方法textField
  • 晶振相关知识

    系列文章目录 文章目录 系列文章目录 一 晶振原理 二 分类 三 晶体 crystal 与晶振 oscillator 四 有源晶振 五 无源晶振 六 分频 七 倍频 八 预分频 九 后分频 十 晶振误差 十一 万用表如何测晶振 总结 一 晶
  • 怎么看待ChatGPT封号这件事呢?

    最近的ChatGPT大量封号 刷爆了全网 我的两个个人账号被封禁了 不知道大家最近有没有遇到相关的报错信息 要么就是检查你当前的浏览器配置 最后来一个access denied 要么直接就给你来一个当前的国家不支持 今天我们就来分析一下背后
  • SpringCloud超详细教程

    1 认识微服务 随着互联网行业的发展 对服务的要求也越来越高 服务架构也从单体架构逐渐演变为现在流行的微服务架构 这些架构之间有怎样的差别呢 1 0 学习目标 了解微服务架构的优缺点 1 1 单体架构 单体架构 将业务的所有功能集中在一个项
  • 越界访问导致的死循环

    话不多说 上代码 include
  • 利用LiveGBS通过GB28181实现PC、手机WEB页面对监控摄像头直播以及语音对讲

    GB28181流媒体服务 具体介绍这边不多说 参考 https www liveqing com docs products LiveGBS html 国标设备语音对讲 支持语音对讲的设备 可以直接接入LiveGBS 这样就可以从控制中心和
  • Dubbo——Dubbo初识(1)

    背景 随着互联网的发展 网站应用的规模不断扩大 常规的垂直应用架构已无法应对 分布式服务架构以及流动计算架构势在必行 亟需一个治理系统确保架构有条不紊的演进 单一应用架构 当网站流量很小时 只需一个应用 将所有功能都部署在一起 以减少部署节