架构设计---高可用的处理

news2025/1/21 4:57:03

前言:

系统的高可用架构就是要在上述各种故障情况下,保证系统依然可用提供服务,具体包括以下几种架构方案。

冗余备份:

各种服务器故障是不可避免的,架构设计上就要保证,当服务器故障的时候,系统依然可用访问。

冗余备份是提供同一服务的服务器要进行冗余备份的处理,即任何服务都不能只有一台服务器,服务器之间要互相进行备份处理,任何一台服务器出现故障的时候,请求可用发送到备份的服务器去处理,这样,即使某台服务器失效,系统依然是可用的。

在负载均衡架构中,可用将多台应用服务器构成一个集群一起对外提供服务,这样可以利用多台应用服务器的计算资源,满足高并发的用户访问请求,事实上,负载均衡可以实现系统的高可用。

负载均衡服务器通过心跳检测发现集群中某台应用服务器失效,然后负载均衡服务器就不将请求分发给这台服务器,对用户而言,也就感觉不到存在服务器失效的情况,系统依然是可用的。

像阿里巴巴这样的大厂就是通过这种方式来实现的,应用程序升级的时候,停止应用进程,但是不影响用户的访问,因为应用程序部署在多台服务器上面,应用程序升级的时候,每次只停止一台或者一部分服务器即可,在这些机器上进行程序升级,这个时候,集群中海油其他服务器在提供服务器,因此用户感觉不到服务器已经停机了。

失败隔离:

保证系统高可用的另外一个策略是失败隔离,将失败隔离在一个较小的范围之内,使故障影响范围不扩大,失败隔离的主要架构技术是消息队列。

消息的生产者和消费者通过消息队列进行隔离,如果消费者出现故障的时候,生产者可以继续向消息队列发送消息,而不会感知到消费者的故障,等消费者恢复正常以后再去从消息队列中消费消息,所以用户处理的视角来看,系统一直是正常使用的。

例如:发送邮件或者短线的消费者出现了故障,不会影响到生产者应用的运行,也不会影响发送短线等其他消费者的正常的运行。

另一方面,由于分布式消息队列具有削峰填谷的作用,所以在高并发的时候,消息的生产者可以将消息缓冲在分布式消息队列中,消费者可以慢慢地从消息队列中处理,而不会将瞬时的高并发负载压力直接对整个系统进行施压的冲击。导致系统的崩溃,也就是将压力给降下来,使消息生产者的访问压力不会直接传递到消息的消费者上面,这样可以提高数据库的可用性。

消息队列还使得程序解耦,将程序的调用和依赖隔离开来,低耦合的程序更加易于维护,可以减少程序出现的bug的可能性。

限流降级:

限流和降级是保护系统高可用的一种手段,在高并发场景下,系统的访问量超过了系统的承受能力的话,可以通过限流对系统进行保护,限流是指对进入系统的用户请求进行流量的限制处理,如果访问量超过了系统的最大处理能力的话,就会丢失一部分的用户请求,保证整个系统可以正常使用,保证了大部分用户的访问系统是正常的,这样虽然有一部分用户的请求被丢弃,产生了部分的不可用,但是对于整个系统都崩溃来说,比较友好。

降级是保护系统的另一种手段,有一些系统功能是非核心的,但是他也给系统产生了非常大的压力,比如说电商系统中确认收货这个功能,即使我们不去确认收货,系统也会超时自动确认收货的处理。

但是实际上确认收货这个操作是一个非常中的操作,因为它会对数据库产生很大的压力,他要进行更改订单的状态,完成支付的确认,进行评价等一系列的操作,如果在系统中高并发的时候去完成这些操作,那么会对系统进行雪上加霜,使得系统的处理能力更加的恶化。

解决的办法是在系统高并发的时候,比如说淘宝双11的时候,当天可能整天系统都处于一种极限的高并发访问压力之下,这个时候就可以把确认收货、评价这些非功能进行关闭处理,将宝贵的系统资源保留下来,让给正在购物的人进行下单交易的处理。

异地多活:

