带你搭建个真网盘|学习笔记

本文涉及的产品
对象存储 OSS,20GB 3个月
对象存储 OSS,恶意文件检测 1000次 1年
函数计算FC,每月15万CU 3个月
简介: 快速学习带你搭建个真网盘。

开发者学堂课程【Serverless 技术进阶:带你搭建个真网盘】学习笔记,与课程紧密联系,让用户快速学习知识。

课程地址https://developer.aliyun.com/learning/course/995/detail/15038


带你搭建个真网盘


内容介绍:

一、简介

二、从云计算到Serverless架构

三、Serverless架构及应用场景

四、Serverless Devs 让 Serverless 更好用

五、演示操作

六、问题答疑


一、简介

从serverless到serverless devs,原生环境下这个研发综合效能提升的探索,其实换句话来说就是本次技术研读班的课程的一些内容。众所周知,近些年来,云计算的发展是飞速的,云原生的概念,也是被炒得火热,serverless架构,更是被UC Berkeley认为是云时代的默认编程范式,所以今天我将会以此作为切入点,和大家一起来分享。

分享一下在我心中,serverless架构的发展以及给我们带来的技术红利,最后也会和大家分享一下我们的开源项目serverless的工具链项目。

我的分享,将会从以下三个部分来进行,分别是从云计算到serverless架构,然后serverless架构及其应用场景,还有serverless devs更好用。主要从这三个方面来进行分享。


二、从云到Serverless架构

一个部分是从云计算到serverless架构。在这个幻灯片中,其实我们是可以看到一张图和三个关键词的,相信很多搞it的人或者是之前了解过的人都已经有一点感觉,左边这张正是埃尼亚克,也是世界上第一台通用计算机。

自从其诞生以来,计算机科学与技术的发展就从未停止过前进的脚步,尤其是近些年,计算机的发展更是日新月异,有不断突破和进化的人工智能领域,由5G带来更多机会的物联网领域,还有可信的区块链技术,当然也有不断更新、不断迭代,不断走进寻常百姓家的云计算。右边的这三个关键词,是2003年到2006年之间,谷歌所发表的三篇重要论文。

这些文章指明了HDFS分布式文件系统,还有mapreduce并行计算,然后和 base分布式数据库的技术基础。及未来的机会至此,也奠定了云计算的发展方向。关于这三个文章或者说是这三个技术点呢?

有人曾经这样说,正是因为他们,云计算才得以正式拉开帷幕。

image.png

云计算的发展是飞速的,也是有目共睹的,但是随着云计算的发展,另外一个名词又悄然的诞生了,并且迅速的夺取了风口,大旗被更为广泛的关注,那就是云原生,其实,就我个人来说,并不是非常喜欢原生这个词,我觉得这个词没有非常直观的表达出他和云计算之间的一个关系,但是当我们翻一翻他们的英文表达时候,我们会发现,云原生实际上就是在云与计算之间增加了一个native,所以可以这样认为,云计算的飞速发展无论是从技术迭代,还是从概念升级,最终产生,最终产生了我们耳熟能详的也是目前炒得火热的原声:

image.png

那么什么是Serverless架构呢?无论是中文还是英文,在很多时候,都有看其字就能明白其含义的,这样的一个一个能或者是效能。或许这就叫顾名思义通过Serverless的结构,我们不难发现它所要传递的一个心智,Saver指的是什么呢?

指的是服务器。less呢?是更少的精力。所以serverless架构所传递的心智是把更专业的事情交给更专业的人,开发者可以更少的关注服务器等底层相关的内容,把更多的精力放在更具价值的业务逻辑之上。所以,在一定程度上,我也不是非常喜欢Serverless,翻译成中文之后的那个名字叫无服务器,觉得让很多人都觉得说无服务器是不是不需要服务器?我觉得这个翻译真的是很不好,包括原生的翻译我觉得也不是很好。所以Serverless大家要记住,不是不需要服务器了,而是说更少的精力去关注服务器等底层资源。

image.png

2009年UC Berkeley,发表了一篇关于云计算的文章,在这篇文章中呢,UC Berkeley为云计算做出了一个比较明确的定义,同时也提出了包括服务的可用性数据,数据的安全性和可审性的十项云计算所面临的各类困难和挑战,并断言云计算将会引领未来的十年2019年也正好恰隔十年的时间,UC Berkeley 再次发文,不仅从多个角度说明了什么是Serverless架构,比如从结构的角度肯定了Serverless是faat与baas的一个结合。

除此之外,他就这样从特定的角度,对于被认为是Serverless架构的产品,或者是服务,他还需要具备按量付费和弹性伸缩的特点,并且非常激进的表示,Serverless将会成为云时代计算范式将会取代所获计算,因此也意味着服务器和客户端模式的一个终级。当然,它这个断言到底是不是对的,在这里不进行更多的这个评论,或者是更多的这个探索,但是至少通过他这样的一个更为激进的断言,我们是能感受到这些前辈或者说这些大佬,他们对Serverless架构的一个热忱的一个期望。

image.png

image.png

从iaas到paas 发展是越来越明确去服务器也是越来越明显,无论此时我们是说云原生还是说SERVERLESS架构,云的概念确实都在不断的升级,人的技术也确实都在,都在不断的迭代,而这一切的改变呢,其实都是为了效能的提升,为了安全的提升,为了成本的降低以及。即生产力的驱动。

image.png


三、serverless架构及应用场景

来简单的看一下Serverless架构及其应用场景。在这PPT中,它是包括了两张图

image.png

直观来看,左边的图更简单,右边的图可能会稍微复杂一些,来仔细研究一下。其实这是一个宠物商店网站在传统架构与Serverless架构下的一个不同的表现,左侧是传统的SERVERLESS架构,右侧是SERVERLESS架构,简单的来考虑一下,如果要做一个传统的这样的网站或者说功能,都需要做哪些事情呢?大家是可以来想一下的,包括了开发代码,购买服务器,而且还要清楚要购买多少台多大的配置,是否要加够,然后呢在服务器里面安装各种软件,配置环境,必要的时候,还要有分布式架构等许多内容。那将代码部署到服务器上,业务上线结束,其实并没有结束,项目在运行的过程中,还要有人看着,如果流量比较大的时候,要进行扩容,如果流量降低呢?

