IT袋

当前位置:主页 > 经验教程 > 系统教程 >

从零开始理解分布式系统架构与设计原理

从零开始理解分布式系统架构与设计原理(4)

时间:2024-03-25 20:24:34 来源:IT袋 作者:马勇
导读:从零开始理解分布式系统架构与设计原理,比如在 Elasticsearch 中,每个索引有一个或多个分片,索引的数据被分配到各个分片上,相当于一桶水用了 N 个杯子装。 分片有助于横向扩展,N 个分片会被

从零开始理解分布式系统架构与设计原理

从零开始理解分布式系统架构与设计原理

比如在 Elasticsearch 中,每个索引有一个或多个分片,索引的数据被分配到各个分片上,相当于一桶水用了 N 个杯子装。

分片有助于横向扩展,N 个分片会被尽可能平均地(rebalance)分配在不同的节点上。

从零开始理解分布式系统架构与设计原理

partition

partition的概念经常在 Kafka 中可以看到,在 kafka 中 topic 是一个逻辑概念,从分布式队列的角度看,topic 对使用者来说就是一个队列,topic 在 kafka 的具体实现中,由分布在不同节点上的 partition 组成,每个 partition 就是根据分区算法拆分的多个分区,在 kafka 中,同一个分区不能被同一个 group 下的多个 consumer 消费,所以一个 topic 有多少 partition 在一定意义上就表示这个 topic 具有多少并发处理能力。

从零开始理解分布式系统架构与设计原理

在 Amazing 的分布式数据库DynamoDB中,一张表在底层实现中也被分区为不同的 partition。

load balance

负载均衡是高可用网络基础架构的关键组件,通常用于将工作负载分布到多个服务器来提高网站、应用、数据库或其他服务的性能和可靠性。

比如 nginx 的负载均衡,通过不同的负载均衡分配策略,将 http 请求分发到 web 应用的不同节点之上,从而提高应用的并发处理能力。

比如 dubbo 的客户端负载能力,可以将 dubbo 请求路由到具体的 producer 提供节点上,负载均衡是一个完善的 RPC 所应该具有的能力。

在 Spring Cloud 的体系中 Robbin 组件可以通过 Spring Cloud 的各微服务之间通信的负载均衡分配问题,依旧是将请求分发到集群中的不同节点上去。

分的策略

无论是分区还是分片,还是分区路由,其实都有一些通用的分区算法,以下的概念可能很多同学都在不同的领域看到过,如上面看到的反向代理服务器 nginx 中,如分布式消息队列 kafka 中,如 RPC 框架 Dubbo 中,这有时候会让很多同学感到懵。

其实无论在什么领域中,你只要抓住它在完成的核心功能上就可以理解,它们就是在考虑如何的问题,把处理请求(即计算)如何均匀地分到不同的机器上,把数据如何分配到不同的节点上。

从大的方向看有两种策略,一种可复刻,一种不可复刻

可复刻,这种策略根据一定算法分配计算和数据,在相同的条件下,无论什么时间点得出的结果相同,因此对于相同条件的请求和数据来说是可复刻的,在不同时间点相同的请求和数据始终都在统一节点上。这种策略一般用于有数据状态在情况。

不可复刻,这种策略使用全随机方式,即使在相同的条件下,不同时间点得出的结果也不一致,因此也是不可还原的,如果只是为了可还原,如果通过元数据记录已经分配好的数据,之后需要还原时通过元数据就可以准确的得知数据所在位置了。

不念:这么神奇么?我想看看不同系统都有什么策略。

Dubbo的负载均衡

Dubbo 是阿里开源的分布式服务框架。其实现了多种负载均衡策略。

相关阅读