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

SpringCloud篇 微服务架构

1. 工程架构介绍

1.1 两种工程架构模型的特征

1.1.1 单体架构

上面这张图展示了单体架构(Monolithic Architecture)的基本组成和工作原理单体架构是一种传统的软件架构模式,其中所有的功能都被打包在一个单一的、紧密耦合的应用程序中

下面对图中各部分的详细解释:

  1. Application(应用程序)

    • 这是整个系统的中心,包含了所有的业务逻辑和用户界面。

    • 用户通过应用程序与系统进行交互,应用程序则负责处理用户请求并返回相应的结果。

  2. Admin、User、Goods等模块

    • 这些模块代表了应用程序中的不同功能部分。

    • Admin(管理模块):可能包含用户管理、权限管理、系统设置等功能。

    • User(用户模块):处理用户相关的操作,如注册、登录、个人信息管理等。

    • Goods(商品模块):管理商品信息,包括添加、修改、删除商品等。

    • 这些模块虽然在同一个应用程序中,但它们之间可能存在一定的耦合,因为它们共享相同的数据库和缓存资源。

  3. DB(数据库)

    • 数据库是单体架构中的核心数据存储组件。

    • 所有的模块都直接或间接地与数据库交互,以存储和检索数据。

    • 数据库的设计通常需要考虑所有模块的需求,这可能导致数据库结构复杂且难以维护。

  4. Cache(缓存)

    • 缓存用于提高系统的响应速度和性能。

    • 它存储了频繁访问的数据,以减少对数据库的直接访问,从而减轻数据库的负担。

    • 在单体架构中,缓存通常由应用程序统一管理,所有模块都可以访问缓存中的数据。

  5. 单体架构的特点

    • 简单性:开发和部署相对简单,因为所有功能都在一个应用程序中。

    • 部署困难:随着应用程序规模的增长,部署和维护变得越来越困难,因为任何小的更改都可能需要重新部署整个应用程序。

    • 扩展性差:由于所有功能都紧密耦合在一起,扩展特定功能可能需要扩展整个应用程序。

    • 技术限制:整个应用程序通常使用相同的技术栈,这可能限制了使用不同技术优化特定功能的能力。

简单来说就是所有功能模块都集成在一个应用程序中共享数据库和缓存资源。这种架构在小型或简单的应用程序中可能非常有效,但在大型或复杂的系统中,它可能导致维护和扩展的方面有很大的挑战。


1.1.2 微服务架构

上面这张图展示了微服务架构(Microservices Architecture)的基本组成和工作原理。微服务架构是一种将应用程序分解为一组小服务的架构风格每个服务实现特定的业务功能并可以独立部署和扩展。

下面对图中各部分的详细解释:

  1. Gateway(网关)

    • 网关是用户访问系统的入口点。

    • 它负责接收用户请求,并将请求路由到相应的服务。

    • 网关还可以提供额外的功能,如认证、授权、请求日志记录等。

  2. Admin Service(管理服务)

    • 这是一个独立的微服务,负责管理相关的功能,如用户管理、权限管理等。

    • 它可以独立部署和扩展,以满足管理功能的需求。

  3. User Service(用户服务)

    • 这是另一个独立的微服务,负责处理与用户相关的功能,如用户注册、登录、个人信息管理等。

    • 它也可以独立部署和扩展,以满足用户功能的需求。

  4. Goods Service(商品服务)

    • 这是负责商品管理的微服务,包括商品的添加、修改、删除等操作。

    • 它可以独立部署和扩展,以满足商品管理的需求。

  5. ...... Service(其他服务)

    • 这表示系统中可能还有更多的微服务,每个服务负责不同的业务功能。

    • 每个服务都是独立的,可以独立部署和扩展。

  6. 微服务架构的特点

    • 独立性:每个服务都是独立的,可以独立开发、部署和扩展。

    • 灵活性:可以使用不同的技术栈来实现不同的服务,以满足特定的需求。

    • 可维护性:由于服务是独立的,修改一个服务不会影响其他服务,从而提高了系统的可维护性。

    • 可扩展性:可以根据需要独立扩展特定的服务,以满足业务需求。

简单来说就是一个网关接收用户请求,并将其分发到不同的服务。每个服务独立运行,负责不同的任务,比如管理、用户或商品。这种设计让系统更灵活、容易维护,但也需要处理服务间的通信和数据同步问题


