微软推出Azure Functions预览版,涉足无服务器应用领域行业资讯

2016-04-18    来源:InfoQ    编辑:佚名
在4月份举行的Build大会上,微软宣布了Azure Functions预览版,这是一个根据需求运行代码的服务。Azure Functions意味着微软已经进入日益流行的、由Amazon、Google、IBM等主导的事件驱动无服务

在4月份举行的Build大会上,微软宣布了Azure Functions预览版,这是一个根据需求运行代码的服务。Azure Functions意味着微软已经进入日益流行的、由Amazon、Google、IBM等主导的事件驱动无服务器计算领域。

Azure Functions让开发人员可以发布基于外部触发执行的代码,而不用考虑准备计算或存储资源。这些函数——使用C#、JavaScript、Bash、F#、PHP、PowerShell或PHP编写——通常表现为短期异步任务。在一篇有关预览版发布的博文中,微软将“数据处理”作为发布这类服务的一个重要原因。

“数据无所不在。它在云端,在本地,并越来越多地扩展到联网设备。组织正在努力发现那些数据的价值,要求他们的开发人员以高可扩展的解决方案作为回应,而方案的构建时间表被空前地压缩。这些方案通常需要开发人员实现按需或定时的批处理任务,以协调事务、获取和处理数据,或者实时响应事件。”

开发人员可以以多种方式触发Azure Functions,包括HTTP调用、修改Azure队列或Blob存储以及通过cron调度。微软指出,支持HTTP让Azure Functions成为软件即服务应用发送的“网勾(webhook)”消息的理想接收者。

微软为Azure Functions提供了两种托管选项:传统的“应用服务(App Service)”方案或新推出的“动态服务(Dynamic Service)”方案。这个选择会影响到扩展性和成本。在应用服务方案中,Azure Function运行在专用的虚拟机上,Function可能会同其他运行在用户账户下的应用共享服务器。如果选择了动态服务方案,那么Azure Function会跨多个应用实例并行运行,而且这些实例可以根据使用情况自动缩放。在这个方案中,用户只需为实例的执行时间付费,而应用服务方案的用户需要为托管的虚拟机付费,不管使用情况如何。

开发人员可以从起始模板或者从头开始创建这些单一用途的函数。微软提供了一个基于Web的开发环境,并且还提供了Git端点,允许开发人员使用GitHub、Bitbucket、Visual Studio Team Services、 Dropbox等进行本地开发及持续集成。这个基于Web的IDE提供了特定于语言的语法格式化、代码补全提示以及一些基本的测试工具。在函数的应用设置中,用户可以指定Azure Functions可以使用的内存量(最大1536MB),是否应用用户身份验证以及如何暴露服务元数据。

基于像应用服务和WebJobs这样的已有Azure服务,微软用90天构建出了Azure Functions。按照微软的说法,简洁是关键。他们引入了一个名为“绑定(bindings)”的特性,实现了Azure Function代码同数据源或目的地的分离。

“借助Functions绑定,开发人员可以通过他们的Function很轻松地同其他数据源和服务进行交互,而不必考虑数据如何流入及流出一个Function。绑定让类似向队列添加一条消息或者获取一个Blob的任务同向Function输出变量传递一个JSON或者从Function输入变量读取一个Blob一样简单。使用这项功能,开发人员需要对他们与之交互的底层服务有一点了解,以便后续可以简单地切换到一个不同的服务。”

微软并不是第一个引入无服务器计算模型的。虽然该服务听上去与传统的平台即服务(PaaS)产品有点类似,但微软声称,Azure Functions通过提供基于执行的计费和基于需要的实例缩放扩展了PaaS的概念。Azure Functions更像AWS Lambda、Google Cloud Functions、IBM Bluemix OpenWhisk、Auth0 WebTask这样的产品。

Azure Functions在许多方面都不同于AWS Lambda,包括一个开源的运行时、更广泛的语言支持及没有执行时间限制。技术专家兼AWS Lambda用户Tom Maiaroto在一篇博文中比较了这两个服务,他认为,“Azure Functions的底层结构与Lambda有很大的不同”。

“一个“应用服务”是一个容器或环境,可以运行一组Azure云函数。这与Lambda有很大的不同。实际上,这两个服务是截然不同的。

Lambdas是单独组织的,而ACF在逻辑上分组成“应用程序”。

...

Azure更像是[EC2 Container Service]Tasks和Lambda的混合。例如,你可以在应用服务上设置环境变量,然后在ACF中使用。AWS Lambda无法持久化环境变量,但ECS Tasks可以。

整个的容器架构不同。Lambdas会根据一个“冷请求(cold request)”准备一个全新的容器,并(从zip文件)部署代码。后续请求可以受益于容器重用,处理速度更快。不过,你需要了解的是,它没有提供持久化,而且,使用Node.js Lambdas时需要注意变量作用域,因为容器会被重用。

不过,ACF受冷/暖请求的影响较小。Azure仍会按需准备资源,但文件不会“冻结”到存储在某个地方的zip文件中。它们在Azure的WebJobs上运行。

...

如果启用,那么每个函数都会自动映射到一个HTTP端点。然而,使用Lambda,你必须分别配置API网关。API网关很好,但非常复杂耗时。此外,某些无服务器框架通过自动为Lambdas设置API来缓解这个痛点。微软在UX方面得分了,因为你需要配置的东西少很多。”

Azure Functions在预览期间是免费的,但之后微软会根据计算利用率和每百万请求收费。UX已经在GitHub上开源,WebJobs SDK也是。接下来,微软表示,他们将致力于支持更多的语言、本地开发选项及集成其他微软服务,如Azure服务总线。

来源:InfoQ

1
3