问题标签 [distributed-computing]
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.
guid - 在分布式并发环境中生成唯一序列号时的权衡是什么?
我很好奇在分布式和并发环境中生成唯一序列号的约束和权衡。
想象一下:我有一个系统,它所做的只是在你每次询问时返回一个唯一的序列号。这是此类系统的理想规范(约束):
- 在高负荷下保持站立。
- 允许尽可能多的并发连接。
- 分布式:将负载分散到多台机器上。
- 性能:尽可能快地运行并具有尽可能多的吞吐量。
- 正确性:生成的数字必须:
- 不重复。
- 每个请求都是唯一的(如果任何两个请求同时发生,则必须有办法打破关系)。
- 以(增加)顺序。
- 请求之间没有间隙:1,2,3,4...(实际上是总数 # 个请求的计数器)
- 容错:如果一台或多台或所有机器宕机,它可以恢复到失败前的状态。
显然,这是一个理想化的规范,并非所有约束都可以完全满足。见CAP 定理。但是,我很想听听您对各种放宽约束的分析。我们将留下什么类型的问题以及我们将使用什么算法来解决剩余的问题。例如,如果我们摆脱了计数器约束,那么问题就变得容易多了:由于允许有间隙,我们可以对数值范围进行分区并将它们映射到不同的机器上。
欢迎任何参考资料(论文、书籍、代码)。我还想保留一份现有软件(开源与否)的列表。
软件:
- Snowflake:一种用于大规模生成唯一 ID 号的网络服务,并提供一些简单的保证。
- keyspace:一个可公开访问的唯一 128 位 ID 生成器,其 ID 可用于任何目的
- RFC-4122 实现存在于多种语言中。RFC 规范可能是一个非常好的基础,因为它避免了任何系统间协调的需要,UUID 是 128 位的,并且当使用来自实现特定版本规范的软件的 ID 时,它们包含一个时间码部分,排序可能等。
distributed - 开放分布式计算研究问题/主题?
嘿嘿,
我最近阅读了 Lamport、Fischer、Lynch、Brewer 的很多论文,以了解他们对分布式系统的看法。
我想知道,当前开放的分布式计算研究问题/主题是什么?数据库、通信、容错、数字运算等许多领域似乎都得到了解决,并且掌握在相当扎实的手中。
您认为什么是新领域,也许有人过去确实想过,但现在不可能了,现在变得可能了?图算法/数据库/分析之类的主题?
如果有人能提供一些关于分布式系统的必读论文,我也将不胜感激。它们也可以是一个更“科幻”的东西,以保持灵感。
java - 使用 Java 的网络索引器
用Java开发时,并行系统还是分布式系统更适合网站爬虫和网络索引器?有哪些可用的框架?
java - 一个程序在多个 JVM 上运行?
我知道 MPI 可以做到,也听说 Erlang 对此有很好的支持。但是JVM上有没有类似的框架/语言?我需要透明地运行一个分布在多台机器上的程序。
谢谢,
c++ - Boost::网络信号封装
我目前参与开发使用分布式计算来检测不同事件的软件。
当前的方法是:十几个线程同时在不同的(物理)计算机上运行。每个事件都有一个编号;每个线程将其检测到的事件广播给另一个线程,并从传入流中过滤相关事件。
我对此感到非常难过,因为它看起来很糟糕,难以维护,并且在系统升级时可能会导致性能问题。
所以我正在寻找一种灵活而优雅的方式来处理这个 IPC,我认为 Boost::Signals 似乎是一个不错的选择;但我没用过,想知道是否可以为网络通信提供封装。
web-services - Azure 中的分布式计算应用程序作为 Web 服务提供给桌面 View 应用程序
Azure 应用程序是否有可能为最终用户提供服务,以执行将分布在多个 Worker(具有持久存储)上的长时间运行的计算任务?
是否可以通过桌面 .Net 应用程序(视图)访问的 Web 服务来提供此功能,或者您是否总是需要使用 Azure 的 Web 界面?
performance - 使用云/分布式计算来共享处理器时间 - 可能性和方法
我的问题是我在处理要求苛刻的网络应用程序时思考过的一个问题,该应用程序将使用服务器在网络上明确共享任务,将作业分别分配给每台计算机并“分担负载”。
我想知道:这可以以更隐含的方式完成吗?
问题
是否有可能将处理器密集型任务分布在自愿和公共的计算机网络上,以使作业更有效地运行,而无需在每台计算机上安装作业的程序或进程?
设想
假设我们有一个非常密集的数学场景,我试图让我的计算机计算从 1 到 10,000,000 的所有数字的每个素数分解分解并将它们存储在数据库中(假设我有空间并且算法已经实现在他们自己的类、程序、动态链接库或任何可运行的进程中。)
现在通过网络或在多核超级计算机上共享这个负担过程会更有效,但是这些都很昂贵。据我所知,您将需要一个专门设计的程序来运行特定算法并在所述云/分布式计算网络上安装该程序,同时您有一个服务器跟踪每台计算机正在做什么(即他们当前正在计算的数量)的素数)。
结论
总体:
是否有可能创建一个云程序/操作系统/套件,您可以在其中为未指定类型的进程共享处理器时间?
如果是这样,您将如何实施它,您将从哪里开始?
您是否会制作一个专用于能够运行未指定的非显式任务的操作系统,或者是否可以使用安装在志愿者计算机上的启用云的程序来做志愿者愿意分享他们的处理器时钟百分比来帮助一般社区的志愿者) .
如果这是可以实施的,你会自愿加入更大的云吗?
我很想听听每个人的想法和可能的解决方案,因为这将是一个很棒的项目。
algorithm - 加入非常大的列表
让我们先放一些数字:列表中最大的是大约 100M 条记录。(但预计会增长到 500 个)。其他列表(其中 5-6 个)以百万计,但在可预见的未来将少于 1 亿。这些总是基于单个 id 连接。并且从不使用任何其他参数。加入此类列表的最佳算法是什么?
我在考虑分布式计算。有一个好的散列(循环散列类型,您可以在其中添加一个节点并且没有很多数据移动)功能并将这些列表分成几个较小的文件。而且,由于它们总是以公共 id 加入(我将对其进行散列),因此归结为加入小文件。也许为此使用 nix join 命令。
数据库(至少是 MySQL)将使用合并连接加入(因为它将位于主键上)。这会比我的方法更有效吗?
我知道最好的测试和查看。但考虑到这些文件的庞大,它相当耗时。我想做一些理论计算,然后看看它在实践中是如何公平的。
对这些或其他想法的任何见解都会有所帮助。我不介意它是否需要更长的时间,但更希望最好地利用我拥有的资源。不要有很大的预算:)
r - 将 ar 作业提交给 condor 时读取 R 文件时出错
我有一个提交给 condor 的 R 作业,提交给 condor 的 R 文件(one.R)正在读取另一个 R 文件(two.R),当我将作业提交给 condor 时,它失败并且原因是提交的 R(one.R) 文件未读取调用的 R 文件(two.R) 文本文件中的错误是:
我的提交文件是
感谢您对此的任何想法。
谢谢,