2. 微服务架构组成与优点

2.1 使用微服务架构需要什么

微服务架构基础组件:

  1. 注册中心负责管理微服务的注册和发现。服务启动时会在注册中心注册自己的信息,其他服务可以通过注册中心查找并调用这些服务。

  2. 服务网关:作为系统的入口点,接收外部请求并路由到相应的微服务。它还可以处理认证、授权、限流等跨服务的公共功能。

  3. 微服务通信:指微服务之间的消息传递和数据交换。服务之间通过API调用、消息队列等方式进行通信。

  4. 链路追踪:用于监控和诊断微服务之间的请求路径和性能问题。它可以帮助追踪请求在服务间的流动,识别延迟和故障点。


2.2 使用微服务架构的优点

  1. 降低代码耦合:代码之间更独立,修改容易。

  2. 降低维护成本:系统更易维护,成本减少。

  3. 灵活扩容:根据需要轻松增加服务能力。

  4. 技术栈不受限:可以使用多种技术,更灵活。


 3. 使用微服务架构的原因

  1. 业务扩张快

    • 未来几年,业务会快速发展。

    • 微服务架构可以灵活应对快速变化的业务需求。

  2. 降低耦合

    • 业务复杂,可以拆分成多个独立服务。

    • 这样每个服务只负责一部分功能,减少相互依赖。

  3. 提高可靠性

    • 服务之间相互独立,一个服务出问题不会影响其他服务。

    • 这样整个系统的稳定性和可靠性更高。

相关文章:

SpringCloud篇 微服务架构

1. 工程架构介绍 1.1 两种工程架构模型的特征 1.1.1 单体架构 上面这张图展示了单体架构(Monolithic Architecture)的基本组成和工作原理。单体架构是一种传统的软件架构模式,其中所有的功能都被打包在一个单一的、紧密耦合的应用程序中。 …...

背包问题和单调栈

背包问题(动态规划) 动态五步曲 dp数组及下标索引的含义递推公式dp数组如何初始化遍历顺序打印dp数组 01背包:n种物品,有一个,二维数组遍历顺序可以颠倒,(滚动数组)一维数组遍历顺序不可颠倒…...

Java | CompletableFuture详解

关注:CodingTechWork CompletableFuture 概述 介绍 CompletableFuture是 Java 8 引入的一个非常强大的类,属于 java.util.concurrent 包。它是用于异步编程的一个工具,可以帮助我们更方便地处理并发任务。与传统的线程池或 Future 对比&…...

【背包问题】二维费用的背包问题

目录 二维费用的背包问题详解 总结: 空间优化: 1. 状态定义 2. 状态转移方程 3. 初始化 4. 遍历顺序 5. 时间复杂度 例题 1,一和零 2,盈利计划 二维费用的背包问题详解 前面讲到的01背包中,对物品的限定条件…...

Golang 并发机制-5:详解syn包同步原语

并发性是现代软件开发的一个基本方面,Go(也称为Golang)为并发编程提供了一组健壮的工具。Go语言中用于管理并发性的重要包之一是“sync”包。在本文中,我们将概述“sync”包,并深入研究其最重要的同步原语之一&#xf…...

实验六 项目二 简易信号发生器的设计与实现 (HEU)

声明:代码部分使用了AI工具 实验六 综合考核 Quartus 18.0 FPGA 5CSXFC6D6F31C6N 1. 实验项目 要求利用硬件描述语言Verilog(或VHDL)、图形描述方式、IP核,结合数字系统设计方法,在Quartus开发环境下&#xff…...

如何用微信小程序写春联

​ 生活没有模板,只需心灯一盏。 如果笑能让你释然,那就开怀一笑;如果哭能让你减压,那就让泪水流下来。如果沉默是金,那就不用解释;如果放下能更好地前行,就别再扛着。 一、引入 Vant UI 1、通过 npm 安装 npm i @vant/weapp -S --production​​ 2、修改 app.json …...

LabVIEW无人机航线控制系统

介绍了一种无人机航线控制系统,该系统利用LabVIEW软件与MPU6050九轴传感器相结合,实现无人机飞行高度、速度、俯仰角和滚动角的实时监控。系统通过虚拟仪器技术,有效实现了数据的采集、处理及回放,极大提高了无人机航线的控制精度…...

