云原生环境下研发综合效能提升探索(下) | 学习笔记

本文涉及的产品
函数计算FC,每月15万CU 3个月
简介: 快速学习云原生环境下研发综合效能提升探索(下)

开发者学堂课程【第八届大学生创新创业大赛阿里命题云原生命题培训云原生环境下研发综合效能提升探索(下)学习笔记,与课程紧密连接,让用户快速学习知识。

课程地址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 开发者工具是一款组件化的开发者工具,image.png

经常把它描述成是 Serverless Devs 的哲学原理图,这里有两个人,一个是开源贡献者,一个是 Serverless 的开发者。开源贡献者可以通过规范编写一些组件或者应用,然后发布到 Registry 上面。Registry 有点类似于 note GS 里的 NPM,有点类似于 Python 里的 pipe.org,有点类似于 docker 里的 docker hub,可以认为它是 Serverless 领域的生态的基石,可以把开发的这些包贡献到上面,这个时候 Serverless 的开发者就可以直接通过工具直接使用这些功能做一些有趣的事情了。

为了给大家一个更有趣的比喻,我拿出了一个游戏机来做比喻,image.png

可以认为 Serverless Devs 这个工具其实就是一个游戏机,游戏机本身不具备任何和业务绑定的功能,它所具备的都是非常基础的能力,都是一些通用的能力。所有的功能都存在游戏卡当中,插入不同的游戏卡可以玩不同的游戏,比如插入一个魂斗罗的游戏卡,可以来玩魂斗罗,插入一个超级马里奥的游戏卡,可以来玩超级马里奥,实际上就是这样的过程。

Serverless Devs 也是当件组的开发者把组件贡献到 Registry 之后,Serverless 的开发者就可以按照规范来写这个应用,image.png

它插入不同的组件就可以实现不同的功能,而实现不同的功能的不同的组件可以帮助开发者把自身的业务部署到不同的云平台上面,部署到不同的开源项目上面,或者来做一些更有趣的事情,实现更多有趣的功能。

目前,Serverless Devs 已经支持了阿里云、华为云、腾讯云、百度智能云和 AWS 等多家云厂商,现在也正在和很多的开源项目进行进一步的结合。如果有谁想要来做一些更有趣的事情,假如觉得 connative 是不是可以通过 Serverless Devs 部署,觉得 open wesk 是不是可以通过 Serverless Devs 部署,或者觉得 open function 是不是可以通过 Serverless Devs 部署?大家都可以参与到这样的工作中来,然后同来开发这样的一些组件。目前,Serverless Devs 的下载量已经超过了5万,这是之前的数据,也有很多的社群,也在北京、上海、杭州、深圳等多地都开了城市站,之后也会在长沙、武汉、成都,也会走进很多的高校,来开一些线下的 meet up,和大家更好的一同共创 Serverless 领域,共同建设 Serverless 这样的国内生态。image.png

除此之外,大家可以认为常见的一些开发框架,image.png

其实目前 Serverless Devs 都是支持的,也都可以进行一键的部署和体验。image.png

Serverless Devs 就是连接线上的服务和客户应用的连接器。假如现在有一个博客,想把它部署到 Serverless 架构上,可以通过 Serverless Devs 部署上来。假如现在有一个小程序的应用,也可以通过 Serverless Devs 把它部署到某个后端上面,然后直接来使用。所以大家可以认为,Serverless Devs 是一个组件化的工具,可以使用不同的功能,它是一个连接器。image.png

这里是 Serverless Devs 官方的一些页面,包括代码仓库、官网、Registry、社区。

目前,Serverless Devs 开源已经一年的时间了,社区仓库还有各类组建的贡献者也已经有数十位了,随着时间的发展和推进还有技术的迭代,云计算、新的编程、Serverless 泛式架构也逐渐的兴起,希望可以邀请更多的小伙伴加入我们的社区,一同开发 Serverless Devs 这样一款面向开发者的工具,也希望 Serverless 架构可以越做越好。

 

三、演示

接下来看一些简单的演示,对 Serverless Devs 可能会有一些更多的想法,或者是觉得更有趣。现在是在 Serverless Devs 的网页上面,image.png

