项目架构介绍以及Spring cloud、redis、mq 等组件的基本认识

软件架构从单体架构到微服务架构的演变过程,可以清楚地看到技术和业务需求如何推动架构的演进。这里分步走过这个演变历程:

一、单体架构

单体架构(Monolithic Architecture)是传统的软件开发架构,其中应用的所有功能组件如数据访问层(Data Access Layer)、业务逻辑层(Business Logic Layer)和表现层(Presentation Layer)都是集中在单个程序或服务器上进行构建和运行的。这种架构风格简单、直观,是许多小型到中等规模的应用程序的首选架构。

单体架构的优点:

  1. 简化开发和部署:由于所有的服务组件都集中在一个应用程序中,开发、构建和部署过程比较简单直接,通常只需要一个开发环境和部署步骤。
  2. 容易测试:所有的功能在同一个应用中,可以在一个进程内进行集成测试,无需处理多个服务之间的交互。
  3. 初始成本较低:在项目初期,单体架构可以快速启动和运行,对于初创公司或是快速验证概念(Proof of Concept)非常有利。

单体架构的缺点:

  1. 扩展性受限:当应用需要处理更高的用户负载时,单体应用的整体扩展性受限,尤其是在处理多任务和高并发情况下。
  2. 维护困难:随着业务逻辑的增长和代码基础的扩大,单体应用的维护会变得越来越复杂。更新一部分可能需要整个应用重新部署。
  3. 技术依赖性:单体架构往往限制了使用新技术或框架的灵活性,因为引入新技术可能需要重构整个应用。

二、集群架构(Clustered Architecture)

集群架构通过在多台服务器上运行同一应用程序的副本,以提高应用的可用性和负载能力。这种架构通常涉及到负载均衡器,用于分配到各个服务器的请求。

集群架构的优点:

  1. 提高可用性:如果一个服务器节点失败,其他节点可以接管,从而保持应用的可用性。
  2. 扩展处理能力:通过增加更多的服务器节点,可以提高处理请求的能力。

集群架构的缺点:

  1. 维护复杂性:管理多个服务器节点和确保数据一致性增加了维护的复杂性。
  2. 资源冗余:每个节点都运行应用的完整副本,可能会造成资源的冗余使用。

三、分布式架构(Distributed Architecture)

分布式架构将应用分散到多个计算单元或服务上,每个单元处理应用的一部分功能,这些单元可以分布在多个网络或地理位置上。

分布式架构的优点:

  1. 高扩展性:应用的各个部分可以独立扩展,适应不同的需求和负载。
  2. 专业优化:可以针对特定服务进行优化,如专门优化数据库性能或应用缓存。

分布式架构的缺点:

  1. 复杂的系统设计:需要处理网络延迟、分布式数据管理等问题。
  2. 监控和管理挑战:监控和管理跨多个服务或位置的应用更加困难。

四、微服务架构(Microservices Architecture)

微服务架构将应用程序分解为一系列小服务,每个服务执行应用的一小部分功能,并可以独立开发、部署和扩展。

微服务架构的优点:

  1. 灵活的开发和部署:服务的独立性使得团队可以独立开发、部署和扩展各自的服务。
  2. 故障隔离:单个服务的失败不会影响到整个应用的其他部分。
  3. 技术多样性:各个服务可以采用最适合其需求的技术和语言。

微服务架构的缺点:

  1. 系统复杂度:管理多个服务增加了系统的复杂性,需要更多的协调和技术投入。
  2. 性能开销:服务间的通信可能会增加系统的延迟。
  3. 数据一致性:维护跨服务的数据一致性是一个常见挑战。

从单体架构到微服务架构,每种架构都有其适用场景和优缺点,关键在于根据项目的具体需求和团队的能力来选择合适的架构方式。

五、Spring Cloud 与 微服务

Spring Cloud 是一组多种微服务相关的工具的集合,旨在简化分布式系统的开发、部署和运维。Spring Cloud 提供了在云端运行的微服务应用所需的配置管理、服务发现、断路器、智能路由、微代理、控制总线、一次性令牌、全局锁、领导选举以及分布式会话等功能。

