并行计算小节

来源:互联网 发布:淘宝 什么红包都不中 编辑:程序博客网 时间:2024/05/15 06:30

节前花了两天半的时间整理了一下并行计算的材料,整出一个PPT和一包参考资料,大部分是人家的PPT。嗯……搞技术以后还是要以自娱自乐为主。

首先总结一下相关技术,我列了个表如下:

集群和
分布式技术 虚拟化 Map-Reduce 分布式
散列存储 演员模型
和函数编程 解决方案 网格计算 绿色计算 云计算 云计算 ?? 设计模式 (关联底层设计) 虚拟资源池 面向数据结构 ER模型 FP 典型方案 负载均衡集群 Hadoop Core HBase,HDFS Erlang虚拟机   面向资源 事务、存储 计算、存储 计算 存储 计算 资源利用率 √ √ √ √ √ 系统可扩展性 √ √ √ √ √ 高并发 √   √ √ √ 高吞吐 √   √ √   海量存储 √     √   复杂计算 (关联底层设计)   √   √ 缺陷 •设计模式顶层化
•业务关联性强 •设计模式顶层化
•人工干预程度高 •设计模式底层化
•代码复杂 •设计模式底层化
•PIG等还不成熟 •设计模式底层化
•代码晦涩

然后是列举各种语言、方案的相关内容。

首先是LISP,它本身对于列表的处理虽然并没有任何支持“并行”的地方,却给了人们无限遐想。

然后是Hadoop下的Map-Reduce。Apache Hadoop的Wiki上分别给出了用java、c写的文章词数统计,但java非常麻烦,c还好。这里我引用了java,一方面想说,其实Map-Reduce用起来很麻烦,一方面想就着一种纯面向对象的语言来表示,面向对象语义下的Map-Reduce并不很适合并行设计——相当于面向数据结构了。

我还大略看了一下PIG,它实际上承担了调度大数据处理算法的功能,虽然和SQL不是一个档次,确实很像。算是一种和上下层衔接都很好的4GL吧。不知道能否带来数据分析的革命。但它本身不是用来实现算法了,至少基本功能不是。

Hadoop方案到此结束,可以说是一个很全面但重量级的云计算方案,且至少可以用来做搜索引擎、海量存储,作为知识管理、档案管理的后端都是很好的选择,绝对属于可以落地的方案。只是,对于现有业务来说,想迁移到这上面难度非常大。

我自己本来想用Kilim实现一个Map-Reduce,但最终发现,Kilim实际上仅仅使用一个Scheduler实现了微线程、消息机制,却根本没有利用到富余的计算资源——它实质上就是单线程……Kilim的Annotation方式使代码很简洁,易于移植。但整体上来说Kilim的Task,或者叫fibre还是照着Thread来的,同样难以融入到设计中,且并没有给面向对象的语义带来足够的扩展。不过,还是期待它能够在并行、Annotation上更进一步,也许可以带来一些变革。

Kilim后,我只好用Thread写了个Map-Reduce的框架。我学着Hadoop的样用了个iterator作为输入,但还是不能完全实现“尽可能”,似乎要实现还要改动receiver才行。效率一般,算法稍微复杂一点的话,也就是效率接近提高一倍。毕竟Thread的耗损在那里呢,所以如果Kilim可以利用到多核会很有益处。我希望能把这样的机制搭载在虚拟机上(因为多机虚拟很容易实现多核,而且是超多),就可以让绿色计算进化成云计算了。

另外,我考察了一个叫Actor Architecture的演员模型框架,这是我头回听说。它的消息机制语义很明确,而且支持多机,有望实现完全分布式的大云,但我对其调度方式尚存疑惑。它的通信机制确实是太好了,值得学习。但可惜它的材料并不很丰富,讨论的人也不是很多。而且毕竟是架构在OO之上,设计模式仍存在问题。

接下来到重头戏Erlang。Erlang虚拟机的微线程、spawn+receive+感叹号的消息机制使之成为FP并行计算之典范,全面强过OO方案,只是语言晦涩(我花了整整半天才弄懂语法,开始能看懂代码),过渡难。另外,Erlang虚拟机也印证了封装并行调度算法的可行性,免去了人们很多担心。

在此基础上,我觉得我们真正需要的是能够与Java融合在一个平台上的Erlang,但要并列融合而不是寄宿在OO中。还有融合的设计模式、融合的整体架构方案。要写出并行算法,必须从一下笔开始就受到约束,要规避状态、使用Map-Reduce,否则人们一定会走OO的。而最终这样的设计方式也需要能够像OO那样直观朴实地反映出来,甚至能够讲给用户听。

有人提出Actor Based和Actor Oriented的说法,但我不同意。因为Actor给人的第一感觉仍然是个类。我们需要的不再是将谓词寄托在主语下的形式,因为那还是OO,而是需要把谓词置于顶端,去考虑谁能参与到动作中来。

另外,对于终极的并行架构,我认为应该有一定的SOA特性,可以将整个互联网变成一朵大云。我想,以REST风格的服务作为一种通信方式(局部还是算了)可能有助于此。

当然,贼心不死,我还是希望这些东西可以应用在企业应用建设中,尤其是我所关注的企业2.0,尤其是希望有机会自己努力。不过,靠我这个PPT悬了。

PPT放在了sourceforge上。

原创粉丝点击