高可用架构去中心化重要?

1 背景

在互联网高可用架构设计中,应该避免将所有的控制权都集中到一个中心服务,即便这个中心服务是多副本模式。
对某个中心服务(组件)的过渡强依赖,那等同于把命脉掌握在依赖方手里,依赖方的任何问题都可能成为你不稳定的因素。
弱化强依赖,实现可降级交互,是一种设计理念和架构模式,目的是将系统的控制权分散到各个节点,避免出现单点故障或中心化控制的问题。
这一点,我们称之为『去中心化』

image

具体来说,去中心化架构中的每个节点都具有自主性,可以独立地处理和存储数据,并且节点之间通过特定的协议或机制进行通信和协作。这种架构可以提高系统的可用性和可扩展性,降低对单个节点的依赖性,增强系统的可靠性和容错能力。

2 经典去中心化架构设计

我们去分析业内的很多经典的软件设计,都可以看到他们为了实现降低对中心服务(组件)的依赖,做了很多方案优化。

2.1 微服务注册中心

image


如上图所示:
1、Provider 服务提供者:服务向注册中心注册服务信息,即 服务 -> 服务实例 数据模型, 同时定时向注册中心汇报健康检查,如果一定时间内(一般90s)没有进行心跳汇报,则会被注册中心剔除。
所以这边注意,注册中心感知到应用下线并进行剔除这个过程可能比较长。
2、Consumer 服务消费者:服务向注册中心获取所需服务对应的服务实例信息。这边需要注意,在Spring Cloud生态中,一般通过实时订阅或者定时拉取方式从注册中心中获取所需的服务实例信息。
3、Remote Call 远程调用:Consumer从注册中心获取的Provider的实例信息,通过 Load Balance的策略,确定一个实际的实例,发起远程调用。

去中心化分析:很明显,我们的注册和订阅都依赖注册中心(Eureka、ZK、Etcd或者其他...),如果这个注册中心挂了,我们连对服务的访问路由地址都无法匹配,请求都没办法发出去。
所以现在一般Client端会缓存依赖服务的地址列表到本地,即便注册中心挂了,在短时间内也会正常运行,只是新增或者更新的服务实例无法获取到。

2.2 分布式存储系统

分布式存储系统是实现去中心化的一种重要实现方式。通过将数据分散存储在多个节点上,而不是集中存储在中心服务器上,分布式存储系统可以避免单点故障和中心化控制的问题,提高系统的可用性和可扩展性。

在分布式存储系统中,每个节点都有自己的存储设备和计算能力,可以独立地存储和检索数据。节点之间通过特定的协议或机制进行通信和协作,共同维护系统的数据和功能。这种架构可以降低对单个节点的依赖性,增强系统的可靠性和容错能力。
 

image


如图,B Region 如果挂了,流量会调度到A Region中,如果A、B均挂了,则会启动Backups Region,当然,数据可能会有一些延迟,但依然能保证系统正常提供服务。

3 常用的架构设计方案

业内有一些优秀的设计经验,用于规避中心故障导致的服务雪崩。

3.1 多副本模式+重试

image


比如你的中心服务有20个副本(实例),其中一个副本(实例)出故障,导致执行返回5xx,那么第二次请求的时候大概会有 19/20 的成功概率。
负载均衡模式默认是RR,所以实例越多,实际上重试成功的概率会越高。

3.2 多副本模式+异常隔离

image


如果依赖的中心服务存在多副本,那么即使存在不健康副本(实例),只要是被自动驱逐之后,服务依旧是健康的。
但是驱逐需要保障剩余的副本能够支撑峰值流量的冲击。

3.3 强大的主备模式

标准两地三中心建设(同城主、同城备、异地备),避免单机房故障,甚至区域自然灾害导致系统无法提供正常服务。

image

3.4 极限兜底:如缓存保证依赖可降级

image


