Project Darkstar是昨晚在纽约市Google办公室举行的每月JavaSIG会议的主题.对于那些不了解(可能是每个人)的人来说,Project Darkstar是一个大型多人在线游戏的框架,试图照顾所有"硬盘".基本的想法是你编写游戏服务器逻辑,使所有操作都分解成微小的任务.您将这些任务传递给Project Darkstar框架,该框架处理将它们分发到集群中的特定节点,任何并发问题,最后持久保存数据.
显然,对于视频游戏而言,这种事情与企业应用程序有很大不同.发表演讲的吉姆·沃尔多称,MMO游戏的数据库读/写比率为50/50,而企业应用程序更像是90%读取,10%写入.他还声称大多数现有的MMO都会将所有内容保存在内存中,并且每6小时只会转储到数据库中.这意味着如果服务器出现故障,您将丢失自上次数据库转储以来的所有工作.
现在,该项目本身听起来很酷,但我不认为该行业会接受它.首先,您必须用Java编写服务器代码.客户端代码可以用任何东西编写(Jim声称ActionScript 3是最受欢迎的,遵循C++),但服务器的东西必须是Java.对我来说听起来不错,但我的印象是游戏行业的每个人都讨厌Java.
其次,与开发人员更喜欢使用现有框架和库的其他行业不同,游戏行业的人似乎喜欢自己编写所有内容.不仅如此,他们还喜欢为他们制作的每一款新游戏重写所有内容.在开发人员使用Havok作为物理,虚幻引擎3作为他们的平台等的地方,情况开始发生变化,但在大多数情况下看起来一切都仍然是专有的.
那么Darkstar项目的那些人是不是在浪费时间?像这样的通用框架能否真正适用于具有所需性能的复杂游戏?即使它确实有效,游戏公司是否愿意使用它?
有人可以给我一份Paxos的实际用例列表.这是需要达成共识的真正问题,是更大问题的一部分.
以下是Paxos的用例吗?
假设有两个客户在扑克服务器上互相玩扑克.扑克服务器被复制.我对Paxos的理解是,它可以用来保持代表当前扑克之手的内存数据结构的一致性.也就是说,确保所有副本具有完全相同的内存状态.
但为什么Paxos必要?假设需要处理新卡.如果一切正常,运行相同代码的每个副本将生成相同的卡.为什么客户端不能从所有复制的服务器请求最新状态,并选择最多出现的卡.因此,如果一台服务器出现错误,客户端仍然可以通过选择多数来获得正确的状态.
这个问题可以进入比特币论坛,但我试图从编程的角度来理解.
存在用于分布式存储的技术,例如分布式哈希表(例如kademlia或类似的).比特币区块链与分布式哈希表有何不同?或者是支持比特币区块链的分布式哈希表技术?或者为什么比特币区块链被称为与DHT相比这样的突破?
:我困惑的两个概念In-graph replication和Between-graph replication读取时复制训练中tensorflow的官方操作方法.
在上面的链接中说
图形内复制.在这种方法中,客户端构建一个包含一组参数的tf.Graph(在tf.Variable节点固定到/ job:ps); ...
这是否意味着有多个 tf.Graph S IN Between-graph
replication的方法吗?如果是,所提供示例中的相应代码在哪里?
虽然Between-graph replication在上面的链接中已经有一个例子,但是任何人都可以提供一个In-graph replication
实现(伪代码很好)并突出其主要区别Between-graph replication吗?
提前致谢!
非常感谢您的详细解释和主旨代码@mrry @YaroslavBulatov!在查看您的回复后,我有以下两个问题:
复制培训中有以下声明:
图之间的复制.在这种方法中,每个/ job:worker任务都有一个单独的客户端,通常与worker任务在同一个进程中.每个客户端构建一个包含参数的类似图形(固定到/ job:ps,如前所述,使用tf.train.replica_device_setter()将它们确定性地映射到相同的任务); 以及模型的计算密集型部分的单个副本,固定到/ job:worker中的本地任务.
我有两个与上面的单词粗体相关的子问题.
(A)为什么我们说每个客户端构建相似的图形,但不是相同的图形?我想知道复制培训示例中每个客户端中构建的图形
应该是相同的,因为下面的图形构造代码在所有workers 中共享:
# Build model...
loss = ...
global_step = tf.Variable(0)
(B)不应该是模型的计算密集型部分的多个副本,因为我们有多个workers?
复制培训中的示例是否支持多台计算机上的培训,每台计算机都有多个GPU?如果没有,我们是否可以同时使用In-graph replication每台机器上的多GPU支持培训和Between-graph …
我读过Distributed Tensorflow Doc,它提到在异步训练中,
图的每个副本都有一个独立的训练循环,无需协调即可执行.
据我所知,如果我们将参数服务器与数据并行架构结合使用,则意味着每个工作人员都会计算渐变并更新自己的权重,而无需关心分布式训练神经网络的其他工作人员更新.由于所有权重都在参数服务器(ps)上共享,我认为ps仍然必须以某种方式协调(或聚合)来自所有工作者的权重更新.我想知道聚合在异步训练中是如何工作的.或者更一般地说,异步培训在分布式Tensorflow中如何工作?
我目前正在研究开发分布式应用程序的可用选项(包括开源和商业).
"分布式系统由多台通过计算机网络进行通信的自主计算机组成." 维基百科
该应用程序专注于分发高CPU密集型操作(而不是数据密集型),因此我确信MapReduce解决方案不符合要求.
您可以推荐的任何框架(+给出任何经验的简要概述或与其他框架的比较)将不胜感激.
.net distributed frameworks distributed-computing grid-computing
我计划决定Kafka Cluster上应该有多少个节点.我不确定要考虑的参数.我确信它必须> = 3(复制因子为2,故障容忍度为1个节点).
有人可以告诉我在决定簇大小以及它们如何影响大小时应该记住哪些参数.
我知道以下因素,但不知道它如何定量影响簇大小.我知道它如何定性地影响簇大小.是否还有其他影响簇大小的参数?
1. Replication factor (cluster size >= replication factor)
2. Node failure tolerance. (cluster size >= node-failure + 1)
考虑所有参数时,后续场景的簇大小应该是什么
1. There are 3 topics.
2. Each topic has messages of different size. Message size range is 10 to 500kb. Average message size being 50kb.
3. Each topic has different partitions. Partitions are 10, 100, 500
4. Retention period is 7 days
5. There are 100 million messages which gets posted every day for each …
我看过一篇文章" 微服务 "由Martin Fowler,并发现它很难理解智能端点 S和哑管道.请解释这些条款,欢迎提供实例.
distributed ×10
tensorflow ×2
.net ×1
algorithm ×1
apache-kafka ×1
architecture ×1
asynchronous ×1
bitcoin ×1
blockchain ×1
concurrency ×1
consensus ×1
dht ×1
frameworks ×1
graph ×1
hashtable ×1
java ×1
messaging ×1
mpi ×1
multicore ×1
nosql ×1
paxos ×1
python ×1
redis ×1
soa ×1