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

Spring Cloud微服务架构必备技术

单体架构

单体架构,也叫单体应用架构,是一个传统的软件架构模式。单体架构是指将应用程序的所有组件部署到一个单一的应用程序中,并统一进行部署、维护和扩展。在单体架构中,应用程序的所有功能都在同一个进程中运行,并采用同一种开发技术和开发语言实现。
单体架构通常由三个主要组件组成:

  1. 前端页面(User Interface):由用户浏览器或应用程序客户端组成,负责渲染前端页面。
  2. 应用服务层(Application Service):负责实现应用程序的主要业务逻辑和业务流程。
  3. 数据存储和持久层(Data Management):负责对数据进行存储和管理,通常使用数据库或文件系统实现。
    单体架构的优点包括:
  4. 部署和管理方便:由于应用程序的所有组件都在同一个进程中运行,因此部署和管理变得相对简单。
  5. 开发成本低:由于使用同一种开发技术和开发语言,因此开发人员不需要掌握多种不同的技术,降低了开发成本。
  6. 性能高:由于应用程序所有组件都在同一个进程中运行,因此避免了应用程序之间的通信和网络开销,提高了应用程序的性能。
    不过,单体架构也存在一些缺点:
  7. 扩展性差,灵活性差:由于所有组件都在同一个进程中运行,当需要进行扩展时,只能对整个应用程序进行扩展,比较困难。
  8. 难以维护:由于应用程序所有组件都在同一个进程中运行,会造成代码或数据结构比较大,维护难度较高。
    总之,单体架构适合小规模、相对简单的应用程序开发,但不适合大型、高并发的应用程序。
    在这里插入图片描述

SOA架构

SOA(面向服务架构)是一种软件架构模式,它基于服务的概念来开发、部署、管理和使用应用程序和服务。该架构将应用程序拆分成相互独立的服务和组件,这些服务之间通过一个标准化的协议进行通信,并能够通过网络进行访问和使用。SOA提供了一种松散耦合的方式来组织和管理企业应用程序和服务,使得系统更加灵活、可扩展和可重用。
SOA架构包括四个主要组成部分:服务提供者、服务消费者、服务注册表和服务总线。服务提供者是提供服务的应用程序或系统,服务消费者是使用服务的应用程序或系统。服务注册表用于存储和管理服务信息,服务总线则用于管理服务间的通信。通过这些组件,SOA架构实现了服务之间的解耦合,并支持服务的动态组合和替换。
SOA架构的优点包括提高了应用程序的灵活性和可重用性、降低了应用程序和系统的耦合度、提高了系统的可扩展性和可维护性、提高了应用程序和系统的吞吐量和可靠性。SOA架构已经被广泛应用于企业级应用程序的开发和部署,例如金融服务、保险服务、电子商务、零售业等。
SOA的缺点是过分依赖消息总线,一旦消息总线down了,整体系统都会down了,而且随着服务的增加,消息总线的会越来越复杂,导致总体架构越来越重。
在这里插入图片描述

微服务架构

微服务架构是一种软件架构模式,它将应用程序组织成一组小型、松耦合的服务。每个服务都可以独立部署、扩展和维护,并使用轻量级通信机制互相交互。这些服务通常优化为满足单一责任原则,这样它们可以更加容易被维护和替换。
微服务架构旨在解决传统单体应用程序面临的大规模和复杂性问题。它允许团队分离各自的工作部分,以便团队可以更快地创建和部署新功能。微服务架构还允许各团队使用不同的编程语言和技术堆栈,这样团队可以根据其专业领域进行选择。
微服务架构的优点包括:

  • 更快的部署时间:小型服务更容易构建、测试、部署和维护。
  • 更好的扩展性:每个服务可以独立扩展,而不影响应用程序其他部分的可用性。
  • 更好的容错性:微服务架构的横向扩展可以避免单个服务包含所有的代码和数据,从而可以避免整个应用程序的故障。
  • 更好的可维护性:微服务允许团队更轻松地维护特定服务,而不需要了解整个应用程序的结构和功能。

但是也有相应的缺点架构复杂性高,团队协作难度大,测试成本高,比如一个支付系统背后可能有几百个微服务和不同的团队,梳理出整个微服务架构很复杂,协作时为了能够获取对方的鉴权,需要耗费大量的时间调试代码,其中有一些不确定因素还需要通过猜想等方式解决,加大了开发和测试的成本。

什么是SringBoot

