标签: distributed

Java:跨多个服务器同步线程

我有一个问题,我需要为Windows上的Java服务跨多个不同服务器同步多个线程的处理.

在这个应用程序中,我在同一个JMS队列中有多个消费者线程拉取消息.消息以3或4组的形式出现,我需要确保每个组中的消息都是完全串行处理的.我需要某种同步机制来确保thread1是否关闭了一个消息,然后thread2从该组中提取下一条消息,thread2在开始处理它的消息之前等待thread1完成处理.

关于线程的分布式同步机制的任何建议?任何类型的解决方案都会很好(JMS解决方案,分布式缓存等)

注意:我们使用的JMS提供程序是ActiveMQ.

java multithreading distributed synchronization jms

5
推荐指数
2
解决办法
4304
查看次数

管理分布在多台计算机上的大量日志文件

我们已经开始使用第三方平台(GigaSpaces)来帮助我们进行分布式计算.我们现在要解决的一个主要问题是如何在这个分布式环境中管理我们的日志文件.我们目前有以下设置.

我们的平台分布在8台机器上.在每台机器上,我们有12-15个进程,使用java.util.logging记录分离日志文件.在这个平台上,我们有自己的应用程序,使用log4j和日志来分隔文件.我们还将stdout重定向到一个单独的文件以捕获线程转储等.

这导致大约200个不同的日志文件.

截至目前,我们没有工具来协助管理这些文件.在下列情况下,这会给我们带来严重的麻烦.

  • 我们事先没有在出现问题的过程中知道故障排除.在这种情况下,我们当前使用ssh登录每台机器并开始使用grep.

  • 通过定期检查日志中的任何异常情况来尝试主动.在这种情况下,我们当前还登录到所有计算机并使用less和查看不同的日志tail.

  • 设置警报.我们希望在超过阈值的事件上设置警报.这看起来很痛苦,需要检查200个日志文件.

今天我们每秒只有大约5个日志事件,但随着我们将越来越多的代码迁移到新平台,这将会增加.

我想问社群以下问题.

  • 你是如何通过分布在通过不同框架记录的几台机器上的许多日志文件来处理类似情况的?
  • 你为什么选择那个特定的解决方案?
  • 您的解决方案是如何运作的?你觉得什么好,你发现什么不好?

非常感谢.

更新

我们最终评估了Splunk的试用版.我们对它的工作方式非常满意并决定购买它.易于设置,快速搜索和技术倾向的大量功能.我可以推荐任何类似情况的人来检查一下.

java logging distributed log4j java.util.logging

5
推荐指数
1
解决办法
3165
查看次数

是否有.net框架来协助这种情况?

我需要每晚处理大量数据.我有一个半可信任的PC网络,内部网 - 没有外部,主要是台式机 - 但也有一些服务器.

我最初的想法是使用桌面的空闲时间,加上一些专用的服务器资源,如下所示:

1)将数据捆绑成加密的20兆字节块(管理员不希望任何数据写入pc磁盘,必须保留在RAM中)

2)分发包含要执行的处理的.net dll(处理经常变化,因此dll的分布)

3)解密数据

4)执行dll方法

5)返回结果

服务器将监测工作单位/工作和时间X后,如果没有收到效果 - 检查应该对它们正在使用的机器的状态,并分配到另一台机器如果需要的话.

我不会将工作分类为CPU密集型 - 但是可以更快地检查整个数据库的并行元素是一个真正的奖励.

我认为我不需要跨机器通信,只需要客户端服务器.我很高兴客户只需轮询服务器 - 我不需要任何复杂的工作通知方式.

我的问题是:是否有任何.NET框架可以做这种事情?或者这种方法是否完全有缺陷?

.net distributed

5
推荐指数
1
解决办法
116
查看次数

高级Java优化

关于如何进行低级Java优化有很多问题和答案以及意见,包括for,while和do-while循环,以及是否有必要.

我的问题更多的是基于高级别的设计优化.我们假设我必须做以下事情:

对于给定的字符串输入,计算字符串中每个字母的出现次数.

当字符串是几个句子时,这不是一个主要问题,但如果相反,我们想要计算900,000个单词文件中每个单词的出现.建设循环只是浪费时间.

那么什么是可以应用于此类问题的高级设计模式.

我想我的主要观点是我倾向于使用循环来解决许多问题,并且我想摆脱使用循环的习惯.

提前致谢

山姆

ps如果可能,你可以产生一些伪代码来解决900,000字的文件问题,我倾向于理解代码比我能理解英语更好,我认为对于这个网站的大多数访问者来说都是一样的

java language-agnostic algorithm distributed bigdata

5
推荐指数
1
解决办法
2047
查看次数

Matlab使用分布式阵列减慢并行处理速度

我是matlab中使用分布式和分布式数组的新手.我生产的并行代码有效,但比串行版慢得多,我不明白为什么.下面的代码示例从体积数据计算粗糙矩阵的特征值.

串口版:

S = size(D);
Dsmt=imgaussian(D,2,20);
[fx, fy, fz] = gradient(Dsmt);
DHess = zeros([3 3 S(1) S(2) S(3)]);
[DHess(1,1,:,:,:), DHess(1,2,:,:,:), DHess(1,3,:,:,:)] = gradient(fx);
[DHess(2,1,:,:,:), DHess(2,2,:,:,:), DHess(2,3,:,:,:)] = gradient(fy);
[DHess(3,1,:,:,:), DHess(3,2,:,:,:), DHess(3,3,:,:,:)] = gradient(fz);

