问题标签 [distributed-system]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
301 浏览

replication - 在复制中提升master

我正在设计一种复制算法,以在许多奴隶中提升主人。我希望它比 Paxos 更快、更简单。基本思想是:

  1. 为每个节点分配一个“促销优先级”,例如对于 5 个节点,会有优先级:50、40、30、20 和 10,50 最高,10 最低。
  2. 当需要选举主节点时,所有从节点将(同时)向其他 4 个节点发送请求成为主节点的消息,但只有该主节点将被选举,并由所有从节点以确认消息确认。如果自己的“Promotion Priority”低于请求节点,或者如果具有较高优先级的请求节点超时发出拒绝消息,则从节点将发送确认消息。
  3. 如果从站接收到来自具有更高“提升优先级”的从站的拒绝消息,它将中止该过程。
  4. 应该没有具有相同优先级的节点。
  5. 为了成为主人,奴隶应该收集最少数量的确认消息。

这个算法应该更快,因为所有的slave都将并行选举一个master,优先级将有助于加快进程。

你怎么看待这件事?是否存在其他具有优先级的大师提升算法?

0 投票
1 回答
415 浏览

version-control - 版本控制 vs. 自动分发 vs. 依赖管理

想象一个分布式软件系统,安装在一组几百台计算机(节点)上。节点负责自动运行计划任务。有数百个任务,每个任务计划在大约 5-10 个节点上运行。节点可能会停止数天,并且可能会从系统中删除。每个任务都由一个或多个源文件和特定于节点的配置文件定义。代码直接在节点上开发和测试(使用远程访问),因为只有这些节点配备了特殊的硬件并具有运行任务所需的网络上下文(构建单独的测试系统太昂贵了)。每个任务的源文件引用共享源文件(库),库可能引用其他库。任务和库的依赖树很复杂。

我对分布式版本控制系统没有任何经验,但我觉得这个系统可以围绕 DVCS 构建。不同的库和不同任务的源文件会有自己的存储库。每个运行给定任务的节点都应该有一个该任务的 repo 实例。每个节点的至少一个任务使用的每个库的存储库也应该存在于该节点上。开发人员将在节点上本地修改和commit编码,并使用 DVCS 技术将修改分发到其他节点上的 repos。

问题 #1 将代码更改分发到其他节点的最佳方法是什么?

一些可能的场景:

  1. 开发人员push对具有相同 repo 实例的每个其他节点进行修改。(但他们可能会忘记/没有时间这样做。)
  2. 节点会自动pull从每个其他远程存储库和update它们自己中进行每次更改。(但可能会有冲突。)
  3. 对于每个 repo,其中一个实例用作“参考”。开发人员push对这个实例的修改,以及具有实例的每个其他节点自动pull从这里和updates 本身。(但具有引用实例的节点可能会停止。)

问题 #2 处理依赖关系的最佳方法是什么?

如果多个任务(或库)引用同一个库,并且必须修改引用的库,则一个或多个引用任务(或库)可能会停止工作(依赖地狱)。最好还是坚持原来的版本,经过适当的测试升级到新版本。也就是说,同一源文件的多个版本应该存在于同一个 repo 中,这似乎是不可能的。我是否必须为branch引用库的新版本创建一个新版本?如果是,我应该如何升级推荐回购?

谢谢您的帮助。

0 投票
1 回答
332 浏览

domain-driven-design - 在分布式系统中为消息提供共享和专用的程序集或库是常见的做法吗?

我正在讨论分布式域驱动设计背后的一些概念,并且正在构建概念验证。我有三个 C# 解决方案,它们在整个系统中具有特定的职责。

我的解决方案是:

  • 写入模型(从客户端接收命令并创建和发送事件)
  • 读取模型(从写入模型接收事件,创建数据库并向客户端公开 DTO 服务,可能是 2 个单独的解决方案)
  • 客户端(调用服务以获取所需数据并向写入模型发送命令)

所有三种解决方案都通过服务总线使用消息传递(命令、事件)。(在我的情况下是大众运输)。

我的主要问题是:创建带有消息的程序集并让每个解决方案都引用该程序集是常见的做法吗?

