当前位置: 首页 > news >正文

Dubbo快速入门(一):分布式与微服务、Dubbo基本概念

文章目录

  • 一、分布式与微服务概念
    • 1.大型互联网架构目标
    • 2.集群和分布式
      • (1)集群 (Cluster)
      • (2)分布式计算 (Distributed Computing)
      • (3)集群与分布式的关系
      • (4)实践中的应用案例
    • 3.架构演进
      • (1)单体架构
      • (2)垂直架构
      • (3)分布式架构
      • (4)SOA架构
      • (5)微服务架构
  • 二、Dubbo基本概念
    • 1. 核心组件
    • 2. 工作流程
    • 3. 主要特性

一、分布式与微服务概念

1.大型互联网架构目标

  • 传统项目和互联网项目的区别:
    传统项目用户:企业员工
    互联网项目:网民

在互联网时代,随着用户基数的急剧增长和技术的不断进步,互联网项目与传统项目相比有了显著的区别。互联网项目主要面向广泛的网民群体,而传统项目则更多服务于特定的企业内部员工。因此,互联网项目更加注重用户体验,包括界面的美观度、功能的丰富性、加载的速度以及系统的稳定性。

用户体验: 关注美观、功能、速度、稳定性。

  • 衡量网站的性能指标:
    • 响应时间: 指执行一个请求从开始到最后收到响应数据所花费的总体时间。
    • 并发数: 指系统同时能处理的请求数量。
    • 并发连接数: 指的是客户端向服务器发起请求,并建立了TCP连接,每秒钟服务器连接的总TCP数量。
      • 请求数: 指每秒请求数(QPS)。请求数>=并发连接数
      • 并发用户数: 单位时间内有多少用户访问。
      • 吞吐量: 指单位时间内系统能处理的请求数量。
    • QPS: 每秒查询书。
    • TPS: 每秒事务数。一个事务是指一个客户机向服务器发送请求然后服务器做出反应以及客户机收到反应的过程。
    • 高性能: 提供快速的访问体验。
    • 高可用: 网站服务一直可以正常访问。
    • 可伸缩: 通过硬件增加/减少,提高/降低处理能力。
    • 高可扩展: 系统间耦合低,可以很方便地新增/移除功能/模块。
    • 安全性: 提供网站安全访问和数据加密,安全存储等策略。
    • 敏捷性: 随需应变,快速响应。

2.集群和分布式

在互联网架构中,为了实现上述目标,通常会采用集群和分布式计算的技术方案。通过集群,可以将多台服务器组合成一个整体来提供服务,从而达到负载均衡和故障冗余的目的。而分布式计算则是将任务分散到多台计算机上并行处理,进一步提高系统的处理能力和效率。

(1)集群 (Cluster)

集群是指一组协同工作的计算机节点,它们作为一个整体对外提供服务。集群技术主要用于解决单点故障问题,提高系统的可靠性和可用性,同时也能通过负载均衡来提升系统的处理能力。在互联网应用中,常见的集群类型包括:

  • Web服务器集群:通过负载均衡器将请求分发给多个Web服务器实例,以分散请求压力,提高响应速度。
  • 数据库集群:采用主从复制或多主复制模式,确保数据的一致性和可靠性,同时支持读写分离,增强数据库的处理能力。
  • 缓存集群:利用分布式缓存技术,如Redis Cluster或Memcached,加速数据读取速度,减轻后端数据库的压力。

(2)分布式计算 (Distributed Computing)

分布式计算是一种计算模型,其中多台计算机通过网络连接,共同完成一项任务。每台计算机称为节点,它们之间通过消息传递进行通信和协作。分布式计算的核心优势在于能够充分利用网络中各节点的计算资源,实现大规模数据处理和复杂任务的并行执行。在互联网架构中,分布式计算的应用非常广泛,例如:

  • 分布式文件系统:如Hadoop HDFS,用于存储海量数据,支持数据的高可靠性和高可扩展性。
  • 分布式数据库:如Cassandra和MongoDB,设计用于处理大规模数据集,支持水平扩展和高并发访问。
  • 分布式消息队列:如Kafka和RabbitMQ,用于异步处理数据流,实现系统间的解耦,提高系统的稳定性和响应速度。
  • 分布式计算框架:如Apache Spark和Flink,用于执行复杂的分析任务,支持实时数据处理和机器学习算法。

(3)集群与分布式的关系

