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

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

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


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

容量规划

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

单机容量评估

应用服务器单机的处理能力估算公式 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 和蚂蚁金融云上沉淀这一架构能力,关于单元化架构的概念陈述,读者可以参考《素描单元化》这篇文章。

目录
相关文章
|
15天前
|
运维 Kubernetes Cloud Native
云原生技术:容器化与微服务架构的完美结合
【10月更文挑战第37天】在数字化转型的浪潮中,云原生技术以其灵活性和高效性成为企业的新宠。本文将深入探讨云原生的核心概念,包括容器化技术和微服务架构,以及它们如何共同推动现代应用的发展。我们将通过实际代码示例,展示如何在Kubernetes集群上部署一个简单的微服务,揭示云原生技术的强大能力和未来潜力。
|
24天前
|
运维 持续交付 API
从零构建微服务架构:一次深度技术探索之旅####
【10月更文挑战第28天】 本文记录了作者在从零开始构建微服务架构过程中的深刻技术感悟,通过实战案例详细剖析了微服务设计、开发、部署及运维中的关键要点与挑战。文章首先概述了微服务架构的核心理念及其对企业IT架构转型的重要性,随后深入探讨了服务拆分策略、API网关选型、服务间通信协议选择、容器化部署(Docker+Kubernetes)、以及持续集成/持续部署(CI/CD)流程的设计与优化。最后,分享了在高并发场景下的性能调优经验与故障排查心得,旨在为读者提供一套可借鉴的微服务架构实施路径。 ####
57 3
|
13天前
|
存储 分布式计算 关系型数据库
架构/技术框架调研
本文介绍了微服务间事务处理、调用、大数据处理、分库分表、大文本存储及数据缓存的最优解决方案。重点讨论了Seata、Dubbo、Hadoop生态系统、MyCat、ShardingSphere、对象存储服务和Redis等技术,提供了详细的原理、应用场景和优缺点分析。
|
1天前
|
NoSQL Java 数据处理
基于Redis海量数据场景分布式ID架构实践
【11月更文挑战第30天】在现代分布式系统中,生成全局唯一的ID是一个常见且重要的需求。在微服务架构中,各个服务可能需要生成唯一标识符,如用户ID、订单ID等。传统的自增ID已经无法满足在集群环境下保持唯一性的要求,而分布式ID解决方案能够确保即使在多个实例间也能生成全局唯一的标识符。本文将深入探讨如何利用Redis实现分布式ID生成,并通过Java语言展示多个示例,同时分析每个实践方案的优缺点。
17 8
|
24天前
|
存储 SQL Apache
Apache Doris 开源最顶级基于MPP架构的高性能实时分析数据库
Apache Doris 是一个基于 MPP 架构的高性能实时分析数据库,以其极高的速度和易用性著称。它支持高并发点查询和复杂分析场景,适用于报表分析、即席查询、数据仓库和数据湖查询加速等。最新发布的 2.0.2 版本在性能、稳定性和多租户支持方面有显著提升。社区活跃,已广泛应用于电商、广告、用户行为分析等领域。
Apache Doris 开源最顶级基于MPP架构的高性能实时分析数据库
|
16天前
|
监控 API 微服务
后端技术演进:从单体架构到微服务的转变
随着互联网应用的快速增长和用户需求的不断演化,传统单体架构已难以满足现代软件开发的需求。本文深入探讨了后端技术在面对复杂系统挑战时的演进路径,重点分析了从单体架构向微服务架构转变的过程、原因及优势。通过对比分析,揭示了微服务架构如何提高系统的可扩展性、灵活性和维护效率,同时指出了实施微服务时面临的挑战和最佳实践。
39 7
|
13天前
|
传感器 算法 物联网
智能停车解决方案之停车场室内导航系统(二):核心技术与系统架构构建
随着城市化进程的加速,停车难问题日益凸显。本文深入剖析智能停车系统的关键技术,包括停车场电子地图编辑绘制、物联网与传感器技术、大数据与云计算的应用、定位技术及车辆导航路径规划,为读者提供全面的技术解决方案。系统架构分为应用层、业务层、数据层和运行环境,涵盖停车场室内导航、车位占用检测、动态更新、精准导航和路径规划等方面。
62 4
|
2月前
|
Kubernetes Cloud Native 持续交付
云端新纪元:云原生技术重塑IT架构####
【10月更文挑战第20天】 本文深入探讨了云原生技术的兴起背景、核心理念、关键技术组件以及它如何引领现代IT架构迈向更高效、灵活与可扩展的新阶段。通过剖析Kubernetes、微服务、Docker等核心技术,本文揭示了云原生架构如何优化资源利用、加速应用开发与部署流程,并促进企业数字化转型的深度实践。 ####
|
15天前
|
Kubernetes Cloud Native 持续交付
云原生技术在现代应用架构中的实践与思考
【10月更文挑战第38天】随着云计算的不断成熟和演进,云原生(Cloud-Native)已成为推动企业数字化转型的重要力量。本文从云原生的基本概念出发,深入探讨了其在现代应用架构中的实际应用,并结合代码示例,展示了云原生技术如何优化资源管理、提升系统弹性和加速开发流程。通过分析云原生的优势与面临的挑战,本文旨在为读者提供一份云原生转型的指南和启示。
29 3
|
17天前
|
网络协议 数据挖掘 5G
适用于金融和交易应用的低延迟网络:技术、架构与应用
适用于金融和交易应用的低延迟网络:技术、架构与应用
44 5