ABCD是人工智能、区块链、云计算、大数据四种新兴技术、容易记住的英文缩写。但是实际上,这几个技术在国内接受并应用流行的先后顺序应该是CDBA,先是云计算、然后是大数据、再次是区块链、最后是人工智能AI。
区块链技术前几年比较热,这两年热度有所下降,主要不是技术的问题,而是基于区块链技术的比特币等数字货币的投资热度下降,正所谓“成为比特币,败也比特币”。
这些新一代信息技术当中,云计算、大数据和人工智能可能算是个中的翘楚,一经得到市场关注后,学术界、产业界和政府都在一起用力推动发展,这三大技术一直都在各行各业受到格外青睐,也得到广泛地实际应用。
近几年,教育部还新增了“数据科学和大数据技术”、“人工智能”两个新工科专业。相应地,很多高校也纷纷在计算机等学院开设这两个新的专业,或者独立成立“大数据学院”、“人工智能学院”。
这里,我将分别介绍这些相关技术,让计算机大学生乃至对这些技术感兴趣的同学们可以了解这些技术的基本知识,帮助他们在做选择的时候能够避免由于不了解而盲目。就算是不从事相关技术的工作,了解了解新兴技术知识也是不错的。
云计算概念
业界普遍接受美国国家标准和技术局NIST关于云计算的定义:云计算是一种能够通过网络以便利的、按需付费的方式获取计算资源(包括网络、服务器、存储、应用和服务等),这些资源来自于一个共享的、可配置的资源池,并能够以最省力和无人干预的方式获取和释放。
上述这段关于云计算的文字描述还是不好理解,所以,NIST进一步解释了云计算的定义,指出云计算具有5个基本特征、4种部署模型和3种服务模型。为了方便理解和记忆,我把它们简称为“543云框架”。
5大基本特征
按需的自助服务、共享的资源池、可度量的服务、快速的伸缩性和泛在的网络访问。在上述五大关键特征中,“泛在的网络访问”是硬件基础,“按需的自助服务”是目的,“快速的伸缩性、可度量的服务和共享的资源池”这三个特征是软件实现的管理手段。
4种部署模型
私有云(机构自己建立的云,如企业私有云)、公有云(面向普通大众的云,如阿里云)、社区云(要协作处理共同问题的多个机构共建共享的云)和混合云(由私有云、公有云或社区云中的两种或以上组合而成的云)。
3种服务模型
IaaS(基础设施即服务):IaaS向用户提供计算、存储、网络和其它基础计算资源服务,让用户可以在这些基础设施上面部署和运行包括操作系统和应用程序在内的任何软件。在IaaS服务模型里,客户不需要管理和维护底层基础设施,但能管理和维护基础设施之上的操作系统、部署的应用程序以及一些网络组件(例如,防火墙、负载均衡器等)。
IaaS服务的典型代表:Amazon公司率先推出的两个IaaS服务:Amazon Elastic Compute Cloud (EC2)提供的计算服务;Amazon Simple Storage Service(S3)提供的存储服务;国内的阿里云提供的云服务器ECS和云存储等。
PaaS(平台即服务):PaaS向用户提供创建、测试、部署各种应用的平台。一般来说,这个平台由服务提供商在云基础设施IaaS上搭建,提供用户使用平台支持的编程语言和工具来创建自己的应用。在PaaS平台上,用户不需要管理和维护包括网络、服务器、操作系统和存储设备在内的底层云基础设施, 但是,用户仍需要管理应用程序以及应用程序的执行环境。
PaaS服务的典型代表:支持用Python和Java开发Web应用的Google App Engine;支持.Net应用的Microsoft Windows Azure;阿里云的应用托管和微服务管理的云原生PaaS平台企业级分布式应用服务EDAS。
SaaS(软件即服务): SaaS提供给客户的服务是运行在云平台上的完整的应用软件,客户通过各种简单客户界面(主要是网页浏览器)来获得该软件服务(如基于Web的电子邮件系统等)。除了一些特定的应用程序可能需要做些简单配置之外,用户不再需要管理和维护底层的云基础设施(包括网络、服务器、操作系统、存储设备)和执行在基础设施之上的整个软件应用。
一般来说,软件即服务SaaS是基于PaaS平台服务或IaaS基础设施服务来构建的,利用这两种底层服务来提供基于互联网的完整的应用软件服务。
实际上,PaaS是将软件研发的平台以SaaS模式提交给用户的一种服务。因此,PaaS也是SaaS模式的一种应用。IaaS和PaaS的出现可以加快SaaS的发展,尤其是加快SaaS应用的开发部署速度。
对普通用户来说,这种SaaS服务模式是最便捷、最友好的。通过IE等网页浏览器,用户就能使用原本要在个人电脑(或企业服务器)上安装才能使用的软件,并且软件功能是和以前完全一样的。这样一来,避免了以往一直困扰用户的软件故障或者版本更新升级的系统维护问题。
SaaS最著名的服务就是SalesForce的在线客户关系管理软件CRM。阿里云的钉钉办公,腾讯云的腾讯会议也都属于比较流行的SaaS服务。
云计算相关技术和平台
KVM等虚拟化技术
云计算的核心技术基础是虚拟化技术。虚拟化一般分为硬件级虚拟化和操作系统级虚拟化。硬件级虚拟化是运行在硬件之上的虚拟化技术,它的管理软件也就是我们通常说的hypervisor 或virtual machine monitor。
主流的硬件级虚拟化技术包括KVM、Xen、Hyper-V和VMWare。前两种是开源技术,后两种分别是微软和VMware公司的私有技术,并没有对外公开。就KVM和Xen这两种开源虚拟化技术来说,KVM的流行程度更高,有兴趣研究虚拟化技术的同学,专注KVM技术即可。
操作系统级虚拟化是运行在操作系统之上的,它模拟的是运行在操作系统上的多个不同进程,并将其封装在一个密闭的容器里面,也称为容器化技术。Docker 正是容器虚拟化中目前最流行的一种实现。本文介绍的云计算技术只涉及硬件级虚拟化技术,Docker等容器化技术以后再介绍。
Libvirt
libvirt是一套免费、开源的C函数库,其旨在为包括KVM在内的各种虚拟化工具提供一套方便、可靠的编程API,支持与C,C++,Ruby,Python等多种主流开发语言的绑定。
libvirt提供了一个统一的接口API来管理虚拟机和其他虚拟化功能,如存储和网络接口管理,可以管理KVM、Xen、VMware,QEMU和其他多种虚拟化技术。这些API在云计算的解决方案中广泛使用。
当前主流Linux平台上默认的虚拟化管理工具virt-manager(图形化),virt-install(命令行模式)等均基于libvirt开发而成。主流开源IaaS平台Openstack也是基libvirt来管理各种虚拟化技术的。
开源IaaS平台Openstack
OpenStack是美国国家航空航天局NASA和Rackspace合作研发的一个开源云计算基础设施软件,便于组织和企业自行建立和提供基础设施IaaS云服务。
OpenStack项目核心包括云计算Nova、云存储Swift和镜像服务Glance三个最核心的子项目,三个子项目之间相互独立,可以单独安装。其中,云计算Nova与亚马逊EC2类似,主要在于提供自动创建和管理虚拟服务器。云存储Swift可以创建大量的、可扩展的对象存储,能够存储TB甚至PB级的数据,像业界知名的亚马逊S3。OpenStack镜像服务Glance提供云计算Nova虚拟机镜像的发现、存储和检索功能。
实际上,国内很多企业建立的企业内部的私有云,乃至对普通大众提供服务的公有云基本都是基于OpenStack云平台扩展开发而来的。这一点,有点像国内各大手机厂商的手机操作系统基本都是来自开源的Android系统一样。
怎样学习云计算技术
对于计算机大学生来说,学习新技术(包括云计算技术)的基本套路都是一样的,我称之为“学习三部曲”:先是学习了解相关理论知识;然后是深入研究典型的开源框架;最后就是基于开源框架来动手实践。
下面以学习云计算技术为例来具体讲解这个“学习三部曲”。
1、学习云计算相关理论知识
可以查阅网上的资料或书籍,学习相关理论知识。起码要了解云计算的相关概念,比如前面讲到的“543云框架”等。
云计算的核心技术基础;我们要知道,任何新技术都是有技术传承的,不可能是凭空出来的东西,云计算的虚拟化技术也是在之前的技术基础上发展而来的。
云计算的应用场景;任何新技术都不是万灵丹,它有优势也会有劣势,它能解决一些问题也会对一些问题束手无策。所以,要了解云计算的最佳应用场景,只有这样,才能最大化发挥云计算技术的威力。
而云计算的最佳应用场景是什么呢?通俗地讲,就是“四大场景”:大机器量、大数据量、大计算量、大访问量。也就是在服务器比较多的环境、数据比较多的环境、计算量比较多的环境、服务访问比较多的环境。如果在这“四大场景”中有些什么问题用其他技术不好解决,你就可以考虑考虑云计算技术了。
2、深入研究典型的开源框架
现在的计算机技术发展,一般都伴随着很多开源框架或平台的出现。对于计算机专业人士来看,往往是先应用一些开源的东东,用的人多了,然后才出现一个流行的新技术术语(比如云计算、大数据、区块链)。回过头一看,以前出现的好多东西最后都归于这个新技术术语之下。比如,网格计算、效能计算、高性能计算HPC等都统称到“云计算”。
云计算相关的开源技术很多,从个人建议来看,初学者从KVM、libvirt和Openstack这三个入手就可以了。KVM是集成到linux操作系统中的虚拟化技术。libvirt可以用来管理单机上的虚拟机,当然除了KVM虚拟机外,Xen等其他虚拟化技术它都能管理。Openstack则是IaaS平台级的框架,可以管理服务器集群环境下的虚拟化技术。
3、基于开源框架来动手实践
云计算的理论知识也掌握了,KVM、libvirt和Openstack这些开源技术都研究过,要想深入理解和掌握云计算技术,现在就是要动手实践。
基于libvirt的API做一个简单的虚拟机管理系统,类似linux操作系统上面的virt-manager一样的东西。或者基于Openstack的API开发一个简单的IaaS平台。
不管是单机版的虚拟机管理系统,还是服务器集群的IaaS平台,动手实践的话,实现几个基本功能就差不多了,包括创建虚拟机、删除虚拟机、查询虚拟机状态等等。当然,能够参照市场上的云计算产品(比如阿里云),实现更多功能那就更好,随着越多功能的实现,你对云计算技术的了解就会越深入。
在这里,我要敲黑板、敲黑板、敲黑板,重要的事情说三遍!
动手实践是学习新技术的不二法门。但是,很多或者说绝大多数计算机大学生(可能有学校差异)在这一点上却表现欠佳、差强人意。
他们喜欢看书掌握理论知识,总觉得理论准备不足。殊不知,理论准备永远都不足。成功的做法是:现在就开始动手! 通过动手实践和不断的犯错来真正掌握这门技术。
害怕犯错,才是很多计算机大学生不敢动手实践的心理暗示。在实践出真知的世界里我们知道:只要我们活着,就会一直犯错。那些有意避免犯错的人,他们的世界毋庸置疑将变得越来越小。丘吉尔说过“成功是能够热情不怠地从一个失败走向另一个失败的能力”。成功人士把他们的犯错看成未来的投资,他们从错误中学习和成长。