对于公有云,一个有趣的比喻是“公有云像是自来水,如果想使用,拧开拧开水龙头就好了。”的确如此,在公有云上部署应用的确非常容易,你只需要创建虚拟网络,供应虚拟机,然后部署应用就好了。可能有人觉得这样做还是太麻烦,能不能一步到位呢?可以!“无服务器计算”( Serverless computing)就可以做到。当然,“无服务器”是针对用户而言的,并不是说没有服务器,公共云服务商提供了部署、运行和管理应用程序的服务器。“无服务器计算”改变了开发人员构建和交付软件的方式。它将基础设施和代码分离来简化开发过程,降低成本并提升效率。因此,类比于IaaS或SaaS,无服务器计算又被称为“功能即服务”(FaaS)。
对于无服务器计算,你可以使用任何你熟悉的语言开发代码,例如Java, Python, Node, Go, and Ruby。
使用无服务器计算,您只需为资源的代码运行时间付费,而不必为资源的空闲时间付费。而传统的先部署服务器,再执行代码的方法,服务器的大部分时间都处于空闲状态,在等待请求,用户实际上在为大部分的空闲时间付费。从长远来看,无服务器应用程序的成本应该更便宜。
2.1 Fn Server
通常由公有云供应商提供并管理,对用户而言是透明的。
2.2 Functiom
对于Fn,函数是接受输入并写入输出的一小段代码。Fn Project也提供了函数开发工具包(fdk),从而使函数开发更容易。从部署角度看,每个函数(function)都是一个Docker容器。所以,用户所需的辅助组件还包含一个“Function定义文件“和Docker registry。
2.3 调用及触发器
Function的执行可以由用户通过命令手动调用,也可以由事件源触发。
触发器是系统其他服务操作的结果,该操作发送请求以调用Functions。例如,“Events”服务中的事件可触发Functions运行。或者,触发器可以基于时间表定时调用Function。
用户开发一段Function代码
创建一个 Docker image。并且将准备好的image 推送到 Docker registry
编写一个定义文件 func.yaml ,用于定义诸如允许执行的最长时间,最大内存使用量等。然后将定义文件和image连接上传到Fn Server
从OCI Console 可以看到部署好的Function
下图说明了部署Function的整个流程。

事实上,当你写好了function代码之后,只需要执行一个FnProject CLI 命令就可以完整整个部署流程。
首次调用Function时,Oracle Functions从指定的Docker registry中提取函数的Docker image,将其作为Docker容器运行,然后执行该函数。
无服务器计算的应用场景非常广泛,包括IT治理,数据处理,SaaS应用程序扩展等等。
例如,我们使用公有云时,通常希望配置的虚拟服务器(VM)可以按照监控指标自动伸缩,这样既能满足客户使用体验要求,也可以最大限度地节约成本。实现这种场景可以通过编写一个Function来调整服务器的大小,以及创建一个向该Function发送消息的告警。如下图所示:

警报被触发时,通知服务会将警报消息发送到目标主题,然后将其通知单到该主题的订阅中。在这种情况下,主题的订阅者包括Function以及电子邮件。Function收到警报消息后将被触发进而调整服务器的大小。
GitHub上的Oracle Functions样本存储库中提供了许多方法,模式,用例包。

作者简介
郭钧,甲骨文云计算平台首席咨询顾问。专注于甲骨文云计算相关产品,为电信、金融、交通、制造等行业提供云计算解决方案。具有超过15年的咨询服务经验。您可以通过jun.guo@oracle.com与他联系。
扫描二维码或点击阅读原文
快速预约精选云解决方案演示






