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. 提高可靠性

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

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

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

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

相关文章

一、TensorFlow的建模流程

1. 数据准备与预处理: 加载数据:使用内置数据集或自定义数据。 预处理:归一化、调整维度、数据增强。 划分数据集:训练集、验证集、测试集。 转换为Dataset对象:利用tf.data优化数据流水线。 import tensorflow a…

鸟哥Linux私房菜笔记(三)

鸟哥Linux私房菜笔记(三) 该第三部分和第四部分主要为原书的第十一章(正则表达式与文件格式化处理),第十二章学习shell脚本,第十六章(进程管理与SElinux初探部分),第十七…

基于springboot+vue的哈利波特书影音互动科普网站

开发语言:Java框架:springbootJDK版本:JDK1.8服务器:tomcat7数据库:mysql 5.7(一定要5.7版本)数据库工具:Navicat11开发软件:eclipse/myeclipse/ideaMaven包:…

【Numpy核心编程攻略:Python数据处理、分析详解与科学计算】2.12 连续数组:为什么contiguous这么重要?

2.12 连续数组:为什么contiguous这么重要? 目录 #mermaid-svg-wxhozKbHdFIldAkj {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-wxhozKbHdFIldAkj .error-icon{fill:#552222;}#mermaid-svg-…

【网络】3.HTTP(讲解HTTP协议和写HTTP服务)

目录 1 认识URL1.1 URI的格式 2 HTTP协议2.1 请求报文2.2 响应报文 3 模拟HTTP3.1 Socket.hpp3.2 HttpServer.hpp3.2.1 start()3.2.2 ThreadRun()3.2.3 HandlerHttp() 总结 1 认识URL 什么是URI? URI 是 Uniform Resource Identifier的缩写&…

力扣第149场双周赛

文章目录 题目总览题目详解找到字符串中合法的相邻数字重新安排会议得到最多空余时间I3440.重新安排会议得到最多空余时间II 第149场双周赛 题目总览 找到字符串中合法的相邻数字 重新安排会议得到最多空余时间I 重新安排会议得到最多空余时间II 变成好标题的最少代价 题目…

HTB:Alert[WriteUP]

目录 连接至HTB服务器并启动靶机 信息收集 使用rustscan对靶机TCP端口进行开放扫描 使用nmap对靶机TCP开放端口进行脚本、服务扫描 使用nmap对靶机TCP开放端口进行漏洞、系统扫描 使用nmap对靶机常用UDP端口进行开放扫描 使用ffuf对alert.htb域名进行子域名FUZZ 使用go…

96,【4】 buuctf web [BJDCTF2020]EzPHP

进入靶场 查看源代码 GFXEIM3YFZYGQ4A 一看就是编码后的 1nD3x.php 访问 得到源代码 <?php // 高亮显示当前 PHP 文件的源代码&#xff0c;用于调试或展示代码结构 highlight_file(__FILE__); // 关闭所有 PHP 错误报告&#xff0c;防止错误信息泄露可能的安全漏洞 erro…

吴恩达深度学习——有效运作神经网络

内容来自https://www.bilibili.com/video/BV1FT4y1E74V&#xff0c;仅为本人学习所用。 文章目录 训练集、验证集、测试集偏差、方差正则化正则化参数为什么正则化可以减少过拟合Dropout正则化Inverted Dropout其他的正则化方法数据增广Early stopping 归一化梯度消失与梯度爆…

【xdoj-离散线上练习】T251(C++)

解题反思&#xff1a; 开始敲代码前想清楚整个思路比什么都重要嘤嘤嘤&#xff01;看到输入m, n和矩阵&#xff0c;注意不能想当然地认为就是高m&#xff0c;宽n的矩阵&#xff0c;细看含义 比如本题给出了树的邻接矩阵&#xff0c;就是n*n的&#xff0c;代码实现中没有用到m这…

deep seek R1本地化部署及openAI API调用

