| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> 数据结构与算法 -> 浅析Google云计算 -> 正文阅读 |
|
[数据结构与算法]浅析Google云计算 |
什么是云计算云计算(cloud computing)是分布式计算的一种,指的是通过网络“云”将巨大的数据计算处理程序分解成无数个小程序,然后,通过多部服务器组成的系统进行处理和分析这些小程序得到结果并返回给用户。云计算早期,简单地说,就是简单的分布式计算,解决任务分发,并进行计算结果的合并。因而,云计算又称为网格计算。通过这项技术,可以在很短的时间内(几秒钟)完成对数以万计的数据的处理,从而达到强大的网络服务。 现阶段所说的云服务已经不单单是一种分布式计算,而是分布式计算、效用计算、负载均衡、并行计算、网络存储、热备份冗杂和虚拟化等计算机技术混合演进并跃升的结果。 Google云计算云计算技术涉及的面很广,从存储、计算、资源的调度到权限的管理等,云计算的一个关键问题是,如何把一个非常大的计算问题,自动分解到许多计算能力不是很强大的计算机上,共同完成。Google 针对这个问题给出的解决工具是一个叫 MapReduce 的程序,其根本原理就是计算机算法上很常见的分治(Divide-and-Conquer)算法。 分治算法的原理在计算机科学中,分治法是建基于多项分支递归的一种很重要的算法范型。字面上的解释是“分而治之”,就是把一个复杂的问题分成两个或更多的相同或相似的子问题,直到最后子问题可以简单的直接求解,原问题的解即子问题的解的合并。这个技巧是很多高效算法的基础,如排序算法(归并排序、快速排序)、傅立叶变换(快速傅立叶变换)。 从分治算法到MapReduce熟悉计算机算法的读者都知道归并排序(Merge Sort)的原理。假定要对一个长度为N的数组进行排序,如果采用对?和;两两比较的办法(冒泡排序),时间复杂度是,不仅非常笨(慢)。而且如果数组过大(比如几千亿个元素),也无法在一台计算机上完成。 而使用分治算法,是将这个大数组分为几份,比如一分为二,对每一半分别进行排序。当这两个子数组排序完毕后,把它们从头到尾合并,得到原来数组的排序结果。对应的大小正好是原数组一半大,只需要进行1/4的比较即可。 当然,合并的过程需要一些额外的时间,但是和省下的时间相比可以忽略不计。同理,还可以对前后每一半子数组继续分解成更小的子数组。直到子数组中只有两个元素。这种做法大大缩短了整个排序的时间,由原来的简化到,如果N是一百万,那么计算时间将缩短一万倍。这个排序算法在每个子任务完成后,都要进行合并,归并排序算法也因此得名。 感兴趣的读者可以去了解一下冒泡排序和归并排序算法。 以矩阵乘法为例如果一台服务器存不下整个大数组,这件事就变得很麻烦。好了,让我们看看分治算法怎么做。首先,把矩阵A按行拆成10个小矩阵A1,A2,...,A10,每一个有N/10行。 分别计算每个小矩阵A1,A2,…,A1和B的乘积,不失一般性,以A1来说明: ? 同理,可以在第二台、第三台、……服务器上计算出其他元素。当然,矩阵B和矩阵A一样大时,一台服务器同样存不下。不过没有关系,同样可以按列切分矩阵B,使得每台服务器只存矩阵B的1/10。上述公式可以直接使用,只是这回只完成了C1的1/10。 因此,这次需要100 台服务器而不是原来的10台,于是,在单机上无法求解的大问题就被分解成小问题得以解决。 在上面的例子中,增加了服务器的数量,但是每个元素的绝对计算时间其实并没有减少(这点不像归并排序)。但是在某些应用中,增加服务器数量可以带来绝对计算时间的减少。例如,只是要得到C中某个特定元素而不是整个C矩阵,这种需求在链接分析或者日志处理中有时会遇到,假如希望通过10倍的机器能够缩短计算时间。这个需求也可以通过分治算法来实现,具体解决方法如下: 这就是MapReduce的根本原理。将一个大任务拆分成小的子任务,并且完成子任务的计算,这个过程叫做Map,将中间结果合并成最终结果,这个过程叫做Reduce。当然,如何将一个大矩阵自动拆分,保证各个服务器负载均衡,如何合并返回值,就是MapReduce 在工程上所做的事情了。 结语我们现在可以发现 Google 颇为神秘的云计算中最重要的 MapReduce 工具,其实原理就是计算机算法中常用的"各个击破"法,它的原理原来这么简单 ——将复杂的大问题分解成很多小问题分别求解,然后再把小问题的解合并成原始问题的解。由此可见,在生活中大量用到的,真正有用的方法往往简单而又朴实。
|
|
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 | -2024/11/26 5:33:50- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |