分布式系统架构技术分析(二)

简介: 在前一篇《分布式系统架构技术分析(一)》中,我们已经对分布式系统的主要特征、组成要素及运行机制进行了初步的分析。

原创声明:本文系作者原创,谢绝个人、媒体、公众号或网站未经授权转载,违者追究其法律责任。


在前一篇《分布式系统架构技术分析(一)》中,我们已经对分布式系统的主要特征、组成要素及运行机制进行了初步的分析。当然,真实构建和运行一个分布式系统涉及的细节要比文章中阐述的复杂很多,如何保障大型分布式系统的低成本和高可用,是很有挑战性的工作。其中容量规划和容灾管控是两个重点。

容量规划

分布式环境下的容量规划主要是满足日常业务增加对于容量的要求,以及应对突发的活动带来的流量高峰。日常容量规划的方法是根据业务增加的趋势以及业务增长需要达到的目标,提前几个月将该容量准备好。针对突发活动的容量规划,需要提前制定业务指标,包括涉及的活动业务场景、每个场景的每秒并发访问量、请求成功率、请求响应时间等,评估的方法主要有单机容量评估和集群容量评估,涉及的评估对象主要有网络设备、在线应用服务器、在线存储服务器、近线实时计算服务器和离线计算服务器。

单机容量评估

应用服务器单机的处理能力估算公式 TPC-C = ∑ (每秒钟服务处理量 标准的服务性能比率) / (1 - 冗余率),比如 A 应用同时提供 serviceX 和 serviceY,在一秒内需要同时处理 serviceX 1000 笔和 serviceY 2000 笔,每个 serviceX 的标准的服务性能比率为 0.5,每个 serviceY 的标准的服务性能比率为 2,考虑 30% 的系统冗余率,那该应用服务器单机处理能力(tpmc) = ((1000 0.5) + (2000 2)) / (1 – 30%) = 6428。每个应用服务器根据自己系统提供的服务以及访问量计算出单机的处理能力。 存储服务器单机的处理能力除了考虑请求处理能力的估算外,还需要考虑硬盘的容量,主要估算的方法为每条数据库记录需要的硬盘空间,秒级需要提供的并发访问数,提供该并发能力持续的时间,估算的公式为 = ∑(SQL 每秒钟处理量 SQL 记录需要的空间) * 时间,计算出在日常和活动峰值期间需要的硬盘容量,为了保障数据库空间够用,需要冗余 30% 的硬盘空间。 网络设备的容量估算主要涉及网络的 IP 资源、网络上行和下行带宽容量、网络延迟,评估的方法主要是根据业务峰值需要的网络流量进行带宽合并计算,按网络流量的上限估算网络带宽容量,IP 资源根据整体业务需要的 VM 资源数量来估算。

集群容量评估
分布式环境下的集群容量评估根据业务执行的链路,把涉及的网络设备、应用服务器、存储服务器等串联起来考虑,将业务指标(业务场景、场景并发数、请求成功率、请求响应时间)逐级下放到对应的服务器上。使用的方法可以通过链路分析,将需要评估业务涉及的链路从入口到结束串联起来,分析这个路径中每一个服务器需要处理的服务以及对应的并发访问量,然后根据总的容量要求计算出每个应用服务器、存储服务器需要达到的容量要求,最后根据服务器需要达到的容量除以单机的容量,得出每一个服务器需要的机器数量,按照计算出来的机器数量给对应的服务器扩容,以达到业务指标要求的容量。

集群容量保障

在分布式环境下的集群容量受到很多因素的影响,只靠容量分解和单机容量评估得到业务容量不是 100% 的可靠,还需要线上有环境可以验证集群的容量是满足业务指标要求的。线上业务指标的验证可以通过模拟真实用户并发的发请求的过程,客户端压力机根据事前准备好的压测脚本发起压测流量,模拟真实的业务场景和容量指标,观察业务的成功率、业务响应时间、集群的稳定性和服务器的性能表现,通过真实场景压测验证过的容量我们才认为是可靠的容量要求。

容灾管控

单机故障
应用单机故障

在分布式环境下,应用系统一般设计成无状态的,单机故障只需要将其「踢出」集群即可。在第一小节中提到,系统间通信一般会采用消息或者 RPC 的方式。无论哪种方式,都需要一个寻址路由的过程,如 RPC 中客户端调用到服务端的场景,如果做客户端路由,则客户端会从可用的服务端机器列表中做负载均衡计算,选择一台调用。这些地址信息的注册和发现能力有一组负责寻址的集群负责,一旦单机故障发生,故障服务端机器与寻址服务器断开连接,或者心跳无反应,寻址服务器就会将其「踢出」可用列表,并将新的列表通知到所有的客户端,从而让客户端调用正常可用的机器,实现单机故障的自恢复。消息发布和订阅场景下,单机故障也是同样处理。

