赞
踩
目录
3.1 IaaS: Infrastructure-as-a-Service(基础设施即服务)
3.2 PaaS: Platform-as-a-Service(平台即服务)
3.3 SaaS: Software-as-a-Service(软件即服务)
云计算服务,即云服务。中国云计算服务网的定义是:指可以拿来作为服务提供使用的云计算产品。包括云主机、云空间、云开发、云测试和综合类产品等。云计算服务是指将大量用网络连接的计算资源统一管理和调度,构成一个计算资源池向用户按需服务。用户通过网络以按需、易扩展的方式获得所需资源和服务。
四种部署模型(公有云,私有云,社区云,混合云),三种服务模式(IaaS、PaaS、SaaS)。
“公有”反映了这类云服务并非用户所拥有,公有云是面向大众提供计算资源的服务。是由IDC服务商或第三方提供资源,如应用和存储,这些资源是在服务商的场所内部署。用户通过Internet互联网来获取这些资源的使用。公有云服务提供商有Amazon、Google和微软,以及国内的阿里云、腾讯云等。
在公有云中,你与其他组织或云“租户”共享相同的硬件、存储和网络设备,并且你可以使用 Web 浏览器访问服务和管理帐户。公有云部署通常用于提供基于 Web 的电子邮件、网上办公应用、存储以及测试和开发环境。
公有云优势:
私有云和公有云的显著差别在于对数据的掌控。
云端资源只给一个单位组织内的用户使用,这是私有云的核心特征。而云端的所有权、日常管理和操作的主体到底属于谁并没有严格的规定,可能是本单位,也可能是第三方机构,还有可能是二者的联合。云端位于本单位内部,也可能托管在其他地方。私有云在数据安全、数据备份等方面有更多的可选择空间。
私有云由专供一个企业或组织使用的云计算资源构成。私有云可在物理上位于组织的现场数据中心,也可由第三方服务提供商托管。但是,在私有云中,服务和基础结构始终在私有网络上进行维护,硬件和软件专供组织使用。
这样,私有云可使组织更加方便地自定义资源,从而满足特定的 IT 需求。私有云的使用对象通常为政府机构、金融机构以及其他具备业务关键性运营且希望对环境拥有更大控制权的中型到大型组织。
私有云又分为两种:
私有云优势:
公有云和私有云的对比:
云端资源专门给固定的几个单位内的用户使用,而这些单位对云端具有相同诉求(如安全要求、云端使命、规章制度、合规性要求等)。云端的所有权、日常管理和操作的主体可能是本社区内的一个或多个单位,也可能是社区外的第三方机构,还可能是二者的联合。云端可能部署在本地,也可能部署于他处。
混合云由两个或两个以上不同类型的云(私有云、社区云、公共云)组成,它们各自独立,但用标准的或专有的技术将它们组合起来,而这些技术能实现云之间的数据和应用程序的平滑流转。由多个相同类型的云组合在一起属于多云的范畴,比如两个私有云组合在一起,混合云属于多云的一种。由私有云和公共云构成的混合云是目前最流行的——当私有云资源短暂性需求过大时,自动租赁公共云资源来平抑私有云资源的需求峰值。例如,网站在节假日期间点击量巨大,这时就会临时使用公共云资源来应急。
许多组织选择混合云方法是出于业务需求方面的原因,例如要满足法规和数据主权要求、充分利用本地技术投资或解决低延迟问题。
混合云正在不断发展,也会包含边缘工作负载。边缘计算将云的计算能力引入靠近数据驻留位置的 IoT 设备。通过将工作负载迁移到边缘,设备可减少与云的通信时间并降低延迟,甚至能在较长的离线期内可靠地运行。
混合云平台为组织提供了许多优势,例如更大的灵活性、更多的部署选项、更高的安全性和符合性,并能从其现有基础结构获得更多价值。当计算和处理需求发生变化时,混合云计算使企业能够将其本地基础结构无缝扩展到公有云以处理任何溢出,而无需授予第三方数据中心访问其完整数据的权限。通过在云中运行特定工作负载,组织可以获得公有云提供的灵活性和创新能力,同时将高度敏感的数据保存在自己的数据中心内,满足客户需求或监管要求。
这样不仅允许公司扩展计算资源,还消除了进行大量资本支出以处理短期需求高峰的需要,以及企业释放本地资源以获取更多敏感数据或应用程序的需要。公司将仅就其暂时使用的资源付费,而不必购买、计划和维护可能长时间闲置的额外资源和设备。
混合云优势:
IT 系统的逻辑组成分为四层,自下至上依次是基础设施层、平台软件层、应用软件层和数据信息层。
云计算是一种新的计算资源使用模式,云端本身还是 IT 系统,所以逻辑上同样可以划分为这四层。底三层可以再划分出很多“小块”并出租出去,这有点像立体停车房,按车位大小和停车时间长短收取停车费。因此,云服务提供商出租计算资源有 3 种模式,满足云服务消费者的不同需求,分别是 IaaS、PaaS、SaaS,如图 1 所示。
需要注意的是,云服务提供商只负责出租层及以下各层的部署、运维和管理,而租户自己负责更上层次的部署和管理,两者负责的“逻辑层”加起来刚好就是一个完整的四层 IT 系统(见图 1 最左侧)。
任何一个在互联网上提供其服务的公司都可以叫做云计算公司。其实云计算分几层的,分别是Infrastructure(基础设施)-as-a-Service,Platform(平台)-as-a-Service,Software(软件)-as-a-Service。基础设施在最下端,平台在中间,软件在顶端。别的一些“软”的层可以在这些层上面添加。
通过吃披萨的案例,再回想一下我们的云计算分层,这两者都是为了得到某些服务(吃到披萨或得到云计算服务),那实现的方法应该也类似,我们直观对比一下。
通过这样的对比是不是能很清晰的理解了,三种不同的云计算模式,就是供应商提供的资源的多少;提供的越多,你为了得到服务所需要做的就越少,提供的越少,你为了得到服务所需要做的就越多。了解了这三种模式的大致意思,下面就具体来看看这三种模式。
第一层叫做IaaS,有时候也叫做Hardware-as-a-Service,以前如果你想在办公室或者公司的网站上运行一些企业应用,你需要去买服务器,或者别的高昂的硬件来控制本地应用,让你的业务运行起来。
但是现在有IaaS,你可以将硬件外包到别的地方去。IaaS公司会提供场外服务器,存储和网络硬件,你可以租用。节省了维护成本和办公场地,公司可以在任何时候利用这些硬件来运行其应用。
一些大的IaaS公司包括Amazon, Microsoft, VMWare, Rackspace和Red Hat。不过这些公司又都有自己的专长,比如Amazon和微软给你提供的不只是IaaS,他们还会将其计算能力出租给你来host你的网站。
IaaS供应商需要在那些方面对基础设施进行管理以给用户提供资源?或者说IaaS云有那些功能?在《虚拟化与云计算》中列出了IaaS的七个基本功能:
第二层就是所谓的PaaS,某些时候也叫做中间件。你公司所有的开发都可以在这一层进行,节省了时间和资源。
PaaS公司在网上提供各种开发和分发应用的解决方案,比如虚拟服务器和操作系统。这节省了你在硬件上的费用,也让分散的工作室之间的合作变得更加容易。网页应用管理,应用设计,应用虚拟主机,存储,安全以及应用开发协作工具等。
一些大的PaaS提供者有Google App Engine,Microsoft Azure,Force.com,Heroku,Engine Yard。最近兴起的公司有AppFog, Mendix 和 Standing Cloud。
为了支撑着整个PaaS平台的运行,供应商需要提供那么功能?主要有四大功能:
第三层也就是所谓SaaS。这一层是和你的生活每天接触的一层,大多是通过网页浏览器来接入。任何一个远程服务器上的应用都可以通过网络来运行,就是SaaS了。
你消费的服务完全是从网页如Netflix, MOG, Google Apps, Box.net, Dropbox或者苹果的iCloud那里进入这些分类。尽管这些网页服务是用作商务和娱乐或者两者都有,但这也算是云技术的一部分。
一些用作商务的SaaS应用包括Citrix的GoToMeeting,Cisco的WebEx,Salesforce的CRM,ADP,Workday和SuccessFactors。
谈到SaaS的功能,也可以认为是要实现SaaS服务,供应商需要完成那些功能?主要有四个方面:
PaaS的主要作用是将一个开发和运行平台作为服务提供给用户,而IaaS的主要作用是提供虚拟机或者其他资源作为服务提供给用户。接下来,将在七个方面对PaaS和IaaS进行比较:
1) 开发环境:PaaS基本都会给开发者提供一整套包括IDE在内的开发和测试环境,而IaaS方面用户主要还是沿用之前比较熟悉那套开发环境,但是因为之前那套开发环境在和云的整合方面比较欠缺,所以使用起来不是很方便。
2) 支持的应用:因为IaaS主要是提供虚拟机,而且普通的虚拟机能支持多种操作系统,所以IaaS支持的应用的范围是非常广泛的。但如果要让一个应用能跑在某个PaaS平台不是一件轻松的事,因为不仅需要确保这个应用是基于这个平台所支持的语言,而且也要确保这个应用只能调用这个平台所支持的API,如果这个应用调用了平台所不支持的API,那么就需要对这个应用进行修改。
3) 开放标准:虽然很多IaaS平台都存在一定的私有功能,但是由于OVF等协议的存在,使得IaaS在跨平台和避免被供应商锁定这两面是稳步前进的。而PaaS平台的情况则不容乐观,因为不论是Google的App Engine,还是Salesforce的Force.com都存在一定的私有API。
4) 可伸缩性:PaaS平台会自动调整资源来帮助运行于其上的应用更好地应对突发流量。而IaaS平台则需要开发人员手动对资源进行调整才能应对。
5) 整合率和经济性: PaaS平台整合率是非常高,比如PaaS的代表Google App Engine能在一台服务器上承载成千上万的应用,而普通的IaaS平台的整合率最多也不会超过100,而且普遍在10左右,使得IaaS的经济性不如PaaS。
6) 计费和监管:因为PaaS平台在计费和监管这两方面不仅达到了IaaS平台所能企及的操作系统层面,比如,CPU和内存的使用量等,而且还能做到应用层面,比如,应用的反应时间(Response Time)或者应用所消耗的事务多少等,这将提高计费和管理的精确性。
7) 学习难度:因为在IaaS上面开发和管理应用和现有的方式比较接近,而PaaS上面开发则有可能需要学一门新的语言或者新的框架,所以IaaS学习难度更低。
云计算技术的核心是服务化,服务化就需要提供闭环和灵活的服务。而云计算也在持续发展中,从最初的基础设施服务化(IaaS),平台服务化(PaaS),软件服务化(SaaS),陆续演化出数据库服务化(DBaaS),容器服务化(CaaS)。其实一个更细分的服务化叫做FaaS,FaaS是Functions as a Service的缩写,可以广义的理解为功能服务化,也可以解释为函数服务化。使用FaaS只需要关注业务代码逻辑,无需关注服务器资源,所以FaaS也跟开发者无需关注服务器Serverless密切相关。可以说FaaS提供了一个更加细分和抽象的服务化能力。
要理解FaaS,就必须了解FaaS和PaaS的关系(关于PaaS的前世今生可以参考笔者的另一篇博客http://dockone.io/article/635)。
在早期的PaaS的技术实现中,比如GAE、SAE,因为当时还没有像Docker容器这样的沙盒打包能力,PaaS往往会提供各种语言技术栈,比如Java\PHP等,而开发者通过上传的代码的方式进行部署,PaaS会负责代码构建和服务的生命周期管理。进一步的,PaaS开始允许开发者自定义开发和构建环境,比如像Heroku和CloudFoundry的Buildpack就是定义了代码的构建和运行逻辑,Buildpack实现了三步功能:
备注:buildpack的详细说明可以参考https://docs.cloudfoundry.org/buildpacks/
实际上BuildPack还是比较难解决代码依赖的问题,而Docker的容器一致性环境和Dockerfile组成完成了强大的沙盒打包能力,为此PaaS平台纷纷支持Docker容器来解决代码构建,像Kubernete就可以专注于容器编排和服务生命周期管理,而不用像CloudFoundry那样要在内部流程和组件提供代码构建能力,所以Kubernete也被称为CaaS,因为只关注容器的服务化管理,代码的构建由Docker或者上层Devops平台负责。
所以可以说一开始FaaS是和PaaS融合在一起的,而现在PaaS就更加专注于服务编排和资源管理,而FaaS也开始独立出来,FaaS逐渐形成以代码函数为主体的事件驱动架构,使用FaaS的时候可以将函数作为一个线上服务、远程计算服务,可以通过 API 执行、通过邮件执行、通过Iot 执行,通过队列执行。
云计算服务提供商也纷纷提出FaaS,比如AWS Lambda,Google Cloud Functions以及Azure Functions,然后也有更多的FaaS开源框架推出。
简单来说,PaaS 就是把计算能力放在线上,你只管写代码就行了,目的也是为了减少后端维护的成本,让开发者更关注到开发本身。国内有 Sina App Engine,国外有 Heroku、Google App Engine、Amazon Web Services,但是这类服务被真正用来做产品的并不多,大多是当作开发的试验田跑一下,而且跑起来的成本比独立部署个服务器也差不多,你要理解很多服务的相关性,应用运行时还有提供各种服务的桥接,就造成你需要去理解一大堆东西才能把他们五花大绑到一起,所以这类服务并没有成为真正的主流,更多的是还是用原生的计算能力,比如 Amazone EC2、AWS 这类 IaaS 平台,国内的阿里云、UCloud 等。
PaaS 有不少缺点。
1、对计算能力不可掌控
PaaS 将自己的运行时封装成了一个黑盒子,你要用他你就要基于这些黑盒子的约束和条件去自行判断,需要了解每个模块或者函数的可用性和限制是什么,才能更好的开发,为了避免应用有太高的权限造成安全问题,服务商往往的做法是裁剪,将限制的能力来提供给你,那么如果你要开发一个应用,本地能用,部署了可能会有各种兼容问题。
一个完整的应用,在基于 PaaS 去开发的时候,势必会有服务的依赖,对于这些服务的依赖,你也是没有掌控能力的,你只能基于给出的环境变量是去配置,但是往往在复杂应用中,对于服务的依赖非常深入,可能会有比较深入的使用和调优,这个只能束手无策。
2、线上开发调试模型复杂
一个完整的应用就是一个功能集合,开发调试起来是很麻烦的,想象一下如果一个很庞大的网站,有一大堆的功能,你依赖可能十几个甚至二十几个服务,跑在你不太知道的黑盒子,你的调试该多麻烦。如果是你自己的环境,你可以随意的开启 DEBUG 参数、去查看系统调用栈、去看硬件参数、去看系统优化参数、去分析运行时的细小问题、而在 PaaS 你能做的仅仅是通过服务商提供的一个后台来做一些简单的查看,日志的分析。这个决定了 PaaS 不适合一个有规模的产品去使用。
FaaS 最终目的和 PaaS 类似,让开发者关注在开发本身,服务由服务商提供。那 FaaS (Function as a Service)是什么呢?我为什么觉得它是未来开发的一个趋势。现在 FaaS 的说法还不太一致,但是可以明确的是** FaaS 是 PaaS 能力的一种缩放,缩放到 Function 级别**。FaaS 可以将函数作为一个线上服务、远程计算服务,可以通过 API 执行、通过邮件执行、通过 Iot 执行,通过队列执行。你只需要写统一的函数就行了。
Lambda是AWS 2014年推出的计算服务。Lambda是一种FaaS,所以Lambda服务的核心概念是Lambda function(简称function,函数)。围绕function可以定义情景,包括执行环境(语言、内存、超时、 IAM角色)以及这个function要触发的另一个function。
function上传之后,开发者可以将其指定到指定的AWS资源(如某个S3 bucket,某个DynamoDB表,某个Kinesis流),然后Lambda就会建立该资源跟你的function之间的关联。当资源方面发生变动,Lambda就会去创建资源去执行你的function。用于运行function的资源的创建分配和释放都有Lambda自动来做,开发者完全不需要去干预。
Lambda是一个事件驱动架构,应用由函数(functions,即业务逻辑的载体)+ 数据(data,即跟业务相关的输入与输出),以及这两者之间的交互——即事件(events。常见的事件如增加、变更、删除等)组成。所以Lambda可以无缝地和其他服务集成,如下:
场景1:Amazon S3 +Lambda进行图片处理
假设有一个照片共享应用程序。用户在应用程序上传照片,应用程序将这些用户照片存储到 Amazon S3 存中。然后应用程序针对上传的图片进行处理,包括图片压缩、加水印等等,在这种场景下,通过 Lambda 配合S3,Amazon S3 是Lambda支持的 AWS 事件源之一,可以发布对象创建的事件 并调用您的 Lambda 函数。 Lambda 函数代码可以从 S3 存储桶读取照片对象、进行图片处理,然后将其保存到S3 。
场景2:Amazon APIGateway+Lambda实现API调用
通过 Amazon API Gateway,可以根据在 AWS Lambda 中运行的代码快速、轻松地创建自定义 API,然后通过 API 调用EC2或者 Lambda。Lambda相比EC2来说是一个即开即用的函数,在没有调用的时候是不会运行和计费的,并且AWS可以根据请求的大小,自动伸缩Lambda所需的资源,这一切都是开发者无需关心的。
1、函数粒度小易于调试
对于 FaaS 来说,你要写的就是一个个函数,它就是一个功能。你要做的只是写下如下这样的函数,然后再用配置文件告诉服务器如何让他运行,就完事了,你的所有工作都在这个函数内完成。而函数本身只需要负责处理输入和输出。(输入和输出是基于事件而不同的。)
在 FaaS 中函数的执行是无状态的,函数运行时本身是封装在一个容器内,执行完后所有的的状态都会被销毁(当然为了优化,可能会缓存一段时间),但是最终不要期望通过有状态的方式来运行函数,这是对于函数本身的限制。试想只需要定义好输入,就能来调试函数了,测试来说会非常方便,而 PaaS 是一个复杂的合集,你的调试的方便性由你的写法决定。
2、函数可配置性
每个函数都是一个功能,这个功能如何执行,依赖是什么,是可以通过配置文件来完的成,如果一个函数可配置如何执行,那么就可以让他达到共享的目的。试想一下,你写了一个视频处理的功能,传入的是一个视频地址或者URL,传出的是一个 GIF,那么这个函数你只需要先写好功能,然后用配置文件定义如何运行,如果这是个 API 服务,那么定义出来 HTTP 请求什么路径,什么方法来实现它;如果他需要基于队列去执行,那我只需要定义用什么队列来执行。
这是一个通过队列读取 S3 的 ZIP 文件解压缩成 PNG 并上传 S3 的例子。
对于 AWS Lambda 来说,可以抽象为以下配置(这是一个基于 AWS Lambda 的一个框架的配置)。正是这种机制,可以真正的实现函数级别的共享。
3、初始化非常容易
如果要写一个简单的 API 服务,就写一个函数就够了,省去了以前去折腾框架,弄路由、搞一大堆配置,这还不够简单么。
4、FaaS 不确定的缺点:基础和 PaaS 是一致的
如果真算缺点,就是和 PaaS 是类似的:FaaS 对资源的掌控是不够的。但是,PaaS 的缺点导致掌控性是一个较大的问题;而 FaaS 本身函数运行是比较独立的,所有的成本都涵盖在一个函数内,复杂性就大大降低。
还有一个缺点,如果开发一个复杂的应用,函数之间的调用和管理是一个棘手的问题,现在已经有框架在着手解决这些问题,现在已经有不少知名服务商提供此类服务,大家的实现各不相同,但是思路是一致的。比如最著名的 AWS Lambda、Azure Functions、Google Cloud Functions、IBM OpenWhisk。如果觉得平台本身复杂性略高,可以通过以下几个框架去玩:APEX、Serverless 等
BaaS、FaaS、CaaS
云的基本概念(公有云、私有云、混合云, IaaS、PaaS、SaaS):https://blog.csdn.net/ls1792304830/article/details/89765006/
云服务和云计算有什么区别?:https://www.zhihu.com/question/289234015
云计算的三种模式:IaaS、PaaS和SaaS 通俗理解:https://blog.csdn.net/yc_wj/article/details/69053565
公有云与私有云的区别(转):https://blog.csdn.net/yangcs2009/article/details/8454353
FaaS,未来的后端服务开发之道:https://www.jianshu.com/p/6e86c42f85bd
FaaS介绍:https://blog.csdn.net/wlhdo71920145/article/details/80388209
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。