Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/image-processing/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Algorithm Paxos的真实世界示例_Algorithm_Distributed_Paxos_Consensus - Fatal编程技术网

Algorithm Paxos的真实世界示例

Algorithm Paxos的真实世界示例,algorithm,distributed,paxos,consensus,Algorithm,Distributed,Paxos,Consensus,有人能给我一个真实的例子,说明如何在分布式数据库中使用Paxos算法吗?我读过很多关于Paxos的论文,其中解释了算法,但没有一篇真正用实际的例子来解释 一个简单的例子可以是一个银行应用程序,其中一个帐户正在通过多个会话进行修改(即在出纳员处存款、借记操作等)。Paxos是否用于决定先进行哪个操作?另外,Paxos协议的多个实例是什么意思?这是什么时候用的?基本上,我试图通过一个具体的例子而不是抽象的术语来理解这一切。例如,我们有一个MapReduce系统,其中master由3台主机组成。一个是

有人能给我一个真实的例子,说明如何在分布式数据库中使用Paxos算法吗?我读过很多关于Paxos的论文,其中解释了算法,但没有一篇真正用实际的例子来解释


一个简单的例子可以是一个银行应用程序,其中一个帐户正在通过多个会话进行修改(即在出纳员处存款、借记操作等)。Paxos是否用于决定先进行哪个操作?另外,Paxos协议的多个实例是什么意思?这是什么时候用的?基本上,我试图通过一个具体的例子而不是抽象的术语来理解这一切。

例如,我们有一个MapReduce系统,其中master由3台主机组成。一个是主人,另一个是奴隶。选择主节点的过程采用Paxos算法

另外,Chubby of Google Big Table使用Paxos:,

该数据库是一个分布式数据库,在事务管理器中使用Paxos。在分布式系统中,数据库内部使用Paxos来协调消息和维护事务原子性

  • 协调器是发起事务的节点
  • 参与者是代表修改数据库的节点
  • 事务读取器是代表事务执行代码的节点 事务,但未修改任何状态
  • 接受方是记录事务状态的节点
执行事务提交时,将执行以下步骤:

  • 协调员向每个参与者发送准备消息
  • 参与者锁定事务状态。他们将准备好的消息发送回协调员
  • 协调器向接受者发送接受消息
  • 接受者记录成员身份id、事务、提交id和参与者。他们将接受的消息发送回协调员
  • 协调器告诉用户提交成功
  • 协调器向每个参与者和读取器发送提交消息
  • 参与者和读卡器提交事务并相应地更新事务状态。它们将提交的消息发送回协调器
  • 协调器删除内部状态,现在已完成
  • 这对应用程序是完全透明的,并在数据库内部实现。因此,对于您的银行应用程序,所有应用程序级别需要做的就是对死锁冲突执行异常处理。大规模实现数据库的另一个关键是并发,这通常通过MVCC(多版本并发控制)来帮助实现

    有人能给我一个真实世界的例子,说明Paxos算法是如何实现的吗 在分布式数据库中使用

    MySQL。这就是为什么一个高可用的MySQL设置需要三台服务器。相比之下,典型的Postgres设置是主从式两节点配置,不运行Paxos

    我读过很多关于Paxos的论文,其中解释了算法,但没有一篇真正用实际的例子来解释

    下面是对Paxos的一个相当详细的解释。这是它的源代码。在消息方面是最有效的,就像在三节点集群中一样,在稳定状态下,领导者接受自己的下一个值,传输到其他两个节点,并且在返回一个响应时知道该值是固定的。然后,它可以将提交消息(学习消息)放在它发送的下一个值的前面

    一个简单的例子可以是一个银行应用程序,其中一个帐户是 通过多个会话进行修改(即在出纳员处存款, 借记操作等)。Paxos用于决定哪种操作 先发生什么

    是的,如果您使用MySQL数据库集群来保存银行账户,那么Paxos将用于确保副本与主副本就应用于客户银行账户的交易顺序达成一致。如果所有节点都同意应用事务的顺序,则它们都将持有相同的余额

    银行账户上的业务不能在没有不同余额的情况下重新排序,这些余额可能违反不超过您信用额度的业务规则。确保订单的一个简单方法是只使用一个服务器进程,该进程仅根据接收到的消息的顺序来决定正式订单。然后,它可以跟踪每个银行账户的余额,并执行业务规则。然而,您不希望只有一台服务器,因为它可能会崩溃。您需要同时接收贷记和借记命令并与主服务器达成一致的副本服务器

    拥有具有相同平衡的副本所面临的挑战是,消息可能会丢失和重新发送,并且消息会被交换机缓冲,而交换机可能会延迟发送一些消息。最终的结果是,如果网络不稳定,很难证明快速复制协议不会导致不同的服务器看到消息以不同的顺序到达。最终,同一集群中的不同服务器拥有不同的平衡

    您不必使用Paxos来解决银行帐户问题。您只需执行简单的主从复制即可。您有一个主设备,一个或多个从设备,主设备在告诉任何客户机命令的结果之前,会等待从设备得到确认。这里的挑战是丢失和重新排序的消息。在Paxos被发明之前,数据库供应商只是创建了昂贵的硬件,其设计具有非常高的冗余度和可靠性来运行主从。Paxos的革命性之处在于它可以与商品网络一起工作,而不需要专门的硬件

    由于银行应用程序使用昂贵的定制硬件是有利可图的,因此许多现实世界的银行系统可能仍在以这种方式运行。在这种情况下,数据库供应商为专业硬件提供数据库软件运行的内置可靠网络。那太贵了