还要进行及时的缩容。那么在Serverless架构下,他是什么样的一个表现呢?在这里也可以看一下,首先客户端浏览器这一部分我们可以先不用管,权限模块有单独的云产品来提供,能力我们也无需额外的操作,数据库也不需要我们管。原先要在服务器安装的ng ix等软件呢?这里有API网关,这样现成的产品来给我们解决了,我们只需要填一些表单,配置一下就可以了。

那么剩下的是什么呢?其实剩下的只是四和五这样的两个函数,换句话来说,剩下的是我们的业务逻辑。其实这也就是serverless架构所交付的一个非常重要的心智,就是把更专业的事情交给更专业的人开发者不再关心更多底层的能力只需要关心自身的业务逻辑就自身的业务逻辑就可以了那么这样做的好处是什么,者说带来的好处是什么呢?是经历的支出更加专一可以有效地提升业务创新效率降低产品迭代周期推进项目快速上线那么有人就可能好奇啦说哎你啥都不用我管。流量多少你该怎么办呢?来给我做扩容谁来给我做缩容其实这就涉及到了函数计算的弹性能力其实我们可以看这样一张图

image.png

当用户写完代码之后它可以直接把代码部署到线上函数计算呢实际上是通过事件来进行驱动的什么叫做事件,上传oss一个文件的api网关收到一条请求你往数据库里面写了一条数据等完成这些事情之后,他都可以认为会产生为会产生一个人的事件会触发函数,再然后函数会根据实际的请求数量来进行实例的启动,比如说有十个请求,那么系统可能就会判断需要十个实例,此时,就会有十个实例来进行启动,接下来,可能就是收费问题。

在Serverless架构下按量付费是非常重要的,只有在使用的时候才收费,在不用的时候,基本是免费的。试想一下,你的流量突然变高,有人给你做弹性,你的流量走,有人帮你释放掉这些额外的资源,都在收你的钱,如果你的业务在三更半夜就没有流量,那基本上就是免费的。这种按量付费的模型,在一定程度上其实就是成本的节约。所以SERVERLESS架构是什么呢?它就是一种新的编程范式,和之前的业务模式,或者编程模式,基本上是一致的只是架构有一些微微的变化而已,一个天然分布式架构。原先我们能做的事情,做网站,做后台,做小程序,做音视频处理,做人工智能,函数计算,也都可以做,只不过它就是一种天然分布式架构,把它当成一种分布式的架构来看待,就和原先没有任何区别了。可能说这么多,大家现在心中可能会有一些疑问,好像对serverless架构是什么,好像有一点点感觉了,像刚才说的,再来回顾一下,像刚才所说的SERVERLESS架构是iaas与paas的一个结合,UC Berkeley还说了,对于被认为是serverless架构的产品,或者是服务,他还需要具备按量付费和弹性伸缩的特点。当然有些人也会认为这是从狭义上来对SERVERLESS架构做的定义,还有一些人,可能会比较激进或者是这有一些更多的想法,他们对serverless,又给了一个广更为广泛的一个定义,广义上的一个定义,他们认为,在服务端免运维或者是在服务端的运维的技术架构,或者是一种思想,或者是一种开发范式,他也算是serverless。所以不管是从狭义上来说,还是从广义上来说,其实serverless架构所表现出的这种的运维所表现出的这种弹性伸缩、按量付费的特点,都是它的一个核心价值,或者说是所交付的一个技术红利。在这里,也可能会额外的多加一些内容,我想要用一个更为形象的例子,或者更为形象的一个比喻,和大家来探索一下serverless架构,它到底是什么, 我们和汽车的关系,可以来想一下,其实我们和汽车的关系会有三种关系,第一种关系,是我们买一台汽车,第二种关系,是我们来租赁一台汽车。第三种关系,当我们想从a到B这样的一个地方,从a点到B点,我们可能会随手叫一台出租车,或者是拿打车软件叫一台快车,那这个时候,我们会发现一件事,在最原先,在我们买车的这个条件下,我们需要做很多的事情,包括我们需要一次性投入很多的钱,我们要花几十万,甚至上百万来买一台车,然后我们还要关注加油的问题,我们还要关注车的年检问题,我们还要关注车上的每一个零部件的问题,所以,这实际上是什么,实际上是我们最原始的一个,或者说最原先的一种模式,它就是我们的物理机的模式,我们原先可能要自己自建机房,或者是自己购买服务器,一次性可能要投入很多的东西,自己拉宽带,然后自己做这个服务器层面的运维,我们要做很多的事情,然后,可能就是一种租车的一个过程了,当我们到达一个新的城市之后,假如说我们去旅游,我们想要自驾一下,我们不可能说到一个城市就买台新车,那这个时候?我们就可以租一台车,那我们发现租一台车和买一台车,它的区别是什么呢?租一台车呢?他在租车的时候,我们一次性不需要支出很多的钱,我们只需要只出少量的钱就可以,所以你可以认为我们其实就是一个按量付费的过程了,除此之外我们也不需要再关注,我这个机房有多少打开空调,我机房的温度是多少,都不需要关注了,我们只需要关注的是租车的这个事,就是我们所需要关注的是,不再需要关注车的这些底层,我们只需要关注,这台车能不能开?能不能够这三天就行,让他换算成我们云计算发展的下一个步骤是什么?就是我们的云主机时代,我们相对于原先的那种模式,不再需要关注机房的温度,不再需要关注这些底层硬件设施。其实我们关注的就是我们的服务器,还有我们自身的业务逻辑,再往后来看,还有一种模式,就是我们和车的另外一种关系,就是我们来叫一台车,假如说我今天要上班,我不可能说我为了上班我租一台车,或者我为了上班,就从a到B,买了一台车,不太现实,可能就随手招招一台出租车,就走了,那这个时候我需要关注的是什么呢?甚至连车有没有油我都不需要关注,我甚至连这台车什么品牌,都不需要关注,甚至连这台车能给我开多少天,也不需要关注,关注的就是他能不能顺利的把我从a地送到B地。那么这个时候对应的其实就是Serverless架构,会发现Serverless的架构它,它本身也是按量付费的,但是云主机好像也可以认为是一种按量付费的过程,但是SERVERLESS架构它的按量付费的力度会更加的细腻,它甚至可以达到秒级,毫秒级的一个计费的力度。这是一种情况,另外一种情况就是我们所关注的内容会更加少了,我们不再需要关注这个服务器等硬件的资源,甚至连很多的这些服务器等底层的运维工作,我们也不再需要关注了,所以其实这就是云计算发展的一个规律,就是去服务器化越来越明显。

