似乎有相当多的网格计算框架,但是为了低延迟分布计算的目的,哪些实际上被投资银行用于很大程度?我有兴趣听到有关Windows,Linux和跨平台的答案.什么RPC机制似乎最受青睐?
我听说由于低延迟和低速的原因,计算本身通常用C++/C编写,因为在VM上运行的计算比本机代码慢几个数量级.这在实践中似乎是一种常见的情况吗?例如,分布式.NET网格框架运行用本机c ++/c编写的计算?
假设我有两个应用程序,每个应用程序都有一个单独的EAR文件,它们在同一个JTA事务中相互调用.如果两者共享同一个实体管理器,它们是否会获得相同的会话,或者每次都创建新会话?
我们在Windows 7上运行的.net客户端嵌入了sql server express.这些运行断开连接,每隔一段时间就会拨入中央服务器并转储其信息并下拉相关的新信息.我们希望对整个分布式系统进行压力测试,并试图考虑一种经济有效的方法来实现这一目标.我们的一个开发人员有想法使用亚马逊云并启动1000个客户端,但他们只支持Windows服务器O/S,看起来如果你不得不多次重新运行测试可能会遇到一些钱.
我们考虑在一台机器上模拟1000个客户端,假装有1000个客户端并异步调用所有调用,但如果你在一台机器上运行,你的一些天花板将是RAM和一台机器的处理器而不是更大的系统,所以我不确定它会给我们的图片"真实".
所有调用都发生在客户端和服务器之间的WCF.
任何人都有这方面的经验,如果是这样,你是如何解决的?
谢谢,
超级蒂米
我正在编写一个涉及多个前端节点的分布式应用程序,除非它们是列表的一部分,否则需要拒绝对用户执行操作.
现在我们有超过4个节点,但只有一个运行DB2的数据库服务器通常需要维护.
现在我们正在轮询数据库以更新内存列表,这样如果用户从列表中删除,则更改会反映到所有4个节点.但是,如果在数据库关闭时重新启动其中一个节点,我们最终会得到一个空列表,这将拒绝我们不想要的所有用户请求.我们可以接受来自用户的请求,即使数据库已关闭,因为我们将它们缓冲在消息队列中,但我们想立即拒绝它们,如果它们需要被拒绝的话!
在我们的4个节点上运行Zookeeper实例并在Zookeeper中存储用户权限是否有意义.因此,阅读应该是快速的,并且数据具有高可用性和可靠性.我们不必再进行轮询,即使我们重新启动数据库,节点也可以从zookeeper获取配置!
我在一家小型软件公司工作,我的任务是研究分布式锁管理器供我们使用.它必须与Java和C++接口.
我已经使用ZooKeeper工作了几个星期,并根据文档实现了共享锁(读写锁).我现在需要实现死锁检测.如果每个客户端都可以维护锁的图形,那么它将是快速而简单的.但是,您无法可靠地查看ZooKeeper中节点发生的每个更改,因此无法保持准确的图形.这意味着每次检查死锁时,我都需要下载许多锁,这似乎不切实际.
另一种解决方案是在ZooKeeper服务器中实现死锁检测,我现在正在研究它.每个客户端都会在'/ waiting'中创建一个以其会话ID命名的节点,其数据将是其等待的锁.由于每个锁都有一个短暂的所有者,我将有足够的信息来检测死锁.
我遇到的问题是ZooKeeper服务器没有ZooKeeper客户端的同步保证.另外,ZooKeeper服务器没有像客户端那样很好地记录,因为你通常不应该触摸它.
所以我的问题是:如何使用Apache ZooKeeper实现死锁检测?我看到很多人推荐ZooKeeper作为分布式锁管理器,但如果它不能支持死锁检测,那么没有人应该将它用于此目的.
我有一个有效的解决方案.我无法保证其正确性,但它已通过我的所有测试.
我正在分享我的checkForDeadlock方法,这是死锁检测算法的核心.以下是您需要了解的其他信息:
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) 我需要实现一个具有大量并发用户的Web应用程序.我决定使用node.js,因为它扩展得非常好,它具有良好的性能,开源社区等等.然后,为了避免瓶颈,因为我可以在同一个事件循环中拥有大量用户,我决定使用一个群集进程利用多核CPU.此外,我有3台机器(主+ 2),因为我需要用Cassandra操纵大数据.太棒了,这意味着我有3*n个node.js进程,其中n是cpu的核心数(机器是相同的).
好的,然后我开始研究,我以下面的架构结束:
如果我是正确的,单个http请求将被转发到单个node.js进程.
创建会话很正常,对吗?会话只是一个映射,这个映射是一个Object,这个Object存在于node.js进程中.Haproxy将配置循环调度程序,因此可以将同一用户转发到不同的node.js进程.如何跨所有node.js进程共享同一个会话对象?如何共享全局对象(这包括在同一台机器(node.js集群)和整个网络中)?我应该如何使用node.js设计分布式Web应用程序?是否有任何模块可以简化同步任务?
我想启用"分布式构建",以便我的Mac可以在办公室中建立其他闲置的Mac,以加快构建时间.显然,旧版XCode中的"首选项"中曾经存在"分布式构建"选项,如本博客顶部附近的屏幕截图所示:
http://blog.mundue.net/2010/12/distributed-builds/
但在最新的XCode中没有这样的东西.分布式构建甚至是XCode 4.5中的一个选项吗?
目前,我正在使用JSON库来序列化发送方(JeroMQ)上的数据,并在接收方(C,ZMQ)进行反序列化.但是,在解析时,JSON库开始消耗大量内存,操作系统会终止进程.所以,我想按原样发送float数组,即不使用JSON.
现有的发件人代码在下面(syn0并且syn1是Double数组).如果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) 我正在尝试构建一个分布式系统来运行一些性能密集型计算.一个计算可以在多个工作节点处并行完成.问题是,随着数据源实时变化,我们希望每个工作节点(在单次计算期间)对相同的"版本"数据进行操作,即数据库的时间点快照.这是为了避免不一致的结果.
另一个问题是,每次计算的整个输入数据集可能非常大,因此目前我们在每个工作节点保留一个本地缓存,通过向数据源询问当前本地缓存版本的"差异"来定期刷新内容.将差异应用于本地缓存.
有哪些设计策略可以满足每个工作节点看到相同"数据"数据的要求(同时仍然有相当新鲜的数据)?我已经考虑过下面的解决方案,但想看看这是否是一个已经解决的常见模式:
一些估计的系统参数:
工人人数:10
平均工作时间:显然我们希望这个尽可能快,但是假设应该不到2分钟
输入作业数据(所有工人的总体数据):~100GB
数据库大小:~1TB
database architecture distributed distributed-computing distributed-system
在Tensorflow中,我们可以使用Between-graph Replication分布式培训来构建和创建多个Tensorflow会话.MonitoredTrainingSession()协调多个Tensorflow会话,并且有一个参数checkpoint_dir用于MonitoredTrainingSession()恢复Tensorflow会话/图形.现在我有以下问题:
tf.train.Saver()来恢复Tensorflow图saver.restore(...).但是我们如何通过使用来恢复它们MonitoredTrainingSession()?MonitoredTrainingSession()使用测试(或预测)模式?我阅读了Tensorflow Doc,但未找到这两个问题的答案.如果有人有解决方案我真的很感激.谢谢!