类似微服务注册中心的做法,用一层缓存做兜底,一般来说数据库跟缓存同时出故障的概率不高。
笔者的团队就有一个案例:依赖的Etcd服务,用于路由分发的配置信息存储,失联了4小时,靠着缓存保证了大部分流量的正常运行。

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

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

相关文章

个性化定制的知识付费小程序,为用户提供个性化的知识服务

明理信息科技知识付费saas租户平台 随着知识经济的兴起,越来越多的人开始重视知识付费,并希望通过打造自己的知识付费平台来实现自己的知识变现。本文将介绍如何打造自己的知识付费平台,并从定位、内容制作、渠道推广、运营维护四个方面进行…

R语言【paleobioDB】——pbdb_taxa():获得多个类群名的基本信息

Package paleobioDB version 0.7.0 paleobioDB 包在2020年已经停止更新,该包依赖PBDB v1 API。 可以选择在Index of /src/contrib/Archive/paleobioDB (r-project.org)下载安装包后,执行本地安装。 Usage pbdb_taxa (...) Arguments 参数【...】&#…

如何保证Kafka不丢失消息

丢失消息有 3 种不同的情况,针对每一种情况有不同的解决方案。 生产者丢失消息的情况消费者丢失消息的情况Kafka 弄丢了消息 生产者丢失消息的情况 生产者(Producer) 调用send方法发送消息之后,消息可能因为网络问题并没有发送过去。所以,我们…

RocketMq基础

转载:https://blog.csdn.net/SmallCat0912/article/details/128535930 可视化平台镜像 # 拉取镜像 docker pull rocketmqinc/rocketmq:4.3.2# 修改镜像名字 docker tag 【镜像id】 rocketmq:4.3.2可视化平台镜像: # 拉取镜像 docker pull styletang/rocketmq-cons…

@Controller层自定义注解拦截request请求校验

一、背景 笔者工作中遇到一个需求,需要开发一个注解,放在controller层的类或者方法上,用以校验请求参数中(不管是url还是body体内,都要检查,有token参数,且符合校验规则就放行)是否传了一个token的参数&am…

从车联网到智慧城市:智慧交通的革新之路

一、引言 1、智慧城市的概念和发展背景 智慧城市(Smart City)是指以信息技术为基础,运用信息与通信等手段,对城市各个核心系统各项关键数据进行感测、分析、整合和利用,实现对城市生活环境的感知、资源的调控&#x…

Linux下的HTTPS配置:从证书到安全连接

在当今的互联网环境中,数据传输的安全性越来越受到重视。HTTPS,作为HTTP的安全版本,通过使用SSL/TLS协议来加密数据传输,确保了数据在传输过程中的安全。在Linux环境下,配置HTTPS需要从证书的生成到服务器的配置进行一…

C++嵌入式编程:硬件控制与物联网

C是一种功能强大的编程语言,被广泛应用于嵌入式系统的开发和物联网(IoT)应用程序的编写。C具有高性能、灵活性以及强大的硬件控制能力,使其成为嵌入式编程和物联网开发的理想选择。在本文中,我们将讨论C在硬件控制和物…

SpringBoot教程(一)|认识Spring Boot

SpringBoot教程(一)|认识Spring Boot 安得广厦千万间,大庇天下寒士俱欢颜,风雨不动安如山,呜呼,何时眼前突兀见此屋,吾庐独破受冻死亦足! 1.1 初识SpringBoot Spring Boot是由Pivotal团队提供的全新框架,…

用 YAML 文件配置 CI/CD 管道

MSBuild 参数: 在使用 MSBuild 命令行生成打包项目(就像在 Visual Studio 中使用向导生成项目一样)之前,生成过程可以通过编辑 Package.appxmanifest 文件中 Package 元素的 Version 属性,来对生成的 MSIX 包进行版本控制。 在 Azure Pipelines 中,可以使用某个表达式来…