C++哈希表深度解析:从原理到实现,全面掌握高效键值对存储

目录 一、核心组件与原理 1. 哈希函数(Hash Function) 2. 冲突解决(Collision Resolution) 3. 负载因子(Load Factor)与扩容 二、C实现:std::unordered_map 1. 模板参数 2. 关键操作与复…...

Vue.js组件开发-实现字母向上浮动

使用Vue实现字母向上浮动的效果 实现步骤 创建Vue项目:使用Vue CLI来创建一个新的Vue项目。定义组件结构:在组件的模板中,定义包含字母的元素。添加样式:使用CSS动画来实现字母向上浮动的效果。绑定动画类:在Vue组件…...

自研有限元软件与ANSYS精度对比-Bar2D2Node二维杆单元模型-四连杆实例

目录 1、四连杆工程实例以及手算求解 2、四连杆的自研有限元软件求解 2.1、选择单元类型 2.2、导入四连杆工程 2.3、节点坐标定义 2.4、单元连接关系、材料定义 2.5、约束定义 2.6、外载定义 2.7、矩阵求解 2.8、变形云图展示 2.9、节点位移 2.10、单元应力 2.11、…...

04树 + 堆 + 优先队列 + 图(D1_树(D11_伸展树))

目录 一、基本介绍 二、伸展操作 1. 左右情况的伸展 2. 左左情况的伸展 3. 右左情况的伸展 4. 右右情况的伸展 三、其它操作 1. 插入 2. 删除 四、代码实现 一、基本介绍 伸展树是一种二叉搜索树,伸展树也是一种平衡树,不过伸展树并不像AVL树那…...

c语言练习题【数据类型、递归、双向链表快速排序】

练习1:数据类型 请写出以下几个数据的数据类型 整数 a a 的地址 存放a的数组 b 存放a的地址的数组 b的地址 c的地址 指向 printf 函数的指针 d 存放 d的数组 整数 a 的类型 数据类型是 int a 的地址 数据类型是 int*(指向 int 类型的指针) …...

SliverAppBar的功能和用法

文章目录 1 概念介绍2 使用方法3 示例代码 我们在上一章回中介绍了SliverGrid组件相关的内容,本章回中将介绍SliverAppBar组件.闲话休提,让我们一起Talk Flutter吧。 1 概念介绍 我们在本章回中介绍的SliverAppBar和普通的AppBar类似,它们的…...

五、定时器实现呼吸灯