异地多活的原理,采用了异地多活的多机房的机制,数据中心分布叜多个不同地点的机房里面,这些机房都可以对外提供服务,用户可以连接任何一个机房进行访问处理,这样每个机房都可以提供完整的系统服务,即使某一个机房不可使用,系统也不会产生宕机的可能,保证了系统的可用性。

异地多活架构考虑的重点就是,用户请求如何分发到不同的机房上面。这个主要可用在域名解析的时候完成操作,也就是用户进行域名解析的时候,会根据就近原则或者其他的一些策略,完成用户请求的分发,另一个至关重要的技术点是,因为是多个机房都可以独立对外提供服务,所以也就意味着每个机房都要有完整的数据记录,用户在任何一个机房完成的数据操作,都必须同步传输给其他机房,进行数据实时的同步处理。

数据库实时同步最重要的关注点是数据冲突的问题,同一条数据,同时在两个数据中心被修改了,该如何进行解决处理,为了解决这种数据冲突的问题,某些容易引起数据冲突的服务采用类似MySql的主主模式进行处理,也就是说多个机房在某个时刻有一个主机房的,某些请求只能到达主机房才能被处理,其他的机房不处理这一类的请求,使用该方法进行避免产生数据的冲突。

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

简短通俗理解动态规划算法--最短路径问题

问题:从某顶点出发,沿图的边到达另一顶点所经过的路径中,各边上权值之和最小的一条路径——最短路径。在博客动态规划算法中介绍了动态规划的基本思想已经建立动态规划模型的步骤,下面将其中的方法分析最短路径问题。 最短路径有…

CBAM: Convolutional Block Attention Module

https://arxiv.org/pdf/1807.06521.pdf 摘要: 我们提出了卷积块注意模块(CBAM),一个简单而有效的用于前馈卷积神经网络的注意模块。给定中间特征图,我们的模块依次推导出沿通道和空间两个独立维度的注意图,然后将注意图乘到输入…

vue-seamless-scroll数据量少时,暂停滚动,继续滚动

需求内容 大屏项目:指定dom元素内,如果子元素内容过多,超出父元素的最高高度,可以发生自动滚动;如果子元素内容没有超出父元素的最高高度,不可以发生自动滚动。 . 实现方案 获取数据后并渲染到dom后&am…

并查集的查询与合并详解