内网yum仓库 ftp;http方式

ftp方式 服务端 客户端 vim /etc/yum.repos.d/ftp.repo http方式 服务端 yum install httpd -y systemctl start httpd cd /var/www/html/ mkdir centos7 mount /dev/sr0 /var/www/html/centos7 客户端

pip与pip3的区别

pip 和 pip3 都是 Python 的包管理工具,用于安装第三方库。它们的区别在于: pip 是 Python 2 和 Python 3 通用的包管理工具,它可以安装适用于 Python 2 和 Python 3 的库。pip3 是专门用于 Python 3 的包管理工具,它只能安装适用…

C语言项目总结

#include #include<stdarg.h> using namespace std; void LogInfo(const char szFormat,…) { char szBuf[4096]{}; va_list args; //第一步 va_start(args,szFormat); //第二步 vsnprintf(szBuf,4096,szFormat,args); //第三步 va_end(args); //第四步 //在这里对字符串…

2024亚洲智慧应急展|2024第十一届亚洲(北京)国际智慧城市安全与应急救援装备展

2024亚洲智慧应急展|2024第十一届亚洲&#xff08;北京&#xff09;国际智慧城市安全与应急救援装备展 展会别称&#xff1a;2024应急展|应博会|智慧应急展|应急产业展|应急救援展|应急装备展|应急安全展|应急防灾展 城市应急展|应急消防展|交通安全应急展|航空应急展|水域应…

CAN-位填充

位填充定义&#xff08;Bit Stuffing&#xff09; 当CAN节点发送 逻辑电平&#xff08;显性dominant或隐性recessive&#xff09;为持续相同的5位时&#xff0c;它必须添加一位反向电平。 CAN接收 节点会自动删除这个新增的额外电平位。 位填充作用 1---位填充是为了防止突发…

【2024-01-15】某安居客验证码分析-滑块验证码

声明:该专栏涉及的所有案例均为学习使用,严禁用于商业用途和非法用途,否则由此产生的一切后果均与作者无关!如有侵权,请私信联系本人删帖! 文章目录 一、抓包分析二、参数分析1.请求getInfoTp2.校验checkInfoTp一、抓包分析 网址: aHR0cHM6Ly9hcGkuYW5qdWtlLmNvbS93ZWI…

任务15:使用Hive进行全国气象数据分析

任务描述 知识点&#xff1a; 使用Hive进行数据分析 重 点&#xff1a; 掌握Hive基本语句熟练使用Hive对天气数据进行分析 内 容&#xff1a; 使用Hive创建外部表使用Hive对数据进行统计分析 任务指导 1. 使用Hive创建基础表 将China_stn_city.csv文件上传到HDFS的/…

统计学之常见的分布介绍

统计学中常见的分布有&#xff1a; 1. 正态分布&#xff08;Normal Distribution&#xff09;&#xff1a;也称为高斯分布&#xff0c;是最常见的分布之一&#xff0c;具有钟形曲线&#xff0c;对称且均值和标准差可以完全描述该分布。 2. 二项分布&#xff08;Binomial Dist…

Unity3D学习之数据持久化——PlayerPrefs

文章目录 1. 概念2. 存储2.1 存到内存当中2.2 存到硬盘当中2.3 局限性2.4 相同键会覆盖 3.读取3.1 int型3.2 float型3.3 string型3.4 判断数据是否存在 4. 删除数据5. 存储位置6. 反射6.1 判断一个类型的对象是否可以让另一个类型为自己分配空间6.2 通过反射获得泛型类型 7 数据…

spring boot 同一方法中如何使用多数据源

1、我使用的是mybatis-plus&#xff0c;思路是重写mp的Iservice借口的方法&#xff0c;比如list、insert、update这些方法 2、以list方法为例&#xff0c;这里我重写了list方法&#xff0c;然后在list方法增加DataSource注解&#xff0c;这样就可以了。 Service public class …