开发者学堂课程【第八届大学生创新创业大赛阿里命题云原生命题培训:云原生环境下研发综合效能提升探索(下)】学习笔记,与课程紧密连接,让用户快速学习知识。
课程地址:https://developer.aliyun.com/learning/course/1044/detail/15205
云原生环境下研发综合效能提升探索(下)
内容介绍:
一、Serverless 架构及应用场景
二、Serverless Devs 让 Serverless 更好用
三、演示
一、Serverless 架构及应用场景
所以就像刚才所说的,不管是实时文件处理、实时数据处理还是机器学习 IOT,只要想做,Serverless 架构现在都是可以进行比较好的支持的。举两个比较有趣的例子,虽然是两个有趣的例子,但是实际上这两个例子里面也是蕴含了很多的场景。
首先,第一个例子是一个小程序的例子,比较喜欢出去玩,会拍很多照片,和朋友都会拍很多照片,在传统意义上,回来之后要把所有的照片发给他,他要把他所有照片发给我,有的时候可能发着发着就发丢一两张,所以当时就在想能不能有一款小程序或者是一个软件,它可以帮助两个人共享,共同来管理一个相册,这是我的第一个需求。
第二个需求什么?因为我经常出去玩,会拍很多照片,可能会在之后的某一天突然想到,是不是曾经有一张照片是站在海边?希望可以通过搜索文字的形式把这张照片找出来,而不是不断的往上翻相册,翻到大概是那天拍的,然后再找到这张照片,所以就做了这样的一个小程序,我们可以创建一个相册把照片上传上去,也可以多个人共享这个相册,一起管理相册,一起上传照片,上传完照片之后,系统的后台会通过 image caption 技术对照片进行描述,比如一个站在海边的男人,或者一个站在讲台的男人,会有这样的一些东西,或者一个黑色的建筑,看起来很美好的食物,会有这样的一些描述,然后把这些描述通过人工智能的方法放到数据库里面,之后再进行数据的读取,然后再进行文本相似度的检索,然后找到这张照片。
当时为了整个效率比较高,可以想一下,现在手机拍了一张照片,尤其手机拍一张照片,可能就有六七兆、七八兆,用微单拍这张照片可能会更大,十几兆、二十几兆、四十几兆都有可能。如果是在列表里面就把所有照片都加载出来,网络直接炸掉了,所以图片上传到后台之后,它会先做一个图像压缩,它会把图像压缩到非常小,可能从四十兆就会直接压缩成50K、60K 或者20k、30K 这样大小,然后返回回来,这样,在整个加载的过程当中,它是相当省流量的。当点开的时候,是可以查看原图的,所以,整个这样的过程应该全部由 Serverless 架构实现,大概开发了一周左右的时间,这个小程序就上线了。
除此之外,还有另外一个小程序,是一个在线写代码的小程序,还有一个在线刷题的小程序,这个小程序做的过程基本上也是因为会有一些特殊的需求,因为可能会经常想要用手机,想要用零散的时间做一些学习,可能会用手机来看一些电子书,刷一些题,不断的巩固自己的一些知识,有的时候可能会看到一些编程的内容想让它在手机上来运行,这个时候就想能不能有这样的一个软件,它可以通过 OCR 的识别,可以拍到书本上的代码然后可以直接运行,或者复制粘贴进去也可以直接运行,也可以随时随地刷题,这样我就做了这样的两个小程序,这两个小程序基本上也花了一周左右的时间就把它上线了。
刚才所准备的两个小程序,两个案例,它所有的内容都是基于 Serverless 架构来做的,它包括了刚刚所说的很多的内容,例如音视频的处理,包括图像的压缩等一些异步的处理,还包括了 AI 模型,例如 OCR 的识别,例如 caption 的技术,或者搜索的文本相似度,可能都算是 AI 的技术。除此之外,它还有移动应用后端或者是 web 程序的这样一些 API 的功能,基本上刚刚两个小程序也都包括了这些内容,所以大家如果能通过我的抛砖引玉把自己的一些应用和 Serverless 架构进行有机结合,相对来说还是挺有趣的一个过程的。
二、Serverless Devs 让 Serverless 更好用
任何一个事物的诞生都会伴随着很多挑战,Serverless 架构也不例外,就像刚才所说的,Serverless 架构好像很多人对它的定义可能就不一致,这也是它面临的挑战之一。如今,Serverless 架构也面临很多挑战,其中工具链匮乏就是挑战之一。Serverless 架构的工具链是匮乏的,一方面表现在市面上的工具链并不完善,导致开发和部署的难度很大,进而增加了成本。另一方面,则表现在缺乏相关的工具链,在体验层将 Serverless 体验进行进一步规范,优质工具链的匮乏导致本来就担心被厂商锁定的 Serverless 开发者变得更难与厂商解绑。在之前2020年10月,信通院发布了国内首个云原生用户调研报告,明确指出了使用 Serverless 架构之前,49%的用户考虑了部署成本,26%的用户考虑了厂商绑定情况,24%的用户考虑了相关工具及完善程度。而这些数据背后透露的本质是开发者对完善工具链的强烈诉求。
我本身也是一个 Serverless 的开发者,或者说本身也是一个开发者,也是一个热衷于 Serverless 应用的开发者,我在使用 Serverless 架构的时候也遇到了很多的困难或者是痛点,例如在开发应用之前,我的项目如何能迁移到 Serverless 架构?是否要将的项目拆分成函数来进行部署,比如函数计算,假如有一个 express 的框架,或者有一个 jungle 的框架,或者单纯有一个 spring boot 的框架,上函数之前要把它拆开吗?要拆成单个函数吗?还是要把整个业务完整的扔上去?这些都可能是接触 Serverless 架构时所面临的痛点,或者是一些疑问和顾虑。还有人可能会说 Serverless 架构安全吗?方便吗?如果突然被 DDOS 攻击了应该怎么办?如果系统出现漏洞,会不会所有的东西都挂掉了?我也会面临很多这样的疑问,或者如何快速使用和体验 Serverless 架构?在开发的过程中,也会面临很多这样的问题,比如如何进行项目的调试?为什么本地开发好好的,run 一下都可以,把它部署到线上之后却发现它跑不起来呢?是环境有问题吗?如何来配置我的函数?开发之后也会面临很多问题,如何划分不同的环境?CI/CD 的方案是什么样子?我的项目状态如何了?是否还很正常,还很健康?有很多的问题需要我们去关注。
正是因为 Serverless 架构太新了,用起来问题也是比较多的,所以需要有人或者是有工具帮助我们或者帮助每一个开发者解决这样的事情,于是 Serverless Devs 就诞生了。它的诞生其实就是想要给广大开发者更快速体验 Serverless 的途径,更简单的使用、更高效的开发以及更开心的运维。Serverless Devs 是一款可以在应用全生命周期发挥作用的开发者工具,它可以让用户像使用手机一样使用 Serverless 架构。其实,Serverless Devs 并不是厂商驱动的,也不是产品驱动的,而是每一个开发者驱动的,它是一个开源代码,开放生态的开发者工具。最了解开发者的一定不是云厂商,也一定不是产品经理,也不一定是架构师,而一定是在场的每一位开发者。我们非常希望,也诚挚邀请所有的开发同学或者开发者,和我们一同加入 Serverless Devs 社区,一起玩转 Serverless,一起开发贡献一款每个人说了算的开发者工具。
于是,在2020年10月,我们开源了 Serverless Devs 开发者工具,一款可以让开发者像使用手机一样来玩转 Serverless 架构的工具,希望开发者可以通过这个工具一键体验多云的 Serverless 产品急速部署 Serverless 项目,并且可以在 Serverless 应用的全生命周期发挥作用,助理 Serverless 应用,开发的整体效能进一步提升。
Serverless Devs 开发者工具是一款组件化的开发者工具,
经常把它描述成是 Serverless Devs 的哲学原理图,这里有两个人,一个是开源贡献者,一个是 Serverless 的开发者。开源贡献者可以通过规范编写一些组件或者应用,然后发布到 Registry 上面。Registry 有点类似于 note GS 里的 NPM,有点类似于 Python 里的 pipe.org,有点类似于 docker 里的 docker hub,可以认为它是 Serverless 领域的生态的基石,可以把开发的这些包贡献到上面,这个时候 Serverless 的开发者就可以直接通过工具直接使用这些功能做一些有趣的事情了。
为了给大家一个更有趣的比喻,我拿出了一个游戏机来做比喻,
可以认为 Serverless Devs 这个工具其实就是一个游戏机,游戏机本身不具备任何和业务绑定的功能,它所具备的都是非常基础的能力,都是一些通用的能力。所有的功能都存在游戏卡当中,插入不同的游戏卡可以玩不同的游戏,比如插入一个魂斗罗的游戏卡,可以来玩魂斗罗,插入一个超级马里奥的游戏卡,可以来玩超级马里奥,实际上就是这样的过程。
Serverless Devs 也是当件组的开发者把组件贡献到 Registry 之后,Serverless 的开发者就可以按照规范来写这个应用,
它插入不同的组件就可以实现不同的功能,而实现不同的功能的不同的组件可以帮助开发者把自身的业务部署到不同的云平台上面,部署到不同的开源项目上面,或者来做一些更有趣的事情,实现更多有趣的功能。
目前,Serverless Devs 已经支持了阿里云、华为云、腾讯云、百度智能云和 AWS 等多家云厂商,现在也正在和很多的开源项目进行进一步的结合。如果有谁想要来做一些更有趣的事情,假如觉得 connative 是不是可以通过 Serverless Devs 部署,觉得 open wesk 是不是可以通过 Serverless Devs 部署,或者觉得 open function 是不是可以通过 Serverless Devs 部署?大家都可以参与到这样的工作中来,然后同来开发这样的一些组件。目前,Serverless Devs 的下载量已经超过了5万,这是之前的数据,也有很多的社群,也在北京、上海、杭州、深圳等多地都开了城市站,之后也会在长沙、武汉、成都,也会走进很多的高校,来开一些线下的 meet up,和大家更好的一同共创 Serverless 领域,共同建设 Serverless 这样的国内生态。
除此之外,大家可以认为常见的一些开发框架,
其实目前 Serverless Devs 都是支持的,也都可以进行一键的部署和体验。
Serverless Devs 就是连接线上的服务和客户应用的连接器。假如现在有一个博客,想把它部署到 Serverless 架构上,可以通过 Serverless Devs 部署上来。假如现在有一个小程序的应用,也可以通过 Serverless Devs 把它部署到某个后端上面,然后直接来使用。所以大家可以认为,Serverless Devs 是一个组件化的工具,可以使用不同的功能,它是一个连接器。
这里是 Serverless Devs 官方的一些页面,包括代码仓库、官网、Registry、社区。
目前,Serverless Devs 开源已经一年的时间了,社区仓库还有各类组建的贡献者也已经有数十位了,随着时间的发展和推进还有技术的迭代,云计算、新的编程、Serverless 泛式架构也逐渐的兴起,希望可以邀请更多的小伙伴加入我们的社区,一同开发 Serverless Devs 这样一款面向开发者的工具,也希望 Serverless 架构可以越做越好。
三、演示
接下来看一些简单的演示,对 Serverless Devs 可能会有一些更多的想法,或者是觉得更有趣。现在是在 Serverless Devs 的网页上面,
这是代码仓库,可以在代码仓库里看到的一些帮助文档,有中文文档,还有英文文档,还有一些快速上手的实践,还有一些相关的资源,包括阿里、AWS、百度、华为、腾讯的一些项目仓库,大家都是可以参考和使用的。除此之外,也可以按照项目贡献规范,和我们一起玩转这样的一些项目。下面 GIT 可能会有一些 CDN 的缓存节点,可能有时候一些图片就加载不出来了,大家可以试一下。这里有一个官网,
在这个官网上面,有什么反馈也可以在官网上面直接进行沟通交流,也可以直接找到我来进行一些沟通交流。
除此之外,这里也会有的一些文档,还会有一个 Registry,Registry 的地址可以认为是 devsapp.cn,
是这样的内容,里面有很多的开源框架,也会有一些专题,
在专题上会有一些场景的框架,Web 的框架,包括 ecshop、discuz、kodbox、metinfo,还有一些常见的推流、商城、word 转 PDF,会有很多这样的小的案例,还会有很多的 web 开发框架,也就是 django、fastapi、webpy,还有一些 nuxt,还有一些 Next 什么的,这些全都有,Springboot 基本上全都有的,还有一些各种语言的一些案例,还有很多。除此之外,也可以在里面搜索一些内容。举一个例子,比如有一个同学,他让我帮忙写一个 PNG 无损压缩的案例,当时写了这样的一个简单的小的例子,可以来搜一下,搜到这个无损压缩之后就可以来体验。
点进来之后可以看到这样的案例,里面会有两种使用方法,一种是在本地快速进行,通过工具进行使用,另外一种是直接通过阿里云 Serverless 应用中心一键进行部署。假如点击一键部署,它就可以跳到这个页面,
就可以进行部署发布了。假如进行快速的使用,部署到深圳地区,只需要填写一些基本的参数,或者就是有这种傻瓜式的模式,傻瓜式的手机,傻瓜式的操作,甚至连不点都是可以的,这里可能就会进入到这样的部署的阶段,很快就可以看到这样的结果,
部署完这个结果之后,可以在这里上传一张图片的,
它原先是9777个字节,压缩之后就变成了2166个字节,其实这就是一个非常简单的案例的体验和使用。除此之外,假如有一个 Flask 的项目,或者是有一个 django 的项目,这个时候大家也可以通过代码仓库进行部署,之后也会有一个非常标准的 github 的流程,比如这时候来创建这样的代码仓库,并且把 django 项目部署到线上,
会发现它先创建仓库,然后进行代码的同步,同步完成之后会进行部署的流程。这是它部署的过程,它会创建一个新的代码仓库,
这个仓库就是它刚刚创建的,
这是 Serverless Devs 初始化的,大概是17秒之前。稍等一下,等它部署完成来看效果,部署的过程当中,它会做很多的事情,
像这里面它就是在安装一些依赖,会进行一些构建操作。下面可能就会有其他的一些内容,先不用管,先稍等片刻等它部署完成。刚才展示的第一个例子,是快速直接部署一个案例,像部署完这样的一个案例,可以通过 API 直接使用这样的一些功能了。像刚才部署的第二个案例,都可以基于这样的案例来做自身的一些业务逻辑的开发,都是没有问题的。可以在 django 项目里面来做一些修改,比如刚才在创建的时候,写的是通过 push 代码可以进行更新。这是一个 django 项目,
可以写这是一个研读项目,然后提交一个 commit,
会发现在应用当中,它已经触发了第二次部署的过程,它正在进行初始化,稍后就会进行部署的操作,也可以实时的看到它部署的流程,
它会先进行前置环境,然后资源同步,会有这样的过程,所以这也是一个非常标准和非常科学的从代码到产物到服务的流程。如果有现成的应用,是可以直接通过代码仓库直接导入的,这里面假如有个 AI 的项目,可以直接给它导入进来,是完全可以的。
因为这个 AI 的项目,它本身并不是一个 Serverless Devs 标准的项目,它没有 s.yaml 这些内容,所以它也不让导入。
但是,如果找了一个符合 Serverless Devs 规范标准的项目,其实是可以直接来导入。现在已经支持了 github 和 gitee,之后还会支持 code up 、git ab,还有其他更多的一些代码仓库。它现在已经完成了更新,这是它的最新版本,
也可以刷新页面来看一下,
这是一个研读项目,已经更新过来了。除此之外,还可以进行快速的回滚,
假如有一个版本发错了,可以直接快速回滚到之前的过程,下面还有资源信息,当然这个资源信息并不是很明显,可以稍后再来看一下。这一次其实还有一个非常有趣的指尖陀螺的活动,可以通过参与这样的活动来进一步的体验 Serverless Devs 这样的工具。给大家简单的示范一下,这个应用很简单,就是创建 kodbox 这样的一个个人网盘的应用。这里面可以选择直接部署,假如选择了青岛,然后可以直接进行创建,这是创建网盘的过程。
在控制台上白屏化的这些过程和刚才介绍的 Serverless Devs 工具有什么关系?可以认为,整个应用的后台的部署引擎都是由 Serverless Devs 这样的开发者工具来提供的,刚刚所做的这些工作在本地或者在自建的一些 CI/CD 流水线里面,假如是 github 或者是 gitee 这样一些流水线里面,它本身都是一行命令就可以搞定的。来看个人的非常小的一个小的项目,这里有一个项目是这段时间正在更新和重构的项目,这个项目也是个人的项目,它本身是符合 Serverless Devs 规范的一个项目,它是可以直接通过应用中心进行部署的。Serverless Devs 最大的好处就是它的集成性和被集成性是非常强的,
这里面会配置一些密钥信息,理论上只需要两行命令,就可以把 Serverless Devs 配置到流水线里,执行一行命令就可以把里面大约三四个函数以一个更为科学的方法直接发布到线上。当然里面本身是要有一些 CI 流程的,因为现在还是属于测试阶段,所以没有 CI 的流程。例如这里面会有一个函数,有一个服务,
它们都会绑定不同的一些触发器。来看 KOD 网盘应用现在部署成什么样子了。因为它可能会有比较长的时间,可以看到它已经部署成功了,直接打开页面,就可以看到一个网盘的应用,它的默认账号和密码在应用的描述里面都写了的,它的默认账号和密码都是 admin,是可以直接进行测试和使用的。
然后往这上面上传一些资源,来做一些有趣的事情。整个过程,部署一个网盘原先要做一个这样大的 PHP 的应用,可能要安装宝塔,可能要买服务器,要做很多事情,但是现在基本上只需要做这样一个非常简单的操作就可以了,
在这里,也可以自己修改密码。然后来看以应用维度进行 Serverless 应用管理它是什么样的状态?原先,部署完一个 Serverless 应用之后,会发现要去不同的地方来找这些资源,但是有应用中心之后会发现,可以随时随地的进行部署,随时随地的进行回滚,有问题了可以来快速的进行回滚,都是没有问题的。除此之外,它还会把当前应用所有的资源列举出来,比如它有两个函数,除了两个函数它还有很多的 bass 资源,比如 NAS,比如安全组,例如专有网络和一些角色权限。不用这个内容也可以把整个项目全都删掉,
这样就可以进入到删除的流程了。其实工具链从0到1这样完整的过程,在未来会有很多,会发现有很多很有趣的应用可以在这上面找到,也希望可以和我们一起来参与 Serverless Devs 这样的项目中来,和我们一起来贡献 Serverless Devs 的一些组件或者是一些应用,参与到社区当中。