首页 数据库 mysql教程 构建高可用系统的常用招数

构建高可用系统的常用招数

Jun 07, 2016 pm 04:32 PM
互联网 可用 常用 构建 系统 高可用

互联网等系统对于可用性都非常的重视,构建一个高可用的系统,有些常用的招数,在这里简单的说下,其实多数都是靠各互联网公司在实战中摸爬滚打积累出来的“血泪”经验。 1. 监控和报警 没有监控和报警的在线系统,就像是开着一辆没有仪表盘的车一样,因此如

互联网等系统对于可用性都非常的重视,构建一个高可用的系统,有些常用的招数,在这里简单的说下,其实多数都是靠各互联网公司在实战中摸爬滚打积累出来的“血泪”经验。

1. 监控和报警
没有监控和报警的在线系统,就像是开着一辆没有仪表盘的车一样,因此如果没有监控和报警,其他一切都是浮云,这点说起来容易,做起来却是比较折腾的,例如监控点需要有哪些,怎么报警是合适的。

这个的评估比较容易,就是故障发生是不是都是监控和报警先发现的,故障发现率是衡量这件事做的咋样的一个不错的指标。

2. SPoF(Single Point of Failure)
这是高可用系统中最不允许的现象,应用如果只部署在一台机器上,就意味着只要这台机器出现问题,就不可用了,为了避免这个问题,通常会采用cluster、主备的方式,实在不好做的情况下才用主备,例如带状态的DB等,而对于不带状态的,最好还是用cluster的方式,因为主备方式实现较麻烦,另外不具备伸缩性。

单台机器这只是SPoF中的一个狭义的点,更放大看还会有单框机器(如果是刀框的话)、单个机柜、单个网络核心路由、单个机房、单个城市,可见一个真正的高可用系统要解决的技术问题是不少的,并且是要付出较高的成本的。

3. 解耦
业务逻辑在实现上总是会有很多关键的逻辑,还有一些附加的逻辑,例如在做完操作后要发个短信通知什么的,如果把这些逻辑也放到主逻辑过程中一起实现,可能会出现的问题就是这些边缘逻辑出问题,然后导致主逻辑挂了,因此在实现系统时需要做一定的解耦,关键的逻辑同步完成,而非关键逻辑则通过异步的消息系统来完成,这是在设计高可用系统时一个非常关键的点。

除了后端这种实现的解耦外,前端页面的构成其实也需要考虑好解耦,例如一个页面上,有些内容即使不显示也不会出什么问题的,对于这些内容应该通过ajax等方式来实现和主要内容解耦。

4. 隔离
一个业务系统,必然会涵盖多种多样的功能,而这些功能中必然会有重要的和不重要的,例如上面解耦后页面上有些不重要的内容会通过ajax来异步获取,而如果这个不重要的内容的生成和重要的内容生成是同一个系统的话,有可能会出现不重要的内容生成的代码处理慢,从而导致把共同的处理线程池的所有线程耗满。

为了解决这个问题,通常可以采用两种办法,一是拆分系统,直接把重要的和不重要的拆成两个应用,二是通过七层路由来分到不同的机器上,也可以是域名,这样系统仍然是同一个,七层路由对性能损害很大,慎用(除非是类似基于zk实现的软负载,然后在客户端执行的七层路由)。

除了重要功能和不重要功能外,还会出现耗资源和相对不怎么耗资源(包括很多种,例如DB连接..)、给重要用户和普通用户,对于这些情况,都需要采用上面的两种办法来做到隔离。

5. 容灾
一个在线运行的系统,不可避免的要面对各种灾难事件,而一个高可用的系统,必须做到在各种灾难事件面前坚挺的活着,为了做到这个,需要有N多的措施。

通常系统都会依赖到其他的一些系统,而这个时候首先要做的就是超时控制,看过N多的case,都是由于没有设置超时时间,从而在依赖的系统响应变慢的情况下,自己的系统的所有处理线程也被拖S的现象,因此所有的阻塞的wait的地方都一定要是带超时的,在线系统更能接受的是失败,响应慢绝对是在线系统的噩梦。

除了超时外,在代码的实现上需要做一些自动降级的策略,有些时候调用的这个后端系统可能不是那么关键的逻辑,那么在这种情况下,应支持自动的降级,当后端系统出现超时等问题的时候,直接忽略掉,例如很多应用都会有待读的消息数,当读不到的时候,其实不显示关系也不大,因此此时可以自动降级掉。

