作者:黄文俊,腾讯云高级产品经理
曾经历过企业级存储、企业级容器平台等产品的架构与开发,对容器、微服务、无服务器、DevOps等都有浓厚兴趣。
本文整理自1月20日腾讯云微服务架构交流会。
Serverless是一个比较新的概念,2017年开始在行业内兴起,边缘计算则是一个更新的技术。那么Serverless在边缘计算中能产生的什么样的效果、产品以及形态并推进出来在大家面前呢?今天来为大家分享一下。
首先讲讲Serverless是什么?下面这张图可以很清晰的看到,Serverless从架构上可以分成两部分。
一是Backend as a Service,后端即服务,腾讯云上目前已经提供很多这类产品,例如COS对象存储、CMQ消息队列、CDN内容分发、CDB云数据库、API网关,这些产品更多的是承载数据的存储。
二是Function as a Service,函数即服务,也是Serverless比较核心的技术点,腾讯云云函数就属于这种。
从Serverless或者云函数来看,更多是对用户的计算进行托管。用户将代码和配置提交到云函数平台上,此处的代码是指用户的一份代码或者代码包,配置,一个是指本身对于函数运行环境的配置,使用的是哪种环境、所需的内存、超时时间等;另一个是触发器的配置。因为整个函数即服务的运行方式是触发式运行,触发就需要有一个事件来源,而事件来源是和腾讯云其他产品进行关联后而产生。例如COS对象存储产品,它的关联就在COS的存储桶中,当用户上传一张图片或者删除一张图片时,就会产生一个事件,这个事件会触发云函数的运行;例如和API网关的对接,也可以作为事件来源,在用户的HTTP请求到达网关之后,API网关会把该请求作为事件转发给云函数,触发云函数的运行,云函数拿到请求之后进行处理,生成响应给到用户。
上图左侧,是代码和配置提交到云函数平台进行保存,真正事件产生后,针对每一个事件都会拉起一个函数实例,实现触发式运行;真正事件来临时,用户函数才会运行,用户代码运行时才有云函数代码的数据运算和费用计算。
因为函数本身是托管型的,用户本身无法感知到实例在哪里运行。云函数平台背后有个大的计算资源池,用户实例触发之后,我们会从资源池中随机选取可运行的位置,把用户的函数实例在对应位置上跑起来。因此整个调度过程,或者事件来临之后的函数扩缩容过程,都是由平台进行的。对用户来说,调度的粒度更细了,而且调度也都托管给平台了。
而从整个的计算过程来说,为什么会有这种产品的出现?对于传统的数据存储过程来说,数据产生后,更多会先把数据进行缓存或者存储,如以对象存储文件的形式保存,或者数据库中以结构化形式存储下来,再进行分析应用。有了函数服务产品后,我们可以有很大的加速,可以在事件产生的时候就立刻对数据进行处理,因此就变成了先处理,再对结果进行保存使用的过程。
那么,还能不能缩短中间数据产生到数据处理的传递过程?
对于传统应用来说,数据在用户那里产生,传到云上进行处理,再进行相应的存储。这里说的缩短距离实际是把处理过程更加靠近用户,靠近用户就可以认为是边缘计算的过程。并且这里的靠近用户指的并不是加速网络速度,而是更多把计算下发,放到更靠近用户的位置。
之前无论使用容器也好,或者使用主机也好,运算能力都是在云上提供,而边缘计算要做的事情是把运算能力下发到云之外去。
边缘计算的理念,就是把计算能力下发更靠近真正的用户,更加靠近设备这一端。
为什么会有这种需求的产生?
随着互联网以及物联网的迅速发展,接入的用户越来越多,设备也越来越多,在这种情况下,产生的数据量也越来越多。无论是个人用户,还是物联网接入设备,每时每刻都在产生大量的数据。数据不断增多的情况下,也同时要求我们对于用户的响应、设备响应越来越快,本身设备的计算能力也要越来越强。
10年前的一台PC都比不上现在一台智能手机的处理能力,设备的计算能力在越来越强的情况下,实现了把计算能力下发到更加边缘的位置的能力。
云函数目前在做的探索,从两方面出发。一是物联网方向,物联网主要是和设备打交道,实现设备上的边缘计算;从云函数本身的特点来讲,它属于触发型运算,真正数据产生之后才会拉起运算。云函数交由平台托管的调度,可以把云函数调度到用户设备上去,二把云函数调度到CDN的节点上去,虽然CDN可以认为是云的一部分,但CDN本身已经很靠近用户,CDN节点实际上已经在云的边缘。
接下来给大家做一个和物联网相关的效果演示。
先简单介绍一下几款设备,第一个是树莓派,熟悉物联网的同学一般都了解;第二个是光感的传感器,可以感测环境光,从中读取到环境光的流明值;第三个是LED灯。
目前这个设备已经跑起来了,它所做的事情是当环境光足够亮的情况下,LED灯就会暗掉,当环境光足够暗的情况下,LED灯会亮起来。演示过程可以看到,当我把光感器遮盖的时候,LED灯有一个亮起来的动作。目前的环境光和背景足够亮,当我打开的时候,因为光足够亮,所以LED灯会灭掉。
针对这个代码我做一个解释。首先大家可以看到目前在树莓派上跑的一段函数,已经下到树莓派上跑了,在网上看到的是线上的代码。接下来我会对代码进行修改,从代码中大家可以看到,当从传感器中读出的流明值足够大的时候,GPIO做拉高或者拉低的动作,目前是正常的表现。
刚刚我完成了一个修改,现在我要把代码下发到仪器上运行,同时把这里拉起,查看数值是否正确。下面不断刷新的就是传感器出来的流明值,目前传感器已经变化了,因为大家可以看到这个数值已经超过了200,LED灯是亮着的,当我把感光器遮盖以后,LED灯变暗,这是通过代码把行为做了反转的变化。
我们在目前的调试过程中也会做实际的设备调试,这里演示的就是真正把云函数下放到物理设备上进行执行的效果。
接下来讲的是目前云函数和用户协同推进的AI能力,用户数据只要在云上利用CVM、GPU服务器、腾讯TML机器学习,进行AI训练,得出相应的训练后模型,再把模型和外围的导入代码进行打包,放入云函数,或者是带有GPU的云函数,就可以对外提供AI的推理能力。用户真正使用AI的时候,从外面送过来一段用户需要推理的语音、文本或图像,在云函数中拉起训练模型,就可以对这段数据进行推理。
AI能力表面上看起来和边缘计算没有关系,其实不然。如果本身已经在物联网的边缘设计上具有了云函数的执行能力,那么是不是可以进一步考虑把AI能力下发到设备上去的,比如我们在云中进行数据的收集和训练,生成模型之后,利用模型更新云上的函数,然后可以利用一键下发把这种能力下发到设备中,使设备具备更强的AI能力。
通过这种方式可以让更多的设备接入AI能力,比如让家里的摄象头直接识别人脸,认识你的家人,或者让更多的医疗设备直接对医疗检查结果做出判断,识别疾病类型等。这些都将会是后期持续和各个物联网厂商进行摸索,往前推进的过程。
另外一个角度来说,我们为什么做CDN的边缘计算?CDN本身是把数据放到边缘去的一个过程,而边缘计算是为了把计算放到边缘去。为了更快的响应用户的操作需求,对于边缘传上来的数据进行更快的处理,这也是云函数对于边缘的探索。
对于边缘计算来说,云函数要做到的就是用户在云中能完成函数的编写、管理,在所需的位置把云函数下放各个位置运行和使用。
云函数未来在边缘计算中还会有大量的探索机会,CDN厂商、物联网厂商、硬件厂商等都将会有持续不断的合作发展,去探索尝试将边缘的物联网能力、边缘的AI能力、边缘CDN能力落地。
======
提问:腾讯云Serverless可以自己部署吗?
回答:自己部署有分两种,一种是把云函数部署到设备上的能力,一种是Agent的部署。Agent本身是需要用户自行部署到用户自有的设备上去的。而今天演示用的是树莓派,Agent不局限于树莓派,它可以在更强的服务器中运行,比如可以用到设备的GPU、设备的存储、文件等进行分析计算。
提问:我们想在自己内部部署一个类似的Serverless,腾讯云可以支持吗?
回答:您说的是私有化部署,云函数本身没有考虑,腾讯云云函数管理整体是在云上的,边缘计算提供更多的是边缘的调度和计算能力,函数在云上配置后,调度到设备上运行,云函数本身对于设备上的数据读取全部由自己控制,读取不用走网络,因为执行的代码包已经下发到设备上去了,体现的是让计算更加靠近数据的理念。
提问:如果提前设置好代码下发到设备上去,AI也可以断网吗?
回答:对,代码运行在你的设备上。两种情况,一种是我刚才演示的物联网的边缘计算。本身的代码包装下发到设备之后,在设备上运行,断网没有关系。
云函数本身也提供AI能力,在云上提供,所以在云上运行。
对于AI,云上产品化的速度会更快,目前腾讯云已经在为部分客户进行支持,云上的相关操作说明后续也会提供出来,大家可以在线体验AI能力。
提问:针对IoT这块腾讯云发布了没有?
回答:这个还没有发布,还在产品化,目前也是和一些客户协同推进这个能力,物联网设备各种各样,包括底层的硬件环境,比如树莓派的ARM,或者X86,或者mips等平台,对于Linux里的内核功能,文件系统的支持,对于存储、内存、CPU的要求也在整理中。
提问:云函数能够被用于传统应用吗?
回答:云函数的特性因为本身是触发式运行,短暂运行的方式,所以和传统的很多开发单体的运行方式不太一样,更多是偏向于新业务开发,或者是小的新业务上线,或者急需要弹性应用能力的使用,传统的可以做改造,但是到时候需要提供一些改造的建议。
效率提升更多是在业务开发的速度上,实际上对于业务运行环境不用再过多做运维性的动作,对于扩缩容也不用考虑,业务开发之后就可以上线,运维交给平台,扩缩容能力也是交给平台,为用户减轻压力,业务用量上来之后怎么承载业务,怎么保证业务不崩溃,云函数已经解决了这个问题,本身的扩容可以理解为无限能力的扩容、。
提问:Serverless在线能力有没有额外的规划?Serverless的程序和代码能不能访问云主机上面的接口?
回答:目前有在做很多,包括边缘计算、CDN以及和腾讯云的各种云产品打通,Serverless本身最大的价值在于和各个云产品打通之后的效能,可以认为是各个云产品之间的黏合剂或者是轻量级计算的联合。而和后端的对接,包括数据库、CVM直接打通,更多是网络上的问题,即将会推出和VPC网络的打通,用户VPC业务可以用云函数直接访问。