如何通过分散原则保证系统高可用

前言

什么是高可用

高可用(High availability,缩写为 HA),是指系统无中断地执行其功能的能力 ,代表系统的可用性程度。高可用的主要目的是为了保障"业务的连续性" ,即在用户眼里,业务永远是正常对外提供服务的。

高可用是一种控制风险的能力,是一种面向风险设计,使系统具备控制风险,提供更高的可用性的能力 。简单可以理解为通过种种措施使系统对外不间断地提供服务,保证服务的响应时间,减少因软件、硬件、人为造成的故障对服务的影响,在故障发生时,访问服务的用户并不会感觉到。

如何做高可用:如何控制风险

减少风险数量:n

从源头远离风险,做到与风险载体无连接,无关系;那么该风险概率就是 0,也不关心该风险发生后的故障影响面是大是小,完全不关心。

降低风险变故障的概率(增加风险变故障的难度):P

把风险当成一个对象看待,给它层层设卡,增加风险变故障的门槛和难度,不要再让"不小心多了一个空格或字符,系统就挂了"这种惨案轻易出现。

减小故障影响范围:R

以大拆小,将一个整体拆分成 N 个小的个体,每个个体之间进行相互隔离,单个个体出问题仅影响单个个体,实现小而美。

缩短故障影响时长:T

故障影响时长由故障发现时间和故障止血时间决定,所以要早发现早止血。

一、分散原则简介

分散原则:鸡蛋不要放一个篮子,分散风险(R) 打散拆分成 N 份;避免全局只有 1 份,否则一有问题影响范围就是 100%。

高可用架构中的分散原则是指通过将不同的组件、功能或服务分散在不同的节点或服务器上,以提高系统的可靠性、可扩展性和容错能力。

负载分散:将负载分布在多个服务器或节点上,以实现负载均衡。这有助于确保系统在高流量情况下仍能保持高性能和可用性。负载分散可以通过横向扩展(增加服务器数量)或纵向扩展(使用负载均衡器)实现。

数据分散:在分布式系统中,将数据分散存储在多个节点上,以提高数据可用性和降低数据丢失风险。数据分散可以通过水平扩展(增加数据存储节点)或垂直扩展(使用分布式存储系统)实现。

服务分散:将不同服务分散在不同的服务器或容器中,以降低服务之间的相互影响。这有助于确保一个服务的故障不会扩散到其他服务。服务分散可以采用微服务架构或容器编排技术实现。

二、实际应用场景

2.1 微服务架构

微服务架构 :旨在通过将功能分解到各个离散的服务中以实现对解决方案的解耦。 概念:微服务架构风格是一种将一个单一应用程序开发为一组小型服务的方法,每个服务运行在自己的进程中,服务间通信采用轻量级通信机制(通常用 HTTP 资源 API)。这些服务围绕业务能力构建并且可通过全自动部署机制独立部署。这些服务共用一个最小型的集中式的管理,服务可用不同的语言开发,使用不同的数据存储技术。

2.1.1 分散原则在微服务中的应用

服务拆分:根据业务功能或领域将大型应用拆分成多个小而自治的微服务。每个微服务专注于完成一个特定的任务,以确保系统中的每个组件具有明确的职责。这有助于实现高内聚、低耦合的设计目标。

独立部署和扩展:微服务应具备独立部署、扩展和缩小的能力。这意味着服务之间的依赖应该尽可能松散,以便在一个服务发生变化时,不会对其他服务产生负面影响。

◦使用容器技术(如 Docker)对微服务进行封装,使它们可以独立部署和运行。

◦利用云计算和负载均衡技术,根据业务需求对微服务进行弹性扩展和缩减。

容错与恢复:通过引入冗余、负载均衡和故障转移等技术,可以提高系统的可用性和稳定性。以下场景中应用了这一原则:

◦使用负载均衡器(如 HAProxy、Nginx、F5)分发请求,确保请求可以到达可用的服务实例。

◦实现服务的自动故障转移和恢复机制,当某个服务出现故障时,请求可以自动切换到其他可用的服务实例。

2.1.2 案例:用户组部署

