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

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

如何保证Kafka不丢失消息

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

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

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

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

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

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

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

用 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 的包管理工具,它只能安装适用…

CAN-位填充

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

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

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

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

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

统计学之常见的分布介绍

统计学中常见的分布有: 1. 正态分布(Normal Distribution):也称为高斯分布,是最常见的分布之一,具有钟形曲线,对称且均值和标准差可以完全描述该分布。 2. 二项分布(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 数据…

斯坦福 Stats60:21 世纪的统计学:第十五章到第十八章

第十五章:比较均值 原文:statsthinking21.github.io/statsthinking21-core-site/comparing-means.html 译者:飞龙 协议:CC BY-NC-SA 4.0 我们已经遇到了许多情况,我们想要询问样本均值的问题。在本章中,我们…

Keepalived 双机热备

本章主要内容: Keepalived 双机热备基础知识学会构建双机热备系统学会构建LVSHA 高可用群集 简介 在这个高度信息化的IT时代,企业的生产系统,业务运营,销售和支持,以及日常管理等环节越来越依赖于计算机和服务&#…

Shape-IoU——综合考量边框形状与尺度的度量

今天看到一篇文章主要是提出了一种更有效的IOU度量方法,论文地址在这里,如下所示: 摘要 边界盒回归损失作为检测器定位分支的重要组成部分,在目标检测任务中起着重要作用。现有的边界框回归方法通常考虑GT框和预测框之间的几何关…

使用ffmpeg进行视频截取

1 原始视频信息 通过ffmpeg -i命令查看视频基本信息 ffmpeg version 6.1-essentials_build-www.gyan.dev Copyright (c) 2000-2023 the FFmpeg developersbuilt with gcc 12.2.0 (Rev10, Built by MSYS2 project)configuration: --enable-gpl --enable-version3 --enable-sta…

SqlAlchemy使用教程(四) MetaData 与 SQL Express Language 的使用

四、Database MetaData 与 SQL Express Language 的使用 MetaData对象用于描述表结构,SQL Express Language是DBAPI SQL的统一封装器。MetaData 与SQL Express 语句可以在Core层使用,ORM层基于MetaData, SQL Express基础上做了进一步抽象。本章将介绍在…

Python简单ORM实现:不使用元类的灵活数据操作与查询构建【第29篇—python:ORM】

文章目录 不使用元类的简单ORM实现Field类Compare类Model类Query类示例使用扩展查询功能支持 LIMIT 和 OFFSET支持 GROUP BY 和 HAVING 示例用法总结 不使用元类的简单ORM实现 在 Python 中,ORM(Object-Relational Mapping)是一种将对象和数…

基于uniapp的在线课程教学系统

介绍 项目背景: 随着互联网的快速发展,在线教育已经成为一种流行的学习方式。针对这一趋势,我们决定开发一个基于UniApp的在线课程教学系统。该系统旨在为学生提供方便快捷的在线学习体验,同时也为教师提供一个高效管理课程的平台…