分布式系统常见问题总结(二)

1.网络IO实现方式

分布式系统间的通信的基础是网络IO,不同的技术都会有自己不同的实现,但是通信原理是基于下面三种通信方式:BIO,NIO,AIO。

首先BIO,NIO,AIO都是基于socket套接字来通信的,socket是传输层协议TCP/UDP的具体实现。

BIO:同步阻塞IO,每一个Socket使用一个线程来通信。阻塞表现在,主线程调用write()方法后,不能做其他事情,阻塞了,等待返回。

NIO:同步非阻塞IO,采用Reactor模式,使用一个线程来管理所有的Socket,简单来说,Channel注册到Selector,一个线程来遍历Selector通过Channel来通信。Channel通信是基于Socket. 有通信的时候会处理。非阻塞表现在,主线程不会阻塞,会有单独的一个线程来处理接受读操作。同步表现在,如果一个Socket通信有问题,会影响其它的Socket通信。

AIO:异步IO,采用Proactor模式,另外开线程来通信,通信完成会调用类似的回调函数来通知。我们不用单独建立线程来处理通信,Java自己会建立一个线程池处理通信,并回调对应的方法。多个通信之间不会互相影响。


2.CAP/BASE 理论

CAP理论:

C:Consistency(数据一致性)

A:Availability(可用性)

P:Partition-Tolerance(分区容忍性)

分布式系统的可用性都是需要保证的,一般在C和P直接做取舍,大部分系统会舍弃C保证AP,但也不是完全舍弃,不会保证数据的强一致性,但是会保证最终一致性。

BASE理论:

Basically Available:基本可用,允许分区失败

Soft state:软状态,接受一段时间的状态不同步

Eventually consistent:最终一致

具体实施过程中,可参考BASE理论,但主要看业务需要,做出取舍。


3.事务和分布式事务

事务:对数据一系列的增删改查操作。

事务的四个特征:

a.原子性:所有操作要么全部成功,要么全部失败。

b.一致性:保证数据的完整性和一致性。

c.隔离性:事物之间不相互影响。

d.持久性:事务执行成功,对数据库的改变是持久的。

事务的隔离级别:

a.读未提交 

b.读已提交 解决脏读  未提交的写事务将会禁止其他事务访问该行

c.可重复读 解决脏读,不可重复读

d.序列化,串行化,串行化 解决脏读,不可重复读,幻读

脏读,不可重复读,幻读区别:

脏读 读取了未提交的事务,事务A还没提交,事务B就读到了数据

不可重复读 事务A在读取数据,事务B就更新了数据(一个事务范围类)

幻读 事务A在读取数据,事务B就插入的数据(一个事务范围类)

不可重复读和幻读的区别在于,更新,删除和插入的区别,要解决问题,一个锁列,一个锁表

分布式事务:

简单的来说,在多个服务器之间保证事务。对于单台服务器,我们可以用数据库来保证事务,多台服务器,不同的数据库上的事务,就是分布式事务。


4.分布式锁的实现方式

讨论分布式锁之前,我们先来理解一下锁的概念。首先锁的目的是为了顺序的访问共享资源,比如文件,变量等。其次什么可以作为锁。对于单台服务器,我们可以用唯一对象,唯一的静态变量等,他们的共同点是唯一性。对于多台服务器,我们很难在服务器上找到唯一的东西来作为锁,因为多台服务器,肯定会有多个。这个时候,我们要寻求第三方的帮助,只要第三方能提供一个唯一的东西,我们就可以把它作为分布式的锁。

分布式锁需要能保证下面几点特性:

a.可用性:挂了一台还能不影响功能

b.可重入:同一个线程可以获得锁多次

c.阻塞:获取不到锁的线程应该等待

d.不能死锁:锁不能一直不释放

目前下面的几个可以实现分布式锁:

A.数据库

我们来简单的看一下实现逻辑,创建一个资源表,资源被使用就用一个字段标记一下,释放的时候就更新一下这个字段。可以乐观锁来处理并发的情况。看一下需要满足的四个特性:

a.可用性:可以做主从备份

b.可重入:数据库保存线程和主机信息

c.阻塞:其他线程获取不到锁可以维护while循环

d.不能死锁:写个定时器,定时释放锁

B.缓存(Redis,Memcahed)

Memcahed:

Memcached 可以使用 add 命令,该命令只有KEY不存在时,才进行添加,或者不会处理。Memcached 所有命令都是原子性的,并发下add 同一个KEY ,只会一个会成功。利用这个原理可以实现分布式锁。add成功的获得锁。

a.可用性:集群

b.可重入:与KEY相应的VALUE存放一个随机token,token相同可重入

c.阻塞:其他线程获取不到锁可以维护while循环,可以尝试5秒

d.不能死锁:设置过期时间

Redis:

Redis  没有add 命令,但有SETNX(SET if Not eXists)若给定的 key 已经存在,则 SETNX不做任何动作。设置成功,返回 1。设置失败,返回 0 。

