让我们先写一些数字:列表中最大的是大约100M的记录.(但预计会增长到500).其他列表(其中5-6个)以百万计,但在可预见的未来将小于100M.这些总是基于单个id加入.并且从不与任何其他参数.什么是加入此类列表的最佳算法?
我正在考虑分布式计算.有一个很好的哈希(循环哈希种类,你可以添加一个节点,并没有很多数据移动)功能,并将这些列表拆分成几个较小的文件.因为,他们总是加入共同的id(我将要哈希),它将归结为加入小文件.也许可以使用nix join命令.
DB(至少MySQL)将使用合并连接加入(因为它将在主键上).这会比我的方法更有效吗?
我知道最好测试一下.但考虑到这些文件的大量,它非常耗时.我想做一些理论计算,然后看看它在实践中是如何展开的.
对这些或其他想法的任何见解都会有所帮助.我不介意它需要稍微长一点,但更喜欢我拥有的资源的最佳利用.没有庞大的预算:)
我正在探索集群计算中的各种架构.一些流行的是:
在Master-slave中,通常的方法是将一台机器设置为主机,将一堆机器设置为主机控制的从机.一个特别的算法让我感兴趣.它被称为Leader-Election Algo,它在选择哪些机器将成为主机时具有一定的随机性.
我的问题是 - 为什么有人想以这种方式选择一台主机?与手动选择机器作为主机相比,这种方法有什么优势?
algorithm distributed-computing cluster-computing master-slave
这是我的要求.
我在群集中有一堆机器(比如4-A,B,C,D).
A的工作是轮询数据库以获取更新(因此,A可以在订单表中查找新订单).
一旦A接收到更新,它就会验证B,C,D中哪一个相对空闲(负载均衡是我猜的正确的单词).然后它命令B,C,D中的一个开始处理订单.A保持在B/C/D上处理订单的轨道.
B,C,D就像是奴隶 - 他们只接收来自A的更新并在完成订单处理时通知A. 如果A发生故障(由于网络问题或其他原因),B,C,D中的一个将成为主服务器并执行A的职责A.关于正在运行的作业的元数据也会定期备份到备份节点E.所以当B/C/D成为新的主人,它将从E读取元数据.
我知道这听起来有点像hadoop,但订单处理不适合map reduce模型,所以我正在寻找利用ZooKeeper等其他框架的方法,它可以帮助A,B,C和D之间的协调.
ZooKeeper适合吗?
我刚刚开始使用OS X 10.9.5上的Twitter Storm框架。但是,在storm-starter中运行示例拓扑时遇到了一个问题:https : //github.com/apache/storm/tree/master/examples/storm-starter。
按照自述文件,我尝试通过调用在本地部署拓扑
sudo mvn exec:java -Dstorm.topology=storm.starter.WordCountTopology
Run Code Online (Sandbox Code Playgroud)
拓扑运行不到一分钟,然后以错误终止:
[ERROR] Failed to execute goal org.codehaus.mojo:exec-maven-plugin:1.2.1:java (default-cli) on project storm-starter: An exception occured while executing the Java class. java.lang.InterruptedException -> [Help 1]
org.apache.maven.lifecycle.LifecycleExecutionException: Failed to execute goal org.codehaus.mojo:exec-maven-plugin:1.2.1:java (default-cli) on project storm-starter: An exception occured while executing the Java class. java.lang.InterruptedException
at org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:216)
at org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:153)
at org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:145)
at org.apache.maven.lifecycle.internal.LifecycleModuleBuilder.buildProject(LifecycleModuleBuilder.java:116)
at org.apache.maven.lifecycle.internal.LifecycleModuleBuilder.buildProject(LifecycleModuleBuilder.java:80)
at org.apache.maven.lifecycle.internal.builder.singlethreaded.SingleThreadedBuilder.build(SingleThreadedBuilder.java:51)
at org.apache.maven.lifecycle.internal.LifecycleStarter.execute(LifecycleStarter.java:120)
at org.apache.maven.DefaultMaven.doExecute(DefaultMaven.java:347)
at org.apache.maven.DefaultMaven.execute(DefaultMaven.java:154)
at org.apache.maven.cli.MavenCli.execute(MavenCli.java:582)
at org.apache.maven.cli.MavenCli.doMain(MavenCli.java:214)
at org.apache.maven.cli.MavenCli.main(MavenCli.java:158)
at …Run Code Online (Sandbox Code Playgroud) 我从http://engineering.linkedin.com/kafka/intra-cluster-replication-apache-kafka那里学到了什么.
我们的目标是支持在单个数据中心内的Kafka群集中进行复制,其中网络分区很少
在分布式系统中,我认为"分区"是基本的,所以我不知道当只有服务器节点失败时,Kafka保证没有分区的可用性.或者我想念一些东西
我是策展人和zk的新手 - 并希望与社区其他成员仔细检查我的理解.似乎策展人的文档不是很好.
策展人的持久性短暂节点是否基本上是短暂的znode,但是一旦断开连接,还有额外的机制来重新建立连接?还有其他不明显的差异吗?
ps是否有zk的社区/讨论组(甚至更好,策展人)?一个简单的谷歌搜索没有发现任何东西.
distributed-computing distributed-system apache-zookeeper apache-curator
MPI_Init 的引用指出:
此例程只能由一个线程调用。该线程称为主线程,并且必须是调用MPI_Finalize的线程。
这该怎么做?我的意思是,我看到的每个示例都是这样,并且在我的代码中,我尝试过:
MPI_Comm_rank(MPI_COMM_WORLD, &mpirank);
bool mpiroot = (mpirank == 0);
if(mpiroot)
MPI_Init(&argc, &argv);
Run Code Online (Sandbox Code Playgroud)
但是我得到了:
Attempting to use an MPI routine before initializing MPICH
Run Code Online (Sandbox Code Playgroud)
但是,请注意,如果我将其保留为示例中的代码,则可以正常工作,因为我的代码在此处失败,因此只需重新检查即可。
我在想,因为我们调用mpiexec -n 4 ./test了,所以将产生4个进程,因此所有进程都将调用MPI_Init。我只是在第一行打印内容,main()它们将被打印与进程数一样多的次数。
我有一个典型的无状态Java应用程序,它提供REST API并在Postgresql数据库中执行更新(CRUD).
然而,客户的数量正在增长,我觉得有必要
这是我现在拥有的图表(Java app和DB都在同一台服务器上):
缩放这个的最佳/正确方法是什么?
谢谢!
java cloud distributed-computing amazon-s3 amazon-web-services
我有一个任务是在分布式系统中选择实现消息代理.Firebase云消息传递被认为是一个吗?
distributed-computing messagebroker firebase firebase-cloud-messaging
我们需要构建无状态微服务,该服务依赖数据库集群来持久化数据。
对于使用数据库集群的冗余无状态微服务(以实现高可用性和可伸缩性),建议使用哪种方法?例如:运行1.0版付款服务的多个副本。
所有冗余微服务都应该使用公共共享数据库架构还是应该有自己的架构?如果是独立的DB模式,则冗余服务之间可能存在不一致。
另外,在使用通用数据库模式的情况下,如何处理模式升级?
database high-availability distributed-computing stateless microservices
algorithm ×2
amazon-s3 ×1
apache-kafka ×1
apache-storm ×1
architecture ×1
c ×1
cloud ×1
database ×1
firebase ×1
hadoop ×1
java ×1
join ×1
master-slave ×1
mpi ×1
mpich ×1
stateless ×1