讲ServerLess:一分钟部署DY解析接口

1615156677000image.png

“无服务器”(Serverless)是近年来的又一个技术潮流,随着云计算的兴起而获得了迅猛的发展。无独有耦在Laravel的生态系统中也出现了类似的服务——Laravel Vapor。 接下来,我们就一起来游览和认知无服务器的世界。由于Laravel Vapor目前仅支持AWS,所以下文以国内云厂商的产品为主。

什么是无服务器计算?

采用无服务器架构,你的程序都不需要知道容器的存在,也不需要关心虚拟机和物理机器,你只需要写一个个的函数,来完成功能就可以了。至于这个函数所需要的计算能力、存储能力,想要多少就有多少。

如果说微服务是以专注于单一责任与功能的小型功能块为基础,利用模块化的方式组合出复杂的大型应用程序,那么我们还可以进一步认为 Serverless 架构可以提供一种更加 " 代码碎片化 " 的软件架构,我们称之为 Function as a Services(FaaS)。所谓的 " 函数 "(Function)提供的是相比微服务更加细小的程序单元。

第一个Serverless应用

百闻不如一见,我们先实践来认识一下无服务器计算。 将Github上的一段开源代码:抖音短视频信息解析,放到无服务器环境上来运行。

各大云厂商现在都已经推出了各自的无服务器计算服务,比如AWS的Lambda、阿里云的函数计算,和微软Azure的Azure Functions。由于笔者对腾讯云比较熟悉,加上腾讯云在无服务器计算上也较为成熟。这里我们就以腾讯云的云函数为例,来做演示。

首先,在腾讯云的云函数产品中,函数服务菜单下选择“新建”。这里需要填写一下函数名称,我们命名为douyin,然后运行环境选择php。

1615156698000image.png

Tips:这里我们选择的是空白函数模板。也可以选择系统内置的一些常用模板作为基础,以获得一些上手帮助。

然后,我们简单地填写描述,并选取云函数所运行的角色(角色定义了云函数的一些访问权限,如是否能够访问COS等),然后选择“完成”即可创建函数。

1615156721000image.png

我们点击进入,来到它的代码编辑模块。我们就直接在内置的代码编辑器中进行代码输入,只需要把代码略作改动就可以适配云函数了:

1615156755000image.png

补充:这里你可能会惊奇地发现,内嵌在云产品界面中的代码在线编辑并不是一个“花瓶”,包括智能提示在内的功能其实还相当好用。在云端直接进行代码编写已经不是痴人说梦了。

可以看到,用云函数表达的代码逻辑非常简洁。这里主要是遵循腾讯云的规范,以标准的形式定义和暴露了一个main_handler方法,它也就是云函数的执行入口。

另外,这里你需要注意的是重要的输入参数event,因为以后具体访问请求的详细信息,就会体现在这个event参数的各个字段中。这里我们主要取出queryString,来获得解析函数输入参数url的值。

为了让这个云函数能够对外服务,我们接下来就需要为它添加一个API网关触发器,这样当API被外界访问时,这个云函数就会被触发执行并返回结果给网关。

我们可以直接在“触发方式”Tab下选择“新建API服务”,这样云函数会为我们创建一个配套的API网关实例。

1615156782000image.png

API网关是一个独立的PaaS服务,它可以和云函数联动使用。它的作用是为外界访问提供一个EndPoint,并引流到我们的后台计算服务。这有点类似传输层负载均衡,但API网关是工作在网络的应用层,它的后端可以连接指向云函数等多种服务。另外,API网关还能够提供不少应用层的实用功能,比如访问鉴权、限流熔断、版本控制等等。

OK,回到我们的Demo当中。网关自动建立并和云函数关联后,我们就可以请求网关提供的访问路径,来触发调用云函数了:

1615156806000image.png

好,通过上面的测试,我们获得了正确的结果,工作就这样轻松地完成了。

值得注意的一点,在上面创建过程中,我们可没有指定任何像CPU核数这样的计算资源,因为我们根本不需要操心和感知这些问题。这是真正的“无服务器”计算,它会根据我们的负载情况,依托云端庞大的规模自动地进行支撑和扩展。

补充:你不需要为云函数事先划定资源池,但对于单个函数执行单元的计算资源,还是能够进行一定控制的。最常见的是可以根据云函数的需要来选择运行环境的内存大小。

也正因为底层没有固化的资源,无服务器计算的计费机制是与众不同的。它一般会按照调用次数调用时长这两个指标来计费。这其实是非常灵活轻量的一种计费方式(部分云厂商计时已经可以精确到毫秒了),从成本上来看尤其适合那些偶尔触发、短时间运行的工作。这会比专门设立一台虚拟机来做同样的事情要划算很多。

另外,现在很多厂商为了鼓励用户去尝试使用无服务器计算,一般也都会提供每月的免费使用额度。以腾讯云为例。函数/API网关 每月提供100万次的免费调用次数。对于一些轻量的任务,一个月下来可能都不需要花一分钱。云函数资费API网关资费

从开发模式的角度来说,如果对在网页上直接开发Serverless程序的方式还不习惯,或者考虑到这样不方便进行代码管理的话,你当然也可以采用本地编辑代码然后上传的方式。而且,在本地可以配合厂商支持的IDE工具,会让你的无服务器计算的开发体验更加顺滑高效。

举个例子来说,对于腾讯云的云函数,你可以配合使用Visual Studio Code和腾讯云Serverless插件,来实现在本地编写、运行云函数,还可以一键和云端进行同步。

1615161152000image.png

总结

无服务器计算所能做的,可远远不止充当快速的Web开发工具。事件模型是无服务器的核心编程模型和运行逻辑,所以它非常适合相当广泛的事件驱动开发场景。

事件的起始,要依靠触发器

云上Serverless服务一般都配套提供了多种多样的触发器,包括API触发器、对象存储触发器、队列触发器等等。比如上面的实验中,我们用的就是API触发器,它的触发条件为API网关带来的外部Web请求。

较为常用的还有对象存储触发器。比如当用户上传了一个文件,后台程序把它保存到对象存储中,这时相应的无服务器函数会被这个新对象触发,你就能对这个新上传的文件进行必要的处理了。

此外,它可以按照设置的条件周期性触发。通过它和云函数的配合,可以在一定程度上代替操作系统中crontab类工具起到的作用。

补充:Laravel Vapor的原理类似,也是通过API网关来触发。流程如下:

1615161215000image.png

(Laravel Vapor API 网关 + AWS lambda 集成)

参考

Laravel Vapor

腾讯云函数

>>Laravel框架<<

如果觉得我的文章对您有用,请随意赞赏。您的支持将鼓励我继续创作!

赞赏支持
被以下专题收入,发现更多相似内容