Spring Cloud微服务架构必备技术
单体架构
单体架构,也叫单体应用架构,是一个传统的软件架构模式。单体架构是指将应用程序的所有组件部署到一个单一的应用程序中,并统一进行部署、维护和扩展。在单体架构中,应用程序的所有功能都在同一个进程中运行,并采用同一种开发技术和开发语言实现。
单体架构通常由三个主要组件组成:
- 前端页面(User Interface):由用户浏览器或应用程序客户端组成,负责渲染前端页面。
- 应用服务层(Application Service):负责实现应用程序的主要业务逻辑和业务流程。
- 数据存储和持久层(Data Management):负责对数据进行存储和管理,通常使用数据库或文件系统实现。
单体架构的优点包括: - 部署和管理方便:由于应用程序的所有组件都在同一个进程中运行,因此部署和管理变得相对简单。
- 开发成本低:由于使用同一种开发技术和开发语言,因此开发人员不需要掌握多种不同的技术,降低了开发成本。
- 性能高:由于应用程序所有组件都在同一个进程中运行,因此避免了应用程序之间的通信和网络开销,提高了应用程序的性能。
不过,单体架构也存在一些缺点: - 扩展性差,灵活性差:由于所有组件都在同一个进程中运行,当需要进行扩展时,只能对整个应用程序进行扩展,比较困难。
- 难以维护:由于应用程序所有组件都在同一个进程中运行,会造成代码或数据结构比较大,维护难度较高。
总之,单体架构适合小规模、相对简单的应用程序开发,但不适合大型、高并发的应用程序。
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具有以下特点:
- 断路器模式:Hystrix使用断路器模式防止故障扩散和服务雪崩。
- 资源隔离:Hystrix通过线程池隔离和信号量隔离来保护应用。
- 实时监控:Hystrix提供仪表盘和实时监控功能,可以查看服务的健康状况和调用情况。
- 请求缓存:Hystrix可以通过请求缓存来避免重复请求。
- 请求合并:Hystrix还提供了请求合并功能,可以将多个请求合并成一个请求,减少网络传输的开销。
总之,Hystrix是一个非常实用的分布式系统容错框架,可以提高系统的可靠性和稳定性,并减少故障带来的影响。
服务雪崩
服务雪崩是指在分布式系统中,由于某个或者某几个服务出现故障或者不可用,导致大量请求集中到剩余的可用服务上,造成这些服务的负荷压力过大,甚至崩溃,最终导致整个系统的不可用。
服务雪崩是一种比较严重的问题,它会导致整个系统的瘫痪,对于在线业务来说,会造成巨大的经济损失和用户流失。通常,为了避免服务雪崩,我们需要对系统进行合理的容错和负载均衡设计,同时也可以采用一些技术手段来控制请求的并发量和压力,比如限流、熔断等。
为了预防服务雪崩,我们可以采取如下措施:
-
容错和负载均衡,在系统设计上,应该考虑到容错和负载均衡的问题,确保在某些服务发生故障时,整个系统能够自动地进行容错和负载均衡。
-
服务隔离,服务隔离是指将不同的服务或功能划分到不同的容器或虚拟机中,以避免因一个服务或功能的故障导致整个系统崩溃。通过服务隔离,可以实现服务之间的隔离、资源隔离和安全隔离。
-
限流和熔断:限流和熔断是常用的技术手段,可以对请求的并发量和压力进行有效的控制,避免系统失控。
应对雪崩常用的策略
- 服务回退
服务回退是指在服务出现故障或异常时,系统会自动或手动切换到备用服务或旧版本服务来保证业务的可用性和稳定性。服务回退可以帮助保障系统的高可用性,避免服务故障对业务造成的影响。一般来说,服务回退与服务降级都是保障系统稳定性的重要手段。
- 服务降级
服务回退是指在服务出现故障或异常时,系统会自动或手动切换到备用服务或旧版本服务来保证业务的可用性和稳定性。服务回退可以帮助保障系统的高可用性,避免服务故障对业务造成的影响。一般来说,服务回退与服务降级都是保障系统稳定性的重要手段。
相关文章:

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 分钟未支付࿰…...

< 开源项目框架:推荐几个开箱即用的开源管理系统 - 让开发不再复杂 >
文章目录👉 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的一些特性只能通过一些算法模拟的做一个虚拟链,…...
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的核心只关注图层࿰…...