额外的功劳:在这个 POC 中,我正在做的事情有什么奇怪或有问题的吗?在创建此类系统时我应该注意的任何其他信息?

0 投票
1 回答
3783 浏览

protocols - 为什么反熵协议中会出现“熵”这个词?

反熵协议是八卦协议的一种形式。http://en.wikipedia.org/wiki/Gossip_protocol。我想知道是否有人可以解释一下熵在这里的意义。

0 投票
3 回答
324 浏览

sql - 想要创建一个分布式文件系统?

在我工作的地方,大约有 400 名员工分布在两个主要校区的几个校区之间,我们设置了服务器并在服务器上共享文件夹。我想设置一个系统,因此我们有一个用户可以看到的共享文件夹,然后在两台服务器上都有所有文件的副本,并根据用户所在的校园访问文件,以阻止人们在文件传输时等待,然后只有如果文件被更改,则强制他们必须访问该文件的最新副本,然后在夜间传输所有更改的文件,这样就不会在白天降低网络速度。

谁能告诉我是否有一个系统已经这样做了?或者在尝试搜索执行此操作的系统时应该使用哪些关键字?

我一直在考虑使用 MS SQL Server 2012 FileTables 创建一个系统来执行此操作,并在表上放置触发器以检查哪个表具有文件的最新副本,并创建一个存储过程以在一夜之间压缩和传输更改的文件。

0 投票
1 回答
156 浏览

replication - 复制中的副本

系统中的数据是项目(即对象)的集合。这些逻辑对象由一组称为副本的物理副本实现。副本是物理对象,每个都存储在一台计算机上,其数据和行为与系统操作的某种程度的一致性相关联。

我的问题是

1 对象应该是物理的,副本应该是逻辑的 2 副本是精确副本还是原始副本的一部分,即足够的信息 3 副本存储在哪里,单个对象有多少个副本?4 当客户端连接到对象时,他们访问的是副本还是原始对象?

我试图在网上找到我的问题的答案,但不能因此不得不在 stackoverflow 上发布。

0 投票
0 回答
442 浏览

google-app-engine - How does High Replication Datastore implement consistent reads

I watched the video in the link below to understand how the High Replication Datastore works. Writes are synchronously replicated to a majority of the replicas and the remaining replicas receive the update asynchronously. The video says that reads are consistent. That even if a read hits a datacenter with stale data the datacenter will catch up with new updates. But how does it know whether or not it has stale data. Presumably it doesn't query every replica on each read?

http://www.google.com/events/io/2011/sessions/more-9s-please-under-the-covers-of-the-high-replication-datastore.html

0 投票
0 回答
166 浏览

java - 分布式搜索系统JAVA

我想创建一个离线分布式搜索系统(稍后我将使用socketsand multithreads)。现在,首先,我将特定目录的绝对路径(如果我放 C:\,il 将用于整个磁盘)保存到一个文件中。我应该使用什么样的文件?文本?我担心优化系统。(我的 80GB 分区的 txt 文件有 34mb)

稍后用户将使用系统搜索特定文件,我想在我之前创建的那个文件上搜索它。

如果我使用PrintWriter带有 println 的,以后会很难读取该文件吗?

先感谢您。(如果你不介意的话,我稍后会使用这个主题来提出一些其他问题。)

编辑:

我使用了 .txt,它与 .txt 配合得很好PrintWriter

0 投票
1 回答
105 浏览

c++ - C++中发生关系之前的数据结构

在 C++ 中,在关系之前维护全局的最佳结构是什么。我在考虑链表数组(数组是每个进程,链表中的项目是事件)。但是很难找出不同过程之间的循环。任何人都可以建议良好的数据结构来维持全球关系吗?提前致谢。

0 投票
1 回答
1222 浏览

logging - 用于事件关联的矢量时钟比较

我有一堆日志文件,其中包含事件日志及其中记录的矢量时钟。现在在比较任意两个事件的矢量时钟时,对矢量时钟的每个分量的平方和求根并用结果与另一个比较,然后得出结论是否正确较小的值先于另一个?