虽然“集群”和“分布式”这两个术语经常被一起提及,但它们侧重的方面有所不同:

  • 集群更关注于如何将多台机器组织起来,共同提供服务,重点在于提高系统的可用性和性能。
  • 分布式则更强调如何将一个任务分解为多个子任务,由网络中的多个节点并行处理,重点在于数据的分布存储和计算任务的并行执行。

然而,在实际应用中,两者往往是相辅相成的。例如,在一个分布式系统中,为了提高系统的可用性和性能,通常会采用集群技术来部署关键组件,如Web服务器、数据库和缓存等。同样,一个集群系统也可能需要使用分布式计算技术来处理大规模数据和复杂任务。

(4)实践中的应用案例

  • 电商网站:在大型促销活动期间,电商平台需要处理巨大的流量。通过将Web服务器、数据库和缓存部署为集群,可以有效地分担请求压力,确保系统的稳定运行。同时,使用分布式消息队列处理订单和物流信息,可以提高系统的响应速度和处理能力。
  • 大数据平台:在处理PB级别的数据时,分布式文件系统和分布式计算框架是必不可少的工具。通过将数据切片存储在多台机器上,并利用MapReduce等算法并行处理数据,可以大幅缩短数据处理的时间。

3.架构演进

单体架构 -> 垂直架构 -> 分布式架构 -> SOA架构 -> 微服务架构

(1)单体架构

在这里插入图片描述

  • 单体架构: 把所有模块放在一起的应用。
    • 优点:开发和部署都简单方便
    • 缺点:项目启动型慢,可靠性差,扩展性、可维护性、可伸缩性都差,性能不好

(2)垂直架构

在这里插入图片描述

  • 垂直架构: 将单体架构中的多个模块拆分成多个独立的项目。
    • 优点:从一定程度上解决了单体结构可靠性差,扩展性、可维护性、可伸缩性都差,性能不好的问题。
    • 缺点:重复的功能太多。

(3)分布式架构

在这里插入图片描述

  • 分布式架构: 在垂直架构的基础上,将公共业务模块抽取出来,作为独立的服务,供其他调用者消费,以实现服务的共享和重用。通过RPC协议来进行服务彼此的调用。
    • 优点:解决了垂直架构重复功能太多的问题。
    • 缺点:服务提供方一旦产生变更,所有消费方都需要变更。

(4)SOA架构

在这里插入图片描述

  • SOA架构: SOA,即Service-Oriented Architecture,面向服务的架构,是一个组件模型,将应用程序拆分成不同的服务,并根据接口和契约将这些服务联系起来。
    • ESB:Enterprise Service Bus,企业服务总线,服务中介,主要是提供了一个服务于服务之间的交互。提供了负载均衡、流量控制、加密处理、服务监控、异常处理、监控报告等功能。

(5)微服务架构

  • 微服务架构: 在SOA上进行了升级。业务彻底地组件化和服务化,原有的单个业务系统拆分为多个可以独立开发、设计、运行的小应用。小应用之间通过服务完成交互和集成。
    • 特点:
      • 服务组件化,开发者可以自由选择开发技术,也不需要协调其他团队;
      • 服务间交互一般使用Rest API;去中心化,每个微服务都有自己私有的数据库持久化业务数据;
      • 各个微服务可以很方便很独立地自动化部署、测试、运维。

在这里插入图片描述

Dubbo是一种广泛使用的Java RPC框架,它诞生于SOA时代,而Spring Cloud则是微服务架构下的一套解决方案,它们分别代表了两个不同阶段的技术实践。

二、Dubbo基本概念

阿里巴巴公司开源的一个高性能、轻量级的Java RPC框架,后被Apache收购。

  • 架构:

在这里插入图片描述

Service Provider:服务提供者,负责实现业务逻辑并将服务注册到注册中心。
Registry:注册中心,管理服务提供者和消费者的地址列表及状态。
Service Consumer:服务消费者,通过注册中心发现服务并发起远程调用。

1. 核心组件

Dubbo 的架构主要包括以下几个核心组件:

  • Provider(服务提供者):暴露服务的服务提供方,负责实现服务,并将服务注册到注册中心。
  • Consumer(服务消费者):调用远程服务的服务消费方,通过注册中心发现服务,并发起远程调用。
  • Registry(注册中心):管理服务提供者和消费者的地址列表及状态,支持服务的动态注册与发现。常见的注册中心实现有 ZooKeeper、Nacos 等。
  • Monitor(监控中心):收集服务调用的统计信息,如调用次数、成功率、平均耗时等,用于服务治理和性能优化。
  • Container(容器):服务运行的容器,如 Spring 容器、Jetty 容器等,负责启动和管理服务提供者和消费者。