image.png

可以来看一下,这里有一张图,这里一张图,分别是关于Serverless架构和在传统架构下的这个弹性伸缩和按量付费的一个简单的树,在上面这张图是弹性伸缩,在我们可以这样想蓝色的这条曲线,实际上是我们一天真实的业务流量的曲线,然后,除了蓝色这条曲线,还有一个黄色的面积,可以认为,黄色的面积是我们机器的可负载的一个能力,它是可负载的能力,可以认为这个时候他是有一台机器,他是正在运作,然后我们的流量是这样,到这个时候了,有个运维同学突然发现,咱们的这个网站,流量突然变高了,是不是有更多人来,好像一台机器。气马上就扛不住了,这个时候刚才可能就立马再买一台机器来做一个扩容,扩容之后,我们扛住了这波流量扛住完之后,到这个时候他说好像流量,现在又稳定下来,就开始逐渐的开始往下走了,那多开一台机器好像有点浪费资源,它就开始把这台机器释放掉了,然后就这样会他会不断的因为流量的多少,然后来进行一些服务端的一个运维的一个操作。在这张图里,会发现一件事,蓝色线以下的黄色面积实际上是我们真实使用的一个负载,而蓝色线以上的黄色面积是我们准备额外的负载,或者是已经被浪费掉的负担,那么基于SERVERLESS架构的一个弹性伸缩的一个能力,他的表现是什么呢?

或者他在客户端的一个表现是什么?它在客户端的表现实际上是这样,当你来了十个请求,给你分配十个请求的资源,当你来了一个请求,就给你分配一个请求的资源,当你说突然来了1000个请求,给你分配1000个请求的资源,所以在serverless架构下,是你需要多少资源,我给你分配多少,而相对于来不会产生这样的冗杂,这样的一些额外的资源的支出,整个一个弹性,整个一个扩容和缩容的这个弹性的过程都是云厂商来给我们提供,所以serverless架构它是一个天然的分布式架构,它是一个天然的弹性伸缩的一个架构,那和我们刚才所说的弹性伸缩是一致的,那其实在我们下面这个图,对应的就是按量付费的一个过程。

image.png

我们可以认为,当你购买一台服务器的时候,你的服务器只要开机放在那里,不管你用没用,他都是在花钱,这么和大家说头几天,我是看到了一个开源社区,他们有一个项目,然后他们那个项目,是要搭建一些这个私有化,要有一些私有化的搭建然后才能使用。然后这个时候,我就在阿里云上面,因为那个搭建可能是需要一套集群,还是相对来说比较传统,所以我就只能买一台服务器来做这个事情,然后买完之后,就是我买完之后我就放在那里,没搭建几次,就没用多少,就没用多久,就没有再用了,但是我的服务器,后来一直是处于一个付费的状态,只要我在那开机,它就一直在付费,不管你流量多少,流量少了他就浪费了,你流量多了它就爆了,所以他是一直在付费的这样的一个过程。那在SERVERLESS架构下好像也发生了一个变化,使用了多少资源,花多少钱就行,那么你使用多少资源谁来决定呢?弹性伸缩来决定的,那也就是实际上在serverless架构下,可以认为,在传统架构下,黄色线这个蓝色线以上的黄色部分是我们额外浪费的钱,而在serverless架构下,至少在客户端,或者是用户层的一个感知好像我的资源利用率是100%,好像把所有钱都花在了刀刃上,那么其实资源利用率到底能不能达到百分百呢?当然这是绝对达不到的。那么资源这个浪费的点在哪呢?其实大家可以认为,其实所有的额外的资源,或者额外的这个资源池,都是云厂商来给你备的,所以大家可以认为其实是云厂商在帮助大家来cover或者来扛上一部分的成本,所以大家才会觉得原来我好像是真的就是花了多少资源来来,这个消耗多少钱,用了多少资源,消费多少,所以这也是SERVERLESS架构所给大家传递的一种心智,至少在客户端的一种表现,至少给大家的一种表现是能让大家觉得我花了多少钱,我使用了多少资源。

image.png

然后SERVERLESS架构,其实除了刚才所说的按量付费,还有弹性伸缩之外,其实SERVERLESS架构还有一个非常非常非常重要的点,那就是效能的提升。甚至在我心中,可能都会觉得SERVERLESS架构所带来的效能提升的价值,远远超过刚刚所说的弹性伸缩或者是按量付费的,这样的一个价值,为什么会说他会有一个相当的提升呢?大家可以认为,就是当我们把更专业的事情交给更专业的人之后,其实开发者是可以付出更多的精力在我们自身的业务逻辑之上,不需要再额外的关注其他的一些事情了。从另一个角度来看,其实就是我们经历之处更加专业的,所以它带来的效果就是效率,更高质量更好,所以我在这里也写了三心二意,不如一心一意给大家举一个比较真实的例子,就是我之前,我本身也是一个研发,然后,我有一个自己的项目,我经常我在做那个项目的时候,如果我要启动一个新的项目的时候,搭建这套环境,或者我把整个一个这个开发环境,测试环境,还有这个现场环,我搭配套环境,就需要花费很长的时间,花费我很多的经历,但是现在在serverless架构下,说实话很多的流程我都已经避免掉了,包括后期的一些运维的工作也都把我节省掉了。我所需要关注的就是把我的业务代码写好就可以了,写好代码就等于我的项目可以上线了,我的业务逻辑就证明我可以让他发挥真正意义上的价值了。所以大家可以认为很多额外的工作,其实都不需要我们做了,所以它的效率自然而然就提升了很多。

image.png

