问题标签 [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.
filesystems - 少量节点的冗余分布式文件系统
我需要在不同位置的两个节点之间保持一个文件系统共享,以完全冗余的方式,以便在两个节点上运行的程序应该看到整个文件系统。
情况是数据文件可以存储在任何节点中,然后在另一个节点上运行的程序可能已被第三方通知该文件的存在,并且它希望它存在。rsync 镜像有太多延迟,即使使用自制技巧(例如 inotify)加速也是如此。当然,我们需要一个共享文件系统。
需要冗余是为了确保在其他数据中心无法访问时我们可以继续使用单个节点。
只有两个或三个节点来共享文件,可能 luster 或 HDFS 是矫枉过正,但可以考虑,Ceph 似乎太年轻,XtreemFS 有困难,DRBD 听起来不错(而且很小)但我担心它可能有问题跳过站点之间的高网络延迟。
我错过了一些可能性吗?有人真的有这个设置,在两个数据中心共享一个文件系统吗?
architecture - 关于非 ACID(分布式)系统的精彩文章/视频/...?(“最终一致”等)
我将从这些 - IMO 精彩 - 文章开始:
- 碱:酸替代品- Dan Pritchett (eBay), 2008
- 最终一致(-重新访问) -Werner Vogels(亚马逊),2008
- Brewer 猜想和一致的、可用的、分区容错的 Web 服务(非免费)的可行性 - 作者:Seth Gilbert,Nancy Lnych(麻省理工学院),2002
我对更多关于分布式系统的文章感兴趣,其中 ACID 无法再提供必要的可扩展性/可用性(甚至,ACID 在极端情况下仍然可以提供)。
文章应该侧重于实用方面(尽管我喜欢数学)。
我发现特别有趣的一件事:哪些经验法则/设计模式/ ...可以从非 ACID 架构派生?
architecture - ATM 机的数据系统是否使用最终一致性?
我很清楚全球ATM 系统是如何构建的。银行在全球范围内设计一个一致的系统一定非常困难。他们为此使用最终一致性还是使用了出色的 ACID 系统?
有一天我可以在我的银行所在的瑞典使用自动取款机,然后乘飞机前往美国或泰国,几个小时后在国外使用自动取款机。如果系统是一致的,那么他们需要与世界任何地方的非常可靠的连接。
erlang - 分布式 Erlang 和 CAP 定理
根据CAP 定理,分布式 Erlang 系统不可能同时提供以下所有三个保证:
- 一致性(所有 Erlang 运行时或节点,同时看到相同的数据)
- 可用性(节点故障不会阻止幸存者继续运行)
- 分区容限(尽管有任意消息丢失,系统仍继续运行)
一个分布式 Erlang 系统可以支持零个、一个或两个保证。
使用 Erlang 和 OTP,如何实现每个保证?大多数分布式 Erlang 应用程序为更高级别的 A 和 P 做出了实际的选择,并满足于“最终一致性”。似乎 Erlang 本身旨在支持分布式 (P)、容错 (A)、软实时、不间断的应用程序。
编程语言 (Erlang)、运行时系统 (ERTS) 和库集 (OTP) 旨在构建分布式容错应用程序;我该如何做定义分布式容错应用程序的三件事?
p2p - 学习分布式系统中更新通信算法的最佳论文是什么?
我有一个分布式系统(单个数据中心中的多个节点),我希望具有以下属性:
- 节点可以随时进出系统。
- 节点之间没有数据复制。
- 客户端使用哪个节点取决于客户端(即它可以是一致的散列,也可以是其他的)
- 没有主人(即没有中心故障点)
- 每个节点可能会收到一条需要转发给其余节点的信息
什么算法(最好是论文链接)适合这个?
(我假设一些答案将包括 P2P 算法,但我过去遇到的大多数答案更像是分布式哈希表,节点进入并接管部分密钥空间等。我也认识到在这里使用简单的 UDP 消息进行多播可能是合适的,但是现有的工作将有助于使消息传递可靠吗?)
c# - 使用 XML-RPC 编写用 C#、Ruby 和 Java 编写的分布式应用程序
我的任务是编写一个分布式事件管理工具,其中每个客户端(Ruby、C# 或 Java 客户端)将所有更改与注册客户端列表同步。我必须使用XML-RPC
来实现目标。我和我的团队已经用XML-RPC
每种语言编写了一个客户端和服务器,并将在下面提供相关的源代码。如果您需要更多代码,请告诉我。
问题是我可以让 Java 和 C# 相互通信。Ruby 可以与其他人通信,但 C#(可能还有 Java,尚未测试)在处理 Ruby 服务器时存在问题。我想问题出在端点上。首先让我给你一些代码。阅读时请注意,代码实际上是由团队编写的,命名约定略有不同:
C# 客户端
_proxy
不会持有给定 URI 的客户端。这些存储在字典中,并在需要同步事件时使用。在修改的情况下会发生一种这样的同步;
这是 IEventManagerWCF_XML_RPC 接口的摘录;
C# XML RPC 服务
我猜这里没什么特别的。让我们继续 Java 代码!
Java 客户端
xmlRpcPeers
现在拥有不同的客户。它们的名称如下;
Java Server有它自己的类,并通过一个简单的new
调用来实例化;
到目前为止,一切似乎都运行良好。将 Ruby 添加到混合中是最麻烦的。这是相关代码;
Ruby 客户端 Ruby 客户端也存储在字典中。它的填充如下;
该类的代码是:
对修改进行同步的调用如下所示:
红宝石服务器
EventManagerService 类:
EventManager
是所有逻辑所在的类。
尝试从 C# 到 Ruby 通信时的错误是EndPointNotFoundException
:
There was no endpoint listening at http://ip:8000/xmlrpc/EventManagerService that could accept the message.[...]
我尝试摆弄端点声明,但似乎无法让它工作。Ruby 文档也无济于事。我需要帮助!
java - mongodb副本集中的仅辅助节点
我正在做一个项目,我希望能够指定副本集的某些节点永远不能是主节点,即,如果发生故障,所有主节点都死了,系统应该被降低到只读状态直到出现一些具有主要能力的节点。这可能吗?如果是怎么办?如果不是最好的方法是什么。
java - DDS DataReader 缓存中断并且不再可访问
在 i386 上使用 dds 库操作,尝试反复提取样本。我明确地' read
ing'而不是' take
ing'样本,所以它们永远不会过期或被删除。
- 启动两个黑板应用程序,(1) 和 (2)
- 在两个应用程序中执行读取。这将返回“缓存为空”。
- 从 (1) 写入,传感器 ID:1,事件 ID:1,值:1。
- 从 (1) 读取,确认值
- 从 (2) 中读取,确认值
- 从 (2) 写入,传感器 ID:1,事件 ID:1,值:2。
- 从 (2) 中读取,“缓存为空”
- 从 (1) 中读取,“缓存为空”
好像我“打破”了它!我相信样本的生命周期应该是无限的(或者我已经理解......但无法确认!) - 但我无法明确设置它。topicQos.lifespan.duration
是类型Duration_t
,但我不能将其设置为“新Duration_t(Duration_t.DURATION_INFINITY_SEC,Duration_t.DURATION_INFINITY_NSEC)
”,因为它已经完成?
networking - 传感器网络控制系统
我正在制作一个分布式传感器网络。我的网络的基本架构是有几个从节点(最多大约 10 个)定期向主节点报告。
我正在寻找一个可以用于此的软件框架,到目前为止我已经想到了
- 科尔巴
- pubsubhub
- xmtp
- 做我自己的
我有一些基本要求(如基本安全、故障意识)
有人有什么建议吗?
web-crawler - 移动代理和网络爬虫的区别
有人能告诉我移动代理和网络爬虫之间的确切区别吗?
提前致谢。