标签: distributed

什么网格分布式计算框架目前受到交易系统的青睐

似乎有相当多的网格计算框架,但是为了低延迟分布计算的目的,哪些实际上被投资银行用于很大程度?我有兴趣听到有关Windows,Linux和跨平台的答案.什么RPC机制似乎最受青睐?

我听说由于低延迟和低速的原因,计算本身通常用C++/C编写,因为在VM上运行的计算比本机代码慢几个数量级.这在实践中似乎是一种常见的情况吗?例如,分布式.NET网格框架运行用本机c ++/c编写的计算?

c++ grid distributed trading

6
推荐指数
1
解决办法
1498
查看次数

使用Zookeeper存储用户权限是否有意义

我正在编写一个涉及多个前端节点的分布式应用程序,除非它们是列表的一部分,否则需要拒绝对用户执行操作.

现在我们有超过4个节点,但只有一个运行DB2的数据库服务器通常需要维护.

现在我们正在轮询数据库以更新内存列表,这样如果用户从列表中删除,则更改会反映到所有4个节点.但是,如果在数据库关闭时重新启动其中一个节点,我们最终会得到一个空列表,这将拒绝我们不想要的所有用户请求.我们可以接受来自用户的请求,即使数据库已关闭,因为我们将它们缓冲在消息队列中,但我们想立即拒绝它们,如果它们需要被拒绝的话!

在我们的4个节点上运行Zookeeper实例并在Zookeeper中存储用户权限是否有意义.因此,阅读应该是快速的,并且数据具有高可用性和可靠性.我们不必再进行轮询,即使我们重新启动数据库,节点也可以从zookeeper获取配置!

java distributed apache-zookeeper

6
推荐指数
1
解决办法
1736
查看次数

Python中的分布式编程

我计划编写一个简单的数据流框架,它基本上由对象的惰性方法调用组成.如果我考虑过分布式编程,那么在Python中启用它的最简单方法是什么?没有我做网络编程的任何透明解决方案?

或者首先,我如何在Python中使用多核处理器?

python distributed

6
推荐指数
1
解决办法
9309
查看次数

使用Apache ZooKeeper实现死锁检测

我在一家小型软件公司工作,我的任务是研究分布式锁管理器供我们使用.它必须与Java和C++接口.

我已经使用ZooKeeper工作了几个星期,并根据文档实现了共享锁(读写锁).我现在需要实现死锁检测.如果每个客户端都可以维护锁的图形,那么它将是快速而简单的.但是,您无法可靠地查看ZooKeeper中节点发生的每个更改,因此无法保持准确的图形.这意味着每次检查死锁时,我都需要下载许多锁,这似乎不切实际.

另一种解决方案是在ZooKeeper服务器中实现死锁检测,我现在正在研究它.每个客户端都会在'/ waiting'中创建一个以其会话ID命名的节点,其数据将是其等待的锁.由于每个锁都有一个短暂的所有者,我将有足够的信息来检测死锁.

我遇到的问题是ZooKeeper服务器没有ZooKeeper客户端的同步保证.另外,ZooKeeper服务器没有像客户端那样很好地记录,因为你通常不应该触摸它.

所以我的问题是:如何使用Apache ZooKeeper实现死锁检测?我看到很多人推荐ZooKeeper作为分布式锁管理器,但如果它不能支持死锁检测,那么没有人应该将它用于此目的.


编辑:

我有一个有效的解决方案.我无法保证其正确性,但它已通过我的所有测试.

我正在分享我的checkForDeadlock方法,这是死锁检测算法的核心.以下是您需要了解的其他信息:

  • 一次只能有一个客户端运行死锁检测.
  • 首先,客户端尝试获取资源上的锁.如果资源已被锁定且客户端想要等到它可用,则客户端接下来会检查死锁.如果等待资源不会导致死锁,那么它接下来会在特殊目录中创建一个znode,该目录标识此客户端正在等待该资源.那条线看起来像这样:waitNode = zooKeeper.create(waitingPath + "/" + sessionID, resource.getBytes(), ZooDefs.Ids.OPEN_ACL_UNSAFE, CreateMode.EPHEMERAL);
  • 在此客户端创建等待节点之前,没有其他客户端应该开始检查死锁.
  • 如果两个客户端几乎同时尝试获取锁,但是同时授予这两个锁会导致死锁,那么稍有可能的是,第一个客户端可能会被拒绝,而不是第一个客户端获得锁定而第二个客户端被拒绝.第二个客户端可以获得锁定.这应该不是问题.
  • checkForDeadlockDeadlockException如果发现死锁,则抛出一个.否则,它会正常返回.
  • 锁严格按顺序授予.如果资源具有授予的读锁定和等待写入锁定,并且另一个客户端想要获取读取锁定,则必须等到授予写入锁定然后释放之后.
  • bySequenceNumber 是一个比较器,按照ZooKeeper附加到顺序znode末尾的序列对znodes进行排序.

码:

