CharmPy 是一个通用的分布式并行编程框架,具有简单而强大的 API ,基于可迁移的 Python 对象和远程方法调用; 构建于自适应 C ++ 运行时系统之上,提供速度、可扩展性和动态负载平衡。
CharmPy 允许开发从笔记本电脑到超级计算机的并行应用程序。
简单示例:
from charmpy import charm, Chare, Group, Reducerfrom math import piimport timeclass Worker(Chare): def work(self, n_steps, pi_future): h = 1.0 / n_steps s = 0.0 for i in range(self.thisIndex, n_steps, charm.numPes()): x = h * (i + 0.5) s += 4.0 / (1.0 + x**2) # perform a reduction among members of the group, sending the result to the future self.contribute(s * h, Reducer.sum, pi_future)def main(args): n_steps = 1000 if len(args) > 1: n_steps = int(args[1]) mypi = charm.createFuture() workers = Group(Worker) # create one instance of Worker on every processor t0 = time.time() workers.work(n_steps, mypi) # invoke 'work' method on every worker print('Approximated value of pi is:', mypi.get(), # 'get' blocks until result arrives 'Error is', abs(mypi.get() - pi), 'Elapsed time=', time.time() - t0) charm.exit() charm.start(main)
分布式程序是那些旨在在计算机网络上运行并且只能通过消息传递协调其活动的程序。 我们可能想要编写分布式应用程序的原因有很多。 这里是其中的一些。 Performance - 我们可以通过安排程序的不同部分在不同的机器上并行运行来使程序更快。 Reliability - 我们可以通过将系统结构化以在多台机器上运行来制造容错系统。 如果一台机器出现故障,我们可以继续使用另一台机器 Scalability
本章描述如何编写运行于Erlang节点网络上的分布式Erlang程序。我们描述了用于实现分布式系统的语言原语。Erlang进程可以自然地映射到分布式系统之中;同时,之前章节所介绍的Erlang并发原语和错误检测原语在分布式系统和单节点系统中仍保持原有属性。 动机 我们有很多理由去编写分布式应用,比如: 速度 我们可以把我们的程序切分成能够分别运行于多个不同节点的几个部分。比如,某个编译器可以将一个
一、MapReduce概述 Hadoop MapReduce 是一个分布式计算框架,用于编写批处理应用程序。编写好的程序可以提交到 Hadoop 集群上用于并行处理大规模的数据集。 MapReduce 作业通过将输入的数据集拆分为独立的块,这些块由 map 以并行的方式处理,框架对 map 的输出进行排序,然后输入到 reduce 中。MapReduce 框架专门用于 <key,value> 键值
Dubbo 是阿里巴巴公司开源的一个Java高性能优秀的服务框架,使得应用可通过高性能的 RPC 实现服务的输出和输入功能,可以和 Spring框架无缝集成。不过,略有遗憾的是,据说在淘宝内部,dubbo由于跟淘宝另一个类似的框架HSF(非开源)有竞争关系,导致dubbo团队已经解散(参见http://www.oschina.net/news/55059/druid-1-0-9 中的评论),反到是
类型 实现框架 应用场景 批处理 MapReduce 微批处理 Spark Streaming 实时流计算 Storm
其于职业介绍所、工头、工人、工作模型的分布式计算框架。 职业介绍所有两种,一种是本地职业介绍所,一种是远程职业介绍所。顾名思义,本地职业介绍所就是在当前计算机上的,远程职业介绍所用于连接到远程职业介绍所的。 工人、工头都可以加入到职业介绍所,所以加到本地或远程种业介绍所都是可以的。 在同一个职业介绍所中,具有同样类型的工人、工头和工作都存在的时候,工作就可以被安排下去执行。当然,有两种安排方式,一