点击观看大咖分享
抗击疫情,腾讯云在行动。Python 是一种热门的编程语言,Serverless 是近年来迅速兴起的一个技术概念,基于Serverless架构能构建出多种应用场景,适用于各行各业。
本次课程将将为大家详细讲解 Serverless 架构的处理规范与处理模型、典型的工作流程,以及 Serverless 工程化的难点与挑战。最后将结合 Python Flask Serverless 的情人节表白页制作实例,展示如何用 Serverless 的方式进行 Python 编程,将热门 Python 框架利用 Serverless 快速上云。
本次腾讯云大学大咖分享课程邀请 Serverless Framework 社区专家 陈涛 分享关于“Serverless Python开发实战之极速制作情人节表白页”课程的内容。
本次分享内容:
1、Serverless 的架构规范 2、Serverless 的事件与规范 3、Serverless 工程化的难点与挑战 4、使用 Python Flask 开发情人节表白页
一、Serverless 的架构规范
1、Serverless Web场景处理的典型结构
如果下图所示,一般的Web场景无非通过客户端,到服务器,然后服务器去调用数据库,这是最常用的一个简单Web场景,那么Serverless把服务器完全拆解,比如可能会分为两块内容,第一块是鉴权系统,第二块是API网关,其实API网关和鉴权系统都算BaaS里的东西,最后是FaaS就是函数,我们通过函数去调用数据库来实现普通的Web场景的使用,这里有一个思考,就是Serverless到底为我们做了一些什么,在这个典型架构中为我们做的就是及时扩容服务器、代码是否健康运行、防止黑客攻击服务器等一系列的运维操作。
从下面两个架构图中就可以非常粗浅认知Serverless其实是有两个部分:
第一个是FaaS就是计算层,这一块就对应云函数。第二个是BaaS,其中包括API网关、身份验证、对象存储,还有时间触发等。
2、Serverless处理模型。
事件源通过同步或异步来调用被调函数,然后FaaS做一些平台化的服务,包括身份、数据、鉴权等,这是典型的FaaS解决方案示意图。从下图我们可以非常粗浅了解到一个概念调用,函数最关键的概念是调用,就是事件源去调用函数,然后来完成我们一系列的操作。状态/运行时是在电脑上所描述的运行执行环境,比方说我们平常用的Python、PHP、Node.js都是有运行时,就是这个函数在运行时间内所做的一些环境的搭建或者处理。这是我们Serverless处理的一个简单模型,我们在里面可以知道是有同步或者异步的调用。
3、Serverless场景典型的工作流程
它有涉及到这个概念,第一个概念是事件状态,表示允许等待来自事件源的一个事件。第二个是操作/任务状态,表示这个状态下允许按照顺序或者并行运行一个函数。第三个是切换状态,它允许切换到多个其他状态,比方说前一个函数的结果,然后触发分支,转换到不同的一个状态。第四个是停止状态,用来终止工作流程。
然后让我们看一下工作流程,他其实是通过我们的一个事件触发,然后判断事件状态,通过事件状态调用函数。从函数A中拿到结果,然后再到切换状态,完成后可能会有两个结果,结果2、结果3,这是Function的结果,其实是调取的Function的前一个函数的事件或者是前一个函数的数值,然后再去做操作任务,最后来到Function B或者Function C,这个流程就结束了。这是我们典型的事件状态,包括函数调用的一个工作流程。
4、Serverless 函数架构规范
现在我们来看一下Serverless的底层的FaaS函数、调用模型如何定义,包括约束。
首先看函数定义,下图表示比较清楚。函数定义是包括几个概念,第一个概念是ID,这很好理解,名称、标签、版本ID,其实刚刚所讲的运行时,也是函数定义里面的;还有函数处理的一个程序,就是函数所拿到的事件去做一些处理;以及里面所包括的代码,还有包括依赖,比方说我们今天所有有英文的实践,可能就需要去用依赖,然后统一上传到函数,以及环境变量。
元数据详情,有几个概念,第一个是版本的概念,第二个是环境变量,第三个是执行角色,第四个是资源,第五个是超时,其实元数据详情这里面的一些都是最基础、可能最常用的一些数据详情的结构。
第三点数据绑定,其实是一些无服务器框架允许用户去指定函数使用的输入输出的一些数据资源。这样就可以让开发人员去帮助函数资源的简化,来提高性能来获取更好的安全性,当然作为开发者来讲,并不是很关键。
函数约束,是代表运行Serverless函数时满足的通用的条件,比方说我们的函数必须与不同的事件类的底层来实现分离,是很基础的一些东西,包括每次调用的方法,不需要不同的函数,就意思说,我们的函数其实它是可复用的,以及事件源是可以去调用多个函数, 这些是函数的约束,还有包括它的特性。
函数调用类型,函数调用分四种,第一种是同步请求,第二种是异步请求,第三种是信息流,或者叫记录流,第四种是批量作业。
同步请求很好理解,就比方APP请求,GIPC的调用,它代表客户端发出的一个请求等待并立即响应,包括我们这次的实践,所用的方式也就是同步请求。
异步请求,异步请求就有很多,就比方说在SF上看到的触发、MQTT的触发、电子邮件,还有cos更改的命令触发,以及计划事件,比方说用我们的时间触发器,去写一个时间,自动触发任务,这都叫异步消息队列请求。
二、Serverless 的事件与规范
什么是Severless的事件,然后是怎么去定义的,我觉得这是所需要知道的一个重点。
1、什么是CloudEvents,CloudEvents是一个规范,它是由先CSF提出的规范,主要是以通用的格式来描述事件数据以提供跨服务、跨平台、跨系统的交互能力,我们可以去CloudEvents的GitHub主页去看关于FaaS的详的事件,包括事件规范。比较重要的一点就是他的所有实现都必须要支持JSON格式,这也是FaaS和其他不太相同的一个地方。
2、什么是事件,事件其实无处不在,每个事件源所产生的事件都各不相同,所以这对于开发者来说需要不断的去重复学习如何消费不同类型的事件。就比方说可能腾讯云CMQ产生的事件,还有API网关的产生的事件或其他厂商的事件,是不太一样的,就可能一些入参、出参值都是不太一样的。不同厂商的API网关的触发器,它所产生的事件也可能不是很相同的,这可以在SLF里面去验证一下,我也给到腾讯云的事件的一些基础参考。但是事件是基于触发,触发器达到某项特定事件之后,去入参给FaaS层,云函数去做一些操作。
3、必须的事件属性,这其实也是SCF的一个统一的管理委员会去制定的一个必须的事件属性,比方说第一个很简单,就是ID,所有的事件都是需要有个ID来帮助我们进行事件的查询,还有包括事件的一些处理。以及识别事件所发生的上下文,这块很简单,就是入参和传参。还包括事件所使用的该版本的cloudEvents的规范,这块可以去腾讯云官网参考一下这块的一些属性。以及发生相关事件的类型值,还有Data的数据内容格式,以及事件上下文主题,发生事件的时间节点。我还想在这里为家补充的几个点就是事件也是有分类的,大致可以分为六类,第一类,是事件、消息服务,这块内容就很多,比方说MPL、MQTT。第二类是存储服务,很简单,就比方说COS。第三类是端点服务,比方说物联网、ATP网关、移动设备。第四类是配置数据库,比方说地图就是一种配置数据库。第五类是使用特定语言去做的一些SDK的用户程序,这也算作事件源。第六类是计划事件,可以具象的说计划事件其实就是定制触发,就是定期去启用函数的一个功能。
虽然我们每个事件所提供的数据哈,其实在不同事件源之间都是有不同的,但事件的结构应该是通用的,所以我们能够分装关于事件的一些特定的信息。
三、Serverless工程化的难点与挑战
说到Serverless工程化的难点、挑战,这块我其实都没怎么写,就直接在百度上一搜,这东西其实大家都可以搜到的,所以我也不给大家多讲,我需要讲的是面对Serverless工程化的难点,我们需要做什么以及怎么去做,或者是有没有什么工具或者方式,去攻克这些难点。
第一个就是长时间问题,在FaaS层,因为它就是通过事件触发,或者是有一个运行时的概念或者是用完即走的概念,所以说不太适合在长时间去运行应用。这其实是不可否认的,但是我们有一个方案,是Serverless Framework下的一个component,我们其实是有一定的方案去解决长时间运行运用的难点,但怎么说我还是不建议大家用FaaS去做长时间,这是我的非常固执的一个观点,但我们是有解决方案的。
第二点是完全依赖于第三方服务。其实说到底我们Serverless其实就是免运维,所以说依赖于升第三方服务的时候,第三方是可以提供我们一站式的解决方案的,意思就是说,我觉得依赖于第三方其实是一件好事,因为它可以帮助我们去做一些监控、负载均衡、业务集群,最关键的是弹性的扩缩容,并且可以帮助我们免运维,所以我觉得完全依赖于第三方,其实这不应该是他的一个缺点,应该算作一个优势,尤其在云原生的时代,他其实是我们的一个优势。
第三点是老生常谈的一个问题就是冷启动的时间,因为我们的函数在你运行的时候,才会启动,所以说不是你启完之后一直都是在线的,Serverless是只有你在运行就是有事件触发的时候,才会去调用函数,去做计算的运行,导致一个冷启动时间会特别长。但这块其实我做了一个测试,这个其实是有关于云厂商的优化的建议,我测了腾讯云还有包括国内的A厂商、B厂商,其实在我的测试中会发现,其实腾讯云的耗时是最短的,我可以给大家共享出这块测试的代码,然后大家可以自己去在同区域,同网络环境,同配置下去跑冷启动的时间,其实腾讯云在其他厂商中相比来说,它的冷启动时间最短。
其次冷启动时间有什么解决方案,基本解决方案主要就两大块。第一块就是复用,可以使用容器的一些复用技术。第二块是预热,可以去做一些预创建,热门代码的缓存、网络优化,预启动来做一些预热解决冷启动,这块的话我其实还是建议大家就是不要过分关于论启动的基本方案,因为基本方案其实是云厂商一直在做的一些优化点。所以说大家尽量不要去纠结于这种特别底层的技术实现。
缺乏调试和开发工具,其实我们最近出了一个特别好用的工具,推出了Serverless Framework是可以贯穿到我们整体的Serverless应用的生命周期,有包括我们非常健全的开发部署环节的。测试环节的测试监控,还包括安全环节的,以及debug的时候所用到的一些的debug方案,还有包括一些具体的的debug的一个解决实现,还有包括详细的Dashboard,最后还包括审计、操作记录、告警信息、团队协作。他其实是贯穿了整体的Serverless的一个整合应用生命周期,所以这块的调试工具,还有开发工具其实是很好解决的事情。
最后就是语言版本的落后,反正我是可以看到基本上主流的版本,比方说Python2.7、Python3.6,还有Node.js 8.9,包括PHP这些常用的新的稳定的原版本,其实都是有在支持我们的runtime,当然这块的话,有的同学可能就会问到一个点,就是很尴尬一点,比方说你Python虽然3.6但现在Python都已经到3.8,你为什么不用,这个我的观点就是并不是所有语言的语言版本越高越好,我觉得这点还是需要去寻求一个稳定,意思就是说我们需要去找到一个长期维护,并且稳定的版本,然后再给大家去用。我举个比较简单的例子,就是PHP7.0的时候出了N多个bug,可能达到了7.17.2之后,这些东西才渐渐地稳定下来,这些新特性才有人去用,我是这么看待语言版本落后的问题。
然后我们来看一下有哪些人在用Serverless的架构,就如下图所示,基本上现有的主流的一些互联网公司,它其实都是在有用Serverless架构,其实Serverless架构也是势在必行。所以我觉得开发者一定是要懂得并且学习Serverless的架构才能在我们的行业中有一定的竞争力,我是保持我这个观点的。
最后就是Serverless的架构应用。我们现在和Framework推出了很多的Component,你也可以成为我们开源社区的贡献者,可以去直接去搜Serverless官方网站,在最底下订阅我们的公众号,假如你有问题的话也可以将问题提交给小助手,我们会有专门的一些工作人员为大家去做一些更多详细的解答。
费用的问题,其实很多人都说你讲了这么多,那你的费用是怎样的。现有有的话Serverless Framework的服务是免费的,他就类似于我们的一个开发工具,他有一个收费项目,就是我们的FaaS,但是SCF它每月都是可以享有4万GBS的免费使用量,还有包括100万的一个调用次数,当然这块都是可以详细去看的。这块的话免费额度,我是觉得基本上假如你是一个个人博客或者是中小型的企业,这个额度其实完全够用的,其次是我们的BaaS,主要是用到的是API网关,也是有一定的免费额度,还有包括cos也是有一定的免费额度,我们的云数据库即将推出,可以期待一下免费额度。
然后那么最后我们来去看一下Python Flask Serverless怎么去开发情人节表白页。
第一步是安装,主要就是安装Serverless Famework还有其他一些必要的本地运行环境,比方说Python、Node.js。第二步是配置YML,主要就是针对于Serverless Frameworkbu部署所用到的环境以及触发器等。第三步是部署到腾讯云,这一块特别简单,就是我们直接Serverless了一下,然后它会自动帮我们去打到云端。
我们就来开始做实战吧!
课程源码相关地址:
官网 https://serverless.com
GitHub https://github.com/serverless https://github.com/serverless-components
腾讯云文档 https://cloud.tencent.com/product/sf
问卷
为了给广大开发者提供最实用、最热门前沿、最干货的视频教程,请让我们听到你的需要,感谢您的时间!点击填写 问卷
腾讯云大学是腾讯云旗下面向云生态用户的一站式学习成长平台。腾讯云大学大咖分享邀请行业技术大咖,为你提供免费、专业、行业最新技术动态分享。