最近我为我编写的一个软件添加了一些负载均衡功能.它是一个联网的应用程序,它根据来自SQL数据库的输入执行一些数据处理.由于压缩可能非常密集,我已经添加了在不同服务器上运行此应用程序的多个实例以分割负载的功能,但现在负载平衡是一种手动操作.用户必须指定哪些实例占用输入域的哪个部分.
我想把它提升到一个新的水平,并对实例进行编程,以自动协商输入数据的潜水,并识别其中一个"消失"(已经崩溃或已经断电),以便其余的实例可以采取在失败的实例的工作量上.
为了实现这一点,我正在考虑在实例之间使用简单的心跳协议来确定谁在线以及谁不在线,虽然这不是非常复杂但我想知道是否有任何已建立的心跳网络协议(基于UDP,TCP或两者兼而有之).
显然,在集群,故障转移和高可用性技术的网络世界中,这种情况发生了很多,所以我想最后我想知道是否有任何已建立的协议或算法,我应该知道或实现.
编辑
根据答案,似乎没有完善的心跳协议或没有人知道它们(这意味着它们毕竟不是那么完善)在这种情况下我只是要滚动我自己的.
虽然没有一个答案提供了我特别想要的东西,但我会投票支持Matt Davis的答案,因为它是最接近的,他指出了使用多播的好主意.
谢谢大家的时间〜
sockets network-programming network-protocols distributed-computing
谷歌波浪协议的常见问题解答说[HTML]"没有理想的属性",并且"HTML使OT(操作变换)变得困难,如果不是不可能的"[1].为什么会这样?如果将HTML简单地视为纯文本然后应用OT,会出现什么问题?
real-time distributed-computing google-wave real-time-systems operational-transform
我正在开发一个涉及服务器的Node.js项目(为了简单起见,我们将这个服务器想象成一个必须将消息从某些客户端转发到其他客户端的聊天服务器).我需要QoS原因,这个服务器总是可以访问的,所以我想使用集群来划分不同服务器(不同的物理机器)之间的平衡负载,并确保如果服务器出现故障,另一个服务器将准备好服务请求.
我的问题是:在Node.js中这种分布式方法是否可行?
我已经阅读过关于"集群"模块的内容,但是,根据我的理解,它似乎只能在同一台机器上的多处理器上进行扩展.
这是一个面试问题.假设有几台计算机,每台计算机都保存一个非常大的访问URL日志文件.查找前十个访问量最大的网址.
例如:假设只有3台计算机,我们需要前两个访问量最大的URL.
Computer A: url1, url2, url1, url3 Computer B: url4, url2, url1, url1 Computer C: url3, url4, url1, url3 url1 appears 5 times in all logs url2 2 url3 3 url4 2 So the answer is url1, url3
日志文件太大而无法放入RAM并通过网络复制它们.据我了解,重要的是使计算并行并使用所有给定的计算机.
你会如何解决它?
language-agnostic algorithm parallel-processing distributed-computing
两者都被定义为一组协同工作的计算机,并为最终用户提供对在其后面运行的单个计算机的感知.
那么这里的区别是什么?
根据Apache AVRO项目,"Avro是一个序列化系统".通过说数据序列化系统,是否意味着avro是产品或api?
另外,我不确定数据序列化系统是什么?现在,我的理解是它是一个定义数据对象如何通过网络传递的协议.任何人都可以帮助以直观的方式解释它,以便分析计算背景有限的人更容易理解吗?
提前致谢!
所以我要说我家里有一些电脑.
我们还说我想要运行一些算法,这通常需要花费很多时间来解决.它可以分为我想要多少部分,所以我可以在一台机器中运行它的一部分,在另一台机器中运行它的一部分等等,最后我只需要将结果合并到一台计算机中.
我的问题是,在.NET中是否有任何简单直接的方法可以利用多台计算机来进行这种计算.如果是,它是如何调用的?我并不是要自己编写所有IPC代码,类似于BCL的任务,但这允许我通过IP或其他东西将"工作"发送到其他计算机.
谢谢!
我正在开发一个应用程序,我需要在一个可能非常大的不同机器集群中分配一组任务.
理想情况下,我想在Clojure中使用一种非常简单,惯用的方法,例如:
; create a clustered set of machines
(def my-cluster (new-cluster list-of-ip-addresses))
; define a task to be executed
(deftask my-task (my-function arg1 arg2))
; run a task 10000 times on the cluster
(def my-job (run-task my-cluster my-task {:repeat 10000})
; do something with the results:
(some-function (get-results my-job))
Run Code Online (Sandbox Code Playgroud)
如果能在集群上做Map-Reduce之类的话也可以获得奖励......
实现这样的目标的最佳方法是什么?也许我可以包装一个合适的Java库?
更新:
感谢Apache Hadoop的所有建议 - 看起来它可能符合要求,但是它看起来有点像矫枉过正,因为我不需要像Hadoop那样使用分布式数据存储系统(即我不需要处理数十亿条记录)...更轻量级的东西,专注于计算任务,如果存在的话,它会更好.
我正在尝试使用Erlang作为粘合剂来实现一个集群.我喜欢它创建一个完全连接的节点图的想法,但是在网上阅读不同的文章时,似乎这不能很好地扩展(最多有50到100个节点).OTP的开发人员是否故意强制实施此限制?我知道您可以将节点设置为仅具有显式连接以及具有隐藏节点等.但是,似乎默认的开箱即用设置不是非常可扩展.
那么问题:
如果您有5个节点(A,B,C,D,E),它们都具有明确的连接,例如ABCDE.Erlang/OTP是否允许A直接与E通信,或A是否必须将消息从B传递到D才能到达E,这就是完全连接图的原因?同样,它是有道理的,但它不能从我所见的很好地扩展.
如果要尝试使用可扩展且容错的系统,您有什么选择?好像,如果由于节点太多而无法创建完全连接的图形,那么下一个最好的方法就是创建某种树.但是,这似乎不是容错的,因为如果子节点的根节点或任何父节点死亡,您将丢失很大一部分集群.
在调查主管和工作人员时,我看到的所有示例都将此应用于单个节点上的进程.它可以应用于节点集群以帮助实现容错吗?
节点可以成为多个集群的一部分吗?
感谢您的帮助,如果有一个我最近错过的半新网站或博客帖子(大约1岁),我很乐意看看这些.但是,我已经很好地搜索了互联网.
我不是分布式系统和CUDA的专家.但有一个非常有趣的功能,PyTorch支持的是nn.DataParallel和nn.DistributedDataParallel.他们是如何实际实施的?他们如何分离常见的嵌入和同步数据?
这是一个基本的例子DataParallel.
import torch.nn as nn
from torch.autograd.variable import Variable
import numpy as np
class Model(nn.Module):
def __init__(self):
super().__init__(
embedding=nn.Embedding(1000, 10),
rnn=nn.Linear(10, 10),
)
def forward(self, x):
x = self.embedding(x)
x = self.rnn(x)
return x
model = nn.DataParallel(Model())
model.forward(Variable.from_numpy(np.array([1,2,3,4,5,6], dtype=np.int64)).cuda()).cpu()
Run Code Online (Sandbox Code Playgroud)
PyTorch可以拆分输入并将它们发送到许多GPU并将结果合并.
它如何管理并行模型或分布式模型的嵌入和同步?
我在PyTorch的代码中闲逛,但很难知道基础知识是如何工作的.
c++ parallel-processing distributed-computing python-3.x pytorch
.net ×1
algorithm ×1
c# ×1
c++ ×1
clojure ×1
cloud ×1
distributed ×1
erlang ×1
google-wave ×1
hadoop ×1
java ×1
multiserver ×1
node.js ×1
python-3.x ×1
pytorch ×1
real-time ×1
sockets ×1