作用:

  • 服务发现与注册:在微服务架构中,各个服务实例需要被动态发现和注册。Spring Cloud 使用 Netflix Eureka 或 Spring Cloud Consul 实现服务的自动注册和发现。
  • 配置管理:Spring Cloud Config 为微服务应用中的所有环境提供服务器和客户端的支持,使得配置外部化和集中化,便于管理。
  • 路由与过滤:Spring Cloud Gateway 提供智能路由,可以根据请求信息决定将请求路由到哪个服务。
  • 断路器:Spring Cloud Circuit Breaker(Hystrix 的继承者)提供了断路器支持,帮助服务在可能的失败点实施隔离机制,防止故障扩散。

不同的 Spring Cloud 系列工具在不同微服务支持场景下的应用和对应的技术。这些工具被归类为 Spring Cloud 标准、Spring Cloud Netflix 和 Spring Cloud Alibaba 三大类。下面分别对这三类进行介绍:

1. Spring Cloud 标准
  • 服务注册/发现Eureka,一个AWS开发的服务发现工具,现广泛用于服务的注册与自动发现。
  • 服务调用OpenFeign,一个声明式的Web服务客户端,简化了REST服务的调用。
  • 配置中心Spring Cloud Config,为微服务架构中的服务提供集中化的外部配置支持。
  • 服务网关Spring Cloud Gateway,一个建立在Spring Framework 5、Project Reactor 和 Spring Boot 2之上的网关服务。
  • 负载均衡Spring Cloud LoadBalancer,是一个客户端负载均衡的解决方案,用于替代传统的Ribbon。
2. Spring Cloud Netflix
  • 服务注册/发现Eureka
  • 服务调用Feign
  • 配置中心Archaius,虽然不如Spring Cloud Config流行,但提供动态类型安全的配置管理。
  • 服务网关Zuul,提供路由及服务器端的负载均衡功能。
  • 负载均衡Ribbon,一种客户端负载均衡器,可以在客户端配置负载均衡算法。
3. Spring Cloud Alibaba
  • 服务注册/发现Nacos,一个更现代化的服务发现和配置管理平台,支持Kubernetes。
  • 服务调用Dubbo,一种高性能的Java RPC框架。
  • 配置中心Nacos
  • 服务网关Spring Cloud Gateway
  • 负载均衡Dubbo

每个组件都是专门设计来解决微服务架构中的一类特定问题,例如服务发现、配置管理、服务间调用、路由转发以及负载均衡等。通过这样的组件化设计,开发者可以根据具体需求选择适合的组件来构建稳定高效的微服务系统。

在实际使用中,根据项目需求和团队的熟悉程度,可以选择使用 Spring Cloud 标准工具、Netflix套件或是Alibaba套件中的组件来实现项目架构。比如,如果是在阿里云平台上,可能会优先选择 Spring Cloud Alibaba;而在需要与Netflix技术栈兼容的场合,则可能会使用 Spring Cloud Netflix

六、Redis 与 读写分离、冷热分离架构

Redis(Remote Dictionary Server)是一个开源的、基于内存的高性能键值数据库和数据结构服务器,由 Salvatore Sanfilippo 创造并首次发布于 2009 年。它通常被用作数据库、缓存和消息代理,并支持多种类型的数据结构如字符串、散列、列表、集合、有序集合与范围查询、位图、超日志和地理空间索引。

  1. 性能极高:Redis 将所有数据存放在内存中,访问速度极快,能够支持每秒数十万次的读写操作,非常适合需要高速读写的场景。

  2. 丰富的数据类型:Redis 不仅仅支持简单的键值类型,还支持列表、集合、有序集合等复杂数据类型,这使得 Redis 不仅可以用作简单的缓存,还能够用于支持复杂的数据结构操作。

  3. 持久性选项:Redis 提供了多种持久化选项,如 RDB(Redis Database)和 AOF(Append Only File)来满足不同级别的数据安全需求。

    • RDB:在指定的时间间隔内生成内存数据的快照存储在硬盘上。
    • AOF:记录每个写操作指令,这些指令会在服务器启动时被重新执行以重建数据。
  4. 事务支持:Redis 通过 MULTI、EXEC、WATCH 等命令支持事务,可以将多个命令打包后原子性执行。

  5. 高可用性和分布式支持:Redis Sentinel 提供高可用性,通过监控、通知和自动故障转移。而 Redis Cluster 提供自动分片和数据复制的分布式实现。

  6. 发布/订阅消息系统:Redis 支持发布/订阅模式,这使得它可以用作消息交换系统。

  7. Lua 脚本支持:Redis 支持通过 Lua 脚本进行原子操作,这意味着可以用脚本来处理复杂的逻辑,确保在执行过程中不被其他命令打断。

  8. 丰富的客户端支持:Redis 有广泛的开源客户端支持,包括但不限于 Java、Python、PHP、C#、JavaScript 等。