Spring Boot是一个用于简化Spring应用程序的创建和开发的框架。它基于Spring框架,提供了自动配置、约定优于配置和快速开发能力。Spring Boot可以帮助开发人员快速创建可部署的、生产级别的Spring应用程序,并且可以轻松地集成其他常用的Spring项目,如Spring Data、Spring Security、Spring Batch等。Spring Boot还提供了一套现代化的基于微服务的架构样板,让开发人员可以轻松地构建分布式系统。

什么是SpringCloud

Spring Boot是一个用于简化Spring应用程序的创建和开发的框架。它基于Spring框架,提供了自动配置、约定优于配置和快速开发能力。Spring Boot可以帮助开发人员快速创建可部署的、生产级别的Spring应用程序,并且可以轻松地集成其他常用的Spring项目,如Spring Data、Spring Security、Spring Batch等。Spring Boot还提供了一套现代化的基于微服务的架构样板,让开发人员可以轻松地构建分布式系统。
在这里插入图片描述

SpringCloud组件

Eureka

Eureka是一种基于REST(Representational State Transfer)的服务发现工具,由Netflix开源。它为服务实例提供了一个可伸缩的、高可用的注册中心。Eureka允许服务实例在注册时通过REST API接口向Eureka服务器注册,Deregister以及心跳续租,同时Eureka会存储服务实例元数据,例如主机和端口号等。客户端可以查询此元数据并进行负载均衡。Eureka还提供了一些优秀的特性,例如故障处理、自我保护机制和区域感知等。在微服务架构中,Eureka是一个必不可少的组件之一。
在这里插入图片描述

Ribbon

Ribbon 是 Netflix 开源的一个负载均衡器,用于帮助开发人员轻松地实现客户端负载均衡。Ribbon 架构基于 HTTP 和 TCP 协议,它主要用于将传入请求快速路由到多个不同的服务实例中,并在请求失败时自动实施备份机制。
Ribbon 通过引入客户端负载均衡来解决服务端负载均衡的问题。客户端负载均衡意味着每个客户端实例都会配置一个可用的服务实例的列表,然后通过负载均衡算法选择其中一个实例来处理请求。Ribbon 提供了多种可选的负载均衡算法,例如轮询、随机、权重、最少活跃连接等。
使用 Ribbon 可以大大提高微服务架构的灵活性和可用性,降低对特定服务的依赖性,从而使整个架构更加健壮和可靠。
在这里插入图片描述

集中式负载均衡和客户端负载均衡
集中式负载均衡是一种网络架构模式,它通过在一台中心设备上集中管理网络流量,将请求分发到多个后端服务器,以实现负载均衡和高可用性。常见的集中式负载均衡器包括F5 BIG-IP、Citrix NetScaler、HAProxy、Nginx等。
在集中式负载均衡器的架构中,所有的数据流量都经过集中式设备,它会根据一定的算法(如轮询、加权轮询、IP Hash等)将请求分发给后端的服务器集群,使得每个服务器的负载均衡,从而提高系统的性能和可靠性。集中式负载均衡器还可以实现连接管理、会话管理、协议转换、测压测试等功能,为业务系统提供全面的网络服务。
而客户端负载均衡则是指在客户端设备上实现负载均衡,通过DNS、L7代理等方式将请求分发到多个后端服务器上。客户端负载均衡是一种轻量级的负载均衡方案,可以减少网络流量和服务器负载,但是由于客户端设备的限制,不适用于大规模的负载均衡场景。常见的客户端负载均衡器包括NGINX、Apache、LVS等。
在这里插入图片描述

微服务API网关:Zuul

Zuul是Netflix开源的一款API网关,主要用于微服务架构中的路由、过滤、负载均衡、安全等方面的处理。Zuul能够协调多个微服务提供的API,对外提供统一的接口。Zuul通过将请求路由到不同的服务实例、处理异常和故障等操作,保证了API的高可用性和稳定性。
Zuul的核心概念包括路由、过滤、可插拔性等。路由机制使得Zuul能够将请求路由到不同的微服务实例,同时能够应对服务故障等问题;过滤机制则在请求和响应之间进行拦截和处理,实现了API的安全验证、日志记录、性能统计等功能;可插拔性机制使得Zuul能够被集成到不同的框架和应用中,适应不同的场景和需求。
总之,Zuul是一个非常强大的异构微服务架构网关,可以为开发者提供快速且灵活的应用程序保障。
在这里插入图片描述

微服务容错组件:Hystrix

