我正在大学里做一个项目,需要运行我编写的程序的多个实例(1000s)(用C++编写),这个程序运行了很长时间(比如说2个小时).该程序是非常自包含的 - 它不需要输入文件,我认为唯一的依赖是提升.
我目前正在使用大学拥有的计算机集群.然而,它已经很老了,而且调度和监控服务的工作非常糟糕.
所以我想知道我是否可以在其他地方经营我的工作,换一些钱.例如,我看了一下谷歌应用引擎,但似乎每个工作必须在30秒后结束它不适合我.也许亚马逊EC2?
你知道这些选择吗?
我正在研究我的bc论文项目,该项目应该是用scala和Akka编写的Minecraft服务器.服务器应该可以轻松地部署在云中或集群上(不确定我是否使用正确的术语......它应该在多个节点上运行).然而,我是akka的新手,我一直想知道如何实现这样的事情.我现在想弄清楚的问题是如何在不同节点上的演员之间共享状态.我的第一个想法是有一个骆驼演员会从我的世界客户端读取TCP流,然后将其发送到负载平衡器这将选择将处理请求,然后发送通过TCP给客户一些响应的节点.假设我有一个AuthenticationService实现actor,它检查用户提供的凭据是否有效.每个节点都有这样的actor(或者可能更多),并且所有actor都应该始终拥有完全相同的用户数据库(或状态).我的问题是,保持这种状态的最佳方法是什么?我想出了一些我能想到的解决方案,但我没有做过这样的事情,所以请指出错误:
解决方案#1:将状态保存在数据库中.这可能会很好地工作,其中状态仅由类似的用户名和密码列表来表示该认证的例子,但它可能在那里状态包含对象不容易被分解成整数和字符串不会在情况下工作.
解决方案2:每次会有一定男主角会改变它的状态,要求演员会,处理请求有关的变化相同类型的所有其他行动人将改变根据自己的状态,广播信息后原始演员发送的信息.这看起来非常低效而且相当笨拙.
解决方案#3:让某个节点充当一个状态节点,其中会有代表整个服务器状态的actor.除了这样的节点中的actor之外的任何其他actor都没有状态,并且每次他们需要一些数据时都会询问"状态节点"中的actor.这似乎也是低效的,有点不容错误.
所以你有它.只有我真正喜欢的解决方案才是第一个,但就像我说的那样,它可能仅适用于非常有限的问题子集(当状态可以分解为redis结构时).来自更有经验的大师的任何回应都会非常受欢迎.此致,托马斯赫尔曼
RabbitMQ对EC2的性能期望是什么?希望在这里分享经验.
我想在aws EC2上做一些RabbitMQ的性能测试.我为RabbitMQ,Publisher和消费者/工作者运行了3个单独的EC2实例.
我的方案是Publisher将JSON字符串(大约165-200字节)推送到直接交换类型,持久设置为true,并将持久设置为true的绑定队列(即两者都处于持久模式).消费者/工人正在单独的盒子上运行 - 不断拉动消息.(在工作中向前移动这些消息应该在MongoDB中保留,并且Publisher将使用REST轻松替换为Restful服务)
为了简单起见,我使用多播示例代码模拟了这种情况.我将组播代码拆分为两个单独的java文件,即"Producer"和"Worker",以便在单独的框中运行每个文件.我使用"c1.mediam"EC2和Ubuntu服务器v11.4 32位运行生产者和消费者,使用"m1.large"和Ubuntu服务器v11.4 64位用于RabbitMQ.
我能够实现每秒3-5k消息的吞吐量,即将研究消息推送速率保持在5K.(这与http://www.rabbitmq.com/faq.html#performance-latency一致)
此外,当我将推送速率提高到每秒10-12k个消息时.消费者消费消息的能力下降到每秒1-2k消息,并产生积压(很多时候它也低于每秒800条消息).
在上述情况下,我有以下问题,并希望提高消费者吞吐量的想法/建议.(注意:我的场景中的所有消息都应该是类似的类型,没有机会将它们分组以设置路由,因此可能需要某种负载平衡器方法)
1)使用一个rabbitMQ服务器,一个交换和一个队列观察此性能.是否可以进一步配置,微调以使用持久模式将吞吐量即兴增加到5k以上.
2)我明白,聚类可能是另一种选择.但是,我需要根据传入的负载设置集群,我可能无法获得消息分组/标识来定义路由(因为消息应该只是日志描述).我是否可以为工人/消费者提供集群跟踪负载均衡选项?
3)我预计每秒处理几十万个请求.我希望分享一些经验和方法来实现这一目标.
我怎样才能摆脱这个无法到达的节点
我有一个在集群和EJB 3.1应用程序中运行的Glassfish 3.1.2.我的应用程序中需要两种计划方法:
我不知道如何从这个集群开始 - 问题,这是可能的@Schedule(以及如何)或我还需要其他什么?
所以我正在开发Node.js中的一个项目,我想打开一些额外的线程来更有效地处理处理负载.但是我正在使用带有函数定义的类,当我尝试将这些对象发送到工作线程时,对象中定义的函数会消失,而我只剩下对象中的其他字段.有没有办法向worker发送一个对象并保留这些函数,以便可以在worker中调用它们?
var cluster = require('cluster');
if(cluster.isMaster){
Monster = function(species){
this.attack = function(){
console.log('CHOMP');
};
this.name = species;
};
var vamp = new Monster('vampire'),
worker = cluster.fork();
worker.send({'monster' : vamp});
}
else{
process.on('message', function(msg) {
console.log(msg.monster); //this logs "{ name: 'vampire' }"
msg.monster.attack(); //TypeError: Object #<Object> has no method 'attack'
});
}
Run Code Online (Sandbox Code Playgroud) 我正在研究我们拥有认证机制的项目.我们在身份验证机制中遵循以下步骤.
wait()方法的帮助下等待.notify()方法调用到先前等待的线程并发送成功作为响应并且用户进入我们的系统.notify()方法调用到先前等待的线程并发送失败作为响应并向用户显示无效的凭证消息.一切都很好,但最近我们搬到了集群环境.我们发现即使在用户回复并且无限制的等待时间之后,某些线程也不会得到通知.
对于服务器,我们使用Tomcat 5.5,我们遵循Apache Tomcat 5.5 Servlet/JSP容器来创建tomcat集群环境.
答案::可能的问题和解决方案
可能的问题是群集环境中的多个JVM.现在,我们还将聚集的Tomcat URL与生成的字符串一起发送到用户Android应用程序.
当用户单击回复按钮时,我们将生成的字符串与聚集的Tomcat URL一起发送,因此在这种情况下,两个请求都将转到同一个JVM,并且它可以正常工作.
但我想知道是否有针对上述问题的单一解决方案.
该解决方案存在问题.如果群集Tomcat崩溃会发生什么? 负载均衡器将向第二个集群Tomcat发送请求,同样会出现同样的问题.
我在websockets上看了一下,我有一个非常具体的问题:websockets实际上可以在不同的服务器上扩展,还是总是限于一台服务器?
这似乎是我在我发现的文档中反复碰到的一个问题,但也许它们是不完整的或者是事物的演变.例如,似乎heroku甚至根本不支持websockets(?)
我在3个集群上设置了hadoop2.2.0.一切都很顺利.NodeManager和Datanode在每个集群中启动.但是,当我运行wordcount示例时,会发生100%映射,并给出以下异常:
map 100% reduce 0%
13/11/28 09:57:15 INFO mapreduce.Job: Task Id : attempt_1385611768688_0001_r_000000_0, Status : FAILED
Container launch failed for container_1385611768688_0001_01_000003 : org.apache.hadoop.yarn.exceptions.
YarnException: Unauthorized request to start container.
This token is expired. current time is 1385612996018 found 1385612533275
at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
Run Code Online (Sandbox Code Playgroud)
我已经通过互联网找出解决方案.但我找不到.帮帮我.
(我在CentOS 5.8上运行)。我一直在遵循群集(多服务器)Zookeeper设置的指导,但是在尝试启动服务器时遇到错误。当我按照文档中的描述运行命令时:
java -cp zookeeper-3.4.6.jar:lib/log4j-1.2.16.jar:conf \ org.apache.zookeeper.server.quorum.QuorumPeerMain conf/zoo.cfg
Run Code Online (Sandbox Code Playgroud)
我得到错误:
Error: Could not find or load main class org.apache.zookeeper.server.quorum.QuorumPeerMain
Run Code Online (Sandbox Code Playgroud)
我有这样的文件位置,并且正在〜/ zookeeper-3.4.6目录中运行:
~/zookeeper-3.4.6/zookeeper-3.4.6.jar
~/zookeeper-3.4.6/conf/zoo.cfg
~/zookeeper-3.4.6/data/myid
~/zookeeper-3.4.6/lib/log4j-1.2.16.jar
~/zookeeper-3.4.6/bin/zkServer.sh
Run Code Online (Sandbox Code Playgroud)
有谁知道为什么会发生此错误?我不太了解要传递的参数,因此很难调试路径问题。附带说明一下,我尝试运行./zookeeper-3.4.6/bin/zkServer.sh start,但确实能成功运行,但是文档似乎表明该命令适用于单节点实例。
编辑:
我可以通过修改命令并取出零件来取得一些进展:conf \,所以现在我正在运行:
java -cp zookeeper-3.4.6.jar:lib/log4j-1.2.16.jar: org.apache.zookeeper.server.quorum.QuorumPeerMain conf/zoo.cfg
Run Code Online (Sandbox Code Playgroud)
我收到一个新错误,但这是进度。
java -cp zookeeper-3.4.6.jar:lib/log4j-1.2.16.jar:conf \ org.apache.zookeeper.server.quorum.QuorumPeerMain conf/zoo.cfg
Run Code Online (Sandbox Code Playgroud)
对应于QuorumPeerMain的第63和64行
public class QuorumPeerMain {
private static final Logger LOG = LoggerFactory.getLogger(QuorumPeerMain.class);
Run Code Online (Sandbox Code Playgroud) java ×4
amazon-ec2 ×3
performance ×2
actor ×1
akka ×1
akka-cluster ×1
apache ×1
architecture ×1
cassandra ×1
ejb ×1
function ×1
glassfish ×1
hadoop ×1
hadoop-yarn ×1
java-ee ×1
jobs ×1
mapreduce ×1
node.js ×1
rabbitmq ×1
scala ×1
tomcat ×1
websocket ×1
worker ×1