2. 工作流程

  1. 服务提供者启动

    • 服务提供者启动时,会将自身的服务地址和接口信息注册到注册中心。
    • 注册中心会维护一个服务提供者的列表,记录每个服务的地址、版本号等信息。
  2. 服务消费者启动

    • 服务消费者启动时,会从注册中心订阅所需的服务。
    • 注册中心会将服务提供者的地址列表推送给服务消费者,并在服务提供者列表发生变化时通知消费者。
  3. 服务调用

    • 服务消费者通过本地代理对象(Stub)调用远程服务。
    • 本地代理对象通过网络将请求发送到服务提供者。
    • 服务提供者接收到请求后,执行业务逻辑并返回结果。
    • 结果通过网络返回给服务消费者,服务消费者通过本地代理对象获取到结果。
  4. 监控

    • 监控中心会收集服务调用的统计信息,如调用次数、成功率、平均耗时等。
    • 监控中心可以用于服务治理和性能优化,帮助管理员及时发现和解决问题。

3. 主要特性

  • 透明化的远程方法调用:开发者只需编写本地方法调用的代码,无需关心底层的网络通信细节。
  • 智能容错和负载均衡:Dubbo 提供了多种负载均衡策略(如随机、轮询、最少活跃调用数等),并在服务调用失败时自动切换到其他服务提供者。
  • 服务自动注册与发现:服务提供者和消费者通过注册中心进行服务的注册和发现,简化了服务的管理和维护。
  • 高性能:Dubbo 使用 Netty 作为网络通信框架,支持高效的异步非阻塞 I/O 操作。
  • 丰富的配置管理:支持多种配置方式(如 XML、注解、API 等),方便开发者根据需求进行配置。

相关文章:

Dubbo快速入门(一):分布式与微服务、Dubbo基本概念

文章目录 一、分布式与微服务概念1.大型互联网架构目标2.集群和分布式(1)集群 (Cluster)(2)分布式计算 (Distributed Computing)(3)集群与分布式的关系(4)实践中的应用案例 3.架构演…...

jmeter性能测试---csv数据文件设置

(1)什么时候使用CSV数据文件设置? 当不同的用户,或者同一用户多次循环时,都可以获取到不同的值 (2)使用CSV数据文件设置进行参数化的步骤? 实例: 请求:htt…...

交换基础【计算机网络】

交换基础 1、交换机的工作原理有哪4项操作,地址表如何建立的? 4项基本操作 丢弃 当本端口下的主机访问已知本端口下的主机时丢弃 转发 当某端口下的主机访问已知某端口下的主机时转发 扩散 当某端口下的主机访问未知端口下的主机时要扩散 广播 当某…...

Android12的netd分析

