云计算通常采用什么编程模式?

1)MapReduce

MapReduce是Google公司的Jeff Dean提出的一种编程模型,用于处理和生成大规模数据。从概念上讲,MapReduce处理一组输入键/值对(键-值对),并生成另一组输出键-值对。当前的软件实现是指定一个映射函数来将一组键-值对映射到一组新的键-值对,并指定一个并发的Reduce函数来确保每个映射的键-值对享有相同的键组。程序员只需要根据业务逻辑设计Map和Reduce函数,具体的分布式和高并发机制由MapReduce编程系统实现。

相信大家对MapReduce相关的机制都比较熟悉,这里就不再赘述了。

MapReduce在Google中得到了广泛的应用,包括逆向索引构建、分布式排序、Web访问日志分析、机器学习、基于统计的机器翻译、文档聚类等。

Hadoop——作为MapReduce的开源实现——得到了Yahoo!脸书、IBM等一大批公司的支持和应用。

2)得律阿德斯

得律阿德斯是微软设计和实现的数据并行处理编程系统,允许程序员在集群或数据中心使用计算资源。从概念上讲,应用程序被表示为有向无环图(DAG)。顶点代表计算,应用开发者为顶点编写串行程序,顶点之间的边代表数据传输的数据通道。可以采用文件、TCP管道、带内存FIFO等数据传输机制。得律阿德斯类似于Unix中的管道。如果把Unix中的流水线看成是一维的,即数据流是单向的,每一步计算都是单输入单输出,整个数据流是一个线性结构,那么得律阿德斯可以看成是一个二维的分布式流水线,一个计算顶点可以有多个输入数据流。处理数据后,可以生成多个输出数据流,一个得律阿德斯作业就是一个DAG。

3)预凝胶

Pregel是Google提出的用于大规模图形计算的通用编程模型。很多实际应用涉及到大规模的图算法,比如网页链接、社交关系、地理位置图、科研论文中的引用关系等。有些图可以达到数十亿个顶点和数万亿条边。Pregel编程模型是为这种大规模图形的高效计算而设计的。