Hystrix是Netflix开源的一个库,用于实现分布式系统中的隔离、容错和超时控制。它提供了线程池隔离、断路器、请求缓存、请求合并等功能,可以防止单个服务故障导致整个应用崩溃。Hystrix具有以下特点:

  1. 断路器模式:Hystrix使用断路器模式防止故障扩散和服务雪崩。
  2. 资源隔离:Hystrix通过线程池隔离和信号量隔离来保护应用。
  3. 实时监控:Hystrix提供仪表盘和实时监控功能,可以查看服务的健康状况和调用情况。
  4. 请求缓存:Hystrix可以通过请求缓存来避免重复请求。
  5. 请求合并:Hystrix还提供了请求合并功能,可以将多个请求合并成一个请求,减少网络传输的开销。

总之,Hystrix是一个非常实用的分布式系统容错框架,可以提高系统的可靠性和稳定性,并减少故障带来的影响。

服务雪崩

服务雪崩是指在分布式系统中,由于某个或者某几个服务出现故障或者不可用,导致大量请求集中到剩余的可用服务上,造成这些服务的负荷压力过大,甚至崩溃,最终导致整个系统的不可用。
服务雪崩是一种比较严重的问题,它会导致整个系统的瘫痪,对于在线业务来说,会造成巨大的经济损失和用户流失。通常,为了避免服务雪崩,我们需要对系统进行合理的容错和负载均衡设计,同时也可以采用一些技术手段来控制请求的并发量和压力,比如限流、熔断等。
为了预防服务雪崩,我们可以采取如下措施:

  1. 容错和负载均衡,在系统设计上,应该考虑到容错和负载均衡的问题,确保在某些服务发生故障时,整个系统能够自动地进行容错和负载均衡。
    在这里插入图片描述

  2. 服务隔离,服务隔离是指将不同的服务或功能划分到不同的容器或虚拟机中,以避免因一个服务或功能的故障导致整个系统崩溃。通过服务隔离,可以实现服务之间的隔离、资源隔离和安全隔离。
    在这里插入图片描述

  3. 限流和熔断:限流和熔断是常用的技术手段,可以对请求的并发量和压力进行有效的控制,避免系统失控。

应对雪崩常用的策略

  • 服务回退

服务回退是指在服务出现故障或异常时,系统会自动或手动切换到备用服务或旧版本服务来保证业务的可用性和稳定性。服务回退可以帮助保障系统的高可用性,避免服务故障对业务造成的影响。一般来说,服务回退与服务降级都是保障系统稳定性的重要手段。

  • 服务降级

服务回退是指在服务出现故障或异常时,系统会自动或手动切换到备用服务或旧版本服务来保证业务的可用性和稳定性。服务回退可以帮助保障系统的高可用性,避免服务故障对业务造成的影响。一般来说,服务回退与服务降级都是保障系统稳定性的重要手段。

相关文章:

Spring Cloud微服务架构必备技术

单体架构 单体架构,也叫单体应用架构,是一个传统的软件架构模式。单体架构是指将应用程序的所有组件部署到一个单一的应用程序中,并统一进行部署、维护和扩展。在单体架构中,应用程序的所有功能都在同一个进程中运行,…...

TCP三次握手与四次挥手(一次明白)

TCP基本信息 默认端口号:80 LINUX中TIME_WAIT的默认时间是30s TCP三次握手 三次握手过程:每行代表发起握手到另一方刚刚收到数据包时的状态 客户端服务端客户端状态服务端状态握手前CLOSELISTEN客户端发送带有SYN标志的数据包到服务端一次握手SYN_SENDLISTEN二次握手服务端发送…...

pyside6@Mouse events实例@QApplication重叠导致的报错@keyboardInterrupt

文章目录报错内容鼠标事件演示报错内容 在pyside图形界面应用程序开发过程中,通常只允许运行一个实例 假设您重复执行程序A,那么可能会导致一些意向不到的错误并且,从python反馈的信息不容易判断错误的真正来源 鼠标事件演示 下面是一段演示pyside6的鼠标事件mouseEvent对象…...

订单30分钟未支付自动取消怎么实现?

目录了解需求方案 1:数据库轮询方案 2:JDK 的延迟队列方案 3:时间轮算法方案 4:redis 缓存方案 5:使用消息队列了解需求在开发中,往往会遇到一些关于延时任务的需求。例如生成订单 30 分钟未支付&#xff0…...

< 开源项目框架:推荐几个开箱即用的开源管理系统 - 让开发不再复杂 >

文章目录👉 SCUI Admin 中后台前端解决方案👉 Vue .NetCore 前后端分离的快速发开框架👉 next-admin 适配移动端、pc的后台模板👉 django-vue-admin-pro 快速开发平台👉 Admin.NET 通用管理平台👉 RuoYi 若…...

内网渗透-基础环境

