标签: distributed

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

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

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

c++ grid distributed trading

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

两个EAR文件,相同的JPA实体管理器,同一个事务=>相同的会话?

假设我有两个应用程序,每个应用程序都有一个单独的EAR文件,它们在同一个JTA事务中相互调用.如果两者共享同一个实体管理器,它们是否会获得相同的会话,或者每次都创建新会话?

java distributed jpa transactions jpa-2.0

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

如何测试1000个客户端Windows 7客户端

我们在Windows 7上运行的.net客户端嵌入了sql server express.这些运行断开连接,每隔一段时间就会拨入中央服务器并转储其信息并下拉相关的新信息.我们希望对整个分布式系统进行压力测试,并试图考虑一种经济有效的方法来实现这一目标.我们的一个开发人员有想法使用亚马逊云并启动1000个客户端,但他们只支持Windows服务器O/S,看起来如果你不得不多次重新运行测试可能会遇到一些钱.

我们考虑在一台机器上模拟1000个客户端,假装有1000个客户端并异步调用所有调用,但如果你在一台机器上运行,你的一些天花板将是RAM和一台机器的处理器而不是更大的系统,所以我不确定它会给我们的图片"真实".

所有调用都发生在客户端和服务器之间的WCF.

任何人都有这方面的经验,如果是这样,你是如何解决的?

谢谢,

超级蒂米

.net wcf distributed stress-testing windows-7-embedded

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

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

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

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

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

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

java distributed apache-zookeeper

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

使用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
查看次数

如何设计分布式node.js Web服务器

我需要实现一个具有大量并发用户的Web应用程序.我决定使用node.js,因为它扩展得非常好,它具有良好的性能,开源社区等等.然后,为了避免瓶颈,因为我可以在同一个事件循环中拥有大量用户,我决定使用一个群集进程利用多核CPU.此外,我有3台机器(主+ 2),因为我需要用Cassandra操纵大数据.太棒了,这意味着我有3*n个node.js进程,其中n是cpu的核心数(机器是相同的).

好的,然后我开始研究,我以下面的架构结束:

  • Nginx侦听端口80并仅用于提供静态内容(img,css,js等).
    将动态流量转发到haproxy.我知道如何配置nginx,但我仍然要看看haproxy,所以我会说haproxy正在侦听端口4000.Nginx和haproxy安装在主机(入口点).
  • 3台机器之间的Haproxy负载平衡.它将流量转发到端口4001,即node.js进程正在侦听4001.
  • 每个node.js都有一个n个进程的集群,监听4001.

如果我是正确的,单个http请求将被转发到单个node.js进程.

创建会话很正常,对吗?会话只是一个映射,这个映射是一个Object,这个Object存在于node.js进程中.Haproxy将配置循环调度程序,因此可以将同一用户转发到不同的node.js进程.如何跨所有node.js进程共享同一个会话对象?如何共享全局对象(这包括在同一台机器(node.js集群)和整个网络中)?我应该如何使用node.js设计分布式Web应用程序?是否有任何模块可以简化同步任务?

distributed scalability multicore node.js

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

XCode 4.5中的分布式构建?

我想启用"分布式构建",以便我的Mac可以在办公室中建立其他闲置的Mac,以加快构建时间.显然,旧版XCode中的"首选项"中曾经存在"分布式构建"选项,如本博客顶部附近的屏幕截图所示:

http://blog.mundue.net/2010/12/distributed-builds/

但在最新的XCode中没有这样的东西.分布式构建甚至是XCode 4.5中的一个选项吗?

xcode distributed xcode4.5

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

如何将一个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
查看次数

保持本地缓存的策略在分布式系统中看到相同的"版本"数据

我正在尝试构建一个分布式系统来运行一些性能密集型计算.一个计算可以在多个工作节点处并行完成.问题是,随着数据源实时变化,我们希望每个工作节点(在单次计算期间)对相同的"版本"数据进行操作,即数据库的时间点快照.这是为了避免不一致的结果.

另一个问题是,每次计算的整个输入数据集可能非常大,因此目前我们在每个工作节点保留一个本地缓存,通过向数据源询问当前本地缓存版本的"差异"来定期刷新内容.将差异应用于本地缓存.

有哪些设计策略可以满足每个工作节点看到相同"数据"数据的要求(同时仍然有相当新鲜的数据)?我已经考虑过下面的解决方案,但想看看这是否是一个已经解决的常见模式:

  • 构建一个"版本控制"服务,定期查询数据源的差异,并将每个差异存储为数据"版本".工作节点的缓存与版本控制服务同步,并且还将其缓存数据保留在多个版本中.对于一个计算,我们确保工作节点使用相同版本的输入数据来实现一致性.此版本控制服务还应保留工作节点的整个数据集的最新副本,以便最初加载其缓存,并在工作节点关闭并重新启动时恢复本地缓存内容.

一些估计的系统参数:

  • 工人人数:10

  • 平均工作时间:显然我们希望这个尽可能快,但是假设应该不到2分钟

  • 输入作业数据(所有工人的总体数据):~100GB

  • 数据库大小:~1TB

database architecture distributed distributed-computing distributed-system

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

`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
查看次数