架构设计复杂度-高可用问题

metashit metashit     2023-04-05     227

关键词:

高可用指的是系统无中断的执行功能的能力

一个系统不可能一直无中断的执行下去,干扰因素有三个方面

  1. 硬件因素,机器宕机
  2. 软件故障,软件BUG
  3. 不可抗因素,地震、火灾、断电等

 


解决高可用问题的方案

 本质上通过数据冗余备份和失效转移解决高可用问题,一台机器变成多台机器,单机变成集群架构

 从高可用种类角度解决高可用问题:

  • 任务分配器解决计算高可用问题,同一服务组件部署在多个服务器上
  • 异地备份解决存储高可用问题,数据存储在多台服务器上

 从引起高可用问题的因素角度解决高可用问题:

   软件:通过软件工程质量保证,通过预发布验证、严格测试、灰度发布等手段解决上线服务的故障

   硬件:应用层:负载均衡设备结合应用服务器集群通过心跳检测当应用服务器不可用时从服务器集群移除(应用层要进行无状态设计,应用逻辑和上下文分开)

      服务层:这些服务层硬件被应用层通过分布式服务框架(如Dubbo)访问,分布式框架在应用层程序中实现软件负载均衡,通过服务注册中心提供服务层硬件有效性检测,

          不可用则通知客户端程序修改服务列表,同时移除响应服务器

      数据层:数据写入时进行数据同步复制实现数据冗余备份,数据服务器宕机时,应用程序访问切换数据服务器

   不可抗:不可抗常常引起硬件的问题,常使用硬件因素的解决方案,对于玄学问题,可以模仿B站烧香


 

高可用的种类

  1. 计算高可用
  2. 存储高可用

  计算高可用的复杂度来源:

    任务分配器的增加(成本、性能、可维护性)、任务分配器与业务服务器的交互(需要管理连接)、任务分配器的算法

  存储高可用的复杂度来源:

    因为数据传输延迟导致的数据不一致性问题,CAP(一致性、可用性、分区容错性)三者需要权衡平衡取舍问题,其作者给出0.9+0.9+0.7的措施


 

高可用系统面临的理论局限性

  CAP定理


 

如何判断当前系统是否处于高可用状态(高可用方案带来的新问题)

  不要被字面意思迷惑,对于单台计算机来说,是否处于中断运行状态还是很好判断的,以下重点讨论的是,如何在集群中判断一个系统高可用,多个计算机到底哪个出了故障(其他正常的计算机应该处于一致状态),此类问题常见名词:心跳检测

  以下为决策方案:

  • 中心独裁式
  • 协商式(master-slave)
  • 民主式

  中心独裁决策一旦中心崩溃,决策瘫痪。

  协商式决策有一个痛点,当协商双方信息交换通路出现问题,状态决策无法选举出master和slave,通常解决方案是在两台机器之间增加多条通路,但这样引入了新问题,即多条通路信息的取舍问题。

  民主式类似区块链时用的决策算法,民主决策有一个固有的缺陷,即脑裂(选举出来多个结果),脑裂通常用“投票节点数必须超过系统总节点数的一半”策略解决。


高可用和高可靠

  高可用指的是正常提供服务的概率,数据指标常为故障恢复时间

  高可靠指的是出问题的概率,数据指标常为故障出现次数


通过冗余·实现的高可用也会出现一个通用问题:集体故障

 

成为架构师课程系列高并发系统设计的三大目标:高性能高可用可扩展

...五个九(99.999%)的可用性,无论是设计难度还是方案的复杂度,都不是一个级别的。 查看详情

01overview

...一系列的新的设计问题。架构设计本身是为了解决软件的复杂度。架构设计并不是要面面俱到,不需要每个架构都具备高性能,高可用,高扩展等特点,而是要识别出复杂点,然后又针对性的解决问题。“业界A公司的架构是X... 查看详情

高可用架构(上)

...景在学习完各种高性能发实现方案后,就需要对三大复杂度一直的高可用进行开刀了,在高可用方面主要有哪些东西是我们需要考虑的呢?接下来将从三个方面逐一分析。2.理论在设计高可用架构理论方面,我们... 查看详情

