云网站服务器_国内数据云存储_移动云数据库服务器主机-搜集站云

大数据库_如何使用_物联网jasper

小七 141 0

大数据库_如何使用_物联网jasper

领导人选举是实现分布式系统的一种常用模式。例如,复制的关系数据库(如MySQL)或分布式键值存储(如apachezookeeper)在副本中选择一个前导(有时称为master)。所有的写操作都要经过leader,因此任何时候都只有一个节点在向系统写操作。这样做是为了确保没有写丢失,云服务器那个好,数据库没有损坏。

由于网络系统和时间同步的性质,在分布式系统的节点中选择一个领导者可能是一个挑战。在本文中,我们将讨论为什么需要领导人选举(或者更一般地说,"分布式锁"),解释为什么它们很难实现,并提供一个使用强一致性存储系统的示例实现,在本例中是Google云存储。

为什么我们需要分布式锁?

想象一个多线程程序,其中每个线程都与一个共享变量或数据结构交互。为了防止数据丢失或损坏数据结构,多个线程应该在修改状态时相互阻塞并等待。我们在单个进程应用程序中使用mutex来确保这一点。分布式锁在这方面与单进程系统中的互斥锁没有什么不同。

处理共享数据的分布式系统在修改共享数据时仍然需要一种锁定机制来安全地轮流操作。然而,在分布式环境中工作时,我们不再有互斥的概念。这就是分布式锁和领导人选举的关键所在。

领导人选举的用例

通常领导人选举用于确保单个节点对共享数据的独占访问,或确保单个节点协调系统中的工作。

对于复制的数据库系统,如MySQL、Apache Zookeeper或Cassandra,我们需要确保在任何给定的时间只有一个"领导者"。所有的写操作都要经过这个领导,淘客插件,以确保写操作发生在一个地方。同时,可以从follower节点提供读取服务。对于使用消息队列中的消息的应用程序,您有三个节点;但是,这些节点中只有一个在任何时候处理消息。通过选择领导者,您可以指定一个节点来履行该职责。如果引线不可用,其他节点可以接管并继续工作。在这种情况下,私有云市场,如何成为淘客,需要领导人选举来协调工作。

许多分布式系统利用领导人选举或分布式锁模式。然而,选择一个领导者是一个非常重要的问题。

为什么分布式锁定很困难?

分布式系统就像单个进程程序的线程,不同的是它们在不同的机器上,它们通过网络相互通信(这可能不可靠)。因此,他们不能依赖互斥锁或类似的锁机制,即使用原子CPU指令和共享内存来实现锁。

分布式锁问题要求参与者就谁持有锁达成一致。当系统中的某些节点不可用时,我们还希望选出一位领导人。这听起来可能很简单,但正确实现这样一个系统可能相当困难,部分原因是存在许多边缘情况。这就是分布式一致性算法的用武之地。

要实现分布式锁定,需要一个强一致性的系统来决定哪个节点持有锁。因为这必须是一个原子操作,所以它需要共识协议,如Paxos、Raft或两阶段提交协议。然而,正确实现这些算法是相当困难的,因为实现必须经过广泛的测试和正式的证明。此外,这些算法的理论特性往往无法承受现实世界的条件,这导致了对该主题更深入的研究。在我们的堆栈中,Chubby帮助Google的许多团队利用分布式一致性,而不必担心从头开始实现锁定服务(而且这样做是正确的)。

欺骗一点:利用其他存储原语

而不是实现自己的一致性协议,您可以轻松地利用强一致性协议通过单个键或记录提供相同保证的存储系统。通过将原子性的责任委托给外部存储系统,我们不再需要参与节点形成仲裁并对新的领导进行投票。

例如,可以使用分布式数据库记录(或文件)来命名当前领导,服务器租用,以及当领导更新了领导锁时。如果记录中没有leader,或者leader没有更新其锁,则其他节点可以通过尝试将其名称写入记录来运行选举。第一个会赢,因为这个记录或文件允许原子写入。

这种对文件或数据库记录的原子写入通常是使用乐观并发控制来实现的,它允许您通过提供记录的版本号来原子地更新记录(如果记录自那以后发生了更改,写入将被拒绝)。类似地,任何读者都可以立即使用这些书写。使用这两个原语(原子更新和一致读取),我们可以在任何存储系统上实现领导人选举。

事实上,许多谷歌云存储产品,如云存储和云扳手,都可以用来实现这种分布式锁。类似地,开源存储系统,如Zookeeper(Paxos)、etcd(Raft)、Consul(Raft),甚至像MySQL或PostgreSQL这样配置合理的RDBMS系统也可以提供所需的原语。

例如:云存储的Leader election