读写分离架构中的集成

在读写分离架构中,Redis 和消息队列的作用尤为重要:

  • Redis 可以用于缓存数据库读取操作的结果,减轻主数据库的读取压力,提高读取效率。此外,Redis 还可以暂存写操作产生的数据变化,异步更新到从数据库。
  • 消息队列 可以用于管理和优化数据同步过程。写操作完成后,相关更新可以通过消息队列传递到从数据库,从而异步执行数据更新,确保主从数据库的最终一致性,同时减少对主数据库的压力。
冷热分离架构中的集成

在冷热分离架构中,Redis 和消息队列同样发挥着重要作用:

  • Redis 作为热数据的存储介质,可以快速响应频繁的查询请求。温数据和冷数据可以存储在成本更低的存储系统中,如硬盘或云存储。
  • 消息队列 可以协调和管理数据从热到温,再到冷的迁移过程。例如,可以设置数据生命周期策略,当数据访问频率降低到某一阈值时,自动通过消息队列触发数据迁移过程。

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

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

运维工具之docker入门

1.容器与docker 1.什么是容器? 容器是一种轻量级的,可移植的软件运行环境。它将软件程序本身及软件依赖库打包在一起。可以在不同平台和系统上运行。 2.什么是LXC LXC就是Linux container,。LXC是一种虚拟化技术,可以在操作系统层级上为应…

Ubuntu系统安装NVIDIA驱动、CUDA、PyTorch等GPU深度学习环境

学习目标: 在Ubuntu系统上安装CUDA、PyTorch等GPU深度学习环境,主要目标是为深入研究深度学习和深度强化学习提供高效的计算支持。通过构建GPU环境,计划掌握深度学习的基本概念和算法应用,提高模型训练效率,特别是在复…

地理信息科学专业想搞GIS开发:学前端还是后端?

地理信息科学专业的同学是学前端开发比较好呢还是学后端开发比较好呢? 部分网友:学前端更好 主修前端更好,因为地信学后端,是卷不赢学计算机的 本科卷前端,硕士阶段可以卷后端 甚至有网友直呼,地信根本没有…

软件测试学习笔记丨Flask框架-请求与响应

本文转自测试人社区,原文链接:https://ceshiren.com/t/topic/23408 请求方法 from flask import Flaskapp Flask(__name__)app.route("/cases", methods["get"]) def get_case():return {"code": 0, "msg": &…

你敢想象吗?我能远程控制家里的电脑进入Bios

老家的爸妈用电脑也不知怎的,偶尔就不行了。这个偶尔还挺频繁的,我自己又会修电脑,但奈何距离太远!如果叫别人上门修电脑,一次就是200…… 我的心在滴血啊在滴血~如果有这么一款产品,就算电脑无…

基于STM32的温湿度监测器教学

引言 随着科技的发展,温湿度监测在农业、仓储、环境监测等领域的应用越来越广泛。本文将指导您如何基于STM32开发一个简单的温湿度监测器,使用常用的DHT11或DHT22传感器进行数据采集,并将监测结果显示在LCD或OLED屏幕上。 项目名称 STM32温湿…

科研绘图系列:R语言组合堆积图(stacked plot)

文章目录 介绍加载R包数据数据预处理画图1画图2组合图形系统信息介绍 堆积图(Stacked Chart),也称为堆叠图,是一种常用的数据可视化图表,主要用于展示不同类别的数据量在总体中的分布情况。堆积图可以是柱状图、条形图或面积图的形式,其中各个类别的数据量被叠加在一起,…

红黑树的平衡之舞:数据结构中的优雅艺术

文章目录 前言🚀一、红黑树的介绍1.1 红黑树的概念1.2 红黑树的特点1.3 红黑树的性质 🚀二、红黑树结点的定义🚀三、红黑树的框架🚀四、旋转操作🚀五、红黑树的插入操作5.1 uncle结点存在且为红5.2 uncle结点不存在或者…

ONLYOFFICE 8.2版本产品评测——遥遥领先,助力自动化办公

ONLYOFFICE 产品测试体验报告总结 知孤云出岫-CSDN博客 目录 产品介绍——篇【1】 一.关于 ONLYOFFICE 桌面编辑器 二.关于 ONLYOFFICE 协作空间 三.关于 ONLYOFFICE 文档 四.关于 ONLYOFFICE的版本介绍 产品新功能——篇【2】 一.关于 ONLYOFFICE的新增功能介绍 二.ONL…

