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 等),方便开发者根据需求进行配置。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/435262.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

了解独享IP的概念及其独特优势

在网络世界中,IP地址是用来识别和定位设备的标识符。独享IP是一种服务模式。使用代理服务器时,用户拥有一个不与其他用户共享的专用独立IP地址。与共享IP相比,独享IP为用户提供了更高的独立性和隐私保护。下面详细介绍独享IP的定义、工作原理…

SQL高可用优化-优化SQL中distinct和Where条件对索引字段进行非空检查语句

最近做一个需求,关于SQL高可用优化,需要优化项目中的SQL,提升查询效率。 SQL高可用优化 一、优化SQL包含distinct场景二、优化SQL中Where条件中索引字段是否为NULL三、代码验证1. NodeMapper2. NodeService3. NodeController4.数据库数据5.项…

【LLM大模型】Ollama 运行 GGUF 模型

Ollama 默认直接支持很多模型,只需要简单的使用 ollama run命令,示例如下: ollama run gemma:2b就可安装、启动、使用对应模型。 通过这样方式直接支持的模型我们可以通过https://ollama.com/library 找到。 在https://huggingface.co/mod…

Mac优化清理工具CleanMyMac X 4.15.6 for mac中文版

CleanMyMac X 4.15.6 for mac中文版下载是一款功能更加强大的系统优化清理工具,软件只需两个简单步骤就可以把系统里那些乱七八糟的无用文件统统清理掉,节省宝贵的磁盘空间。CleanMyMac X 4.15.6 for mac 软件与最新macOS系统更加兼容,流畅地…

启动 Ntopng 服务前需先启动 redis 服务及 Ntopng 常用参数介绍

启动Ntopng服务之前需要先启动redis服务,因为Ntopng服务依赖于redis服务的键值存储。 服务重启 服务启动 Ntopng常用参数: -d 将 Ntopng 进程放入后台执行。默认情况下,Ntop 在前台运行。 -u 指定启动Ntopng执行的用户,默认为…

算法:852.山脉数组的峰顶索引

题目 链接:leetcode链接 思路分析(二分算法) 题目的提示已经非常明显了,使用O(logN)的算法,那就是二分算法。 如何寻找二段性? 观察数据,可以发现,需要找的峰顶索引的左右两侧数…

LLM工程师启航:生成式AI简明教程

编者按: 大模型发展了近两年,Baihai IDP公众号也分享了近百篇LLM各环节的技术洞察,有前沿探讨、有落地实践、有应用经验。但回头来看,我们似乎从来没有认真、从0开始探讨过LLM的基本原理。 最近,一些企业客户和伙伴来询…

SLF4J报错log4j又报错

项目场景: 搭建一个spirngboot项目,启动运行时,SLF4J报错 解决后 ~ log4j又报错了。 问题描述 首先是SLF4J报错了,解决完SL4J报错问题后,再次启动项目,log4j又报错了 。。。 报错信息: SLF4J…

安卓13设置动态修改设置显示版本号 版本号增加信息显示 android13增加序列号

总纲 android13 rom 开发总纲说明 文章目录 1.前言2.问题分析3.代码分析4.代码修改5.编译6.彩蛋1.前言 设置 =》关于平板电脑 =》版本号 在这里显示了系统的一些信息,但是这里面的信息并不包含序列号之类的信息,我们修改下系统设置,在这里增加上相关的序列号。 2.问题分析…

excel导出图片---HSSFWorkbook--SXSSFWorkbook

1 概述 平时在工作中,excel导出图片经常会用到,但奈何HSSFWorkbook导出数据数量有限制问题,所以企业里大多都用SXSSFWorkbook格式,很少用HSSFWorkbook。所以今天以这两种格式分别记录下,图片的导出过程。 2 HSSFWork…

解决Qt每次修改代码后首次运行崩溃,后几次不崩溃问题

在使用unique_ptr声明成员变量后,我习惯性地在初始化构造列表中进行如下构造: 注意看,我将m_menuBtnGroup的父类指定为ui->center_menu_widget,这便是导致崩溃的根本原因,解决办法便是先用this初始化,后…

YOLOV8在清微智能芯片的部署与实现(一)

现在以YOLOV8 为例,进行演示 文章目录 1. YOLOV8浮点模型训练1.1 准备数据集1.1.1 下载业务数据集1.1.2 下载开源数据集1.1.3 自定义数据集1.1.4 将数据转换为yolo训练数据格式 1.2 yolov8项目准备1.3 训练模型 2. YOLOV8浮点模型推理2.1 模型推理2.2 模型val.py评…

uni-app进行微信小程序开发,快速上手

准备工作 IDE https://www.dcloud.io/hbuilderx.html 微信小程序开发工具 下载 / 稳定版更新日志 (qq.com) 安装流程 打开HBuilderX 点击这个logo打开终端 然后 下载一下终端插件 初始化一个demo 通过vue-cli命令行创建项目 uni-app官网 (dcloud.net.cn) (官…

【RocketMQ】SpringBoot整合RocketMQ

🎯 导读:本文档详细介绍了如何在Spring Boot应用中集成Apache RocketMQ,并实现消息生产和消费功能。首先通过创建消息生产者项目,配置POM文件引入RocketMQ依赖,实现同步消息发送,并展示了如何发送普通字符串…

02-指针代码示例

视频地址: 数组作为函数参数_哔哩哔哩_bilibili 指针是一个变量,用来存放其他变量的地址. 一、语法角度说: 需要用整形变量的指针,去存储一个整形变量的地址. 二、代码部分: (一) 1.指针赋值 int main(int argc, const char* argv[]) {int a;int* p;//这里要…

召回12 曝光过滤 Bloom Filter

在推荐系统中,如果用户看过某个物品,就不再把物品推荐给这个用户。小红书、抖音都这样做曝光过滤,原因是实验表明重复曝光同一个物品会损害用户体验。但也不是所有推荐系统都有曝光过滤,像 YouTube 这样的长视频就没有曝光过滤&am…

游戏如何对抗改包

游戏改包是指通过逆向分析手段及修改工具,来篡改游戏包内正常的设定和规则的行为,游戏包被篡改后,会被植入/剔除模块进行重打包。 本期图文我们将通过实际案例分析游戏改包的原理,并分享游戏如何应对改包问题。 安卓平台常见的改…

甄选范文“论软件的可靠性设计”,软考高级论文,系统架构设计师论文

论文真题 现代军事和商用系统中,随着系统中软件成分的不断增加,系统对软件的依赖性越来越强。软件可靠性已成为软件设计过程中不可或缺的重要组成部分。实践证明,保障软件可靠性最有效、最经济、最重要的手段是在软件设计阶段采取措施进行可靠性控制,由此提出了可靠性设计…

chsharp文件如何查找在unity中使用的 位置?

在 Unity 中,C 脚本文件(.cs 文件)被用于控制游戏对象的行为。要查找某个 C 文件在 Unity 项目中被使用的位置,你可以通过以下几种方法: 1. 查找依赖项(References) Unity 提供了一个工具&#…

Vue开发前端图片上传给java后端

前端效果图 图片上传演示 1 前端代码 <template><div><!-- 页面标题 --><h1 class"page-title">图片上传演示</h1><div class"upload-container"><!-- 使用 van-uploader 组件进行文件上传&#xff0c;v-model 绑…