说到这里,我们不妨来进一步想一下,就是serverless架构能做啥?它的应用场景是啥?大家也可以对标一下自己的场景,看看自己的场景是不是和serverless架构有缘分。能收获一波技术红利,抓紧来收割。再说到serverless架构能做啥之前,我们可以先来想一个问题,serverless架构是云时代的默认计算范式,来想一下,什么是计算?或者能被称为计算范式的东西是什么样子?再或者能被称为默认计算范式的东西应该是什么样子。其实从我的角度来说,能被称为默认计算范式,其实在一定程度上也表明了SERVERLESS架构在一定程度上,它是可以做一切事情的,他没有哪个场景能不能做,只有你想不想做的一件事情。

image.png

是实时的文件处理,还是实时流处理,还是机器学习LT后端,再或者是移动应用,后端外部应用场景等等的一切,你可以认为4S架构都可以做,而这一切在如今的SERVERLESS架构上其实都有能拿得出手的一些案例了,例如,现在的幻灯片上所显示的其实是一个常见的音视频处理的,这样的一个场景。我们通常情况下,如果想要对音视频来做一些处理,其实要明确一件事。就是说音视频处理的时候往往会需要消耗大量的资源,其实我在白天处理高峰和在晚上低谷的时候,他的这个资源的消耗真的是一个天差地别,那这时候,就需要我们有一个非常大的一个池子来做这样的一个事情,不管是对运维层面的工作来说,还是对我们资源的这个支出,或者是额外成本来说,还有我们整个一个效率来说,其实都是面临着很大的挑战serverless架构下,他是怎么样的一个表现呢?其实我们可以将这些资源上传到对象存储,然后通过对象存储来触发函数计算,然后再由函数计算来做一些处理,处理完之后,持久化或者是反馈给客户端,而函数计算这里的处理,他也可以有很多的优化方案,比如说我可以单个函数做处理,我也可以先用一个函数把这个视频给他切片,切片完成之后再分别处理,处理完之后,再做一个合并,所以整个一个流程,他会变得非常的简单,非常的清亮。除此之外,还有一些AI的场景。

image.png

比如用户他可以发起一个推理的一个请求,然后函数计算,可以从一些云存储的系统里面加载模型,然后加载完之后,然后中途也可能会有一些日志的产出,然后会把一些推理结果反馈给用户,然后这里是一个常见的web场景。

image.png

某个场景,基本上也是,然后当有用户请求网站的时候,然后到这个内容分发,然后到函数计算,然后读取数据,然后挂载硬盘做一些处理,然后或者寄一些日志,做一些处理,然后再把结果返回给用户。

image.png

所以就像刚才所说的,其实不管是实时文件处理、实时数据处理,还是机器学习,LT其实只要大家想做的还是这个蓝色架构,现在都是可以来进行一个比较好的一个支持的,这里面,我也给大家举两个比较有趣的例子,但是实际上这两个例子里面也是蕴含了很多的场景,首先,这第一个例子是一个小程序的一个例子。

image.png

就是我个人是比较喜欢出去玩儿的,然后我也会拍很多照片,我和我朋友都会拍很多照片,在传统意义上,我回来之后我要把我所有的照片发给他,他还要把他所有照片发给我。我是个东北人,就觉得这样来回发来回发好麻烦,有的时候可能发着就发丢一两章,真的就是很烦,所以我当时就在想,能不能有这样一款小程序或者是一个软件,它可以帮助我们两个人共享共同来管理一个相册,这是我的第一个需求。第二个需求什么呢?因为我经常出去玩,而我也会拍很多照片,我可能会在之后的某一天,我突然想到,是不是曾经有一张照片是我站在海边,但我好像有这样一个印象,然后就希望我可以通过搜索文字的形式把那张照片找出来,而不是不断的去往上翻这个相册,翻到大概是那天拍的,然后再找到这张照片,不希望是这样的一个过程。所以我就做了这样的一个小程序,我们可以创建一个相册,然后把我们照片然后上传上去,可以多个人共享这个相册,一起来管理相册,一起来上传照片,上传完照片之后,然后系统的后台,会通过image caption技术,然后对这个照片进行一个描述,比如说一个站在海边的男人,或者说一个站在讲台的男人,会有这样的一些东西,或者一个黑色的建筑,看起来很美好的食物

image.png

会有这样的一些描述,然后把这些描述,通过人工智能的方法,然后放到我们的数据库里面之后,我们在进行这个数据的读取,然后在进行这个文本相似度的一个检索,然后找到这张照片。然后当时也是为了整个一个效率比较高,因为大家可以想一下,现在手机拍了一张照片,尤其手机拍一张照片可能就有六七兆,七八兆,用微单拍这张照片可能会更大,十几兆,二十几兆,四十几兆都有可能,那如果要是在这个列表里面,就把所有照片都加载出来,网络直接炸掉了,所以图片上传到后台之后,会先做一个图像压缩,会把这个图像压缩的非常小,可能从40到可能就会直接压缩成50K,60K或者是2,3k的一个大小,然后给返回回来,这样在整个一个加载的过程当中,它是相当于省流量了,当点开的时候,是可以来查看原图的, 所以,整个一个这样的一个过程,基本上都不应该说基本上应该全部由serverless架构来实现,一个人大概开发,一周左右的时间这个小程序就上线了。除此之外,还有另外一个小程序是一个在线写代码的一个小程序,还有一个在线刷题的一个小程序。

image.png

这个小程序做的一个过程,基本上也是因为会有一些特殊的需求。因为可能会经常会想要用手机,想用零散的时间来做一些学习,我能会用手机来看一些电子书,来看一些,刷一些题,来不断的巩固自己的一些知识,然后有的时候,可能会看到一些编程的内容,也可能想让在手机上来运行一下,那这个时候,就想能不能有这样的一个软件,它可以通过ocr的识别,可以拍到书本上的代码,然后可以直接运行。或者是我复制粘贴进去也可以直接运行,然后也可以这是随机刷题,这样我做了这样的两个小程序。这两个小程序,基本上也大概花了一周左右的时间就把它上线了。大家可以看到,刚才所准备的这两个小程序,这两个案例,它所有的内容都是基于Serverless架构来做的,它就包括了我们刚刚所说的很多的内容,例如我们刚刚所说这种音视频的处理,包括图像的压缩等一些异步的处理,还包括了AI模型,比如说ocr的识别,比如我以为这开车的技术,或者搜索的文本相似度,可能都算是AI的技术,除此之外,还有我们刚刚所说这种移动应用后端,或者是web程序的这样一些API的一些功能,基本上刚刚这两个小程序也都包括了这些内容,所以其实大家如果要是说能通过我的抛砖引玉,把自己的一些应用和Serverless架构进行一个有机结合我觉得相对来说还是挺有趣的一个过程。然后在接下来和大家来分享Serverless Devs 让 Serverless 更好用。