2.2 分布式存储

分布式存储是一种数据存储技术,它通过网络将企业内部多台机器的磁盘空间整合起来,形成一个虚拟的存储设备。数据在企业的各个角落进行分散存储,从而提高数据存储的可靠性、可扩展性和性能。分布式存储技术主要应用于非结构化数据和海量数据的存储与管理。

2.2.1 分散原则在分布式存储中的应用

数据分散存储:为了提高数据的可靠性和容错能力,分布式存储系统将数据分散存储在多个物理位置。这种分散存储方式可以确保数据在某个存储节点出现故障时,系统仍可以从其他节点恢复数据。通常,数据会被分成多个数据块,并在不同的存储节点上存储多个副本,以实现数据的 high availability(高可用性)。

数据分片:为了提高分布式存储系统的读写性能,可以将数据分片存储在多个节点上。这样,数据访问请求可以并行处理,从而提高数据存储和访问速度。数据分片可以根据数据的访问模式和节点性能进行动态调整,以实现最佳性能。

负载均衡:分布式存储系统通过将数据和存储资源分散在多个服务器或存储设备上,实现负载均衡。这样可以确保系统资源得到充分利用,同时避免单一节点出现性能瓶颈。负载均衡可以根据多种策略实现,如轮询、最少连接等。

2.2.2 案例

分布式数据库(HBase、JED):这些数据库通过将数据分散在多个节点上,实现了高可用性和可扩展性。数据可以根据一定的策略分布在不同的节点,以满足数据的访问需求和性能要求。

图:数据库分布式部署主从架构图

分布式缓存(JimDB):数据被分散存储在多个节点上的内存中,以实现高速数据访问。这种分散存储方式可以提高缓存系统的性能,降低延迟。

​图:缓存 128 分片主从架构拓扑图

三、分散原则的好处

提高可靠性:当系统的一个组件发生故障时,其他组件仍然可以正常运行,从而减少整体系统的故障时间。

增强可扩展性:通过分散,我们可以轻松地增加系统的容量和处理能力,只需添加更多的节点即可。

提升容错能力:在分散的系统中,局部故障不会影响到整个系统,系统可以更容易地恢复。

减少单点故障:将功能和服务分散到多个节点,可以有效避免单点故障的发生。

优化资源利用:分散原则还可以更好地利用资源,避免资源的浪费和瓶颈的出现。

结语

通过分散原则,我们可以将关键任务或系统组件分散部署,以减少单点故障的风险,提高系统的可用性和稳定性。在实际应用中,需要注意合理分配资源、实时监控和维护、备份和恢复等问题。通过这些措施,我们可以更好地保证系统的可靠性和稳定性,提高用户体验和业务效益。

作者:全渠道 张涛

来源:京东零售技术 转载请注明来源

相关推荐
小池先生12 分钟前
springboot启动不了 因一个spring-boot-starter-web底下的tomcat-embed-core依赖丢失
java·spring boot·后端
小蜗牛慢慢爬行1 小时前
如何在 Spring Boot 微服务中设置和管理多个数据库
java·数据库·spring boot·后端·微服务·架构·hibernate
wm10432 小时前
java web springboot
java·spring boot·后端
小扳4 小时前
微服务篇-深入了解 MinIO 文件服务器(你还在使用阿里云 0SS 对象存储图片服务?教你使用 MinIO 文件服务器:实现从部署到具体使用)
java·服务器·分布式·微服务·云原生·架构
龙少95434 小时前
【深入理解@EnableCaching】
java·后端·spring
溟洵6 小时前
Linux下学【MySQL】表中插入和查询的进阶操作(配实操图和SQL语句通俗易懂)
linux·运维·数据库·后端·sql·mysql
SomeB1oody8 小时前
【Rust自学】6.1. 定义枚举
开发语言·后端·rust
SomeB1oody8 小时前
【Rust自学】5.3. struct的方法(Method)
开发语言·后端·rust
啦啦右一10 小时前
Spring Boot | (一)Spring开发环境构建
spring boot·后端·spring
森屿Serien10 小时前
Spring Boot常用注解
java·spring boot·后端