选型:如何选择无服务平台重要功能和监控?
随着各种无服务器平台的发展,选型时需要注意哪些重要事项?该如何斟酌无服务器平台的重要功能和监控的注意事项。本文讨论选型时下火热的无服务器平台的重要考虑因素,可从私有云提供商和自主托管的开源解决方案两个方面考虑。
开源
OpenFaaS,Kubeless,Fn,OpenWhisk等等,它们都是目前热门的无服务架构解决方案。大多数开源产品都在Kubernetes上运行。它们可以运行在云中的Kubernetes服务(KaaS)或你的内部Kubernetes集群上。如果部署在内部的集群上,运行无服务器的平台,看上去会不会有点矛盾?
所有这些开源项目仍处于早期阶段。目前还没有特别明显的区分出哪个解决方案最受欢迎。
对这些开源平台的运行时(runtime)支持,包含广泛的流行语言以及构建自定义运行时的能力。每个功能通常部署为Docker容器。只要该容器符合接口要求,它就会运行。
对于所有这些无服务器平台,可观察性至关重要,因为它们在已经非常复杂的平台Kubernetes之上增加了另一层复杂性。无服务器平台和Kubernetes的顺利运行对托管功能的顺利运行至关重要。其中一些项目已经考虑了可观察性,并提供了Prometheus度量端点。Fn还包括Zipkin和Jaeger的Open Tracing实现。
云提供商
AWS Lambda,Google Cloud Functions,微软Azure Function Apps,最近IBM已经通过托管版本的OpenWhisk进入了这个领域。其中AWS Lambda时间最长,是最成熟的产品;它已经在运行亚马逊Alexa服务的重要部分。
所有这些托管产品都提供了与云中托管的功能相同的基本功能,在不使用它们时不需要任何费用,并且在执行时按微秒计费。所有平台都提供一个Web用户界面和CLI工具来管理这些功能。可以将触发功能引入云平台的其他服务,AWS拥有目前最丰富的可用服务。
所有平台都提供基本的监控和日志汇总功能。AWS Lambda是利用X-Ray提供可观察性的领导者,它提供跨各种AWS服务的端到端跟踪。Google的Stackdriver追踪功能目前仅可用作预览版本,并且尚不支持自动追踪无服务器功能。微软Azure和IBM OpenWhisk不提供任何跟踪功能。
运行异构服务
有了如此多的无服务器平台可供选择,问题是哪一个最适合你的需求?好消息是你不必做出选择。无服务器项目提供了用于管理功能的通用工具和用于将事件映射到功能的事件网关。
管理工具
使用一个定义文件和一个命令行工具,可以将无服务器功能部署到这些提供程序支持的任何语言运行时的许多提供程序中。这种自动化水平使得从一个供应商到另一个供应商的功能不那么痛苦。但是,函数并不是真正的可移植的,因为目前没有任何函数入口点标准,返回数据或者在运行时可用的库。
事件网关
虽然每个云提供商都有自己的API网关,但它们通常不会为多种提供商解决方案提供多少便利。无服务器事件网关提供了供应商不可知的解决方案,既可以作为服务提供,也可以作为Docker镜像在你想要的位置运行。由于此API网关与任何供应商无关,因此可以接收来自任何提供商或外部来源的事件,并路由到任何其他提供商或外部目的地。
图:无服务器网关流程。
利用第三方网关可以用最少的配置交换无服务器端点。
例如,客户端通过HTTP调用事件网关,事件最初路由到AWS Lambda并进行处理。通过简单的配置更改,可以将相同的客户端呼叫路由到Google Cloud Functions进行处理;客户端不需要重新配置。
无服务器的未来
它仍然是一个非常有前途的方向,有许多产品并没有真正的标准。将应用程序碎片化为分散功能确实为CI/CD和计算资源效率提供了优势,但代价是更高的复杂性和与平台绑定的风险。
开源产品的开发仍处于早期阶段,可靠性不符合生产标准。例如,我尝试使用提供的helm文件将一些项目部署到Google Kubernetes Engine,却只有一个项目成功部署。
无服务器监控
观察无服务器框架及其运行功能的性能对于生产环境至关重要。商业产品的领先者是亚马逊与CloudWatch和X-Ray。对于开源,领导者是Fn,因为它已经包括Prometheus指标和Jaeger/Zipkin跟踪。
将开源无服务器平台部署到Kubernetes会创建大量Deployment,Pod和Container组件。
上面的例子显示了一个托管的函数OpenFaaS。大多数开源平台的当前实现技术是为每个函数使用单独的Docker镜像,从而导致在Kubernetes上单独部署。
无服务器功能容器。
凭借Instana对Kubernetes集群监控的支持,所有这些部署都会自动检测和监控。随着通过这些平台的追踪标准的发展,Instana将采用它们来提供全自动分布式追踪。