大家好像有人是对这个Serverless架构的定义,可能会有一些想法或者是思路,其实我觉得是这样的,有很多东西,其实我们可以这样认为,就是只可意会不可言传。我觉得serverless架构也是这样,或者除了Serverless架构之外,我觉得原生也是这样的,其实我相,就咱们现在在看直播的这些同学,包括群里的这些同学,可能大家对云生的定义,可能每个人都有自己的看法,每个人也都有自己的见解。但是这并不影响原生逐渐的火热起来,被更多的业务当成技术选型之一,甚至有些人可能连原声是什么都说不清楚,但是他却有一个非常明确的一个目标,我的业务云原生,我们很多的技术的概念,他确实是模糊的,尤其像Serverless架构,大家可能会说像这里他对Serverless架构有个定义,他说他就是发育bus,对Serverless架构也有个定义,它可能就是服务端免运维,可能那个里面对Serverless架构还有一个定义,就是长时间运行的业务,是不符合Serverless精神,是不符合Serverless架构精神的,违背Serverless精神的这样一种架构,但是其实我们不难发现,任何一个技术和架构,它都是正在不断的升级,不断的自我完善,其实包括Serverless架构也是,其实从最刚开始Serverless架构的诞生到现在,其实也有十年的时间了,89年十年的一个历史了,其实在这一段时间,Serverless架构也正在不断的进行一些自我完善,可能在最刚开始,一些长时间运行的一些软件或者是服务,可能不会被认为是Serverless架构,但是现在,在各个云厂商中,他也都被归结到Serverless架构的范畴当中了,可能最最刚开始,大家觉得我只需要提交代码就可以,我为什么要关注容器镜像这种东西呢?这种东西不应该是Serverless架构所关注的,但是随着时间的发展,我们会发现,Serverless架构不仅关注了容器镜像,甚至,很多时候我们来说不需要关注服务器等底层资源上面的一些事情,例如我们所说的单实例多并发,可能来关注一些进程,可能要关注一些内容,所以大家可以认为,其实任何一个技术,它的发展,都不是空穴来风,或者说都不是一个高屋建瓴的东西,他一定要接地气,所谓的接地气,就是他一定要产生真实的业务价值,和我们自身的业务逻辑产生一定的关联,能够服务广大的业务。用一句老话是怎么说,黑猫白猫抓到耗子就是好猫,Serverless架构,你不要管他的定义是a还是B,只要他能解决你的业务问题,让你的业务开发更高效,让你真正意义上可以做到降本提效或者提效降本,那么搜来的架构它就是一个好的架构。所以从我的角度来说,大家不需要对Serverless的架构的定义来进行一个非常非常细的,这样的一个探索,或者是一个纠结,之前有一个教授曾经问过我,说你觉得PAAS有saas间是有哪些本质上的区别的,还有bus这些,他们本质上的区别都是什么?我当时是这么回答的,首先在业务逐渐发展的过程当中,我们会发现很多的这种paas SaaS这种东西,APP这种东西,它会逐渐的变得模糊化,我举一个非常简单的例子,我们说对象存储,对象存储,它是什么呢?理论上他应该是一个bus,它是提供这种基础设施的,还是提供存储的,但是随着时间的发展,我们会发现,很多云厂商所提供的对象存储,它带有计算的能力。上传的图片,可以帮你做压缩,上传的图片,它可以帮你做一些AI的处理,上传的压缩包可以帮你来做一些东西,甚至有很多的这种对象存储的平。那他甚至支持一些边缘脚本,那这个时候你说这个这个对象存储它到底是一个还是一个fast产品,所以其实发展到最后,很多产品发展到最后,其实中间的概念会越来越模糊,大家一定都会有一些交集的,所以很多的时候,我觉得大家可以用好一个东西,也可以看好一个东西,其实不需要过分的去纠结这个东西到底是什么,所以我觉得其实这个是我的一个想法。


四、Serverless Devs 让 Serverless 更好用

image.png

这一部分。其实任何一个事物的诞生呢,都会伴随着很多挑战,Serverlesss架构呢,也不例外,就像刚才所说的价格,好像很多人对他的这个定义可能就不一致,这也是他面临的挑战之一,如今,Serverless架构也面临很多挑战,其中的工具链匮乏就是挑战之一。Serverless架构的这个工具链,是匮乏的,一方面表现在,市面上的工具链并不完善,这导致开发和部署的难度很大,进而增加了成本。另一方面,都表现在缺乏相关的工具链,在体验层将supplies体验进行。优质工作量的匮乏,导致本来就担心被厂商锁定的Serverless开发者,变得更难于厂商解绑,在之前,应该是2020年的十月,中国信息通信国内首个云原生用户调研报告明确指出了使用Serverless架构之前呢,49%的用户考虑了部署成本,26%的用户考虑了厂商绑定情况。24%的用户考虑了相关工具及完善程度,而这些数据背后透露的本质是什么呢?站在我的角度,透露的本质就是开发者对完善工具链的一个强烈诉求。我本身也是一个开发者,换句话来说,我也是一个热衷于Serverless应用的开发者,其实我对使用Serverless,我在使用Serverless架构的时候,其实我也遇到了很多的困难,或者说是痛点。

image.png