DB 单机故障

DB 为有状态是服务器,其单机故障的处理机制会相对复杂一些。比较常见的方案是利用数据库本身的主备切换机制,即每一个数据库都采用「主库+备库」的部署方式,主库故障时通过主备切换工具自动切换到备库提供服务。这种模式好处是一般 DB 都支持,操作相对简单,恢复后的处理也比较简单,但坏处是延迟时间较长,而且根据业务情况可能需要短时间的禁写,一般需要人为参与。

数据库本身的主备切换机制有较多局限性,在分布式环境下往往会有多样性的 DB 备份需求,例如远距离,大数据量,多备份等场景,可以通过 DB 的操作日志来实现更为强大、灵活的数据源同步备份组件,依靠类似 Mysql 的 binlog,Oracle 的 redolog 等来支持复杂备份场景,从而更为灵活的支持单机故障的恢复。

网络设备单机故障

为应对网络设备单机故障,需要在网络架构设计上就考虑冗余,主要分为设备冗余和链路冗余:

设备冗余:物理设备(应用服务器或者网络设备)都会上联多台网络设备,某台网络设备出现故障,整个网络拓扑会自动收敛,进出流量改为从正常运行的网络设备通过,业务基本无感知。

链路冗余:骨干网络设备间的物理连接,采用双链路或者多条物理线路冗余的方式,防止单点故障。如果单条线路故障剩余冗余链路可以继续工作保障通信正常。

集群/机房故障

通过建立同城双活、异地近距离双活、异地多活等机房架构,应用层与数据层都进行水平拆分,多个机房内同时承担用户访问流量,不同机房集群间为互备关系,确保系统不间断运行。

DB 集群故障

数据层的分布式部署结构中,不同机房集群间为互备关系,通过计算 DB 所关联的业务系统,得出受影响的应用列表,并通过与 DB 单机故障一样的方式,推送数据库切换指到互备机房的 failover 集群,来应对某个单元维度的数据库集群故障。

应用集群故障和网络设备集群故障

一般来说,整个机房的应用集群均出现问题的可能性较小,一旦出现则视为机房级故障,其处理方式与网络设备集群故障的处理方式一样,通过容灾管控系统把整体架构上各层的流量(包括入口网关+业务层+数据层+出口网关等)切换到同城或者异地的正常机房中。

为了更好实现无限伸缩性、精准容量规划和持续可用的容灾管控机制,蚂蚁金服分布式架构经过多年演化,我们完成了异地多活的单元化架构,并在 SOFA 和蚂蚁金融云上沉淀这一架构能力,关于单元化架构的概念陈述,读者可以参考《素描单元化》这篇文章。

