开发者学堂课程【高校精品课-上海交通大学-企业级应用体系架构:Cloud Computing 1】学习笔记,与课程紧密联系,让用户快速学习知识。
课程地址:https://developer.aliyun.com/learning/course/75/detail/15848
Cloud Computing 1(一)
我们可以总结出云计算是要通过互联网来提供服务。一种是暴露主机,是一种虚拟机是我们可以在阿里云上看到的。
比如百度云上有一个 bae,会把数据库甚至应用服务器部署好,可以直接使用。另一种是软件机,是我们看到的很多软件,这些软件会支持进行定制产生影响结果。比如地图服务,天气预报服务去定制到哪个地方,是华氏度还是摄氏度等等。我们可以看到所有东西在不同层面上全部暴露出的服务。通过互联网暴露来让别人使用。
云服务有三个具有很重要的特性。
第一个是按需来支付。可以按次数或者是按分钟和小时来支付。所以我们看到的虚拟机会告诉一个小时是多少钱。如果不用或者不要就是不要了。所以是说按需租用,按使用量去付费。付费会以最经济的一种方式去使用的。
第二个是扩展性,是因为系统在云里面,其中云里面有大量的服务。当需要更多的资源时只要付钱就可以给你提供更多的资源,去做更多的事。现在觉得一个不够用,可以增加一个,添加到虚拟机中(弹性会非常的好)。
第三个是所有服务全部都会被云的提供者管理,比如说去要做迁移,要做关闭或者是启动这样的动作。这些全部受管理。这是云服务的一个特点。所以在云计算里要强调虚拟化。是一个分布的计算。
我们为什么说虚拟化?
因为有一个非常大的集群,专门是做管理。如果有两台机器。你希望别人去用跑出很多虚拟机。再把资源分成很多份。虚拟机再给别人用,比如安装的是 centOS,而希望安装的是 windows。只能做虚拟化一个虚拟机出来。如果说分一些资源来用那就没有办法提供一个 windows 环境。
所以虚拟化是云计算里面非常重要的。这样一个特征是必须要支持。另外一个虚拟机是 linux redhat。两个虚拟机跑的系统不同,虚拟机一方面要把资源虚拟化。要把它分成四个一核的虚拟化。内存同样要分成8个gb。所以对于物理和操作系统都虚拟化,整个就没有虚拟化没有云计算了。所以要依赖于虚拟化操作。
云给我们带来什么?部署时间变短。比如要买一台机器,加上预定时间,包括到货送货时间等。要花很长时间。现在需要短时间就可以。前期费用从很多降很少因为主要是租用的。带来的好处是云会有灵活的技巧。比如说有一些机器,是长期定价便宜点,有很好的弹性,可以快速控制,比如交钱马上就有。有虚拟化这是云里的属性。
云里面实际需要云的运营商,还需要做复杂的优化。比如有1000台服务器,消耗电量是非常惊人的。解决这个问题主要让尽量多的应用跑在少量的服务器上,让大量服务器处于休眠状态或者关机状态。这样可以省电要做负载的均衡。
既要保证负载不要太高,因为太高是非常耗电的,要保证所有的机器负载不能太低。太低同样非常浪费。一般来说机器在30%,cpu 已经在30%到70%负载是比较理想的。所有的服务都应该有一个集成服务管理,包括提供服务,服务来如何处理,对所有服务进行监督等。用户在进行这个云的部署时候,可以去选择哪一个云里部署,或者把自己的所有应用变成一个私有云。
我们之前看到的 MapReduce 云计算像一台 super computer 就是这个云。然后把应用丢进去用这台超级计算机。计算机一定要有一个操作系统。
操作系统第一个作业的管理。第二个是存储管理。第三个是内存管理。是在讲操作系统的一个核心。如果把云整个看成超级计算机。
有三部分,第一部分就是我们之前看到的 MapReduce,是在做云的计算。
第二是文件分布式系统。系统是讲的存储当文件存,之前看到的 gfs,实际是 google 的文件系统的一个开源实现。底层是 linux 的文件系统。在上层要做的事情是管理文件名被切成多少块的索引。是把当成底层的 linux 文件系统文件来存。所以 hfs 构建在底层的 node 上的文件系统之上。不是完全三个裸机上的直接去操作硬盘的文件系统,是在这之上进行构建。
看到的文件的存储。然后我刚刚为什么说在存储之一,因为你还有数据存储应用的 bightable,Hbase 是他的一个开源时间,他的列是分成列族的,列族可以包含若干个列。每一个列可以看到时间戳。整个大表看到表和表间的关联。这张大表存在的时候会非常的多,所以会去切开。包括原数据,我们会在原数据里存储说这张表。存了多少块,会有若干条这个这个表分段划分。这个原数据本身会变很大。虽然原数据表总共分了三块。每一次访问这个元素包含要访问表的原数据在哪个部分,然后到这个元素去查数据在哪里。这就是有关数据存储。在 google 的论文和目前你看到的内存管理是没有数据存储的。没有看到内存管理在哪里是因为内存管理是比较复杂的事情。这些东西出来之后会看到一个免费开源来实现对应的东西。
在学术研究里面比较喜欢用的。现在有一个更容易用。按照他的发音是 ks8,现在很多互联网都在使用。无论哪种都需要虚拟机?虚拟机是在物理机的速度环境里跑。也有像 docker 容器,现在的虚拟化越来越容易,需要一种虚拟机进行实现。
有一个工具是一个分支管理的一个企业云。是构建集团来构建的。把计算机当一个操作系统,这样一个超级计算机就是操作系统的核心。在一个分布式环境,把这个集成当一个超级计算机是必须的。通过动画来回忆一下整个的输入。在 map 这个阶段产生一个1的结果。如果输入是五块,分别是两个一样的输出。然后会有一个 shuffle。这些结果是在 map 机器产生的,根据方案把他们写入指定位置中。都做了类似的动作。最后 Reduce 会进行 一个一个合并,看到的就是最后的结果。
经过 map 输入要进行分块产生中间的结果。然后进行 reduce 产生最后的结果。整个过程是一个并行的过程。
如果数据是1tb 的输入,切成五块也有200G。系统的文件被切分成若干块后有三个 map 进行处理。map 读入进行处理。但是输出太大没有办法全在内存里,所以会收集这个输出。当这个内存满时,比如一个 map 能用500兆。当五百兆放满的时候,可以在硬盘上写。于是写出的内容。所以会写出很多小文件。这个文件可以理解是过度文件。在硬盘上出现很多小文件。要把这些小文件合并成一个输出文件。比如统计人民从 A 到 N 开头的这些人,这三个小文件合并成一个单一的文件。根据原则把它切成两块。然后会把这两块放到有指定的位置上。左边会有两个或者说左边是在处理。以 A 到 N 开头的人。右边处理 o 到 z 处理。
他们会把三个 part1放到左边,这边会把 part2放到右边。换过来后要去做这个三个处理。就是这个排序做最后的结果。把这些排好去做统计,比如刚刚看到做一个统计,谁出现,总共出现多少次。做统计完之后就会产生输出。是把所有 part1的输出合到一起产生那个输出。右边同理。他们合起来就是最终的输出。这个动作是在不断的在写 part,没有都放到内存中。
把他们合并成这个动作也是在硬盘上面操作,然后把它分到两边去也是硬盘操作,两边一起都是硬盘操作后降低性能。所以在 spark 中,整个事情全部放到内存里来做,把内存变大。有些内存的价格已经下来了。我们把内存放进去,但不管价格怎么计算都没有硬盘便宜。所以 spark 总有内存不够的时候,去写在硬盘上。架构里面有一个问题在这里写,对于 map1来说,如果正在处理时机器崩了怎么办?按照逻辑会再提另外一个 map 去重复。但实际上前两块已经处理完了。正在写第三块时崩了,解决这个问题怎么优化。优化的动作省略掉,再把它合并起来。在这个地方直接shuffle 不完直接写到这个层面去。如果正在写的时候,这个系统崩溃了,只需要重新处理这一块来提高他的可用性。我们讲过很多框架但不是说都很完美,但继续专研还可以找到可以提升的地方。可以在研究生方向继续进行扩展。这也是为了提高可靠性进行的一种优化。