例如说我在开发应用之前,我的项目如何能迁移到serverless架构,我是否要将我的项目拆分成函数来进行部署?比如说大家都听过函数计算,也都可能在了解函数计算这个东西,那么大家就想了我把我的业务,假如我有一个express的框架,或者我有一个jungle的框架,或者单纯有一个spring boot的一个框架,上函数之前我要把它拆开吗?我要拆成单个函数吗?大家可以来想一下,还是我要把整个一个业务完整的扔上去呢?所以其实这些都可能是我们来接触serverless架构时所面临的一个痛点,或者是一些疑问和顾虑。还有人,可能会说,serverless架构安全吗?方便吗?我如果突然被攻击了,我应该怎么办呢?如果你系统出现漏洞,会不会所有的东西都挂掉,我也会面临很多这样的疑问,或者来说我如何来快速使用和体验serverless架构呢?在开发的过程中,也会面临很多的问题,比如我如何来进行项目的调试呢?为啥我本地开发好的,把它部署到线上之后,我却发现跑不起来,还是环境有问题吗?如何来配置我的函数呢?然后开发之后,也会面临很多问题,如何来划分我的不同的环境呢?serverless的方案是什么样子呢?的项目状态如何,是否还还很正常,还很健康呢?它有很多很多的问题需要我们去关注。正是因为serverless架构太新了,用起来问题也是比较多的,所以就需要有人或者是有工具来帮助我们,或者来帮助我们每一个开发者来解决这样的一个事情,于是serverless devs就诞生了。它的诞生,其实就是想要给广大开发者,更快速体验serverless的一个途径,更简单的使用,更高效的开发以及更开心的运维。我们也经常说serverless devs的是什么呢?其实serverless devs的是一款可以在应用全生命周期来发挥作用的开发者工具,它可以让用户像使用手机一样来使用。

image.png

其实serverless devs,并不是厂商驱动的,也不是产品驱动的,而是每一个开发者来驱动的。他是一个开源代码,开放生态的开发者工具,我们相信最了解开发者的一定不是云厂商,也一定不是产品经理,也不一定是架构师,一定是在场的每一位开发者。我们也非常希望,也诚挚邀请所有的开发同学或者是开发者,和我们一同来加入serverless大雾的社区,我们先来玩转serverless,和我们一起来开发贡献一款,我们每个人说了算的开发工具。于是,我们在2020年的十月份,我们开源了serverless的开发者工具,一款可以让开发者像使用手机一样来玩转serverless devs架构的工具,我们希望开发者可以通过这个工具一键体验多云的serverless产品,极速部署搜lite项目,并且可以在serverless应用的全生命周期。周期来发挥作用.

image.png

image.png

serverless应用开发的整体效能进一步提升,serverless,大陆的开发者工具,其实是一款组件化的开发的工具。大家看这张PPT,我经常把他描述成是serverless 的一个哲学原理图,大家可以看到这里有两个人,一个是开源贡献者,一个是serverless的开发者。开源贡献者,可以通过我们的规范来编写一些组建或者应用,然后来发布到我们的registry上面。这个reject有点类似于NPM,有点类似于python里的pi ag,可以认为他是serverless领域的一个生态的基石,大家可以把开发的这些包,贡献到这个上面,然后,The plus的开发者就可以直接来通过我们的工具来直接来做一些有趣的事情,为了给大家一个更有趣的一个比喻,拿出来一个游戏机来做比喻。

image.png

大家可以认为,serverless devs这个工具其实。这就是一个游戏机,游戏机本身,不具备任何和业务绑定的功能,它所具备的都是非常基础的能力,都是一些通用的能力。然后所有的功能都存在哪?在游戏卡当中,我们插入不同的游戏卡,可以来玩儿不同的游戏,比如说我们插入一个魂斗罗的游戏卡,我们可以来玩儿魂斗罗,我们来插入一个超级马里奥的游戏卡,我们可以来玩儿超级玛丽。实际上就是这样的一个过程。serverless devs也是当组建的开发者,把组件贡献到这个reject之后呢?我们的serverless devs的开发者,serverless的开发者就可以按照规范来写这个应用。  

image.png

加入不同的组件就可以实现不同的功能,而实现不同的功能?不同的组件,就可以帮助开发者把自身的业务部署到不同的云平台上面。部署到不同的开源项目上面,或者是来做一些更有趣的事情,实现更多有趣的功能。目前,serverless devs已经支持了阿里云、华为云、腾讯云、百度。现在也正在和很多的开源项目来进行进一步的结合,如果大家要是有谁想要来,来做一些更有趣的事情,假如,我觉得competitive是不是可以通过serverless devs来部署,我觉得open Vs是不是可以通过serverless devs部署,或者说我觉得我们方程什么是不是都可以通过serverless devs来部署呢?

image.png

其实大家都可以来参与到我们这样的一个工作中来,然后我们一同来开发这样的一些组件,目前,serverless devs的下载量,已经超过了5万,我这是之前的数据,也有很多的社群,我们也在北京、上海、杭州、深圳等多地都开了这个城市站,之后,也会在长沙,也会在武汉,也会在成都,我们也会走进很多的高校,然后来开这样的一些线下的APP,来和大家更好的来,来一同共创serverless这个领域,来共同建设serverless这样的一个国内的生态。除此之外,大家可能可以长大家可以认为,常见的一些开发框架,其实目前serverless 都是支持的,也都可以进行一键的部署和体验。

image.png

image.png

从我的角度来说,其实serverless devs是什么呢?其实serverless devs的就是连接这个线上的服务和客户应用的一个连接器,假如我现在有了一个博客,想把它部署到serverless 架构上,就可以通过serverless部署,那假如现在有一个小程序的应用,我也可以通过serverless devs把它部署到某个后端上面,然后来直接来使用。所以大家可以认为,serverless 的是一个组件化的工具。

image.png

这里是我们serverless的一些,官方的一些页面,包括这个代码仓库,包括我们的官网,还包括registry,还包括我们的社区,然后今天 serverless devs的开源已经一年的时间了,然后社区仓库,还有各类组件的贡献者,也已经有数十位了,随着时间的发展和推进,还有技术的迭代,云计算新的编程范式,serverless 价格也正在逐渐的兴起,我们也希望可以邀请更多的小伙伴一起加入我们的社区和我们一同来开发serverless devs这样的一款面向开发者的工具,然后也希望serverless devs架构可以越做越好。


五、演示操作

接下来,我会给大家来做一些演示,首先,我们可以先来看一些有趣的事情

image.png

添加一个窗口。现在大家应该可以看到了,我其实我现在是在咱们serverless的这样的一个网页上面,各位小伙伴们也可以来帮我们来点一下这个star。

看看能不能在这几天Starr充个1000,然后也希望所有在线的小伙伴都可以帮助我们来点击一下。其实大家可以看到,这是我们的代码仓库,大家可以在代码仓库里来看到我们的一些帮助文档,有中文文档,还有英文文档,这里还有一些快速上手的实践,然后还有一些相关的资源,包括阿里、AWS100度、华为、腾讯的一些项目仓库使用的。