1.文件位置 system/netd/server/目录下的main.cpp和Android.bp 可知编译会生成netd的可执行程序。 2.main函数的流程 int main() {Stopwatch s; 。。。。。。。 // 启动NetlinkManager服务NetlinkManager *nm NetlinkManager::Instance();if (nm nullptr) {ALOGE("Una…...

OpenCV图像文件读写(6)将图像数据写入文件的函数imwrite()的使用

操作系统:ubuntu22.04 OpenCV版本:OpenCV4.9 IDE:Visual Studio Code 编程语言:C11 算法描述 将图像保存到指定的文件中。 函数 imwrite 将图像保存到指定的文件中。图像格式是根据文件名扩展名选择的(参见 cv::imread 获取扩展…...

JVM(HotSpot):方法区(Method Area)

文章目录 一、内存结构图二、方法区定义三、内存溢出问题四、常量池与运行时常量池 一、内存结构图 1.6 方法区详细结构图 1.8方法区详细结构图 1.8后,方法区是JVM内存的一个逻辑结构,真实内存用的本地物理内存。 且字符串常量池从常量池中移入堆中。 …...

JWT的基础与使用

JWT(JSON Web Token) 是一种用于在各方之间传输信息的紧凑、安全的方式,常用于身份验证和授权。它以令牌的形式将用户信息编码后传输,可以确保数据的完整性和安全性。 1.JWT的结构 JWT 是一个基于 JSON 的令牌,由三部…...

处理 VA02修改行项目计划行(SCHEDULE LINES )报错:不可能确定一个消耗帐户

用户修改销售订单行项目 计划行(SCHEDULE LINES) ,从 “CN”改为“CB”时候发生报错提示:不可能确定一个消耗帐户。 Not possible to determine a consumption account Message No. 06138 Diagnosis The system was not able to determine a consumpti…...

【AI基础】pytorch lightning 基础学习

传统pytorch工作流是首先定义模型框架,然后写训练和验证,测试循环代码。训练,验证,测试代码写起来比较繁琐。这里介绍使用pytorch lightning 部署模型,加速模型训练和验证,记录。 准备工作 1 安装pytorch…...

高通量测序技术--组蛋白甲基化修饰、DNA亲和纯化测序,教授(优青)团队指导:从实验设计、结果分析到SCI论文辅助

组蛋白甲基化修饰工具(H3K4me3 ChIP-seq)组蛋白甲基化类型也有很多种,包括赖氨酸甲基化位点H3K4、H3K9、H3K27、H3K36、H3K79和H4K20等。组蛋白H3第4位赖氨酸的甲基化修饰(H3K4)在进化上高度保守,是被研究最多的组蛋白修饰之一。 DNA亲和纯化测序 DNA亲…...

[极客大挑战 2019]RCE ME1

<?php error_reporting(0); if(isset($_GET[code])){$code$_GET[code];if(strlen($code)>40){die("This is too Long.");}if(preg_match("/[A-Za-z0-9]/",$code)){die("NO.");}eval($code); } else{highlight_file(__FILE__); }// ?>…...

计算机毕业设计 中医院问诊系统的设计与实现 Java实战项目 附源码+文档+视频讲解

博主介绍&#xff1a;✌从事软件开发10年之余&#xff0c;专注于Java技术领域、Python人工智能及数据挖掘、小程序项目开发和Android项目开发等。CSDN、掘金、华为云、InfoQ、阿里云等平台优质作者✌ &#x1f345;文末获取源码联系&#x1f345; &#x1f447;&#x1f3fb; 精…...

FME辅助规划选址

1.需求&#xff1a;新建运动场馆 用地需求&#xff1a;至少1km*2km 找到符合要求的储备地块 2.已有资源&#xff1a;储备用地 现在城市地块储备比较充足&#xff0c;但都是不规则地块 找出可以建大型场馆的地块 3.问题分析 图斑内部可以放下1000*2000的矩形 4.解决思路…...

Unity中的GUIStyle错误:SerializedObject of SerializedProperty has been Disposed.

一运行就循环打印这个报错&#xff0c; 解决办法&#xff0c;每次改参数之后在HIerarchy中手动保存&#xff0c;就会停止循环打印&#xff0c;style中的字体也显示出来了&#xff0c; 或者 直接换个低版本的...

实战篇 | WSL迁移Linux系统到非系统盘(完整实操版)

1. 操作步骤 1.1 确认要导出的Linux系统是否存在&#xff08;可跳过&#xff09; # 终端命令 # 查看通过WSL安装的Linux系统列表 wsl -l1.2 导出Linux系统为tar包 # 终端命令 # 格式&#xff08;过&#xff09; wsl --export <Distribution Name> <File Name> #…...

增量式编码器实现原理

目录 概述 1 认识增量式编码器 1.1 概述 1.2 增量式编码器的特性 1.3 编码器的硬件 2 增量式编码器实现原理 2.1 编码器信号 2.2 正反转判断 概述 本文主要介绍增量式编码器实现原理&#xff0c;包括增量式编码器的特性&#xff0c;信号特性&#xff0c;以及如何使用编…...

数据集-目标检测系列-口罩检测数据集 mask>> DataBall

数据集-目标检测系列-口罩检测数据集 mask>> DataBall 数据集-目标检测系列-口罩检测数据集 mask 数据量&#xff1a;1W DataBall 助力快速掌握数据集的信息和使用方式&#xff0c;享有百种数据集&#xff0c;持续增加中。 数据项目地址&#xff1a; gitcode: https…...

工作安排 - 华为OD统一考试(E卷)

2024华为OD机试(C卷+D卷)最新题库【超值优惠】Java/Python/C++合集 题目描述 小明每周上班都会拿到自己的工作清单,工作清单内包含n项工作,每项工作都有对应的耗时时长(单位h)和报酬,工作的总报酬为所有已完成工作的报酬之和。那么请你帮小明安排一下工作,保证小明在指定…...

STM32 GPIO - 笔记

1 STM32的GPIO是漏还是源 在 STM32 微控制器中,GPIO(通用输入/输出)引脚既可以配置为漏极开路输出(Open-Drain)模式,也可以配置为推挽输出(Push-Pull)模式。因此,GPIO 引脚既可以作为“漏”(吸电流,Open-Drain),也可以作为“源”(供电流,Push-Pull)来使用。 GP…...

三篇文章速通JavaSE到SpringBoot框架 (中) IO 进程线程 网络编程 XML MySQL JDBC相关概念与演示代码

文章目录 IOfile类的作用I/O的作用将上篇文章综合项目使用IO流升级所需知识点 进程 线程创建线程的三种方式 网络编程网络编程介绍IP地址端口号网络通信协议网络通信协议的分层演示代码 XMLXML的作用是什么&#xff1f;xml特点 注解什么是注解&#xff1f;注解的使用注解的重要…...

Linux下的基本指令/命令(二)

热键 Tab&#xff1a; 连点两次 对命令进补齐 或者 显式 以目前所需字母 开头的指令。 也可以进行路径补齐 或者 显示所写的文件所处路径上的所有文件。 如果什么也没写&#xff0c;直接按Tab会显示所有命令 Ctrl C&#xff1a; 一旦出现失控的状态&#xff0c;或者任何无法…...

CentOs-Stream-9 设置静态IP外网访问

CentOs-Stream-9 设置静态IP&#xff0c;实现外网访问。这里面有些需要注意的地方&#xff0c;比如IP网段跟我们的宿主机不一样&#xff0c;需要查看具体的网络适配器网段&#xff0c;这样可以快速实现网络互通&#xff1b;另外它的网络配置文件也是不一样的。网络适配器对应的…...

精密制造的革新:光谱共焦传感器与工业视觉相机的融合

在现代精密制造领域&#xff0c;对微小尺寸、高精度产品的检测需求日益迫切。光谱共焦传感器凭借其非接触、高精度测量特性脱颖而出&#xff0c;而工业视觉相机则以其高分辨率、实时成像能力著称。两者的融合&#xff0c;不仅解决了传统检测方式在微米级别测量上的局限&#xf…...

边缘计算与 Python Web 应用:从理论到实践

边缘计算与 Python Web 应用&#xff1a;从理论到实践 目录 &#x1f310; 边缘计算基础 1.1 边缘计算的概念与云计算的区别1.2 边缘计算在物联网&#xff08;IoT&#xff09;与实时应用中的作用 &#x1f5a5;️ Python 在边缘设备上的部署 2.1 在 Raspberry Pi、Jetson Nan…...

华为OD机试真题------分糖果

题目描述&#xff1a; 小明从糖果盒中随意抓一把糖果&#xff0c;每次小明会取出一半的糖果分给同学们。当糖果不能平均分配时&#xff0c;小明可以选择从糖果盒中&#xff08;假设盒中糖果足够&#xff09;取出一个糖果或放回一个糖果。小明最少需要多少次&#xff08;取出、放…...

Kotlin:变量声明,null安全,条件语句,函数,类与对象

目录 一&#xff0c;变量声明 1.1 var和val 1.2 类型推断 1.3 Null安全 1.3.1 处理可为null性 二&#xff0c;条件语句 2.1条件语句与条件表达式 2.2 智能类型转换 三&#xff0c;函数 3.1 简化函数声明 3.2 匿名函数 3.3 高阶函数 四&#xff0c;类与对象 4.1 构…...

C--结构体和位段的使用方法

各位看官如果您觉得这篇文章对您有帮助的话 欢迎您分享给更多人哦 感谢大家的点赞收藏评论&#xff0c;感谢您的支持&#xff01;&#xff01;&#xff01; 一&#xff1a;结构体 首先结构体我们有一个非常重要的规则 非常重要&#xff1a; 我们允许在初始化时自动将字符串字面…...

卷积神经网络-迁移学习

文章目录 一、迁移学习1.定义与性质2.步骤 二、Batch Normalization&#xff08;批次归一化&#xff09;三、ResNet网络1.核心思想2.残差结构&#xff08;1&#xff09;残差块&#xff08;2&#xff09;残差结构类型 四、总结 一、迁移学习 迁移学习&#xff08;Transfer Lear…...

数据库:PL/SQL

变量 变量 建议使用V开头 作用: 用来保存一个数据 普通变量 declare --定义一个变量&#xff08;保存一个数据&#xff09; v_email varchar2(20); --定义变量并且赋值 v_ename varchar2(20) :张三; beginv_email :553215qq.com;dbms_output.put_line(v_email);dbms_output…...

迅雷笔试 最长相等子段数列长度 滑动窗口

&#x1f468;‍&#x1f3eb; 牛马Code&#xff1a;最长相等子段数列长度 import java.io.BufferedReader; import java.io.InputStreamReader; import java.util.Arrays; import java.util.HashMap;public class Main {// 创建一个输入流读取器&#xff0c;用于读取控制台输…...