文章目录 一、并查集的概念 二、并查集的实现 2、1 并查集不同集合(树)的形成 2、2 find()函数找一个元素集合的编号(元素所属于树的祖宗) 2、3 合并两个不同集合(合并两棵不同的树&#xff09…

SpringCloud学习笔记 - Nacos集群配置和配置持久化

1. 集群架构 要组成集群Nacos必须要有3个或以上的Nacos服务节点,官网推荐在生产服务中使用集群架构。 官网对Nacos集群架构的说明:https://nacos.io/zh-cn/docs/cluster-mode-quick-start.html 总体来说有三种方式可以实现Nacos集群部署: …

恒远模式(flyweight)

简介:共享对象,当一个对象可以被多次利用的时候,并且对象内部相同,这个时候需要考虑让对象进行复用,而不是多次创建结构图:代码就不写了,因为我觉得这东西没啥用,因为一个对象对应的…

技术分享 | 测试平台开发-前端开发之Vue.js 框架

Vue.js 是一套用于构建用户界面的渐进式框架,在目前的前端开放中比较流行的前端框架。Vue 被设计成自底向上的逐层应用。Vue 的核心库只关注视图层,不仅易于上手,还便于与第三方库或已有项目整合。但是学习 Vue.js 需要一定的 HTML、CSS、和 …

指针进阶(3)

tips 1. sizeof的返回类型时size_t。size_t就是为sizeof量身定做的,size_t就是unsigned int 2. strlen碰到\0会停下来,而sizeof则不会,也将其算作一个字符 3. 要注意这么两对东西: scanf()与gets(): \0 , \n , 空格 …

<TCP网络编程>——《计算机网络》

目录 1.TCP网络程序 1.1 TCP socket API 1.1.1 socket(): 1.1.2 bind():​ 1.1.3 listen(): ​ 1.1.4 accept(): 1.1.5 connect(): 2. 封装 TCP socket 2.1 实现一个简单的英译汉的功能 3.简单的TCP网络程序(多进程版本) 4. 简单的TCP网络程序(多线程版本) 5. 线程…

SpringBoot自定义MessageConvert

目录 前言 原理 实现 拓展 前言 对于页面携带的请求头中的AcceptSpringBoot有对应的10种MessageConvert可以支持写出对应的媒体类型,比如application/xml、application/json…… 我们还可以通过向容器放入一个WebMvcConfigurer 实现定制化SpingMVC&#xff0…

Android 深入系统完全讲解(7)

7 如何调试代码,JNI,Framework,APP 调试技巧是我在每入职一家新公司,都会给大家分享的。在 MTK 官方培训还是需要编译才能调试的时候,我无意中调试 MMS 代码,发现跟进了系统代码,调试了相关的匹配搜索子串代…

Java多线程(一)——Hotspot的锁( Synchronized)

1. 锁的概念 Java语言为了解决并发编程中存在的原子性、可见性和有序性问题,提供了一系列和并发处理相关的关键字,比如synchronized、volatile、final、concurren包等 2. Synchronized的基本使用 synchronized是Java提供的一个并发控制的关键字。主要…

【LINUX】工具篇--gcc的使用

我们知道,在程序翻译的过程中一般会经过四个步骤预处理头文件展开,条件编译,宏替换,去注释编译C语言代码--->汇编代码汇编汇编代码--->可重定向目标二进制文件(只把自己写的函数形成二进制文件,此阶段无法被执行…

Vue3一学就会系列:02 模板语法与计算属性

系列文章目录 Vue3一学就会系列:01 vue3安装与搭建项目 文章目录系列文章目录文本插值html 插入属性绑定常用指令计算属性总结文本插值 最基本的数据绑定形式是文本插值,它使用的是“Mustache”语法 (即双大括号): 知识点: {{}}…

(考研湖科大教书匠计算机网络)第一章概述-第二节:三种交换方式(电路交换、报文交换和分组交换)

文章目录一:电路交换(Circuit Switching)二:分组交换(Packet Switching)三:报文交换(Message Switching)四:三种交换方式对比(1)概述&…

一个自定义的html5视频播放器

// 功能:// 1.视频的播放与暂停(图标变化)// 2.总时间的显示// 3.当前时间的显示(进度)// 4.进度条的显示// 5.跳跃播放// 6.全屏<!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta name"viewport"…

利用决策树学习基金持仓并识别公司风格类型

摘要与声明 1&#xff1a;本文主要利用决策树学习基金持仓并反向推理出一套更受市场认可的风格划分标准&#xff0c;最后借助该模型识别公司所属的风格类型&#xff1b; 2&#xff1a;本文主要为理念的讲解&#xff0c;模型也是笔者自建&#xff0c;文中假设与观点是基于笔者…

JVM的内存配置参数

VM的结构问题&#xff1a;JVM分两块&#xff1a;PermanentSapce和HeapSpace&#xff0c; HeapSpace 【old new{Eden&#xff0c;from&#xff0c;to}】 PermantSpace主要负责存放加载Class类级别的class本身&#xff0c;method&#xff0c;field等反射对象&#xff0c;一般不…

重磅指挥棒!2023年国资委央企指标考核体系从两利四率到一利五率变化解读

前几天&#xff0c;2023年的第三个工作日&#xff0c;国资委召开了中央企业负责人会议&#xff0c;提出了优化中央企业经营考核指标体系的六个指标 —— 一利五率&#xff0c;目标是一增一稳四提升。一增&#xff0c;就是确保利润总额增速高于全国GDP增速。一稳&#xff0c;资产…

小程序学习(1)-------小程序的结构及作用

获取APPID 开发-开发管理->开发设置&#xff08;新建项目时需要输入appid&#xff09; 小程序的文件结构 pages 用来存放所有小程序的页面 utils 用来存放工具性质的模块&#xff08;例如&#xff1a;格式化时间的自定义模块&#xff09; app.js 小程序项目的入口文件 ap…