d = zeros([3 S(1) S(2) S(3)]);
for i = 1 : S(1)
    fprintf('Slice %d out of %d\n', i, S(1));
    for ii = 1 : S(2)
        for iii = 1 : S(3)
            d(:,i,ii,iii) = eig(squeeze(DHess(:,:,i,ii,iii)));
        end
    end
end
Run Code Online (Sandbox Code Playgroud)

并行版本:

S = size(D);
Dsmt=imgaussian(D,2,20);
[fx, fy, fz] = gradient(Dsmt); …
Run Code Online (Sandbox Code Playgroud)

parallel-processing matlab distributed distributed-computing

5
推荐指数
1
解决办法
1472
查看次数

Erlang中终止节点的检测如何工作?net_ticktime如何影响Erlang中节点活跃度的控制?

我将net_ticktime值设置为600秒.

net_kernel:set_net_ticktime(600)
Run Code Online (Sandbox Code Playgroud)

在Erlang文档中,net_ticktime = TickTime:

指定net_kernel滴答时间.TickTime以秒为单位.一旦每个TickTime/4秒,所有连接的节点都被勾选(如果还有其他任何东西被写入节点),并且如果在最后四(4)个滴答时间内没有从另一个节点接收到该节点被认为是关闭的.这可以确保由于硬件错误等原因而未响应的节点被认为已关闭.

时间T,其中检测到未响应的节点:

MinT < T < MaxT where:

MinT = TickTime - TickTime / 4
MaxT = TickTime + TickTime / 4
Run Code Online (Sandbox Code Playgroud)

TickTime默认为60(秒).因此,45 <T <75秒.

注意:通常,会立即检测到终止节点.

我的问题: 我的TickTime是600(秒).因此,450(7.5分钟)<T <750秒(12.5分钟).虽然,当我将某个节点发生故障时(例如,当我关闭Erlang shell时)将net_ticktime设置为Erlang中的所有分布式节点值为600时,其他节点立即获取消息而不是根据ticktime的定义.

但是请注意,通常会立即检测到终止节点,但我无法在分布式Erlang中找到针对节点终止的立即响应原则的解释(在Erlang文档或Erlang电子书或其他基于Erlang的源中).分布式环境中的节点是否以较小的间隔周期性地ping通,net_ticktime或终止节点在终止之前是否向其他节点发送某种消息?如果确实发送了消息,那么终止节点何时无法发送此消息并且必须进行调整以调查其活动性?

此外,在Erlang文档中还注意到,对于大于100个节点的集群,Distributed Erlang的扩展性不是很高,因为每个节点都保持与集群中所有节点的链接.用于调查节点活跃性的算法(ping,宣布终止)是否随着群集规模的增加而被修改?

erlang monitoring distributed fault-tolerance

5
推荐指数
1
解决办法
923
查看次数

使用Scala将Matrix中的Matrix转换为RowMatrix

我真的想将我的org.apache.spark.mllib.linalg.Matrix转换为org.apache.spark.mllib.linalg.distributed.RowMatrix

我可以这样做:

val xx = X.computeGramianMatrix()  //xx is type org.apache.spark.mllib.linalg.Matrix
val xxs = xx.toString()
val xxr = xxs.split("\n").map(row => row.replace("   "," ").replace("  "," ").replace("  "," ").replace("  "," ").replace(" ",",").split(","))
val xxp = sc.parallelize(xxr)
val xxd = xxp.map(ar => Vectors.dense(ar.map(elm => elm.toDouble)))
val xxrm: RowMatrix = new RowMatrix(xxd)
Run Code Online (Sandbox Code Playgroud)

然而,这真的很糟糕,而且完全是黑客攻击.有人能告诉我一个更好的方法吗?

注意我使用的是Spark 1.3.0版

distributed scala matrix apache-spark

5
推荐指数
1
解决办法
5181
查看次数

比较mgo中使用的一致性模型

使用多个一致性规则查询MongoDB服务器.在mgo,SetMode所述的Session对象改变会话的一致性模式.有三种类型的一致性模式:最终,单调和强.

例如

session, err := mgo.Dial("localhost")
if err != nil {
    panic(err)
}
defer session.Close()
//Switch the session to a monotonic behavior.
session.SetMode(mgo.Monotonic, true)
Run Code Online (Sandbox Code Playgroud)

我正在阅读https://en.wikipedia.org/wiki/Consistency_model中的不同一致性模型

但是这三种模型之间的关系是mgo什么?

是否正确Strong暗示EventualEventual暗示Monotonic

谢谢.

distributed go mongodb mgo

5
推荐指数
1
解决办法
1502
查看次数

Google的扳手中的TrueTime API是什么?

我试图多次阅读该文档但未能理解它.有人可以用外行的话来解释吗?

database distributed google-cloud-platform google-cloud-spanner

5
推荐指数
1
解决办法
2793
查看次数

分布式张量流中参数服务器与主服务器的比率如何?

假设我有10台机器,每台机器有2个GPU,并且我想运行一个分布式TensorFlow集群。我应该分配多少个参数服务器给VS主服务器?

distributed tensorflow

5
推荐指数
1
解决办法
542
查看次数