这是代码仓库,可以在代码仓库里看到的一些帮助文档,有中文文档,还有英文文档,还有一些快速上手的实践,还有一些相关的资源,包括阿里、AWS、百度、华为、腾讯的一些项目仓库,大家都是可以参考和使用的。除此之外,也可以按照项目贡献规范,和我们一起玩转这样的一些项目。下面 GIT 可能会有一些 CDN 的缓存节点,可能有时候一些图片就加载不出来了,大家可以试一下。这里有一个官网,image.png

在这个官网上面,有什么反馈也可以在官网上面直接进行沟通交流,也可以直接找到我来进行一些沟通交流。image.png

除此之外,这里也会有的一些文档,还会有一个 Registry,Registry 的地址可以认为是 devsapp.cn,image.png

是这样的内容,里面有很多的开源框架,也会有一些专题,image.png

在专题上会有一些场景的框架,Web 的框架,包括 ecshop、discuz、kodbox、metinfo,还有一些常见的推流、商城、word 转 PDF,会有很多这样的小的案例,还会有很多的 web 开发框架,也就是 django、fastapi、webpy,还有一些 nuxt,还有一些 Next 什么的,这些全都有,Springboot 基本上全都有的,还有一些各种语言的一些案例,还有很多。除此之外,也可以在里面搜索一些内容。举一个例子,比如有一个同学,他让我帮忙写一个 PNG 无损压缩的案例,当时写了这样的一个简单的小的例子,可以来搜一下,搜到这个无损压缩之后就可以来体验。image.png

点进来之后可以看到这样的案例,里面会有两种使用方法,一种是在本地快速进行,通过工具进行使用,另外一种是直接通过阿里云 Serverless 应用中心一键进行部署。假如点击一键部署,它就可以跳到这个页面,image.png

就可以进行部署发布了。假如进行快速的使用,部署到深圳地区,只需要填写一些基本的参数,或者就是有这种傻瓜式的模式,傻瓜式的手机,傻瓜式的操作,甚至连不点都是可以的,这里可能就会进入到这样的部署的阶段,很快就可以看到这样的结果,image.png

部署完这个结果之后,可以在这里上传一张图片的,image.png

它原先是9777个字节,压缩之后就变成了2166个字节,其实这就是一个非常简单的案例的体验和使用。除此之外,假如有一个 Flask 的项目,或者是有一个 django 的项目,这个时候大家也可以通过代码仓库进行部署,之后也会有一个非常标准的 github 的流程,比如这时候来创建这样的代码仓库,并且把 django 项目部署到线上,image.png

会发现它先创建仓库,然后进行代码的同步,同步完成之后会进行部署的流程。这是它部署的过程,它会创建一个新的代码仓库,image.png

这个仓库就是它刚刚创建的,image.png

这是 Serverless Devs 初始化的,大概是17秒之前。稍等一下,等它部署完成来看效果,部署的过程当中,它会做很多的事情,image.png

像这里面它就是在安装一些依赖,会进行一些构建操作。下面可能就会有其他的一些内容,先不用管,先稍等片刻等它部署完成。刚才展示的第一个例子,是快速直接部署一个案例,像部署完这样的一个案例,可以通过 API 直接使用这样的一些功能了。像刚才部署的第二个案例,都可以基于这样的案例来做自身的一些业务逻辑的开发,都是没有问题的。可以在 django 项目里面来做一些修改,比如刚才在创建的时候,写的是通过 push 代码可以进行更新。这是一个 django 项目,image.png

可以写这是一个研读项目,然后提交一个 commit,

会发现在应用当中,它已经触发了第二次部署的过程,它正在进行初始化,稍后就会进行部署的操作,也可以实时的看到它部署的流程,image.png

它会先进行前置环境,然后资源同步,会有这样的过程,所以这也是一个非常标准和非常科学的从代码到产物到服务的流程。如果有现成的应用,是可以直接通过代码仓库直接导入的,这里面假如有个 AI 的项目,可以直接给它导入进来,是完全可以的。image.png

因为这个 AI 的项目,它本身并不是一个 Serverless Devs 标准的项目,它没有 s.yaml 这些内容,所以它也不让导入。image.png

但是,如果找了一个符合 Serverless Devs 规范标准的项目,其实是可以直接来导入。现在已经支持了 github 和 gitee,之后还会支持 code up 、git ab,还有其他更多的一些代码仓库。它现在已经完成了更新,这是它的最新版本,image.png

也可以刷新页面来看一下,image.png