目录
相关文章
|
1月前
|
Kubernetes Cloud Native 微服务
探索云原生技术:容器化与微服务架构的融合之旅
本文将带领读者深入了解云原生技术的核心概念,特别是容器化和微服务架构如何相辅相成,共同构建现代软件系统。我们将通过实际代码示例,探讨如何在云平台上部署和管理微服务,以及如何使用容器编排工具来自动化这一过程。文章旨在为开发者和技术决策者提供实用的指导,帮助他们在云原生时代中更好地设计、部署和维护应用。
|
26天前
|
监控 安全 API
使用PaliGemma2构建多模态目标检测系统:从架构设计到性能优化的技术实践指南
本文详细介绍了PaliGemma2模型的微调流程及其在目标检测任务中的应用。PaliGemma2通过整合SigLIP-So400m视觉编码器与Gemma 2系列语言模型,实现了多模态数据的高效处理。文章涵盖了开发环境构建、数据集预处理、模型初始化与配置、数据加载系统实现、模型微调、推理与评估系统以及性能分析与优化策略等内容。特别强调了计算资源优化、训练过程监控和自动化优化流程的重要性,为机器学习工程师和研究人员提供了系统化的技术方案。
146 77
使用PaliGemma2构建多模态目标检测系统:从架构设计到性能优化的技术实践指南
|
7天前
|
存储 Prometheus Cloud Native
分布式系统架构6:链路追踪
本文深入探讨了分布式系统中的链路追踪理论,涵盖追踪与跨度的概念、追踪系统的模块划分及数据收集的三种方式。链路追踪旨在解决复杂分布式系统中请求流转路径不清晰的问题,帮助快速定位故障和性能瓶颈。文中介绍了基于日志、服务探针和边车代理的数据收集方法,并简述了OpenTracing、OpenCensus和OpenTelemetry等链路追踪协议的发展历程及其特点。通过理解这些概念,可以更好地掌握开源链路追踪框架的使用。
58 41
|
17天前
|
设计模式 存储 算法
分布式系统架构5:限流设计模式
本文是小卷关于分布式系统架构学习的第5篇,重点介绍限流器及4种常见的限流设计模式:流量计数器、滑动窗口、漏桶和令牌桶。限流旨在保护系统免受超额流量冲击,确保资源合理分配。流量计数器简单但存在边界问题;滑动窗口更精细地控制流量;漏桶平滑流量但配置复杂;令牌桶允许突发流量。此外,还简要介绍了分布式限流的概念及实现方式,强调了限流的代价与收益权衡。
59 11
|
19天前
|
设计模式 监控 Java
分布式系统架构4:容错设计模式
这是小卷对分布式系统架构学习的第4篇文章,重点介绍了三种常见的容错设计模式:断路器模式、舱壁隔离模式和重试模式。断路器模式防止服务故障蔓延,舱壁隔离模式通过资源隔离避免全局影响,重试模式提升短期故障下的调用成功率。文章还对比了这些模式的优缺点及适用场景,并解释了服务熔断与服务降级的区别。尽管技术文章阅读量不高,但小卷坚持每日更新以促进个人成长。
45 11
|
20天前
|
消息中间件 存储 安全
分布式系统架构3:服务容错
分布式系统因其复杂性,故障几乎是必然的。那么如何让系统在不可避免的故障中依然保持稳定?本文详细介绍了分布式架构中7种核心的服务容错策略,包括故障转移、快速失败、安全失败等,以及它们在实际业务场景中的应用。无论是支付场景的快速失败,还是日志采集的安全失败,每种策略都有自己的适用领域和优缺点。此外,文章还为技术面试提供了解题思路,助你在关键时刻脱颖而出。掌握这些策略,不仅能提升系统健壮性,还能让你的技术栈更上一层楼!快来深入学习,走向架构师之路吧!
55 11
|
22天前
|
自然语言处理 负载均衡 Kubernetes
分布式系统架构2:服务发现
服务发现是分布式系统中服务实例动态注册和发现机制,确保服务间通信。主要由注册中心和服务消费者组成,支持客户端和服务端两种发现模式。注册中心需具备高可用性,常用框架有Eureka、Zookeeper、Consul等。服务注册方式包括主动注册和被动注册,核心流程涵盖服务注册、心跳检测、服务发现、服务调用和注销。
62 12
|
1月前
|
消息中间件 架构师 数据库
本地消息表事务:10Wqps 高并发分布式事务的 终极方案,大厂架构师的 必备方案
45岁资深架构师尼恩分享了一篇关于分布式事务的文章,详细解析了如何在10Wqps高并发场景下实现分布式事务。文章从传统单体架构到微服务架构下分布式事务的需求背景出发,介绍了Seata这一开源分布式事务解决方案及其AT和TCC两种模式。随后,文章深入探讨了经典ebay本地消息表方案,以及如何使用RocketMQ消息队列替代数据库表来提高性能和可靠性。尼恩还分享了如何结合延迟消息进行事务数据的定时对账,确保最终一致性。最后,尼恩强调了高端面试中需要准备“高大上”的答案,并提供了多个技术领域的深度学习资料,帮助读者提升技术水平,顺利通过面试。
本地消息表事务:10Wqps 高并发分布式事务的 终极方案,大厂架构师的 必备方案
|
16天前
|
机器学习/深度学习 存储 人工智能
基于AI的实时监控系统:技术架构与挑战分析
AI视频监控系统利用计算机视觉和深度学习技术,实现实时分析与智能识别,显著提升高风险场所如监狱的安全性。系统架构包括数据采集、预处理、行为分析、实时决策及数据存储层,涵盖高分辨率视频传输、图像增强、目标检测、异常行为识别等关键技术。面对算法优化、实时性和系统集成等挑战,通过数据增强、边缘计算和模块化设计等方法解决。未来,AI技术的进步将进一步提高监控系统的智能化水平和应对复杂安全挑战的能力。
|
16天前
|
存储 缓存 负载均衡
从零到一:分布式缓存技术初探
分布式缓存通过将数据存储在多个节点上,利用负载均衡算法提高访问速度、降低数据库负载并增强系统可用性。常见产品有Redis、Memcached等。其优势包括性能扩展、高可用性、负载均衡和容错性,适用于页面缓存、应用对象缓存、状态缓存、并行处理、事件处理及极限事务处理等多种场景。
42 1

热门文章

最新文章