分布式方案最全详解(图文全面总结)

分布式方案最全详解(图文全面总结)

分布式是大型网站的必经之路,也是架构师的必备技能,掌握好分布式非常重要,下面我就全面来详解分布式@mikechen

分布式方案

分布式解决方案是指通过多台计算机共同协作来完成任务,以提高系统的性能、可扩展性、和可靠性。

 

分布式服务

分布式解决方案是指通过多台计算机共同协作来完成任务,以提高系统的性能、可扩展性和可靠性。

比如:最经典的就是大家熟知的“微服务架构”,就是将单一应用程序划分为多个小的、独立的服务、这些服务就是分布式服务。

分布式方案最全详解(图文全面总结)

分布式微服务则是:将这些服务分布在多个节点、或服务器上,通过网络进行通信、和协作。

如下图所示:

分布式方案最全详解(图文全面总结)

将应用拆分为多个独立的微服务,每个微服务实现特定的业务功能,如:用户管理、订单处理、支付、物流、积分…等。

每个微服务都是独立的,可以单独开发、部署和升级,不影响其他服务。

而且,不同的微服务可以使用不同的技术栈,适应不同的业务需求。

通过这种分布式服务的方式,可以极大拓展整个应用架构的性能。

 

分布式存储

分布式存储是指将数据分散存储在多台计算机上,通过协调、和管理这些数据,实现高可用性、高可靠性、和高扩展性。

常见的分布式存储系统,包括:HDFS(Hadoop Distributed File System)、Ceph…….等等。

HDFS

HDFS是Hadoop生态系统的核心组件,用于分布式存储、和处理大规模数据集。

适用于大规模数据处理和分析,特别是与Hadoop生态系统集成的场景,如:批处理、数据存档、和备份…等。

分布式方案最全详解(图文全面总结)

特点:

  • 架构:主从架构,由NameNode管理元数据,DataNode存储实际数据。
  • 性能:其高吞吐量和数据冗余特点,使其在处理大文件和大数据量时表现优异。
  • 数据分片:将文件划分为多个块(block),每个块存储在不同的DataNode上。
  • 数据复制:每个块有多个副本,存储在不同的DataNode上,提高数据可靠性。
  • 应用:广泛用于大数据处理和分析,如Hadoop MapReduce、Spark等。

 

Ceph

Ceph 是一个开源的分布式存储系统,旨在提供高性能、高可用性、和高可靠性的统一存储解决方案。

Ceph 支持对象存储、块存储、和文件存储,广泛应用于云计算平台、和大规模数据存储环境中。

分布式方案最全详解(图文全面总结)

特点:

  • 架构:对等网络架构,由Monitor节点管理集群状态,OSD节点存储数据。
  • 数据分片与复制:通过CRUSH算法进行数据分片和复制,确保数据分布和冗余。
  • 一致性:使用Paxos算法保证元数据的一致性。
  • 应用:适用于对象存储、块存储和文件存储。

 

分布式缓存

分布式缓存:是将数据分布存储在多个独立的缓存节点上,以实现高效的数据存取,它通过分散缓存负载来提高系统的可扩展性、和容错能力。

分布式方案最全详解(图文全面总结)

分布式缓存,典型的解决方案有:Redis、Memcached……等。

Memcached

分布式方案最全详解(图文全面总结)

简单易用,轻量级。

基于内存存储,速度快。

采用一致性哈希算法实现分布式存储。

适用场景:适用于对速度要求高但数据不需要持久化的场景,如:会话管理、临时数据缓存等。

Redis

支持多种数据结构(比如:字符串、列表、集合、有序集合、哈希…等)。

分布式方案最全详解(图文全面总结)

数据持久化(RDB快照和AOF日志)。

丰富的功能(事务、发布/订阅、Lua脚本等)。

支持主从复制和哨兵机制,实现高可用性。

适用场景:适用于需要丰富数据结构、高可用性和持久化的数据缓存场景,如实时统计、排行榜、消息队列等。

 

分布式雪崩场景

分布式缓存,除了上面提到的,很多也需要考虑到:雪崩、击穿…等场景。

分布式缓存雪崩是指缓存系统在短时间内大量缓存失效、或不可用,导致大量请求直接打到后端数据库、或存储系统。

如下图所示:

分布式方案最全详解(图文全面总结)

这个时候,很容易引发系统负载骤增,甚至可能导致系统崩溃。

具体策略,包含:

缓存失效时间随机化:在设置缓存失效时间时,添加一定的随机值,避免大量缓存同时失效。

缓存预热:在系统启动或重启时,提前加载热点数据到缓存中,避免缓存未命中导致的数据库请求激增。

请求限流:对数据库或后端服务进行限流,控制突发流量,避免瞬间的大量请求直接打到数据库。

多级缓存:使用本地缓存、和分布式缓存相结合的多级缓存架构,本地缓存可以使用,比如: Guava Cache …等库。

 

分布式锁

利用分布式缓存的特性,还可以实现分布式环境中的锁机制,保证并发操作的一致性。

在分布式环境中,由于多个节点可能同时请求锁,所以需要分布式锁来保证资源。

如下图所示:

分布式方案最全详解(图文全面总结)

由于节点间的通信可能存在延迟、和不可靠性,因此分布式锁的实现要解决如下关键问题:

1. 锁的唯一性

分布式锁需要确保同一时刻只有一个客户端能够获取到锁,以避免多个客户端同时修改共享资源而引发的并发问题。

2. 锁的有效性和过期处理

分布式锁需要考虑锁的有效期,避免锁长时间占用而不释放,导致资源无法被其他客户端访问。

3. 锁的释放

分布式锁的释放机制需要确保在锁不再需要时能够及时释放,以允许其他客户端获取锁。

4. 锁的高可用和故障处理

在分布式系统中,需要考虑锁服务的高可用性和故障处理能力,确保即使在节点故障或网络分区等情况下,锁仍能正常工作。

目前分布式锁的实现,Redis比较多,主要使用Redis的原子操作实现分布式锁,主要通过SETNX(SET if Not eXists)命令、和EXPIRE命令实现。

 

分布式事务

分布式事务也是分布式场景,经常遇到的一个问题。

比如:在分布式系统中,可能涉及多个独立的数据库、或服务,如下图所示:

分布式方案最全详解(图文全面总结)

当一个业务操作涉及多个数据存储、或服务时,需要保证这些操作的一致性,即要么所有操作都成功,要么所有操作都失败(原子性)。

分布式系统中,任何一个节点、或服务的故障,都可能导致某些事务只部分执行,或者出现数据丢失。

分布式事务管理可以确保即使在节点故障、或网络分区的情况下,也能够维持数据的一致性和系统的稳定性。

可以选择适当的分布式事务实现方式,比如:两阶段提交(2PC)、三阶段提交、基于补偿事务的模式..等。

陈睿mikechen

10年+大厂架构经验,资深技术专家,就职于阿里巴巴、淘宝、百度等一线互联网大厂。

关注作者「mikechen」公众号,获取更多技术干货!

后台回复架构,即可获取《阿里架构师进阶专题全部合集》,后台回复面试即可获取《史上最全阿里Java面试题总结

0 条回复 A文章作者 M管理员
    暂无讨论,说说你的看法吧