这是一个研读项目,已经更新过来了。除此之外,还可以进行快速的回滚,image.png

假如有一个版本发错了,可以直接快速回滚到之前的过程,下面还有资源信息,当然这个资源信息并不是很明显,可以稍后再来看一下。这一次其实还有一个非常有趣的指尖陀螺的活动,可以通过参与这样的活动来进一步的体验 Serverless Devs 这样的工具。给大家简单的示范一下,这个应用很简单,就是创建 kodbox 这样的一个个人网盘的应用。这里面可以选择直接部署,假如选择了青岛,然后可以直接进行创建,这是创建网盘的过程。image.png

在控制台上白屏化的这些过程和刚才介绍的 Serverless Devs 工具有什么关系?可以认为,整个应用的后台的部署引擎都是由 Serverless Devs 这样的开发者工具来提供的,刚刚所做的这些工作在本地或者在自建的一些 CI/CD 流水线里面,假如是 github 或者是 gitee 这样一些流水线里面,它本身都是一行命令就可以搞定的。来看个人的非常小的一个小的项目,这里有一个项目是这段时间正在更新和重构的项目,这个项目也是个人的项目,它本身是符合 Serverless Devs 规范的一个项目,它是可以直接通过应用中心进行部署的。Serverless Devs 最大的好处就是它的集成性和被集成性是非常强的,

image.png这里面会配置一些密钥信息,理论上只需要两行命令,就可以把 Serverless Devs 配置到流水线里,执行一行命令就可以把里面大约三四个函数以一个更为科学的方法直接发布到线上。当然里面本身是要有一些 CI 流程的,因为现在还是属于测试阶段,所以没有 CI 的流程。例如这里面会有一个函数,有一个服务,image.png

它们都会绑定不同的一些触发器。来看 KOD 网盘应用现在部署成什么样子了。因为它可能会有比较长的时间,可以看到它已经部署成功了,直接打开页面,就可以看到一个网盘的应用,它的默认账号和密码在应用的描述里面都写了的,它的默认账号和密码都是 admin,是可以直接进行测试和使用的。image.png

然后往这上面上传一些资源,来做一些有趣的事情。整个过程,部署一个网盘原先要做一个这样大的 PHP 的应用,可能要安装宝塔,可能要买服务器,要做很多事情,但是现在基本上只需要做这样一个非常简单的操作就可以了,image.png

在这里,也可以自己修改密码。然后来看以应用维度进行 Serverless 应用管理它是什么样的状态?原先,部署完一个 Serverless 应用之后,会发现要去不同的地方来找这些资源,但是有应用中心之后会发现,可以随时随地的进行部署,随时随地的进行回滚,有问题了可以来快速的进行回滚,都是没有问题的。除此之外,它还会把当前应用所有的资源列举出来,比如它有两个函数,除了两个函数它还有很多的 bass 资源,比如 NAS,比如安全组,例如专有网络和一些角色权限。不用这个内容也可以把整个项目全都删掉,image.png

这样就可以进入到删除的流程了。其实工具链从0到1这样完整的过程,在未来会有很多,会发现有很多很有趣的应用可以在这上面找到,也希望可以和我们一起来参与 Serverless Devs 这样的项目中来,和我们一起来贡献 Serverless Devs 的一些组件或者是一些应用,参与到社区当中。