解决依赖,scope安装 打开要给cmd powershell 打开远程 Set-ExecutionPolicy RemoteSigned -scope CurrentUser; 我试了好多装这东西还是得科学上网,不然不好用 iwr -useb get.scoop.sh | iex 查看下载过的软件 安装sudo 安装git 这里一定要配置bu…...

Go语言学习的第一天(对于Go学习的认识和工具选择及环境搭建)

首先学习一门新的语言,我们要知道这门语言可以帮助我们做些什么?为什么我们要学习这门语言?就小wei而言学习这门语言是为了区块链,因为自身是php出身,因为php的一些特性只能通过一些算法模拟的做一个虚拟链&#xff0c…...

C和C++到底有什么关系

C++ 读作”C加加“,是”C Plus Plus“的简称。顾名思义,C++是在C的基础上增加新特性,玩出了新花样,所以叫”C Plus Plus“,就像 iPhone 6S 和 iPhone 6、Win10 和 Win7 的关系。 C语言是1972年由美国贝尔实验室研制成功的,在当时算是高级语言,它的很多新特性都让汇编程序…...

14个Python处理Excel的常用操作,非常好用

自从学了Python后就逼迫用Python来处理Excel,所有操作用Python实现。目的是巩固Python,与增强数据处理能力。 这也是我写这篇文章的初衷。废话不说了,直接进入正题。 数据是网上找到的销售数据,长这样: 一、关联公式:…...

async/await 用法

1. 什么是 async/await async/await 是 ES8(ECMAScript 2017)引入的新语法,用来简化 Promise 异步操作。在 async/await 出 现之前,开发者只能通过链式 .then() 的方式处理 Promise 异步操作。示例代码如下: import …...

好意外,发现永久免费使用的云服务器

原因就不说了,说一下过程,在百度搜pythonIDE的时候,发现了一个网站 https://lightly.teamcode.com/https://lightly.teamcode.com/ 就是这个网站,看见这个免费试用,一开始觉得没什么,在尝试使用的过程中发…...

VSCode使用技巧,代码编写效率提升2倍以上!

VSCode是一款开源免费的跨平台文本编辑器,它的可扩展性和丰富的功能使得它成为了许多程序员的首选编辑器。在本文中,我将分享一些VSCode的使用技巧,帮助您更高效地使用它。 1. 插件 VSCode具有非常丰富的插件生态系统,通过安装插…...

SQL执行过程详解

1 、用户在客户端执行 SQL 语句时,客户端把这条 SQL 语句发送给服务端,服务端的进程,会处理这条客户端的SQL语句。 2 、服务端进程收集到SQL信息后,会在进程全局区PGA 中分配所需内存,存储相关的登录信息等。 3 、客…...

【物联网NodeJs-5天学习】第四天存储篇⑤ ——PM2,node.js应用进程管理器

【NodeJs-5天学习】第四天存储篇⑤ ——PM2,node.js应用进程管理器1. 前言2. 官方说明3. 安装PM24. PM2常用命令4.1 启动命令4.2 重新启动命令4.3 热重载命令4.4 停止命令4.5 删除命令4.6 查看进程运行状态4.4 显示某一个进程的具体信息4.8 显示日志信息4.9 终端监控…...

【C++学习】【STL】deque容器

dequeDouble Ended Queues(双向队列)deque和vector很相似,但是它允许在容器头部快速插入和删除(就像在尾部一样)。所耗费的时间复杂度也为常数阶O(1)。并且更重要的一点是,deque 容器中存储元素并不能保证所有元素都存储到连续的内…...

当 App 有了系统权限,真的可以为所欲为?

看到群里发了两篇文章,出于好奇,想看看这些个 App 在利用系统漏洞获取系统权限之后,都干了什么事,于是就有了这篇文章。由于准备仓促,有些 Code 没有仔细看,感兴趣的同学可以自己去研究研究,多多…...

vue3.js的介绍

一.vue.js简述 Vue是一套用于构建用户开源的MVVM结构的Javascript渐进式框架,尤雨溪在2015年10月27日发布了vue.js 1.0Eavangelion版本,在2016年9月30日发布了2.0Ghost in the Shell版本,目前项目由官方负责 vue的核心只关注图层&#xff0…...

【Three.js】shader特效 能量盾

shader特效之能量盾前言效果噪点图主要代码index.htmldepth-fs.jsdepth-vs.jsshield-fs.jsshield-vs.js相关项目前言 效果噪点图 为了可以自定义能量球的效果&#xff0c;这里使用外部加载来的噪点图做纹理&#xff0c;省去用代码写特效的过程。 主要代码 index.html <…...

【6000字长文】需求评审总是被怼?强烈推荐你试试这三招