image.png

来进行一个沟通交流,也可以直接找到我来进行一些沟通的交流。

image.png

除此之外,这里也会有我们的一些文档,还会有一个registry,

image.png

今天可以给大家来简单的介绍一下我们的registry,其实我们的register的地址,大家可以认为是我们的债务的APP了点心,还是这样的一个内容。然后这里面,会有我们很多的开源框架,大家是可以来看到的,然后这里也会有我们的一些专题

image.png

大家也都可以直接来看到,然后在专题上面,这里会有一些场景的框架会有很多这样的小的案例。然后还会有很多的外部开发框架。

image.png

来搜索一些内容,给大家举一个例子,比如头几天我们有一个同学,他是让我来帮忙写一个,来让我来帮忙写一个这个PNG的无损压缩的一个案例,然后当时,也是写了这样的一个简单的一个小的一个例子,然后其实我们就可以来搜一下,搜到这个无损压缩之后,我们就可以来体验一下。点进来之后,就可以看到这样的一个案例,这里会有两种使用方法,一种是我在本地来快速进行,通过工具来进行使用,然后另外一种直接通过我们的阿里云so Les应用中心来一件进行部署。

部署发布:

image.png

添加几本参数:

image.png

进入部署阶段;

image.png

部署结果:

image.png

上传pnj图像:

image.png

原9777个字节压缩后变为2166个字节。

创建新的代码仓库:

image.png

假如一个flash的项目,或者有一个jungle的项目,那这个时候,其实大家也可以通过代码仓库,然后来进行一个部署之后,也会有一个非常标准的一个github的流程,然后来走,比如这个时候我来创建一个这样的一个业务逻辑来创建一个这样的代码仓库,并且把这个张购项目给他部署到线上,发现他会先创建仓库,然后会进行一个代码的同步,然后同步完成,他会来进行一个部署的流程,可以来看一下,这是它的一个部署的过程,这里面它会给我们来创建一个新的代码仓库。

这个仓库是他刚刚给我创建的,这是serverless devs初始化的,然后大概是十七秒之前,我们可以来稍等一下,等他部署完成,我们来看一下效果,这已经在进行部署了,其实部署的这个过程当中,他就会做很多很多的事情,像这里面它就是在安装一些依赖,会进行一些构建操作,然后下面,可能就会有其他的一些内容,我们可以先不用管,我们可以先稍等片刻,等他来部署完成。

其实刚才我给大家所展示的第一个例子,是我们来快速直接部署一个案例,其实像部署完这样的一个案例,大家就可以通过API来直接使用这样的一些功能了。然后像我刚才所部署的第二个案例,其实大家都可以基于这样的一个案例来做自身的一些业务逻辑的开发,都是没有问题的。然后我们可以在这个张购项目里面,可以来做一些修改,比如因为刚才在创建的时候

image.png

在创建的时候,我写的是通过复制代码,然后可以来进行一个更新

修改进行提交

那我们会发现,在我们的这个应用当中,其实他就已经在触发了这样的一个第二次部署的这样的一个过程

image.png

正在进行一个初始化,就会稍后就会进行一个部署的操作,我们也可以实时的看到它的一个部署的流程

image.png

会先进行前置环境,然后资源同步,然后会有这样的一个过程,所以,其实这也是一个非常标准和一个非常科学的一个,从代码然后到一个产物到一个服务的,这样的一个流程。

image.png

如果我现在已经有了一个现成的应用,应该怎么办呢?其实大家如果要有现成的应用,大家是可以直接通过这样的代码仓库直接导入的。

更行成功可以进行快速的回滚。

image.png

我们可以直接快速回滚到之前的一个过程,然后下面,还有资源信息,当然这个资源信息并不是很明显,我们可以稍后再来看一下然后这一次,其实还有一个非常有趣的活动,那个指尖陀螺的一个活动,然后我们的助教同学,也可以帮忙把活动链接发一下,大家其实可以通过参与这样的活动,然后可以来进一步的serverless体验的这样的一个工具,然后并且快速的拿到一些小的奖品,小礼品,然后,也可以给大家来简单的示范一下,其实这个应用也是一个很简单。

那就是一个创建codbox这样的一个个人网盘的一个应用。这里面,我们可以来选择直接部署,假如说我选择了一个其他的一个地区,假如我选择到青岛,然后我可以直接进行一个创建,

创建网盘:

image.png

然后这个时候,可能就会有人好奇,你这个在控制台上白屏化点点点的这些过程,和你刚才介绍的serverless devs工具有什么关系呢?

其实大家可以认为,整个一个这个应用的后台的部署引擎,其实都是由surplus的这样的一个开发者工具来提供的,其实我们刚刚所做的这些工作,其实我们在本地或者在我们自建的一些CSCD流水线里面,假如github或者这样一些流水线里面,其实它本身也都是一行命令就可以来搞定的。

给大家来看一个我个人的非常小的一个小的项目。这里有一个是我这段时间是正在更新和重构的一个项目,这个项目也是我一个人的项目,其实它本身,他就是一个符合serverless devs债务的规范的一个项目,它是可以直接来通过咱们应用中心来进行部署的。

image.png

image.png

serverless devs的一个最大的好处就是它的集成性和被集成性是非常强的,这里面其实是可以会配置一些必要信息,只需要两行命令,理论上就可以把serverless devs配置到我们的流水线里,我们执行一行命令就可以把我们这里面大约应该是有三四个函数,一个更为科学的方法直接发布到线上。

当然这里面本身是要有一些流程,因为现在还是属于一个测试阶段,所以没有的流程,比如我这里面会有一个函数,有一个服务,这里面还会有个函数和服务,这里面还会有他们都会绑定不同的一些触发器。然后我们可以来看一下,我们code网盘应用,现在部署成什么样子了,因为在这里面它可能会有比较长的时间,可以看到它已经部署成功了,我们可以直接来打开这个页面。  

image.png

一个网盘的应用,然后它的这个默认的账号和密码,其实都是在咱们这个应用的描述里面,其实都写着的在应用的描述里面,其实他都写了他的默认帐号和密码。