【Three.js】shader特效 能量盾
shader特效之能量盾前言效果噪点图主要代码index.htmldepth-fs.jsdepth-vs.jsshield-fs.jsshield-vs.js相关项目前言 效果噪点图 为了可以自定义能量球的效果,这里使用外部加载来的噪点图做纹理,省去用代码写特效的过程。 主要代码 index.html <…...
【6000字长文】需求评审总是被怼?强烈推荐你试试这三招
前段时间和一个合作部门的产品新人沟通需求,结束的时候,他问了我一个问题,“你在产品新人阶段,最害怕做的事情是什么”? 我不假思索的回答说,“需求评审,是曾经最不想面对的环节,甚至在评审之前几个小时就开始心跳加速了。当然这也是产品修炼路上的必经之路,其实只要掌…...

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

盘古信息PCB行业解决方案:以全域场景重构,激活智造新未来
一、破局:PCB行业的时代之问 在数字经济蓬勃发展的浪潮中,PCB(印制电路板)作为 “电子产品之母”,其重要性愈发凸显。随着 5G、人工智能等新兴技术的加速渗透,PCB行业面临着前所未有的挑战与机遇。产品迭代…...
1688商品列表API与其他数据源的对接思路
将1688商品列表API与其他数据源对接时,需结合业务场景设计数据流转链路,重点关注数据格式兼容性、接口调用频率控制及数据一致性维护。以下是具体对接思路及关键技术点: 一、核心对接场景与目标 商品数据同步 场景:将1688商品信息…...

剑指offer20_链表中环的入口节点
链表中环的入口节点 给定一个链表,若其中包含环,则输出环的入口节点。 若其中不包含环,则输出null。 数据范围 节点 val 值取值范围 [ 1 , 1000 ] [1,1000] [1,1000]。 节点 val 值各不相同。 链表长度 [ 0 , 500 ] [0,500] [0,500]。 …...

NFT模式:数字资产确权与链游经济系统构建
NFT模式:数字资产确权与链游经济系统构建 ——从技术架构到可持续生态的范式革命 一、确权技术革新:构建可信数字资产基石 1. 区块链底层架构的进化 跨链互操作协议:基于LayerZero协议实现以太坊、Solana等公链资产互通,通过零知…...
OpenPrompt 和直接对提示词的嵌入向量进行训练有什么区别
OpenPrompt 和直接对提示词的嵌入向量进行训练有什么区别 直接训练提示词嵌入向量的核心区别 您提到的代码: prompt_embedding = initial_embedding.clone().requires_grad_(True) optimizer = torch.optim.Adam([prompt_embedding...

Unity | AmplifyShaderEditor插件基础(第七集:平面波动shader)
目录 一、👋🏻前言 二、😈sinx波动的基本原理 三、😈波动起来 1.sinx节点介绍 2.vertexPosition 3.集成Vector3 a.节点Append b.连起来 4.波动起来 a.波动的原理 b.时间节点 c.sinx的处理 四、🌊波动优化…...
Android第十三次面试总结(四大 组件基础)
Activity生命周期和四大启动模式详解 一、Activity 生命周期 Activity 的生命周期由一系列回调方法组成,用于管理其创建、可见性、焦点和销毁过程。以下是核心方法及其调用时机: onCreate() 调用时机:Activity 首次创建时调用。…...

HarmonyOS运动开发:如何用mpchart绘制运动配速图表
##鸿蒙核心技术##运动开发##Sensor Service Kit(传感器服务)# 前言 在运动类应用中,运动数据的可视化是提升用户体验的重要环节。通过直观的图表展示运动过程中的关键数据,如配速、距离、卡路里消耗等,用户可以更清晰…...

【p2p、分布式,区块链笔记 MESH】Bluetooth蓝牙通信 BLE Mesh协议的拓扑结构 定向转发机制
目录 节点的功能承载层(GATT/Adv)局限性: 拓扑关系定向转发机制定向转发意义 CG 节点的功能 节点的功能由节点支持的特性和功能决定。所有节点都能够发送和接收网格消息。节点还可以选择支持一个或多个附加功能,如 Configuration …...

论文阅读:LLM4Drive: A Survey of Large Language Models for Autonomous Driving
地址:LLM4Drive: A Survey of Large Language Models for Autonomous Driving 摘要翻译 自动驾驶技术作为推动交通和城市出行变革的催化剂,正从基于规则的系统向数据驱动策略转变。传统的模块化系统受限于级联模块间的累积误差和缺乏灵活性的预设规则。…...