除了自动降级外,还需要有多种手动降级的策略,例如一个页面上的很多功能点都需要支持手工关闭的开关,这样可以在某些系统出现问题,或压力大时可以直接关闭掉,降低系统压力,一种典型的例子是例如高清晰的图片会消耗掉很多的带宽,如果带宽紧急的情况下,应该支持显示更低质量一点的图片,当然,这是有一定损害的降级,但相比系统全挂,显然是这个方式好。

自恢复能力也是系统设计时的重要考虑点,例如当依赖的系统出问题到恢复后,系统本身也要能自恢复,例如一个最简单的是依赖的一个系统挂了,不能说还得重启系统本身才能恢复。

自我保护能力是容灾中的重要点,例如需要处理的请求超过了处理能力,那这个时候应该拒绝,要做到这点,必须首先知道系统的处理能力到底是多少(小声的说一句:所有的模拟的压力测试都是无法反应系统的处理能力的,要拿到系统的处理能力必须是用真实的访问来测试,原因是数据、用户行为其实是无法模拟的或者说难度非常非常的高),除了处理能力的保护外,还应该做负载层面的保护,以避免某些情况下即使在处理能力范围内,负载出现飙高导致无法登陆机器处理故障的现象。

除了上面说的这些系统层面的策略外,容灾还需要考虑机房层面的容灾、地域的容灾。

从上面5点来说,要做到一个高可用的系统真心不容易,从编程技巧、系统设计以及基础设施(IDC)建设都需要作出巨大的努力,并且要付出巨大的成本,而对于一个高访问量的大规模系统而言,基本上所有认为不太可能发生的事其实都是会发生的,如果没有准备好的话,瞬间可用率就会大幅损失。

本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

热AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover

AI Clothes Remover

用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool

Undress AI Tool

免费脱衣服图片

Clothoff.io

Clothoff.io

AI脱衣机

Video Face Swap

Video Face Swap

使用我们完全免费的人工智能换脸工具轻松在任何视频中换脸!

热门文章

<🎜>:泡泡胶模拟器无穷大 - 如何获取和使用皇家钥匙
4 周前 By 尊渡假赌尊渡假赌尊渡假赌
北端:融合系统,解释
4 周前 By 尊渡假赌尊渡假赌尊渡假赌
Mandragora:巫婆树的耳语 - 如何解锁抓钩
3 周前 By 尊渡假赌尊渡假赌尊渡假赌

热工具

记事本++7.3.1

记事本++7.3.1

好用且免费的代码编辑器

SublimeText3汉化版

SublimeText3汉化版

中文版,非常好用

禅工作室 13.0.1

禅工作室 13.0.1

功能强大的PHP集成开发环境

Dreamweaver CS6

Dreamweaver CS6

视觉化网页开发工具

SublimeText3 Mac版

SublimeText3 Mac版

神级代码编辑软件(SublimeText3)

热门话题

Java教程
1672
14
CakePHP 教程
1428
52
Laravel 教程
1332
25
PHP教程
1277
29
C# 教程
1256
24
CUDA之通用矩阵乘法:从入门到熟练! CUDA之通用矩阵乘法:从入门到熟练! Mar 25, 2024 pm 12:30 PM

通用矩阵乘法(GeneralMatrixMultiplication,GEMM)是许多应用程序和算法中至关重要的一部分,也是评估计算机硬件性能的重要指标之一。通过深入研究和优化GEMM的实现,可以帮助我们更好地理解高性能计算以及软硬件系统之间的关系。在计算机科学中,对GEMM进行有效的优化可以提高计算速度并节省资源,这对于提高计算机系统的整体性能至关重要。深入了解GEMM的工作原理和优化方法,有助于我们更好地利用现代计算硬件的潜力,并为各种复杂计算任务提供更高效的解决方案。通过对GEMM性能的优

华为干昆 ADS3.0 智驾系统 8 月上市 享界 S9 首发搭载 华为干昆 ADS3.0 智驾系统 8 月上市 享界 S9 首发搭载 Jul 30, 2024 pm 02:17 PM