相关实践学习
【文生图】一键部署Stable Diffusion基于函数计算
本实验教你如何在函数计算FC上从零开始部署Stable Diffusion来进行AI绘画创作,开启AIGC盲盒。函数计算提供一定的免费额度供用户使用。本实验答疑钉钉群:29290019867
建立 Serverless 思维
本课程包括: Serverless 应用引擎的概念, 为开发者带来的实际价值, 以及让您了解常见的 Serverless 架构模式
相关文章
|
7月前
|
Kubernetes Cloud Native 容器
完全免费的K8S学习平台:在线集群环境助力你的云原生之路!
完全免费的K8S学习平台:在线集群环境助力你的云原生之路!
1196 1
|
3月前
|
Cloud Native Java 对象存储
面向未来的架构设计:Spring Cloud和Netflix OSS在云原生环境下的发展趋势
展望未来,随着5G、边缘计算等新技术的兴起,微服务架构的设计理念将会更加深入人心,Spring Cloud和Netflix OSS也将继续引领技术潮流,为企业带来更为高效、灵活且强大的解决方案。无论是对于初创公司还是大型企业而言,掌握这些前沿技术都将是在激烈市场竞争中脱颖而出的关键所在。
70 0
|
26天前
|
存储 Prometheus 运维
在云原生环境中,阿里云ARMS与Prometheus的集成提供了强大的应用实时监控解决方案
在云原生环境中,阿里云ARMS与Prometheus的集成提供了强大的应用实时监控解决方案。该集成结合了ARMS的基础设施监控能力和Prometheus的灵活配置及社区支持,实现了全面、精准的系统状态、性能和错误监控,提升了应用的稳定性和管理效率。通过统一的数据视图和高级查询功能,帮助企业有效应对云原生挑战,促进业务的持续发展。
34 3
|
2月前
|
Cloud Native Java 对象存储
面向未来的架构设计:Spring Cloud和Netflix OSS在云原生环境下的发展趋势
面向未来的架构设计:Spring Cloud和Netflix OSS在云原生环境下的发展趋势
55 1
|
4月前
|
Cloud Native 持续交付 云计算
云原生技术的未来展望:构建更加动态和灵活的IT环境
【7月更文挑战第59天】 随着数字化转型的加速,企业对信息技术基础设施的需求日益增长,尤其是对灵活性、可扩展性和敏捷性的追求。云原生技术作为一种新兴的IT架构范式,以其独特的优势正逐渐成为推动业务创新和实现快速响应市场变化的关键力量。本文将深入探讨云原生技术的发展现状,分析其核心组件如容器化、微服务、DevOps和持续集成/持续部署(CI/CD)等,并预测这些技术如何塑造未来云计算的蓝图,以及企业如何利用这些技术构建一个更加动态和灵活的IT环境。
|
4月前
|
消息中间件 Kubernetes Cloud Native
AMQP与云原生环境的兼容性
【8月更文第28天】随着云计算的发展,越来越多的应用程序采用云原生架构设计,如容器化和无服务器部署模型。高级消息队列协议 (AMQP) 作为一种广泛接受的标准消息协议,在这种新的部署环境中同样具有重要的作用。本文将探讨 AMQP 在容器化和无服务器架构中的应用,并提供具体的示例代码。
28 1
|
4月前
|
Rust Cloud Native 安全
哇塞!Rust 在云原生环境中搞大事啦!构建微服务竟如此酷炫,你还不来看看?
【8月更文挑战第31天】《构建微服务:Rust 在云原生环境中的实践》探讨了 Rust 语言凭借其内存安全、高性能及可靠性等特性,在快速发展的云计算领域构建微服务的优势。书中介绍了选择合适框架(如 Axum 和 Tide)、容器化部署、服务间通信及确保服务可靠性等方面的内容,并展示了 Rust 在云原生环境中的广泛应用前景。
181 0
|
5月前
|
Rust Cloud Native Java
Java演进问题之Java 9的模块化潜在的陷阱如何解决
Java演进问题之Java 9的模块化潜在的陷阱如何解决
|
7月前
|
域名解析 Kubernetes 网络协议
【域名解析DNS专栏】云原生环境下的DNS服务:Kubernetes中的DNS解析
【5月更文挑战第29天】本文探讨了Kubernetes中的DNS解析机制,解释了DNS如何将服务名转换为网络地址,促进集群内服务通信。Kubernetes使用kube-dns或CoreDNS作为内置DNS服务器,每个Service自动分配Cluster IP和DNS条目。通过示例展示了创建Service和使用DNS访问的流程,并提出了优化DNS解析的策略,包括使用高性能DNS解析器、启用DNS缓存及监控日志,以实现更高效、可靠的DNS服务。
119 1
|
7月前
|
Dubbo Cloud Native 应用服务中间件
【阿里云云原生专栏】云原生环境下的微服务治理:阿里云 Dubbo 与 Nacos 的深度整合
【5月更文挑战第25天】阿里云Dubbo和Nacos提供微服务治理的强大工具,整合后实现灵活高效的治理。Dubbo是高性能RPC框架,Nacos则负责服务发现和配置管理。整合示例显示,通过Nacos注册中心,服务能便捷注册发现,动态管理配置。简化部署,提升适应性,但也需注意服务稳定性和策略规划。这种整合为云原生环境的微服务架构带来强大支持,未来应用前景广阔。
293 2
下一篇
DataWorks