没有理想的人不伤心

分布式基础知识

2023/12/21
2
0

image.png

  1. 什么是分布式系统,其面临的困难有哪些

分布式系统是由一组通过网络进行通信、为了完成共同的任务而协调工作的计算机节点组成的系统。

困难:

  • 异构的机器与网络
  • 不稳定的网络通信
  • 数据一致性
  • 故障容忍

  1. 分布式开发常用的中间件有哪些,以及其对应的功能
  • 消息队列中间件:

Kafka**:** 用于构建实时数据流应用程序,支持高吞吐量的分布式发布-订阅消息系统。

RabbitMQ**:** 开源的消息代理软件,实现了高级消息队列协议(AMQP),支持多种消息传递模式。

  • 分布式缓存中间件:

Redis**:** 高性能的键值存储系统,可用于缓存、消息队列等场景。

  • 分布式计算中间件:

Hadoop:用于处理大规模数据的存储和分析。适用于离线批处理任务,适合处理大规模的静态数据

Spark:是一个快速、通用的大数据处理引擎,提供了高级的数据处理接口和支持多种计算模型。适用于迭代算法和复杂的数据处理任务

Flink:分布式流处理引擎,支持事件时间处理、状态管理等特性。

  • 分布式 SQL 查询引擎:

Impala:提供在 Hadoop 上进行交互式查询的能力

  • 分布式存储中间件

HDFS、hbase、kudu: 提供分布式文件系统支持,用于大规模数据存储、容错、可扩展性和高可用性

  • 分布式事务管理

    Atomikos、Seata:解决分布式系统中的事务问题,确保跨多个数据库、服务之间的事务一致性。


  1. 常用的大数据技术有哪些,哪些适合流式计算哪些适合批式计算

大数据存储技术:包括分布式文件系统(如 HDFS)、分布式数据库(如 Cassandra、HBase)和 NoSQL 数据库(如 MongoDB、Redis)等。

大数据处理技术:包括分布式计算框架(如 MapReduce、Spark)、流处理框架(如 Storm、Flink)和图处理框架(如 Giraph)等。

大数据分析技术:包括数据挖掘、机器学习、统计分析等方法,以及可视化工具(如 Tableau、PowerBI)等。

大数据采集技术:包括数据抓取技术、数据清洗技术、数据集成技术等。

大数据安全技术:包括数据加密、数据备份、数据恢复等,保证数据的安全性和可靠性。

  • 批式计算: Hadoop MapReduce、Apache Spark(批处理模块)等。
  • 流式计算: Apache Flink、Apache Kafka Streams、Apache Storm 等

  1. p2p 按网络拓扑分哪几类,分别阐述其特点,简述 dst 分布式哈希表算法的基本思想
  • 中心化拓扑:所有节点都连接到一个中心节点,中心节点负责管理和协调所有其他节点。
  • 全分布式非结构化拓扑:所有节点平等,没有明确的结构,每个节点都可以直接连接到其他节点。
  • 全分布式结构化拓扑:节点之间有一定的结构,通过一定的规则和算法进行组织,通常基于分布式哈希表(DHT)
  • 半分布式拓扑: 结合了中心化和分布式的特点,部分节点连接到一个中心节点,而其他节点直接连接到彼此。

分布式哈希表算法允许在节点之间分布存储和查找键值对,基本思想是将节点 ID 和键值对的键映射到一个相同的哈希空间中,基本目标是实现高效的键值对查找和存储,同时保证负载均衡和节点的动态加入和离开。

  • 节点标识: 每个节点和键值对都有一个唯一的标识(通常是通过哈希函数生成的),它们在同一个哈希空间中。
  • 数据存储: 将键值对存储在最接近其哈希标识的节点上。这样,可以通过哈希标识快速定位到存储数据的节点。
  • 路由和查找: 当需要查找某个键值对时,通过一系列的路由操作,找到最接近目标哈希标识的节点。然后,在该节点上执行查找操作。

  1. 分布式最基本的 cap 理论

一个分布式系统最多只能同时满足一致性(Consistency)、可用性(Availability)和分区容错性(Partition tolerance)这三项中的两项。

一致性:所有节点在同一时间的数据完全一致。

可用性:服务在正常响应时间内一直可用

分区容错性:分布式系统在遇到某节点或网络分区故障的时候,仍然能够对外提供满足一致性或可用性的服务。


  1. raft 算法解决分布式中的什么问题

Raft 算法主要解决了分布式系统中领导者选举、日志复制、安全性和容错性等问题,为构建高可用性、一致性和容错性的分布式系统提供了一种可行的解决方案。

  1. 领导者选举:
    • 在分布式系统中,为了保证一致性,通常需要选举一个领导者来协调各个节点的操作。Raft 通过一种分阶段的投票过程,确保只有一个领导者能够产生,避免了多个节点同时宣称成为领导者的问题。
  2. 日志复制:
    • Raft 确保所有节点的日志都保持一致。领导者负责接收客户端的请求,并将其添加到自己的日志中,然后通过一致的日志复制机制,将这些日志条目复制到其他节点上,以保持各节点的日志一致性。这确保了系统在节点故障或者网络分区的情况下能够正确地进行数据复制。
  3. 安全性:
    • Raft 通过使用日志条目的索引号(index)和任期号(term)来保证安全性。节点只能提交索引号和任期号相符的日志条目,这样可以避免陈旧的日志被错误地应用到系统中。此外,Raft 通过使用随机化的选举超时时间,避免了多个节点在同一时间发起选举的可能性,增加了系统的稳定性和可预测性。
  4. 容错性:
    • Raft 通过使用领导者和追随者的概念,以及通过保持一致的日志复制机制,能够容忍节点的故障和重启。当领导者节点宕机或者发生其他故障时,Raft 通过领导者选举重新选择一个新的领导者,确保系统的可用性和持久性。