7月29日,在AITO问界第四十万台新车下线仪式上,华为常务董事、终端BG董事长、智能汽车解决方案BU董事长余承东出席发表演讲并宣布,问界系列车型将于今年8月迎来华为干昆ADS3.0版本的上市,并计划在8月至9月间陆续推送升级。 8月6日即将发布的享界S9将首发华为ADS3.0智能驾驶系统。华为干昆ADS3.0版本在激光雷达的辅助下,将大幅提升智驾能力,具备融合端到端的能力,并采用GOD(通用障碍物识别)/PDP(预测决策规控)全新端到端架构,提供车位到车位智驾领航NCA功能,并升级CAS3.0全

苹果16系统哪个版本最好 苹果16系统哪个版本最好 Mar 08, 2024 pm 05:16 PM

苹果16系统中版本最好的是iOS16.1.4,iOS16系统的最佳版本可能因人而异添加和日常使用体验的提升也受到了很多用户的好评。苹果16系统哪个版本最好答:iOS16.1.4iOS16系统的最佳版本可能因人而异。根据公开的消息,2022年推出的iOS16被认为是一个非常稳定且性能优越的版本,用户对其整体体验也相当满意。此外,iOS16中新功能的添加和日常使用体验的提升也受到了很多用户的好评。特别是在更新后的电池续航能力、信号表现和发热控制方面,用户的反馈都比较积极。然而,考虑到iPhone14

常用常新!华为Mate60系列升级HarmonyOS 4.2:AI云增强、小艺方言太好用了 常用常新!华为Mate60系列升级HarmonyOS 4.2:AI云增强、小艺方言太好用了 Jun 02, 2024 pm 02:58 PM

4月11日,华为官方首次宣布HarmonyOS4.2百机升级计划,此次共有180余款设备参与升级,品类覆盖手机、平板、手表、耳机、智慧屏等设备。过去一个月,随着HarmonyOS4.2百机升级计划的稳步推进,包括华为Pocket2、华为MateX5系列、nova12系列、华为Pura系列等多款热门机型也已纷纷展开升级适配,这意味着会有更多华为机型用户享受到HarmonyOS带来的常用常新体验。从用户反馈来看,华为Mate60系列机型在升级HarmonyOS4.2之后,体验全方位跃升。尤其是华为M

Linux和Windows系统中cmd命令的区别与相似之处 Linux和Windows系统中cmd命令的区别与相似之处 Mar 15, 2024 am 08:12 AM

Linux和Windows是两种常见的操作系统,分别代表了开源的Linux系统和商业的Windows系统。在这两种操作系统中,都存在着命令行界面,用于用户与操作系统进行交互。在Linux系统中,用户使用的是Shell命令行,而在Windows系统中,用户使用的是cmd命令行。Linux系统中的Shell命令行是一个非常强大的工具,可以完成几乎所有的系统管理任

Oracle数据库中修改系统日期方法详解 Oracle数据库中修改系统日期方法详解 Mar 09, 2024 am 10:21 AM

Oracle数据库中修改系统日期方法详解在Oracle数据库中,修改系统日期的方法主要涉及到修改NLS_DATE_FORMAT参数和使用SYSDATE函数。本文将详细介绍这两种方法及其具体的代码示例,帮助读者更好地理解和掌握在Oracle数据库中修改系统日期的操作。一、修改NLS_DATE_FORMAT参数方法NLS_DATE_FORMAT是Oracle数据

系统字体存储路径在哪里 系统字体存储路径在哪里 Feb 19, 2024 pm 09:11 PM

系统字体在哪个文件夹在现代的计算机系统中,字体起着至关重要的作用,它影响着我们的阅读体验和文字表达的美观程度。而对于一些热衷于个性化设置和自定义的用户来说,了解系统字体的存储位置就显得尤为重要。那么,系统字体究竟保存在哪个文件夹呢?本文将为大家一一揭晓。在Windows操作系统中,系统字体存放在一个名为“Fonts”的文件夹里。这个文件夹默认位于C盘的Win

构建流畅无阻:如何正确配置Maven镜像地址 构建流畅无阻:如何正确配置Maven镜像地址 Feb 20, 2024 pm 08:48 PM

构建流畅无阻:如何正确配置Maven镜像地址在使用Maven构建项目时,配置正确的镜像地址是非常重要的。正确配置镜像地址可以加快项目构建的速度,避免网络延迟等问题。本文将介绍如何正确配置Maven镜像地址,并给出具体的代码示例。为什么需要配置Maven镜像地址Maven是一个项目管理工具,可以自动化构建项目、管理依赖、生成报告等。在Maven构建项目时,通常

See all articles