提高系统可用性的那些架构策略[通俗易懂]

提高系统可用性的那些架构策略[通俗易懂]系统高可用面临的挑战有哪些?1.资源不可用在实际业务中,出现资源不可用的原因种类可能很多,有的概率很低,比如网线被挖断了,机房失火,地震等等导致网络不可用,有的概率相对来说很高比如服务器硬件资源不足,服务器故障等等。这些问题都可能会导致对应的资源不可用。2.资源不均衡由于系统架构设计的时候没有针对高并发和大流量进行可伸缩设计,导致无法应对并发很大的场景,出现系统瘫痪甚至崩溃。3.节点功能异常这种情况是最常见的,由于代码是人写的,bug和漏洞都是难免的,所以在实际业务中大概率会出现功能

大家好,又见面了,我是你们的朋友全栈君。

系统高可用面临的挑战有哪些?

1.资源不可用

在实际业务中,出现资源不可用的原因种类可能很多,有的概率很低,比如网线被挖断了,机房失火,地震等等导致网络不可用,有的概率相对来说很高比如服务器硬件资源不足,服务器故障等等。这些问题都可能会导致对应的资源不可用。

2.资源不均衡

由于系统架构设计的时候没有针对高并发和大流量进行可伸缩设计,导致无法应对并发很大的场景,出现系统瘫痪甚至崩溃。

3.节点功能异常

这种情况是最常见的,由于代码是人写的,bug和漏洞都是难免的,所以在实际业务中大概率会出现功能节点异常的问题。同时系统引入的一些第三方库或者中间件当中也有可能包含一些问题,会导致节点功能异常。

解决问题的思路和策略

1.尽可能避免问题发生

避免问题发生是最直接的解决思路,比如我们可以通过UPS(Uninterruptible Power System)来避免服务器断电。可以引入移动、电信两条网线,来避免由于运营商网络问题导致的服务器不可用。通过实现机房异地部署,防止由于地震等自然灾害导致的服务器不可用。增加冗余的机器,避免在特殊场景下资源不足的问题。

2.发生问题之后能实现故障迁移

通过实现服务和服务器的冗余部署,确保在某个节点出现问题之后,能够实现功能的平滑过渡,不会由于某个服务或者节点故障导致系统不可用。

3.降低故障对业务的影响

如果故障无法以正面的方式解决,我们就要努力降低故障带来的影响。流量太大的时候,我们可以通过限流,来保证部分用户可以正常使用,或者说通过对一些非核心业务进行降级处理,保证核心业务的可用性。

4.发生故障之后能够实现快速恢复

可以通过监控系统快速定位到故障节点,然后修复故障节点,使系统恢复到正常状态。

高可用方案的架构原则和方案

1.系统冗余无单点

确保系统的各个服务节点都是有冗余的,当一个节点出现问题的时候能切换到备用节点,保障系统的可用性。保障网络的可用性,也可以引入多条线路(如接入移动和联通两条线路),一条线路出问题的时候切换到备用线路。很多直播软件为了保障运行,就会接入多条线路。数据库也可以通过主库和从库的设计,实现数据库的冗余,提升可靠性。对于一些对可用性要求高的软件,会实现机房的异地冗余部署,避免由于地震等自然灾害导致的服务不可用。

2.支持水平扩展,可伸缩

为了应对大流量和高并发的出现,系统的各个节点需要是可伸缩的,支持水平扩展。可以通过Ngnix,将请求和压力分流到多台机器上,实现硬件机器的扩展。同时可以在每台机器上运行更多的服务实例,应对海量请求。也可以引入CDN,将部分静态资源放到CDN上,降低服务端的带宽压力。

3.系统可以进行降级操作

在服务器资源不够用的时候,为了保障运行,通常采用的手段有降级、限流和熔断。

降级: 比如双11的时候为了应对短时间内的高并发,淘宝就会暂时关闭部分非核心功能比如评论、返积分等来保障核心业务的正常运行。

限流:我们也可以通过设置Ngnix的并发数,进行限流操作,保障部分用户的正常业务,拒绝其它的请求,防止由于短时间的高并发引起系统瘫痪。

熔断: 当某个服务出现异常的时候,直接关闭该服务,在请求链路中绕过该服务,在后续服务正常之后再进行补偿操作。