上面来上传一些资源来做一些有趣的事情了,整个一个过程,其实不属于一个网盘,原先我们要做一个这样大的PHP的应用,可能要买服务器要做很多事情,但是现在,我们基本上只需要做这样一个非常简单的一个操作就可以了,在这里,大家也可以自己修改密码,都是可以的,然后,我们可以来看一下。以应用维度来进行serverless的应用管理,就来进行应用管理,它是什么样的一个状态呢?

image.png

我们原先部署完一个serverless应用之后,我们会发现我们要去不同的地方来找这些资源,但是有应用中心之后,我们会发现我们可以随时随地的进行部署,随时随地的进行回滚,有问题了可以来快速的进行回滚,都是没有问题的。除此之外,它还会把我们当前应用所有的资源他都会给我们列举出来,比如说他有两个函数,然后它这两个函数的除了两个函数,它还有很多的bus的资源,比如mast,比如安全组,比如专用网络和我们的一些角色权限,然后,我们要不用这个内容呢,我们也可以把整个一个项目给他全都删掉:

image.png

就可以进入到一个删除的流程。其实所以从整个一个就是工具链从零到一,这样的一些,整个一个完整的过程,其实我相信大家在未来会有很多,就是大家会发现有很多很有趣的应用,然后可以在这个上面可以来找到,然后也希望大家可以和我们一起来参与serverless devs的,这样的一个项目中来和我们一起来贡献serverless devs的一些组建或者是一些应用参与到我们社区当中,因为刚才我已经把项目删掉,所以这里就找不到项目。

image.png


六、问题答疑:

如果应用本身出错了怎么办?我们如果应用本身出错了的话,其实也是可也是可以在本地来进行一些调试,在本地来进行开发的,因为我们开发大部分做开发都是在本地,其实serverless devs也是提供了非常完善的一些本地开发能力的,serverless devs它在这里使用的时候,它是有很多功能,包括部署构建,包括移除,包括本地的调试,然后远端的调试,还有这种端云联调,其实一般情况下应用都是在本地会开发完成,调试好,然后然发到仓库,再走这样的一个CD的一个过程。

当然刚才给大家展示的都是CD的流程如果硬要是你发现你第一个版本没问题,第二个版本改错了,那就用刚才的快速回滚就可以了。

资源也是可以动态伸缩的吗?其实是这样的有一些是serverless的资源,它是可以动态伸缩的,有一些faces化的资源,但是没有办法动态伸缩的。

举个例子,像我们的对象存储,它其实就是一种serverless画的存储,所以它是可以看似无限,然后可以不断的进行伸缩。但是像现在的阿里云的这个云数据库RDSA,它就不是serverless的,他就没有办法动态伸缩,但是,现在的阿里云的数据库RDS,他也推出了serverless版,所以大家可以认为,现在大部分的服务或者是应用都正在以serverless这个基础为基础。

然后正在长出它的serverless化的一些应用或者是内容,然后都是可以来进行弹性伸缩的,之前我也有比较冲动的,也下了一个断言,说现在的serverless,看着好像是一个更上一层的应用,或者是更上一层的维度,但是我相信,在不久的将来,serverless将会成为一个基础的产品,或者是一个基础的平台,将会在这个基础的平台上面涌现出更多的serverless化的应用,或者是serverless化的服务。到那个时候将会是一个serverless on serverless,serverless from serverless以及serverless for serverless的时代,这是我昨天说的一句话。

基于eclipse开发对应的插件吗?现在是没有一个Linux的插件的,现在确切来说ID的插件还没有,但是我们现在正在做vsco的插件,还有这个jetbrains的插件,Eclipse的插件,之后也会去做的,如果要是大家有兴趣的话,想要一个社区贡献者的这个角度来和我们一起来玩转的话,其实我们也是非常欢迎大家和我们一起来做这样的一些工作,所以我们所有的工作其实都在github上面,其实都是有这样的一些进展,大家也都是可以来看到的像插件开发:

image.png

相关文章
|
安全 数据管理 数据安全/隐私保护
PDS实现企业网盘搭建心得体会
在试用基于PDS实现企业网盘搭建的过程中,我发现这是一个强大而灵活的解决方案,可以满足企业对于数据管理和共享的各种需求
101 2
|
7月前
|
存储 数据安全/隐私保护 Docker
开源网盘程序,自建网盘指南
ShowTa是一款开源的个人和企业网盘程序,提供简洁界面和多种功能,如预览文件、在线播放视频、设置文件夹密码等。它支持Docker部署、WebDAV协议,可将网盘映射到本地磁盘,并能挂载阿里云盘。通过WebDAV,用户可在电视上观看阿里云盘内容。了解更多信息,请访问[GitHub](https://github.com/bosnzt/showta)和[演示地址](https://www.showta.cc)。
|
存储 弹性计算 Apache
小白新手搭建个人网盘
讲述基于ECS和NAS搭建个人网盘的基本操作
|
存储 网络安全 数据安全/隐私保护
部署ZFile在线网盘
部署ZFile在线网盘
254 0
|
存储 人工智能 运维
课时1:网盘与相册服务产品介绍
课时1:网盘与相册服务产品介绍
|
存储 监控 文件存储
云存储Clouder认证:基于存储产品快速搭建网盘—课时1:课程及场景介绍
云存储Clouder认证:基于存储产品快速搭建网盘—课时1:课程及场景介绍
|
存储 弹性计算 PHP
云存储Clouder认证:基于存储产品快速搭建网盘—课时9:基于文件存储NAS快速搭建网盘
云存储Clouder认证:基于存储产品快速搭建网盘—课时9:基于文件存储NAS快速搭建网盘
|
存储 弹性计算 开发工具
云存储Clouder认证:基于存储产品快速搭建网盘—课时7:基于对象存储OSS快速搭建网盘
云存储Clouder认证:基于存储产品快速搭建网盘—课时7:基于对象存储OSS快速搭建网盘
《阿里云产品手册2022-2023 版》——网盘与相册服务
《阿里云产品手册2022-2023 版》——网盘与相册服务
151 0
|
前端开发 Java 文件存储
个人博客(9、使用七牛云作为文件存储工具)
个人博客(9、使用七牛云作为文件存储工具)
286 0