5.1 定时器与计数器简介 定时器是一种通过对内部时钟脉冲计数来测量时间间隔的模块。它的核心是一个递增或递减的寄存器(计数器值)。如果系统时钟为 1 MHz,定时器每 1 μs 计数一次。 计数器是一种对外部事件(如脉冲信号&#xff…...

Elasticsearch的索引生命周期管理

目录 说明零、参考一、ILM的基本概念二、ILM的实践步骤Elasticsearch ILM策略中的“最小年龄”是如何计算的?如何监控和调整Elasticsearch ILM策略的性能? 1. **监控性能**使用/_cat/thread_pool API基本请求格式请求特定线程池的信息响应内容 2. **调整…...

【大模型理论篇】最近大火的DeepSeek-R1初探系列1

1. 背景介绍 这一整个春节,被DeepSeek-R1刷屏。各种铺天盖地的新闻以及老板发的相关信息,着实感受到DeepSeek-R1在国外出圈的震撼。 DeepSeek推出了新的推理模型:DeepSeek-R1-Zero 和 DeepSeek-R1。DeepSeek-R1-Zero 是一个在没有经过监督微调…...

【数据结构】(4) 线性表 List

一、什么是线性表 线性表就是 n 个相同类型元素的有限序列,每一个元素只有一个前驱和后继(除了第一个和最后一个元素)。 数据结构中,常见的线性表有:顺序表、链表、栈、队列。 二、什么是 List List 是 Java 中的线性…...

【C++ STL】vector容器详解:从入门到精通

【C STL】vector容器详解:从入门到精通 摘要:本文深入讲解C STL中vector容器的使用方法,涵盖常用函数、代码示例及注意事项,助你快速掌握动态数组的核心操作! 一、vector概述 vector是C标准模板库(STL&am…...

OpenAI推出Deep Research带给我们怎样的启示

OpenAI 又发新产品了,这次是面向深度研究领域的智能体产品 ——「Deep Research」,貌似被逼无奈的节奏… 在技术方面,Deep Research搭载了优化后o3模型并通过端到端强化学习在多个领域的复杂浏览和推理任务上进行了训练。因没有更多的技术暴露…...

GPT-OSS-20B参数调优实战:如何设置才能获得最佳生成效果

GPT-OSS-20B参数调优实战:如何设置才能获得最佳生成效果 1. 模型特性与调优基础 1.1 GPT-OSS-20B核心架构 GPT-OSS-20B作为OpenAI开源的重量级模型,采用混合专家架构(MoE)设计,总参数量210亿,其中活跃参数36亿。这种设计使其在…...

LrcHelper:如何为网易云音乐获取精准同步的双语歌词文件

LrcHelper:如何为网易云音乐获取精准同步的双语歌词文件 【免费下载链接】LrcHelper 从网易云音乐下载带翻译的歌词 Walkman 适配 项目地址: https://gitcode.com/gh_mirrors/lr/LrcHelper LrcHelper是一款专门针对网易云音乐平台设计的歌词文件获取工具&…...

终极指南:使用Refine和Ant Design快速构建专业列表页面

终极指南:使用Refine和Ant Design快速构建专业列表页面 【免费下载链接】refine 一个用于构建内部工具、管理面板、仪表盘和B2B应用程序的React框架,具有无与伦比的灵活性。 项目地址: https://gitcode.com/GitHub_Trending/re/refine Refine是一…...

小爱音箱改造AUX输入/输出全攻略:一个“几乎成功”的故事

前言很多朋友都想给小爱音箱增加AUX输入和输出功能,实现外接电视、电脑等音源,同时将音箱的声音输出到更大的外置音响系统。网上有很多改造教程,但普遍存在一个严重问题:只实现了单声道输入,浪费了硬件本身的立体声能力…...

【Python 面试突击 · 05】大厂高频面试题:从数据结构到并发编程深度解析

目录 1. 简述下 Python 中的字符串、列表、元组和字典 2. 深拷贝和浅拷贝概念理解 3. 为什么其他语言还要保留红黑树?不都直接用 hashTable? 4. 在 Python 中,进程和线程的区别? 5. Python 数据处理的库有哪些?用…...

【HFP】规范精讲[15]: HFP蓝牙特有AT命令:免提场景专属功能的控制语言

在蓝牙HFP的命令体系中,除了复用自传统移动通信标准的AT命令,还有一类专门为蓝牙免提场景设计的专属AT命令。这些命令就像为蓝牙免提设备量身定制的方言,针对无线音频传输、设备间状态同步、蓝牙特有功能等场景进行了精准优化,是实…...

QT事件过滤器实战:如何用eventFilter拦截鼠标移动事件(附完整代码)

QT事件过滤器实战:如何精准拦截鼠标移动事件 在QT开发中,事件处理机制是GUI编程的核心。当我们需要对特定控件的事件流进行精细化控制时,事件过滤器(eventFilter)提供了一种优雅的解决方案。不同于直接重写事件处理函数,事件过滤器…...

自动驾驶中的路径规划实战:手把手教你用Python复现RRT与RRT*算法(含动态演示)

自动驾驶路径规划实战:Python实现RRT与RRT*算法全解析 从理论到实践的路径规划探索 在自动驾驶技术快速发展的今天,路径规划作为核心算法之一,直接决定了车辆能否安全高效地完成行驶任务。想象一下,当你驾驶车辆进入一个复杂的停车…...

从Vaihingen数据集到训练样本:高分辨率遥感影像语义分割全流程实战

1. 初识Vaihingen数据集:遥感语义分割的黄金标准 第一次接触Vaihingen数据集时,我被它5厘米的超高分辨率震撼到了。这个由ISPRS提供的基准数据集,虽然只包含38张60006000像素的影像,但每张都清晰地展现了德国小镇Vaihingen的街道、…...

微机原理实验一代码逐行精讲:从‘Hello World’到ASCII转换的底层逻辑

微机原理实验一代码逐行精讲:从‘Hello World’到ASCII转换的底层逻辑 当屏幕上跳出"Hello World!"时,很少有人思考这行文字背后究竟发生了什么。这段经典的汇编代码就像一扇门,推开它你将看到CPU如何与内存对话、中断服务程序如何…...