高可用架构(上)

...景在学习完各种高性能发实现方案后,就需要对三大复杂度一直的高可用进行开刀了,在高可用方面主要有哪些东西是我们需要考虑的呢?接下来将从三个方面逐一分析。2.理论在设计高可用架构理论方面,我们... 查看详情

面向业务的立体化高可用架构设计

面向业务的立体化高可用架构设计摘要:为了实现阿里九游游戏接入系统的业务高可用,技术人员跳出传统的面向系统的高可用的思路,转而从业务的角度来整体考虑高可用,最终实现了一套立体化的高可用架构,本文逐一展示... 查看详情

架构高可用高并发系统的设计原则

通过学习《亿级流量网站架构核心技术》及《linux就该这么学》学习笔记及自己的感悟:架构设计之高可用高并发系统设计原则,架构设计包括墨参考技术A通过学习《亿级流量网站架构核心技术》及《linux就该这么学》学习笔记... 查看详情

高并发高可用架构设计之目录

简介架构图 查看详情

高并发高可用架构设计之目录

简介架构图 查看详情

阿里游戏高可用架构设计实践

...   今天读了李云华老师写的《阿里游戏高可用架构设计实践 》,有一些感受想分享一下。  印象很深的一句话那就是他最开始说的“把韵味的锅让研发去背!”也就是说,高可用的系统是设计出来的... 查看详情

架构学习架构设计目的和复杂度

架构设计的真正目的为了解决软件系统复杂度带来的问题。复杂度来源:高性能、高可用、可扩展性、低成本、安全、规模1.高性能软件系统中高性能带来的复杂度主要体现在两方面,一方面是单台计算机内部为了高性能带来的... 查看详情

亿级流量系统架构之如何设计全链路99.99%高可用架构

...日数据的几十毫秒级别的查询性能。最终,整套查询架构抗住每秒10万的并发查询请求,都没问题。本文作为这个架构演进系列的最后一篇文章,我们来聊聊高可用这个话题。所谓的高可用是啥意思呢?简单来说&#... 查看详情

基于devops微服务以及k8s的高可用架构探索与实现

现代的企业面临着一个VUCA的时代,高可用系统架构面对着诸多不确定性带来的影响和挑战,如何才能能够突破困境,使得复杂的系统仍然能保持业务的连续性。业务的弹性扩容也同时会对高可用性的架构造成影响,在实践中,... 查看详情

50|深入浅出网站高可用架构设计

  查看详情

架构设计之六个复杂度来源

...这篇文章中说过,架构设计的目的就是为了解决软件系统复杂度带来的问题。但是究竟复杂度有哪些呢?所以今天借此说说软件复杂度的六个来源:1.高性能;2.高可用;3.可扩展性;4.低成本;5.安全;6.规模; 一、高性能对性能孜孜... 查看详情

高可用与可伸缩架构(代码片段)

分布式业务系统设计的时候,基本的问题有:1.高可用2.可伸缩3.容错性(弹力设计)4.高性能以上是最基本的业务诉求。而在分布式基础系统设计的时候,基本的问题有:1.体系结构2.进程3.通信4.命名5.同步6.一致性与复制7.容错性8.... 查看详情

系统架构高可用系统设计原则01(代码片段)

...支持业务的快速恢复业务可以通过以上三个方面建立三、架构设计的原则:(1)无状态设计①无状态服务(statelessservice)对单次请求的处理,不依赖其他请求,也就是说,处理一次请求所需的全部信息,要么都包含在这个请求... 查看详情

数据库架构设计思路

 一、58同城数据库架构设计思路(1)可用性设计解决思路:复制+冗余副作用:复制+冗余一定会引发一致性问题保证“读”高可用的方法:复制从库,冗余数据,如下图  带来的问题:主从不一致解决方案:见下文保... 查看详情

redis高可用架构设计以及常见问题分析(代码片段)

Redis的使用非常简单,只需要安装配置一下就能轻松上线,短时间不会出现什么问题,但是随着时间推移,Redis实例增多,客户端调用繁杂,真正的问题开始出现,整个关系就变得非常乱。Redis从使用角... 查看详情