【Linux驱动开发】通过设备树节点来配置和调用GPIO(pinctrl节点和gpio-controller)

【Linux驱动开发】通过设备树节点来配置和调用GPIO(pinctrl节点和gpio-controller) 文章目录 设备树下pinctrl节点GPIO控制节点调用方法GPIO输入附录:嵌入式Linux驱动开发基本步骤开发环境驱动文件编译驱动安装驱动自动创建设备节点文件 驱动…

【Linux】安装 SQL Server 命令行工具 mssql-tools18(Ubuntu 22.04)

引言 mssql-tools18 是一个包含 Microsoft SQL Server 命令行工具的软件包。这些工具包括 sqlcmd 和 bcp。 sqlcmd 是一个允许你用命令行与 SQL Server 进行交互的工具。你可以用它来运行 SQL 脚本,执行数据库维护任务,以及进行其他数据库管理操作。 b…

库存管理内训课件|39页PPT

文件是一份关于库存管理的内训课件,内容涵盖了库存管理的定义、分类、作用、存在的问题、管控目标以及具体管控措施。以下是对课件内容的总结: 1. 定义及分类 库存:为满足未来需求而暂时闲置的有价值的资源,与物品是否处于运动状…

大零售时代下融合发展的新路径:定制开发技术的应用与思考

摘要:本文探讨在大零售背景下,传统零售边界模糊,融合成为趋势。分析大零售包含的跨行业跨业态融合等三个层面,重点阐述定制开发技术中的 21 链动模式、AI 智能名片和 S2B2C 商城小程序在推动大零售发展中的作用和意义,…

OceanBase 安装使用详细说明

OceanBase 安装使用详细说明 一、系统环境要求二、安装OceanBase环境方案一:在线下载并安装all-in-one安装包方案二:离线安装all-in-one安装包安装前的准备工作三、配置OceanBase集群编辑配置文件部署和启动集群连接到集群集群状态和管理四、创建业务租户和数据库创建用户并赋…

基于LabVIEW应用ARINC 429板卡实现数据通讯——(下篇)

五、基于LabVIEW实现数据通讯 基于LabVIEW实现429板卡的数据通讯是调用API 动态链接库文件来实现的。该文件中有许多的板卡操作函数,在调用板卡中必须按照一定的函数调用流程来操作板卡,否则极易出现板卡操作错误。 1、API函数的调用步骤 API函数的调…

Android Studio打包时不显示“Generate Signed APK”提示信息

Android Studio打包时,默认显示“Generate Signed APK”提示信息,如下图所示: 如果在打包时不显示“Generate Signed APK”提示信息,解决办法是: Android Studio菜单栏,“File->Settings->Appearan…

典型的列转行(sparkSQL)

数据 id,username,math,computer,english 1,huangbo,34,58,58 2,xuzheng,45,87,45 3,wangbaoqiang,76,34,89 编写 SQL,将其转换为下面这张表 id,username,course,score 1,huangbo,math,34 1,huangbo,computer,58 1,huangbo,english,58 2,xuzheng,math,45 2,xuzheng,…

42python数据分析numpy基础之trace计算对角线元素的和

python的numpy库的trace()函数,计算对角线元素的和。 用法 numpy.trace(a, offset0, axis10, axis21, dtypeNone, outNone)描述 numpy.trace(a),返回数组a的对角线元素的和。 入参 a:必选,数组,列表,元…

信息安全工程师(68)可信计算技术与应用

前言 可信计算技术是一种计算机安全体系结构,旨在提高计算机系统在面临各种攻击和威胁时的安全性和保密性。 一、可信计算技术的定义与原理 可信计算技术通过包括硬件加密、受限访问以及计算机系统本身的完整性验证等技术手段,确保计算机系统在各种攻击和…

深度测评 ONLYOFFICE 文档 8.2 版本:革新与体验的双重提升

目录 深度测评 ONLYOFFICE 文档 8.2 版本:革新与体验的双重提升引言协作编辑功能的革新PDF 表单签名的创新界面设计的全面提升性能与稳定性的双重优化文档编辑器的新功能电子表格的强大新特性演示文稿的创意增强RTL 支持与本地化的关注更多实用改进用户体验的持续提…