private void checkForDeadlock(String pathToResource) throws DeadlockException {
    // Algorithm:
    //   For each client who holds a lock on this resource:
    //     If this client is me, announce deadlock.
    //     Otherwise, if this client is waiting for a reserved resource, recursively check for deadlock …
Run Code Online (Sandbox Code Playgroud)

java distributed deadlock locking apache-zookeeper

6
推荐指数
1
解决办法
1628
查看次数

ZeroMQ,如何连接外部tcp套接字?

您能告诉我如何使用一些通用套接字在不同服务器上的两个程序之间发送消息ZeroMQ吗?所有本地套接字程序都有效,但我不明白它们是如何传播到不同的地方的.因为攀爬错误:

Traceback (most recent call last):
  File "/Users/*****/Projects/*****/workers/internal_links_parser.py", line 20, in <module>
    socket.bind("tcp://***.***.***.***:5000")
  File "socket.pyx", line 447, in zmq.core.socket.Socket.bind (zmq/core/socket.c:4312)
zmq.core.error.ZMQError: Can't assign requested address
Run Code Online (Sandbox Code Playgroud)

请解释,如果不难给出一个例子.谢谢!

distributed zeromq pyzmq

6
推荐指数
1
解决办法
6851
查看次数

分发Erlang聊天系统

我刚刚完成了Erlang in Practice截屏(这里的代码),并对分发有一些疑问.

这是整体架构:

建筑

以下是监督树的样子:

supervisortree

阅读分布式应用程序让我相信,其中一个主要动机是故障转移/接管.

但是,例如,消息路由器主管及其工作人员是否可以在一个节点上,并且系统的其余部分可以在另一个节点上,而不需要对代码进行太多更改?

或者应该有3种不同的OTP应用程序?

此外,如何使该系统水平扩展?例如,如果我现在意识到我的系统可以处理100个用户,并且我已经将消息路由器确定为主要瓶颈,那么我怎样才能"添加另一个节点",现在它可以处理200个用户?

erlang distributed erlang-otp

6
推荐指数
1
解决办法
1520
查看次数

Jmeter分布式测试 - 加速时间如何在分布式负载测试中工作

如果我在GUI模式下使用4个客户端服务器(1个Master + 3 Slave)运行分布式测试,并在我的计划中设置以下值 -

Number of Threads = 12000  
Ramp Up time = 1000  
Loop count = 1  
Run Code Online (Sandbox Code Playgroud)

完成测试后我得到了36000个样品(这没关系12000 * 3 = 36000),但我的问题是加速时间 - 对于36000个用户来说它是3000吗?或者它将为36000保持1000

提前致谢

distributed jmeter

6
推荐指数
1
解决办法
332
查看次数

为什么多paxos被称为多paxos?

为什么多paxos被称为多paxos?我看不出它是多么"多".

algorithm distributed paxos

6
推荐指数
2
解决办法
2702
查看次数

如何将一个float数组(没有序列化/反序列化)从Scala(JeroMQ)传输到C(ZMQ)?

目前,我正在使用JSON库来序列化发送方(JeroMQ)上的数据,并在接收方(C,ZMQ)进行反序列化.但是,在解析时,JSON库开始消耗大量内存,操作系统会终止进程.所以,我想按原样发送float数组,即不使用JSON.

现有的发件人代码在下面(syn0并且syn1Double数组).如果syn0并且syn1每个大约100 MB,则在解析接收到的数组时,该进程将被终止,即下面的代码段的最后一行:

import org.zeromq.ZMQ
import com.codahale.jerkson
socket.connect("tcp://localhost:5556")

socket.send(json.JSONObject(Map("syn0"->json.JSONArray(List.fromArray(syn0Global)))).toString())
println("SYN0 Request sent”)
val reply_syn0 = socket.recv(0)
println("Response received after syn0: " + new String(reply_syn0))
logInfo("Sending Syn1 request … , size : " + syn1Global.length )

socket.send(json.JSONObject(Map("syn1"->json.JSONArray(List.fromArray(syn1Global)))).toString())
println("SYN1 Request sent")
val reply_syn1 = socket.recv(0)

socket.send(json.JSONObject(Map("foldComplete"->"Done")).toString())
println("foldComplete sent")
//  Get the reply.
val reply_foldComplete = socket.recv(0)
val processedSynValuesJson = new String(reply_foldComplete)
val processedSynValues_jerkson =   jerkson.Json.parse[Map[String,List[Double]]](processedSynValuesJson)
Run Code Online (Sandbox Code Playgroud)

可以在不使用JSON的情况下传输这些数组吗?

这里我在两个C程序之间传输一个float数组:

//client.c
int main (void)
{ …
Run Code Online (Sandbox Code Playgroud)

json distributed scala zeromq jeromq

6
推荐指数
1
解决办法
674
查看次数

`MonitoredTrainingSession()`如何与"恢复"和"测试模式"一起工作?

在Tensorflow中,我们可以使用Between-graph Replication分布式培训来构建和创建多个Tensorflow会话.MonitoredTrainingSession()协调多个Tensorflow会话,并且有一个参数checkpoint_dir用于MonitoredTrainingSession()恢复Tensorflow会话/图形.现在我有以下问题:

  1. 我们通常使用对象tf.train.Saver()来恢复Tensorflow图saver.restore(...).但是我们如何通过使用来恢复它们MonitoredTrainingSession()
  2. 由于我们运行多个流程并且每个流程都构建并创建了一个Tensorflow会话用于培训,我想知道我们是否还必须在培训后运行多个流程进行测试(或预测).换句话说,如何MonitoredTrainingSession()使用测试(或预测)模式?

我阅读了Tensorflow Doc,但未找到这两个问题的答案.如果有人有解决方案我真的很感激.谢谢!

python session distributed restore tensorflow

6
推荐指数
1
解决办法
3405
查看次数