无服务器的十大属性


无服务器计算或函数即服务(FaaS)正在不断,亚马逊正在通过将Lambda扩展到边缘设备和内容分发网络来推动创新。 IBM,  Microsoft和Google在公共云中拥有自己的FaaS产品,有超过六个开源无服务器项目正在引起开发人员的注意。预计今年将出现这一细分市场中出现的新平台。
随着无服务器的所有兴奋和炒作,了解真正定义平台的内容非常重要。这是尝试突出无服务器计算平台的关键属性。对于客户而言,它可作为选择正确产品的清单,同时帮助平台供应商优化其产品。

1.多语言平台
FaaS的最大好处是选择最适合特定任务的品种语言和运行时。每个函数都可以用不同的语言编写,但对同一个应用程序有所贡献。尽管  JavaScript似乎是Serverless的最低标准,但支持其他语言非常重要。
AWS Lambda以JavaScript开始,但  最终添加了对Python,Java和C#的支持。 Azure Functions支持所有流行语言,包括BASH脚本语言。通过Docker集成,一些提供商将支持BYOI(自带图像),支持遗留代码和二进制文件。IBM OpenWhisk就是这种FaaS的一个例子。Polyglot是客户应该考虑的FaaS的一个重要方面。

2.支持同步和异步调用
在FaaS中部署的函数可以是同步的或异步的。某类app需要立即响应,而其他应用程序可能更喜欢异步调用。例如,传感器生成的数据需要立即处理和分析,而上传到对象存储的图像可以通过批处理转换为缩略图。
在FaaS中运行app类似于飞行无人机。
无论函数的样式如何,FaaS平台都应支持同步和异步调用。当异步触发函数时,平台返回可用于轮询状态的标识符。IBM OpenWhisk支持这种模式,其中每个函数都被视为异步,除非调用包含阻塞请求。
了解平台支持的并发调用次数也很重要。

3. API网关集成
再怎么强调与无服务器平台集成的API网关的价值都不过分。虽然在无服务器环境中部署的函数通常由外部事件源(如流处理器和数据库)触发,但需要点亮函数的API网关,网关添加了将标准HTTP谓词映射到各个函数的逻辑路由。
例如,可能有四个不同的函数负责数据库上的CRUD操作,这些函数映射到GET,PUT,POST,DELETE动词。这立即为开发人员带来了熟悉的API外观。API的消费者可能甚至没有意识到他们正在处理无服务器平台。
AWS Lambda的采用仅在引入Amazon API Gateway之后才会飙升。致命的组合产生了一个强大的平台,可以实现许多有趣的用例。
客户应仔细评估无服务器平台是否与API网关良好集成。

4.开发人员生产力
今天开发人员使用的大多数IDE都不是为现代DevOps进程设计的  。源代码控制系统,构建自动化,CI / CD和A / B测试的支持来自插件和第三方附加组件。传统IDE供应商需要很长时间才能支持FaaS。最近,微软宣布支持  Visual Studio中的Azure功能。AWS还为Visual Studio提供了一个插件,以便在Lambda中开发和部署C#函数。但对于其他语言和框架,可用的选择并不多。

5.支持DevOps和工具
有一种误解,FaaS神奇地减少了对DevOps和工具的需求。无服务器平台应与源代码控制系统紧密集成,并构建自动化工具。它们应该支持自动化和可重复的部署模式。亚马逊再次引入  无服务器应用程序模型(SAM),用于声明包括AWS Lambda资源在内的整个堆栈。这些模板可以与git集成以实现一致的版本控制。Microsoft还支持通过ARM部署Azure功能。Google在部署管理器中包含云功能之前还有很长的路要走。
IDE支持和与现有DevOps管道的集成是选择FaaS平台时要考虑的主要因素。
Serverless Inc正在构建工具,用于跨多个平台自动部署FaaS应用程序。目前,在测试版中,该产品旨在成为开发基于FaaS的微服务的事实上的框架。

6.响应能力和表现
响应能力在设计基于FaaS的微服务应用程序方面发挥着关键作用。设计不良的平台将引入启动延迟并延迟调用过程,这对最终用户来说是显而易见的。轻量级的解释语言(如JavaScript和Python)的响应速度比Java和.NET快。如果每次调用之间存在相当大的差距,则延迟变得明显。保持函数“温暖”的一个技巧是在循环中调用它。但对于许多客户来说,这不是理想的解决方案。
一些新兴FaaS平台对Docker容器的使用令人担忧。对函数的每个请求都将导致创建一个新容器,这将导致显着的延迟。虽然与VM相比容器更快,但它们仍然不是FaaS的部署单位。我们需要一个比容器更好的执行环境来实现FaaS。
在部署微服务解决方案之前,客户必须对每种语言和运行时的周转窗口进行基准测试。

7.记录和监控
在FaaS中运行应用程序类似于飞行无人机或无人驾驶飞机。两者都可以控制的唯一方法是通过一个显示当前状态的强大仪表板。FaaS平台应该对日志记录和监控提供广泛的支持。写入stdout和stderr的所有内容都应记录到不同的流中。这对于了解应用程序的当前运行状况和调试各个功能至关重要。监视工具应提供有关每个函数的成功调用,不成功调用,调用时间,响应时间,内存消耗和CPU利用率的见解。
虽然FaaS定位为NoOps平台,但DevOps团队大量使用日志记录和监控功能。

8. REST端点和自动化
与大多数基于云的交付模型一样,FaaS必须完全自动化。只有当平台支持用于执行通过门户或CLI完成的所有操作的API时,才可以执行此操作。此功能使开发人员和操作员能够有效地自动化部署和管理微服务的工作流程。
例如,CI / CD系统可以利用FaaS的REST API自动推送最新版本。此方案可以进一步扩展,以自动化在FaaS中实施A / B测试环境。

9.支持长期运行的作业和批处理
成熟的无服务器平台内置了对长期运行的预定作业的支持。可以定期调用FaaS中部署的功能以在ETL作业中执行。FaaS平台可能支持相同的cron概念  来安排工作。
此功能进一步扩展到支持批处理。例如,上传到对象存储桶的大量高分辨率图像可以由功能一次处理。这些方案与异步调用模式不同。

10.可扩展性和集成
无服务器平台的真正价值在于广泛的集成和可扩展性。例如,该平台必须支持各种安全方案,包括  oAuth和基于LDAP的自定义身份验证。它应该支持开箱即用的HTTPS端点以实现安全传输。
该平台应具有足够的挂钩,以便与各种事件源轻松集成。AWS Lambda等专有平台仅支持与S3,  Kinesis和  DynamoDB等服务的集成  。开源平台应该使数据库供应商和其他平台公司能够轻松支持FaaS。 OpenWhisk的Feed就是这种集成的一个例子。