前段时间和一个合作部门的产品新人沟通需求,结束的时候,他问了我一个问题,“你在产品新人阶段,最害怕做的事情是什么”? 我不假思索的回答说,“需求评审,是曾经最不想面对的环节,甚至在评审之前几个小时就开始心跳加速了。当然这也是产品修炼路上的必经之路,其实只要掌…...

Hive介绍及DDL

1.OLTP和OLAP OLTP&#xff1a; 联机事务处理系统。在前台接收的用户数据可以立即传送到后台进行处理&#xff0c;并在很短的时间内给出处理结果。关系型数据库是OLTP典型应用&#xff0c;如MySQL OLTP环境开展数据分析是否可行&#xff1f; 为了更好的开展数据分析&#x…...

云计算——弹性云计算器(ECS)

弹性云服务器&#xff1a;ECS 概述 云计算重构了ICT系统&#xff0c;云计算平台厂商推出使得厂家能够主要关注应用管理而非平台管理的云平台&#xff0c;包含如下主要概念。 ECS&#xff08;Elastic Cloud Server&#xff09;&#xff1a;即弹性云服务器&#xff0c;是云计算…...

Appium+python自动化(十六)- ADB命令

简介 Android 调试桥(adb)是多种用途的工具&#xff0c;该工具可以帮助你你管理设备或模拟器 的状态。 adb ( Android Debug Bridge)是一个通用命令行工具&#xff0c;其允许您与模拟器实例或连接的 Android 设备进行通信。它可为各种设备操作提供便利&#xff0c;如安装和调试…...

UE5 学习系列(三)创建和移动物体

这篇博客是该系列的第三篇&#xff0c;是在之前两篇博客的基础上展开&#xff0c;主要介绍如何在操作界面中创建和拖动物体&#xff0c;这篇博客跟随的视频链接如下&#xff1a; B 站视频&#xff1a;s03-创建和移动物体 如果你不打算开之前的博客并且对UE5 比较熟的话按照以…...

华为OD机试-食堂供餐-二分法

import java.util.Arrays; import java.util.Scanner;public class DemoTest3 {public static void main(String[] args) {Scanner in new Scanner(System.in);// 注意 hasNext 和 hasNextLine 的区别while (in.hasNextLine()) { // 注意 while 处理多个 caseint a in.nextIn…...

Linux云原生安全:零信任架构与机密计算

Linux云原生安全&#xff1a;零信任架构与机密计算 构建坚不可摧的云原生防御体系 引言&#xff1a;云原生安全的范式革命 随着云原生技术的普及&#xff0c;安全边界正在从传统的网络边界向工作负载内部转移。Gartner预测&#xff0c;到2025年&#xff0c;零信任架构将成为超…...

基于Docker Compose部署Java微服务项目

一. 创建根项目 根项目&#xff08;父项目&#xff09;主要用于依赖管理 一些需要注意的点&#xff1a; 打包方式需要为 pom<modules>里需要注册子模块不要引入maven的打包插件&#xff0c;否则打包时会出问题 <?xml version"1.0" encoding"UTF-8…...

工业自动化时代的精准装配革新:迁移科技3D视觉系统如何重塑机器人定位装配

AI3D视觉的工业赋能者 迁移科技成立于2017年&#xff0c;作为行业领先的3D工业相机及视觉系统供应商&#xff0c;累计完成数亿元融资。其核心技术覆盖硬件设计、算法优化及软件集成&#xff0c;通过稳定、易用、高回报的AI3D视觉系统&#xff0c;为汽车、新能源、金属制造等行…...

QT: `long long` 类型转换为 `QString` 2025.6.5

在 Qt 中&#xff0c;将 long long 类型转换为 QString 可以通过以下两种常用方法实现&#xff1a; 方法 1&#xff1a;使用 QString::number() 直接调用 QString 的静态方法 number()&#xff0c;将数值转换为字符串&#xff1a; long long value 1234567890123456789LL; …...

大语言模型(LLM)中的KV缓存压缩与动态稀疏注意力机制设计

随着大语言模型&#xff08;LLM&#xff09;参数规模的增长&#xff0c;推理阶段的内存占用和计算复杂度成为核心挑战。传统注意力机制的计算复杂度随序列长度呈二次方增长&#xff0c;而KV缓存的内存消耗可能高达数十GB&#xff08;例如Llama2-7B处理100K token时需50GB内存&a…...

算法笔记2

1.字符串拼接最好用StringBuilder&#xff0c;不用String 2.创建List<>类型的数组并创建内存 List arr[] new ArrayList[26]; Arrays.setAll(arr, i -> new ArrayList<>()); 3.去掉首尾空格...