4.允许出现状态差异的中间态

在高并发的场景下,很多时候为了提高系统可用性,会出现状态不一致的问题,比如修改状态保存到了缓存中而并没有落到数据库里,此时读取数据库的时候会出现状态不一致。系统应该允许出现暂时的状态不一致,只要能保证状态最终一致即可

5.完善的系统监控体系

完善的监控体系对于系统提前预警和问题排查定位以及修复问题之后的快速恢复都是很关键的。通过监控系统,我们可以实时诊断当前系统的运行状态怎么样。

高可用架构的落地实践

提高系统可用性的那些架构策略[通俗易懂]

1.通过引入两条网络线路,一主一备保障网络的高可用

2.负载均衡层进行双节点和Keepalived部署,当一个节点出问题的时候,切换到另一个节点上保障负载均衡的高可用。

3.负载均衡层通过设置并发数进行限流设置。

4.Web应用节点多节点部署,可根据需求进行伸缩扩展。同时负载均衡层通过路由切换对应的Web应用,当一个节点出问题的时候,快速切换到正常的节点上。

5.后台业务服务是无状态的可以进行多节点部署,可以根据需要进行伸缩扩展。并且当某个节点出问题之后,可以进行熔断操作,在调用链路中绕过对应的节点。

6.数据库通过读写分离分库分表,降低数据库的访问压力。

7.通过对数据库进行主从配置,当主库出问题的时候,从库马上顶上,确保数据访问的高可用。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/158684.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)
blank

相关推荐

  • pycharm在linux系统汉化,PyCharm中文乱码问题的解决

    pycharm在linux系统汉化,PyCharm中文乱码问题的解决这几天一直挺困扰的是使用PyCharm之后一直对中文的乱码,即使添加了很多别人说的类似于#coding:utf-8的语句但是还是报错,让我抓狂,但是今天终于找到了解决的办法,还真的是让人很高兴啊,哈哈哈这是报错的窗口:典型的无法识别中文,在头添加#coding:utf-8之后还是报错的状态,所以就用了下面的方法,首先,我用的是PyCharm的4.5.3最新的版本进入设置界面,找到Editor–…

  • 模糊神经网络FNN「建议收藏」

    模糊神经网络FNN「建议收藏」分别对调速,调压,综合系统加入FNN控制器,使PID的输出达到最小值。其中关于FNN的理论部分,由于您已经以供了较多的文献资料,这里就不再进行叙述,这里主要说明一下最后的仿真效果和S函数的大致设计流程。这里仅对调速模型进行设计说明。为了对比加入FNN控制器后的性能变化,我们同时要对有FNN控制器的模型以及没有FNN控制器的模型进行仿真,仿真结果如下所示:非FNN控制器的结构:其仿真结果如下所示:FNN控制器的结构:其仿真…

    2022年10月23日
  • robotium例子

    robotium例子android基础知识12:android自动化测试04—Robotium:实例(上):http://daimajishu.iteye.com/blog/1556631robotium方法学习实例:http://blog.csdn.net/gzh0222/article/details/7335666Android自动化测试—Robotium:实例(上):http:/

  • websocket 在线工具_websocket添加请求头

    websocket 在线工具_websocket添加请求头Websocket在线模拟请求工具:支持内网和外网Websocket测试连接格式为ws://IP或域名:端口(示例ws://127.0.0.1:8080)

  • SpEL 表达式_strpbrk函数

    SpEL 表达式_strpbrk函数前言:Spring表达式语言(简称SpEL)是一种与JSP2的EL功能类似的表达式语言,它可以在运行时查询和操作对象图。与JSP2的EL相比,SpEL功能更加强大,它甚至支持方法调用和基本字符串模板函数。SpEL可以独立于Spring容器使用——只是当成简单的表达式语言来使用;也可以在Annotation或XML配置中使用SpEL,这样可以充分利用SpEL简化Spring的Bean配置。注:在…

  • setTimeout()和setInterval()在用法上有什么区别_setinterval返回值

    setTimeout()和setInterval()在用法上有什么区别_setinterval返回值setTimeout与setTimeinterval的使用

发表回复

您的电子邮箱地址不会被公开。

关注全栈程序员社区公众号