云计算和虚拟机有什么区别
作者:int32bit
来源:知乎
云计算是一种服务模式,这种模式并不是计算机行业所特有,也不是现代所特有,而是一种已经存在很久的服务模式。其思路就是把各种资源整合起来,然后租给有需要的用户。拿图书馆做比较,大家都很熟悉了,图书馆收集了很多书,如果你想看书,只需要到图书馆根据自己的需求去借就好了,图书馆会根据你借的数量以及时间收费,你看完了就还给图书馆,书重新放回到原来的书架,其他用户可以继续借,重复利用。
肯定有人会想到把这种模式移植到传统IT行业,只是把租的对象由图书变为服务器资源罢了,因此云计算诞生了。为什么称为云计算,因为服务器的功能就是提供计算能力,把服务器租给你相当于卖给你服务器租赁期间的计算能力,因此称为云计算。
怎么运作,很简单,你需要多少CPU、多少硬盘,自己去机房搬,云服务提供商会根据你的数量按天计费,当然你也可以包月包年。你如果愿意出更多的钱,也可以提供送货上门服务。服务器硬件给你了,只要在租赁期间,随便你处置,就和自己买的服务器一样,服务器搬到自己的机房后,发现自己人手不足,你要一个一个安装操作系统,招一个人专门做这个成本也高。于是云服务商提供了其它增值服务,比如上门给你安装操作系统、上门组建网络,甚至给你提供安装数据库、大数据Hadoop/Spark集群搭建服务等,把这种麻烦事交给别人了,显然大大节省了自己的运维成本。
云计算的好处也出来了,你为什么要租服务器,而不是自己买,因为你可能只是想用一段时间,相对于你自己买服务器,成本太高了,租用更方便。另外,你自己买需要根据业务评估买多少,可能买回来发现不够用,于是重新采购,流程麻烦,买的太多了,又存在资源浪费。而租用就更弹性了,需要多少,租用多少,不需要了还给云服务商就好了。私有云同样,只不过是企业内部结算罢了。以上是IaaS的运营模式。你有可能有这种情况,你写了一个Web项目并打好了war包,但自己手头没有服务器来跑,你可以把你的war包交给云服务提供商,他们负责给你运行,你不用租整个服务器,也不用搭建运行环境,打好war包拷给他们就好,他们帮你部署运行。这就是我们说的PaaS服务。更高级的,你手头有很多照片,你想把照片中的人物提取出来,但你自己不会写代码实现,你可以把照片发给云服务商,他们通过自己的脸部识别技术处理后把结果发给你,这就类似于SaaS。
以上就是云计算的非权威解读,它更确切地说云计算不是指特定的某种技术,而是一种服务模式,一种交付方式。问题来了,以上需要把服务器搬来搬去太麻烦了,而且用户还需要有自己的机房来放租来的服务器。有没有某种技术能够不需要移动服务器,也能解决前面提到的问题,把CPU、内存、磁盘等资源打包租给用户。相信都知道答案了,虚拟化技术就可以完美解决这个问题,而虚拟机是虚拟化实现之一,但绝不是唯一,还有可能是容器,甚至是真正的物理机(裸机)。提供虚拟机的hypervisor也不是只有vmware,还有比如kvm/qemu、xen等。除了虚拟机外,还有许多其它虚拟化技术,比如ovs虚拟网络等。通过虚拟技术,你再不用搬服务器,而完全自助。除此之外,利用虚拟化技术还能更方便的部署运维,比如不用一台一台安装操作系统,你安装完一台后,很方便地进行克隆,避免了大量的重复劳力工作。你也不用自己建机房,省去了很多工作,完全交给云服务提供商或者自己内部的云平台团队。
之所以容易混淆虚拟机和云计算,是因为虚拟机确实在云计算中太普遍了,它是云计算中最活跃的主体,也是核心之一,很多服务都是围绕着虚拟机提供服务。在AWS或者其它公有云买云服务,最直接的方式就是申请一台虚拟机。你购买的云数据库,底层也有可能是虚拟机,原理大概是这样的,比如你买一个mysql云数据库,云平台会在后台给你首先起一个虚拟机,这个虚拟机镜像包含了mysql服务,当虚拟机起来,mysql服务就跑起来了。你不仅需要访问数据库,还有可能需要其它相关的功能,比如设置主从、查看日志、创建备份、设置账户权限等,由于虚拟机对用户是不可见的,并且不是所有的用户都会这些操作。因此云服务商还提供了非常方便的API接口,用户只需要调用API或者Web界面就可以完成以上所有操作,而不需要自己去学习和关心怎么弄。底层怎么实现,这个没有固定地方法,有可能是在虚拟机跑个agent程序,执行某个操作,比如创建一个数据库用户,agent就跑一个已经定义好的脚本,当然也有可能通过外部程序来完成数据库内部的配置管理,比如ssh/ansible/puppet等。
总而言之,云计算高大上,近年也是抄的火热,但本质是思维的转变,而非技术的革新。你把计算能力给别人用-云计算,存储给别人用-云存储,数据库给别人用-云数据库(DBaaS),负载均衡给别人用-LBaaS,防火墙给别人用-FWaaS。但实现手段依然是传统的IT技术,比如分布式技术、虚拟化技术、网络技术、自动化运维技术、容灾技术等,并没有造出新技术,而只是通过这些技术组合把一些资源、功能产品或者软件等封装成API对外提供服务。
云计算最权威标准可以参考AWS,IaaS开源实现方案可以参考OpenStack,目前也是云计算领域中最活跃的开源项目之一,目前除了提供IaaS的基础服务(计算、存储、网络)外,还实现了Trove数据库服务、Mistral工作流以及cloud cron服务、Sahara大数据库服务、Magnum容器编排服务等。
Excel生态:Excel、VBA、PowerQuery、PowerPivot、Power View、Power Map
数理统计工具:SAS、SPSS、Stata、Minitab、Eviews、Statistica、MATLAB、Mathematica
BI工具:PowerBI、Tableau、Qlikview、SAP BI、Oracel BI、FineBI、Yonghong BI
数据库工具:MySQL、PostgreSQL、Oracle、SQLServer、MongoDB、Hive
编程工具:Python、R、Julia、Scala、Spark、Java、Hadoop
1、 Spark VSHadoop有哪些异同点?
Hadoop:分布式批处理计算,强调批处理,常用于数据挖掘、分析
Spark:是一个基于内存计算的开源的集群计算系统,目的是让数据分析更加快速, Spark 是一种与 Hadoop 相似的开源集群计算环境,但是两者之间还存在一些不同之处,这些有用的不同之处使 Spark 在某些工作负载方面表现得更加优越,换句话说,Spark 启用了内存分布数据集,除了能够提供交互式查询外,它还可以优化迭代工作负载。
Spark 是在 Scala 语言中实现的,它将 Scala 用作其应用程序框架。与 Hadoop 不同,Spark 和 Scala 能够紧密集成,其中的 Scala 可以像操作本地集合对象一样轻松地操作分布式数据集。
尽管创建 Spark 是为了支持分布式数据集上的迭代作业,但是实际上它是对 Hadoop 的补充,可以在 Hadoop 文件系统中并行运行。通过名为Mesos的第三方集群框架可以支持此行为。Spark 由加州大学伯克利分校 AMP 实验室 (Algorithms,Machines,and People Lab) 开发,可用来构建大型的、低延迟的数据分析应用程序。
虽然 Spark 与 Hadoop 有相似之处,但它提供了具有有用差异的一个新的集群计算框架。首先,Spark 是为集群计算中的特定类型的工作负载而设计,即那些在并行操作之间重用工作数据集(比如机器学习算法)的工作负载。为了优化这些类型的工作负载,Spark 引进了内存集群计算的概念,可在内存集群计算中将数据集缓存在内存中,以缩短访问延迟
在大数据处理方面相信大家对hadoop已经耳熟能详,基于GoogleMap/Reduce来实现的Hadoop为开发者提供了map、reduce原语,使并行批处理程序变得非常地简单和优美。Spark提供的数据集操作类型有很多种,不像Hadoop只提供了Map和Reduce两种操作。比如map,filter, flatMap,sample, groupByKey, reduceByKey, union,join, cogroup,mapValues, sort,partionBy等多种操作类型,他们把这些操作称为Transformations。同时还提供Count,collect, reduce, lookup, save等多种actions。这些多种多样的数据集操作类型,给上层应用者提供了方便。各个处理节点之间的通信模型不再像Hadoop那样就是唯一的Data Shuffle一种模式。用户可以命名,物化,控制中间结果的分区等。可以说编程模型比Hadoop更灵活
2、Spark在容错性方面是否比其他工具更有优越性?
从Spark的论文《Resilient Distributed Datasets: AFault-TolerantAbstraction for In-Memory Cluster Computing》中没看出容错性做的有多好。倒是提到了分布式数据集计算,做checkpoint的两种方式,一个是checkpoint data,一个是loggingthe updates。貌似Spark采用了后者。但是文中后来又提到,虽然后者看似节省存储空间。但是由于数据处理模型是类似DAG的操作过程,由于图中的某个节点出错,由于lineage chains的依赖复杂性,可能会引起全部计算节点的重新计算,这样成本也不低。他们后来说,是存数据,还是存更新日志,做checkpoint还是由用户说了算吧。相当于什么都没说,又把这个皮球踢给了用户。所以我看就是由用户根据业务类型,衡量是存储数据IO和磁盘空间的代价和重新计算的代价,选择代价较小的一种策略。取代给中间结果进行持久化或建立检查点,Spark会记住产生某些数据集的操作序列。因此,当一个节点出现故障时,Spark会根据存储信息重新构造数据集。他们认为这样也不错,因为其他节点将会帮助重建。
3、Spark对于数据处理能力和效率有哪些特色?
Spark提供了高的性能和大数据处理能力,使得用户可以快速得到反馈体验更好。另一类应用是做数据挖掘,因为Spark充分利用内存进行缓存,利用DAG消除不必要的步骤,所以比较合适做迭代式的运算。而有相当一部分机器学习算法是通过多次迭代收敛的算法,所以适合用Spark来实现。我们把一些常用的算法并行化用Spark实现,可以从R语言中方便地调用,降低了用户进行数据挖掘的学习成本。
Spark配有一个流数据处理模型,与Twitter的 Storm框架相比,Spark采用了一种有趣而且独特的办法。Storm基本上是像是放入独立事务的管道,在其中事务会得到分布式的处理。相反,Spark采用一个模型收集事务,然后在短时间内(我们假设是5秒)以批处理的方式处理事件。所收集的数据成为他们自己的RDD,然后使用Spark应用程序中常用的一组进行处理。作者声称这种模式是在缓慢节点和故障情况下会更加稳健,而且5秒的时间间隔通常对于大多数应用已经足够快了。这种方法也很好地统一了流式处理与非流式处理部分。
总结
这几天在看Hadoop权威指南、hbase权威指南、hive权威指南、大规模分布式存储系统、zoopkeeper、大数据互联网大规模数据挖掘与分布式处理等书同时补充,能静下心来好好的完整的看完一本书,是相当不错的。
0条评论