先说几句题外话。 最近deep seek火遍全球&#xff0c;所以春节假期期间趁着官网优惠充值了deep seek的API&#xff0c;用openAI的接口方式尝试了下对deep seek的调用&#xff0c;并且做了个简单测试&#xff0c;测试内容确实非常简单&#xff1a;通过prompt提示词让大模型对用…

01.双Android容器解决方案

目录 写在前面 一&#xff0c;容器 1.1 容器的原理 1.1.1 Namespace 1.1.2 Cgroups&#xff08;Control Groups&#xff09; 1.1.3 联合文件系统&#xff08;Union File System&#xff09; 1.2 容器的应用 1.2.1 微服务架构 1.2.2 持续集成和持续部署&#xff08;CI/…

Python 绘图工具详解:使用 Matplotlib、Seaborn 和 Pyecharts 绘制散点图

目录 数据可视化1.使用 matplotlib 库matplotlib 库 2 .使用 seaborn 库seaborn 库 3 .使用 pyecharts库pyecharts库 注意1. 确保安装了所有必要的库2. 检查Jupyter Notebook的版本3. 使用render()方法保存为HTML文件4. 使用IFrame在Notebook中显示HTML文件5. 检查是否有其他输…

无人机集群新年祝福表演技术原理详解

无人机集群新年祝福表演技术是一项集飞行控制技术、智能协调和精密控制于一体的高科技表演形式。其技术原理主要涉及无人机硬件设备、软件系统以及表演协调等多个方面。以下是对该技术原理的详细解析&#xff1a; 一、无人机硬件设备 无人机集群表演的核心是无人机本身&#x…

贪吃蛇实现

1.资料来源 https://learn.microsoft.com/zh-cn/windows/console/getstdhandle 2.前言 简介 贪吃蛇是久负盛名的游戏&#xff0c;和俄罗斯方块、扫雷等游戏位列于经典游戏的行列。 《贪食蛇》中玩家控制一条不断移动的蛇&#xff0c;在屏幕上吃掉出现的食物。每吃掉一个食物…

计算机毕业设计Python动漫推荐系统 漫画推荐系统 动漫视频推荐系统 机器学习 bilibili动漫爬虫 数据可视化 数据分析 大数据毕业设计

温馨提示&#xff1a;文末有 CSDN 平台官方提供的学长联系方式的名片&#xff01; 温馨提示&#xff1a;文末有 CSDN 平台官方提供的学长联系方式的名片&#xff01; 温馨提示&#xff1a;文末有 CSDN 平台官方提供的学长联系方式的名片&#xff01; 作者简介&#xff1a;Java领…

MyBatis-Plus笔记-快速入门

大家在日常开发中应该能发现&#xff0c;单表的CRUD功能代码重复度很高&#xff0c;也没有什么难度。而这部分代码量往往比较大&#xff0c;开发起来比较费时。 因此&#xff0c;目前企业中都会使用一些组件来简化或省略单表的CRUD开发工作。目前在国内使用较多的一个组件就是…

《OpenCV》——图像透视转换

图像透视转换简介 在 OpenCV 里&#xff0c;图像透视转换属于重要的几何变换&#xff0c;也被叫做投影变换。下面从原理、实现步骤、相关函数和应用场景几个方面为你详细介绍。 原理 实现步骤 选取对应点&#xff1a;要在源图像和目标图像上分别找出至少四个对应的点。这些对…

克隆OpenAI(基于openai API和streamlit)

utils.py&#xff1a; from langchain_openai import ChatOpenAI from langchain.memory import ConversationBufferMemory from langchain.chains import ConversationChain import osdef get_chat_response(api_key,prompt,memory): # memory不能是函数的内部局部变量&…

用 HTML、CSS 和 JavaScript 实现抽奖转盘效果

顺序抽奖 前言 这段代码实现了一个简单的抽奖转盘效果。页面上有一个九宫格布局的抽奖区域&#xff0c;周围八个格子分别放置了不同的奖品名称&#xff0c;中间是一个 “开始抽奖” 的按钮。点击按钮后&#xff0c;抽奖区域的格子会快速滚动&#xff0c;颜色不断变化&#xf…