a.可用性:集群

b.可重入:与KEY相应的VALUE存放一个随机token,token相同可重入

c.阻塞:其他线程获取不到锁可以维护while循环,可以尝试5秒

d.不能死锁:设置过期时间

C.Zookeeper

调用Create方法创建临时节点,创建成功的获得锁。处理完逻辑,删除临时节点。

a.可用性:集群

b.可重入:线程信息保存到临时节点下

c.阻塞:其他线程获取不到锁可以维护while循环,可以尝试5秒

d.不能死锁:服务器挂了,临时节点自动删除

  • 1
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 分布式存储系统是一种通过将数据分散存储在多台机器上实现高可靠性、高性能和可扩展性的存储架构。对于给定的习题,我将从以下几个方面来回答。 首先,分布式存储系统的基本概念与原理。分布式存储系统通过将数据分散存储在多个节点上,实现将数据进行有效管理和存储的功能。它将数据存储在不同的节点上,使得数据能够充分利用分布式存储系统的优势,如容错性和负载均衡。 其次,分布式存储系统的设计和实现。分布式存储系统的设计需要考虑诸多因素,如数据一致性、数据分片、数据迁移等。实现分布式存储系统的技术主要包括数据分布算法、数据复制和一致性协议等。常见的分布式存储系统包括HDFS、GlusterFS和Ceph等。 再次,分布式存储系统的应用场景。分布式存储系统广泛应用于大规模数据存储场景,如云存储、分布式文件系统等。通过将数据分散存储在多个节点上,可以充分利用节点的计算性能和存储容量,并提高系统的可靠性和性能。 最后,分布式存储系统的优势和挑战。分布式存储系统在数据存储和管理方面具有很多优势,如高可靠性、高性能和可扩展性。然而,它也面临着一些挑战,如数据一致性、数据安全性和系统维护等。为了解决这些挑战,需要采用合适的设计和实现策略。 综上所述,分布式存储系统是一种将数据分散存储在多台机器上的存储架构,它具有高可靠性、高性能和可扩展性的特点。在设计和实现分布式存储系统时,需要考虑数据一致性、数据分片和数据迁移等因素。分布式存储系统广泛应用于大规模数据存储场景,并具有很多优势和挑战。 ### 回答2: 分布式存储系统是一种将数据分布式存储在多个节点上的系统。它将大量的数据分散存储在多个独立的节点上,通过网络进行数据的读写操作。 分布式存储系统具有如下特点: 1. 高可靠性:分布式存储系统将数据存储在多个节点上,当其中的某个节点发生故障时仍可通过其他节点访问数据,从而提供了高可靠性。 2. 高扩展性:分布式存储系统可以随着需求的增加灵活地扩展存储容量,只需增加更多的节点即可,而不会对整个系统产生影响。 3. 高性能:由于数据分散存储在多个节点上,在进行数据读写操作时可以并行进行,从而提高了系统的读写性能。 4. 数据一致性:分布式存储系统通过一致性协议来确保各个节点上的数据一致性,即使在节点发生故障或者网络出现故障时也能保持数据的一致性。 5. 容错性:分布式存储系统在设计时考虑了节点的故障,通过数据的冗余备份和恢复机制来提供容错性,当某个节点发生故障时可以通过备份节点恢复数据。 6. 高可用性:由于数据的分布存储,当某个节点不可用时可以通过其他可用节点继续提供服务,从而提供了高可用性。 总的来说,分布式存储系统是一种强大而灵活的存储架构,能够满足大规模数据存储和处理的需求。它充分利用了分布式计算和网络技术,提供了高可靠性、高扩展性和高性能的存储解决方案。 ### 回答3: 分布式存储系统是一种通过在多个计算机节点上存储和管理数据的系统。相比于传统的集中式存储系统,分布式存储系统具有更高的可伸缩性、可靠性和性能。 举个例子来说,假设有一个分布式存储系统由10个节点组成。当需要存储一个文件时,系统会将文件拆分成多个块,并在不同的节点上存储这些块。这样做的好处是可以提高系统的吞吐量和并发性能,在某个节点发生故障时也能够保证数据的可靠性和持续可用性。 另外,分布式存储系统还可以通过数据的复制和副本来增加系统的可靠性。例如,在上述例子中,每个块可以复制多个副本到其他的节点中,以防止某个节点的故障导致数据的不可用性。 此外,分布式存储系统还可以通过数据分片和数据冗余来提高系统的性能和可用性。通过将数据分片存储在不同的节点上,可以使数据的访问负载均衡,并提高系统的并发性能。同时,数据的冗余存储也可以在某个节点故障时提供备份数据,确保系统的可靠性。 总结起来,分布式存储系统是一种可靠、高性能的存储方案,通过将数据分布在多个节点上,并利用数据的复制、分片和冗余等技术来提高系统的可用性、性能和可靠性。同时,分布式存储系统还可以根据不同的应用场景和需求进行灵活的配置和扩展,适应不同规模和负载的存储需求。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值