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…...
Simulink 自动代码生成电机控制:在某国产ARM0定点MCU上实现自动代码生成无感电机控制
目录 前言 开发流程 定点化的技巧 代码生成运行演示 总结 前言 这次尝试了在国产arm0内核的MCU上实现Simulink自动代码生成永磁同步电机无传感控制。机缘巧合之下拿到了一块国产MCU的电机控制板和一个5000RPM的小电机。最后实现了无传感控制,在这里总结下一些经…...
MySQL基本查询
文章目录表的增删查改Create(创建)单行数据 全列插入多行数据 指定列插入插入否则更新替换Retrieve(读取)SELECT列全列查询指定列查询查询字段为表达式查询结果指定别名结果去重WHERE 条件基本比较BETWEEN AND 条件连接OR 条件连…...
你需要知道的 7 个 Vue3 技巧
VNode 钩子在每个组件或html标签上,我们可以使用一些特殊的(文档没写的)钩子作为事件监听器。这些钩子有:onVnodeBeforeMountonVnodeMountedonVnodeBeforeUpdateonVnodeUpdatedonVnodeBeforeUnmountonVnodeUnmounted我主要是在组件…...
行政区划获取
行政区划获取一、导入jar包二、代码展示背景:公司的行政区划代码有问题,有的没有街道信息,有的关联信息有误,然后找到了国家的网站国家统计局-行政区划,这个里面是包含了所有的行政信息,但是全是html页面&a…...
让ChatGPT介绍一下ChatGPT
申请新必应内测通过了,我在New Bing中使用下ChatGPT,让ChatGPT介绍一下ChatGPT 问题1:帮我生成一篇介绍chatGPT的文章,不少于2000字 回答: chatGPT是什么?它有什么特点和用途? chatGPT是一种…...
【Redis】Redis 主从复制 + 读写分离
Redis 主从复制 读写分离1. Redis 主从复制 读写分离介绍1.1 从数据持久化到服务高可用1.2 主从复制1.3 如何保证主从数据一致性?1.4 为何采用读写分离模式?2. 一主两从环境准备2.1 配置文件2.2 启动 Redis3. 主从复制原理3.1 全量同步3.1.1 建立连接3…...
2023届秋招,鬼知道我经历了什么
仅记录个人经历,充满主观感受,甚至纯属虚构,仅供参考,杠就是你对 本想毕业再写,但是考虑到等毕业了,24秋招的提前批就快开始了,大概就来不及了,正好现在有点时间,陆陆续…...
ChatGPT助力校招----面试问题分享(一)
1 ChatGPT每日一题:期望薪资是多少 问题:面试官问期望薪资是多少,如何回答 ChatGPT:当面试官问及期望薪资时,以下是一些建议的回答方法: 1、调查市场行情:在回答之前,可以先调查一…...
CSS媒体查询@media (prefers-color-scheme:dark)判断系统白天黑夜模式
前言 在最近学习中突然看到了在媒体查询中prefers-color-scheme:dark监听的使用,然后就模仿里边写了个简单例子,代码如下: body {background-color: #f5f5f5;}media (prefers-color-scheme: dark) {body {background-color: #666;}}然后通过…...
运行YOLOv8实现识别
https://github.com/ultralytics/ultralyticshttps://docs.ultralytics.com/环境配置官方环境要求Python>3.7(我是python3.8也是可以用的) environment with PyTorch>1.7.这是ultralyticsCommand Line Interface命令行接口运行输入参数的格式yolo …...
自己电脑做网站 路由器/aso优化推广
{这个题5个正确,五个超时,不要盲目相信我的代码,谁有更好的算法或者优化请留言,(*^__^*) 嘻嘻……} 背景 贪玩的sunnypig请Charles为他打造一个奇幻世界,Charles欣然答应了。然而一向善于出难题的Charles是决不会轻易让…...
wordpress默认首页是日志/网奇seo培训官网
#第一种方法,使用Query中的updata函数更新,然后commit提交 def updata_password(email,new_password):new_password_hash generate_password_hash(new_password, method"sha256")try:#第一种方法,使用Query中的updata函数更新,然后commit提…...
上海闵行网站制作公司/营销图片素材
利用 AI Studio 完成 Paddle 编译 为什么要对 Paddle 进行编译? 众所周知,PaddlePaddle 的底层代码是利用 C 进行开发的,对于 Python 端的日常使用者,我们仅需要依据 Paddle 官方提供的 pip 详情安装 Paddle 既可。 如果要从 P…...
网站互动怎么做/培训seo去哪家机构最好
akuna的电面题 脑子晕了没想出标算/// Permutation: all possible result of permute a list of numbers , for example [1,3,5] → [1,3,5],[1,5,3],[3,5,1],[3,1,5],[5,1,3],[5,3,1] /// [1,1,5] -> [1,5,1], [5,1,1], [1,1,5] 可用置换的方式,从小往大推&…...
创建wordpress网站/教育培训报名
serialize() 函数会检查类中是否存在一个魔术方法 __sleep()。如果存在,该方法会先被调用,然后才执行序列化操作。此功能可以用于清理对象,并返回一个包含对象中所有应被序列化的变量名称的数组。如果该方法未返回任何内容,则 NUL…...
做网址导航网站/网络营销渠道的特点
最近项目有个需求,在微信小程序中跳转外部链接完成相关的操作,操作完成后返回微信小程序的相关页面。1、跳转外部链接(官方文档)1)入口//跳转到入口wx.navigateTo({url: ../out/out})2)app.json{"pages": ["pages/main/main","…...