关键词:
简介: 本文从云计算抛砖引玉,详解 Serverless 的典型应用场景和一些产品介绍。
一、 从云计算到 Serverless
自世界上第一台通用计算机 ENIAC (图左)诞生以来,计算机科学与技术的发展就从未停止过前进的脚步。2003年-2006年,谷歌先后发表了这三篇非常经典的论文(图右),指明了HDFS(分布式文件系统)、MapReduce(并行计算)和HBase(分布式数据库)的技术基础及未来机会,为云计算发展方向奠定了基础。
所以说从。ENIAC 到谷歌的3篇经典论文,计算机科学与技术的发展是在不断的前进。而到了云计算时代,可以说计算机科学与技术的发展是在飞速的前进。
云计算的概念
对于云计算的界定,学术界的和工业界有不同的理解,回顾下云计算的发展历程:
1、2006年,谷歌首席执行官在搜索引擎大会上首次提出云计算的概念;同年亚马逊将其弹性计算能力作为云服务器进行售卖,标志着云计算这种新兴商业模式正式诞生;
2、2008年,微软发布云计算平台 Windows Azure,尝试将技术和服务托管化、线上化;
3、2009年,《伯克利云计算白皮书》发表,文中明确指出云计算的定义:云计算包含互联网上的应用服务以及在数据中心提供这些服务的软硬件设施。
明确定义后,伯克利提出了关于云计算展望,同时也指出云计算所面临的10个问题,如服务的可用性,数据的丢失或者数据安全性和可审计性等。
二、Serverless 概念
Serverless 定义
Serverless 翻译成中文是无服务器,所谓的无服务器并非是说不需要依靠服务器等资源,而是说开发者再也不用过多考虑服务器的问题,可以更专注在产品代码上,同时计算资源也开始作为服务出现,而不是作为服务器的概念出现,Serverless是一种构建和管理基于微服务架构的完整流程,允许用户在服务部署级别而不是服务器部署级别来管理用户的应用部署。与传统架构的不同之处在于,它完全由第三方管理,由事件触发,存在于无状态(Stateless),暂存(可能只存在于一次调用的过程中)在计算容器内,Serverless 部署应用无须涉及更多的基础设施建设,就可以基本实现自动构建、部署和启动服务。
Serverless 架构
左边是传统意义上来说比较常见的 Web 应用的架构, 它是由客户端、服务端、数据库等元素组成。
以往做此类项目时,开发者需要在服务端做很多操作,如购买服务器、考虑购买数量、宽带、操作系统、部署在哪几个区、环境、软件等等问题。随后还需要人为对这台服务器的健康要实时去监控,不断的去感知。
而在 Serverless 架构下,开发者只需要关心我们的业务代码即可,在项目整个的开发、上线、维护过程中,用户并不需要关注服务器层面的维护,也无需为流量的波峰波谷进行运维资源的投入,这一部分将由云厂商来负责;同时在 Serverless 架构下,用户也无需为闲置资源进行额外支出。
Serverless 优点
Serverless 架构拥有零服务器运维和空闲时无计算成本等特点;其交付心智可以体现为将复杂留给云厂商,把便捷带给更多开发者。综上所述 Serverless 的优势可以体现在如下:
1)降本提效
云厂商为使用者提供服务器的管理和运维工作,为使用者提供数据库、对象存储等 Baas 服务,让用户将更多的注意力放在自身的业务逻辑上,提升研发效率,缩小项目的创新周期,同时 Serverless 的使用者不用更多的担心自身的服务器运维,基础设施的运维等工作,更不用为这部分有额外的费用支出,无需承担更多的运维工作成本等;Serverless 架构提供了较为完善、全面的按量付费模型,使用者只需要按照自己实际使用的资源量付费即可;Serverless 架构在这一层面有较为明确的优势。
- 降低运维成本
- 降低人力成本
- 提高研发效率
- 降低创新周期
- 按量付费、降低支出成本
2)安全、方便、可靠
把更专业的事情交给更专业的人去做,Serverless 架构将更多服务器运维、安全相关的事情交给云厂商来做,大规模提升项目整体的安全性;同时,Serverless 架构明显比其它架构更简单,因为更多的 Baas 服务都是云厂商提供的,使用者将会管理更少的组件,这意味着 Serverless 的使用者可以更简单更方便的管理项目;同时 Serverless 架构拥有着弹性能力,即自动伸缩的能力,该能力可以让项目在流量增加的时候,自动进行扩容,在流量降低的时候,自动进行缩容,进而保证整个业务的安全、稳定。专业团队为用户保障安全,保障性能,这使得 Serverless 架构:
- 安全风险更低
- 资源开销更小
- 符合“绿色”计算思想
- 更加方便管理
- 弹性伸缩,服务更可靠
总体来说,托管给云厂商之后呢,不仅可以大规模的提升项目整体的安全性和稳定性,Serverless 架构也是明显比其他架构更为简单的。
面临的挑战
Serverless架构虽然出现多年但是真正步入“元年”并得以快速发展的时间其实很短暂;因此Serverless架构拥虽有诸多优点,但是也面临一些困难和挑战,包括但不限于冷启动问题严重、开发工具不完善、厂商锁定等现象。但是近些年 Serverless 架构热度持续上升,人们对它寄予厚望,各个厂商也加大投入,相信目前的问题都是暂时的,Serverless 架构会朝着更好用、更易用的方向不断演进。
Serverless 架构为使用者提供全新的编程范式的同时,当用户在享受 Serverless 带来的第一波技术红利的时候, Serverless 的缺点也逐渐地暴露了出来,例如函数的冷启动问题,就是如今颇为严峻且备受关注的问题。由于 Serverless 架构具有弹性伸缩的能力, Serverless 服务的供应商会根据用户服务的流量波动进行实例的增加或缩减,其示意图如图所示。
以阿里云函数计算为例,当系统接收到第一个触发函数的事件时,它将启动一个容器来运行代码。如果此时收到了新的事件,而第一个容器仍在处理上一个事件,平台将启动第二个代码实例来处理第二个事件, Serverless 架构的这种自动的零管理水平缩放,将持续到有足够的代码实例来处理所有的工作负载为止。当然,不仅仅是并发情况下会比较容易触发函数冷启动,在函数的前后两次触发时间间隔超过了实例释放时间的阈值时,也会触发函数的冷启动,如下图所示。
然而这里就涉及一个问题,当新的请求或者说是事件到来时,在广义上可能出现以下两种情况:
- 存在空闲且可以直接复用的实例:热启动。
- 不存在空闲且可以直接复用的实例:冷启动。
在本地执行一个函数,通常情况下是环境都已经准备妥当,每次执行只需要执行函数对应的方法即可,但是 Serverless 架构下并不是,本地与 FaaS 的函数调用区别示意图如图所示。
三、典型应用场景
Serverless 架构自提出到现在经过若干年的发展,已经在很多领域中有着非常多的最佳实践,CNCF 总结出一些 Serverless 架构所适合的场景。
实时文件处理
视频应用、社交应用等场景下,用户上传的图片、音视频往往总量大、频率高,对处理系统的实时性和并发能力都有较高的要求。例如,对于用户上传的图片,可以使用多个函数对其分别处理,包括图片的压缩、格式转换等,以满足不同场景下的需求。
数据ETL处理
通常要对大数据进行处理,需要搭建 Hadoop 或者 Spark 等相关大数据的框架,同时要有一个处理数据的集群。通过 Serverless 技术,只需要将获得到的数据不断的存储到对象存储,并且通过对象存储相关触发器触发数据拆分函数进行相关数据或者任务的拆分,然后再调用相关处理函数,处理完成之后,存储到云数据库中。
函数计算近乎无限扩容的能力可以使用户轻松地进行大容量数据的计算。利用Serverless架构可以对源数据并发执行多个 mapper 和 reducer 函数,在短时间内完成工作,整个流程可以简化为以下图中所示;相比传统工作方式,使用 Serverless 架构更能避免资源的闲置浪费,从而节省成本。
实时数据处理
通过 Serverless 架构所支持的丰富的事件源,通过事件触发机制,可以通过几行代码和简单的配置对数据进行实时处理,例如:对对象存储压缩包进行解压、对日志或数据库中的数据进行清洗、对 MNS 消息进行自定义消费等。
机器学习(AI推理预测)
在AI模型完成训练后,对外提供推理服务时,可以使用 Serverless 架构,通过将数据模型包装在调用函数中,在实际用户请求到达时再运行代码。相对于传统的推理预测,这样做的好处是无论是函数模块还是后端的 GPU 服务器,以及对接的其他相关的机器学习服务,都是可以进行按量付费以及自动伸缩,从而保证性能的同时也确保了服务的稳定。
Web 应用/移动应用后端
Serverless 架构和云厂商所提供的其他云产品进行结合,开发者能够构建可弹性扩展的移动或 Web 应用程序,轻松创建丰富的无服务器后端,而且这些程序可在多个数据中心高可用运行,无需在可扩展性、备份冗余方面执行任何管理工作。
音视频转码
在视频应用、社交应用等场景下,用户会上传一些视频,通常上传的视频会进行一些转码,包括转换为不同的清晰度。 Serverless 技术与对象存储相关产品组合后,可利用对象存储相关触发器,即上传者将视频上传到对象存储中,触发 Serverless 架构的计算平台(FaaS 平台)对其进行处理,处理之后将其重新存储到对象存储中,这个时候其他用户就可以选择编码后的视频进行播放,还可以选择不同的清晰度,如图所示。
综上所述, Serverless 架构的典型应用场景更多是由 Serverless 架构的特点决定的。当然,随着时间的不断推移, Serverless 架构也在不断演进,特点会更加突出,劣势会被弥补。
四、Serverless 产品介绍
公有云产品
自 Serverless 概念被提出,其从不为人知到引人注目经历了数年,Serverless 架构也在飞速发展,在 Serverless 架构中,计算机服务通常由 Faas 平台提供。AWS Lanmbda、Google Cloud Functions、阿里云函数计算等都是有代表性的工业化产品。
阿里云 Serverless
Serverless 架构对底层的技术基础要求很高,而从图中可以看出阿里云关于 Serverless 架构的整体形态是十分完善的,并且一直在自建自研的路上不断精进。阿里云 Serverless 产品在阿里巴巴经济体内部已经实现落地,在淘宝、支付宝、闲鱼、飞猪、钉钉,包括在语雀都有很好的体现。
函数计算是国内生态最完整、功能最丰富的 Serverless 产品,开发者一步上云、一键 Serverless 化将成为现实。上图是阿里云 Serverless 从产品维度的一些分析,下图则表达了 Serverless 从功能或者架构,底层基础设施,和在计算层面所展现出来的典型业务能力。例如说弹性伸缩、负载均衡、流量控制、高可用部署、版本灰度故障恢复等。像在运行时的容器镜像服务,阿里云在去年便已推出,随后AWS 、腾讯等,也都相继推出容器镜像。图中诠释了阿里云 Serverless 是如何通过底层,逐渐的向上层建设,让开发者可以更简单、更方便的使用 Serverless 的全过程。
开源产品
不仅仅在工业界有诸多厂商不断为 Serverless 架构努力,在开源领域也有诸多优秀的 Serverless 项目。包括 OpenWhisk、Fission、Knative 以及 Kubeless 等在内的众多优秀的开源 FaaS 平台都已得到 CNCF 的认可。
讲师简介:刘宇(江昱)国防科技大学电子信息专业在读博士,阿里云 Serverless 产品经理,阿里云 Serverless 云布道师,CIO 学院特聘讲师。
本文整理自【ServerlessLive 系列直播】9 月 22 日场
直播回放链接:0 基础晋级 Serverless 高手课-阿里云开发者社区
本文为阿里云原创内容,未经允许不得转载。
javascrip入门第一课
一、代码引入的三种方式 1、直接在head中书写在head标签里面可以写,在body标签里面也可以写,放到head标签里面和放到body标签里面到底有什么区别,我们后续在讲~<head><metacharset="UTF-8"><title>第一种引入方式</ti... 查看详情
杨老师课堂之javaee三大框架hibernate入门第一课
本篇任务1.使用Hibernate框架完成对客户的增删改查的操作教学导航1.能够说出Hibernate的执行流程2.能够独立使用Hibernate框架完成增删改查的操作框架和CRM项目的整体介绍1.什么是CRM*CRM(CustomerRelationshipManagement)客户关系管理,是利... 查看详情
typescript入门第一课
https://www.jianshu.com/p/0e37a793ac3ahttps://www.cnblogs.com/xiaoxiaochengxuyuan/p/6137574.htmltypescript开发的准备工作:---------------------------------------1.准备工作1.1安装node.js(www.nodejs.cn)1.2.安装typescriptnpminstall-gtypescriptnpmi-gtypescriptnpmi-gnodemonnpminstalltypin... 查看详情
java从入门第一课(你们吴不吴聊啊,亦直说,凡不凡)
1.首先我们需要先下载eclipse这里是官网地址:https://www.eclipse.org/downloads/具体的下载步骤度娘搜索一下就好了2.我们打开下载好的eclipse,我们首先在左上角找到File----->New------>Other 3.然后选中JavaProject------>Next ... 查看详情
quartz.net快速上手第一课(官网文档翻译)
Quartz.NET快速上手第一课(官网文档翻译) 原文链接 在你使用调度者(scheduler)之前,你需要对它进行实例化(谁能猜到这呢?)。在实例化scheduler时候,你需要使用ISche... 查看详情
kotlin入门第三课:数据类型
前文链接:Kotlin学习第一课:从对比Java开始Kotlin入门第二课:集合操作初次尝试用Kotlin实现Android项目 Kotlin的数据类型与Java类似,因此这篇文章主要看Kotlin的几点改变(改进)。 1、内置数据类型Double--64位 F... 查看详情
云开发系列课程让你从入门到精通快速上手serverless和云开发技术
...:云开发系列课程主要介绍了从入门到精通快速上手Serverless和云开发技术。学习内容涵盖云开发协同、云函数、云数据库、多媒体托管、前后端一体化框架等ServerlessWeb开发必备知识。希望通过云开发系列课程的学习与实际... 查看详情
swift快速入门第一个swift程序
1.本系列说明 本系列只是一个Swift快速入门的教程,并没有详尽的介绍Swift,Swift也并不是一个简单的编程语言,所以要想详尽的系统的学习Swift,本系列并不适合你,此系列只是让开发者可以快速的用Swift来进行开发。另外学... 查看详情
springmvc入门第1天--框架说明与快速入门
文档版本开发工具测试平台工程名字日期作者备注V1.02016.06.29lutianfeinonespringmvc框架springmvc业务流程框架springmvc框架组件说明SpringMVC入门程序配置前端控制器配置处理器适配器开发Handler视图编写配置Handler配置处理器映射器配置视... 查看详情
zookeeper入门第一篇
转载原文地址:ZooKeeper学习总结第一篇:ZooKeeper快速入门ZooKeeper学习总结第二篇:ZooKeeper深入探讨ZooKeeper学习第一期---Zookeeper简单介绍1.概述Zookeeper简单来说就是一个分布式协调技术的具体实现,所谓分布式协调技术就是在集群... 查看详情
工厂方法模式(java与kotlin版)
...简单工厂模式(Java与Kotlin版) Kotlin基础知识Kotlin入门第一课:从对比Java开始Kotlin入门第二课:集合操作Kotlin入门第三课:数据类型初次尝试用Kotlin实现Android项目 1.定义工厂方法模式(FactoryMethodPattern)又称为工厂模式... 查看详情
抽象工厂模式(java与kotlin版)
...工厂方法模式(Java与Kotlin版) Kotlin基础知识Kotlin入门第一课:从对比Java开始Kotlin入门第二课:集合操作Kotlin入门第三课:数据类型初次尝试用Kotlin实现Android项目 1.定义抽象工厂模式(AbstractFactoryPattern):提供一个创建... 查看详情
建造者模式(java与kotlin版)
...抽象工厂模式(Java与Kotlin版) Kotlin基础知识Kotlin入门第一课:从对比Java开始Kotlin入门第二课:集合操作Kotlin入门第三课:数据类型初次尝试用Kotlin实现Android项目 1.定义建造者模式(BuilderPattern):将一个 查看详情
stonedbclass入门第三课:stonedb的编译安装
本课程主要介绍StoneDB-5.6在Ubuntu20.04LTS下的手动编译,在CentOS和RedHat的编译详见官方文档。如果想快速部署,详见官方文档https://stonedb.io/zh/docs/getting-started/quick-deployment 查看详情
springcloudalibaba核心组件nacos认识和安装nacos&快速入门第1章(代码片段)
目录💂个人主页: 爱吃豆的土豆🤟版权: 本文由【爱吃豆的土豆】原创、在CSDN首发、需要转载请联系博主💬如果文章对你有帮助、欢迎关注、点赞、收藏(一键三连)和订阅专栏哦🏆人必有所执,方能有所成&... 查看详情
django入门第一步(安装和创建一个简单的项目)(代码片段)
...wsgiref模块来实现Server的功能,我们使用Django框架是为了快速地开发application。 查看详情
django入门第一步(安装和创建一个简单的项目)(代码片段)
...wsgiref模块来实现Server的功能,我们使用Django框架是为了快速地开发application。 查看详情
elasticsearch入门第八篇:存储
这是ElasticSearch2.4版本系列的第八篇:ElasticSearch入门第一篇:Windows下安装ElasticSearchElasticSearch入门第二篇:集群配置ElasticSearch入门第三篇:索引ElasticSearch入门第四篇:使用C#添加和更新文档ElasticSearch入门第五篇:使用C#查询文档... 查看详情