首先,serverless的概念并不代表该技术的实际状态。因为仍然有服务器,只是您不必购买、管理或维护它。您将所有服务器管理外包给其他人,从而在您的云基础架构中增加了一个抽象级别。对于开发人员而言,这意味着最终推动配置服务器后端和创建更友好的应用程序的能力。对于企业来说,它带来了更快的应用上市时间,并且专注于开发和部署应用,而不是如何管理服务器的后台配置。基本上,无服务器方法是由业务驱动的,由第三方处理您的技术问题,而用户自己专注于交付。现在,您可能会想:“我们已经将我们的基础架构放在云端,并且不拥有任何硬件。那么这与无服务器计算有何不同呢?”使用传统的云模型(通常称为Cloud1.0),只需将存储和网络移动到云中,但仍然可以通过虚拟机(VM)远程访问和监控它。无服务器方法将其提升到另一个层次。程序员选择编写代码的环境(Node.js.Python、C#等),上传代码文件,由系统自动部署。通过使用供应商自己的生态系统,您可以轻松描述这些服务如何通信以及它们可以访问数据的位置。这几乎是一种NoOps方法,其中大多数Ops外包给供应商。图:应用程序部署如何与云一起发展为了更深入地了解它的工作原理及其带来的好处,我们首先描述无服务器架构的一些定义特征。无服务器计算的另一个名称是功能即服务(FaaS),它指的是开发人员将代码组装成称为功能的构建块的方式。这与微服务非常相似,其中一大块代码被拆分成小的、可管理的元素,这些元素可以单独并行地扩展和更新。然而,FaaS通过进一步分解将其提升到一个新的水平。图:微服务与无服务器:相同的概念,不同的实现事件驱动编程您显然不希望您家中的摄像头全天候24/7记录街道上发生的一切。这就是为什么当我们不在家时,我们会使用可以激活的摄像头来检测可疑行为。无服务器架构的工作原理类似:就像运动传感器一样,它仅在被特定的预编程事件触发时才起作用。Serverless是无状态的,这意味着它只执行一个任务,不存储或重用请求。可扩展服务无服务器方法非常灵活,非常适合扩展应用程序。FaaS提供商在单独的容器中运行您的每个功能。这使您可以无限制地自动调整它们。这是无服务器和传统云的另一个区别。在这里你不必购买保留量的资源,你可以尽可能灵活。按调用计费在传统的云模型中,您需要始终准备好处理请求的服务器。无论实际使用的CPU时间和内存如何,持续的服务器可用性都会产生大量的每月后端成本。或者,无服务器提供商允许您为每个请求支付少量费用,这意味着您的费用仅基于您当月的流量。AWSLambda、MicrosoftAzureFunctions、GoogleCloudFunctions和IBMBluemixOpenWhisk等函数即服务供应商提供了类似的解决方案。在定价方面,他们的预算很容易:多达100万个请求是免费的,为您提供了一个很好的起点。差异主要在于社区支持和支持语言的可用性,这使得选择更加个性化。无服务器计算的好处在工程方面,无服务器的好处是显而易见的。这是一种简化的开发方法,可以消除复杂性并简化工程。但是业务方面呢?您如何让利益相关者相信FaaS是未来的发展方向?比传统云更便宜正如我们提到的,FaaS允许您为每个请求支付一小部分成本。如果您是一家初创公司,您几乎可以免费创建一个MVP并轻松进入市场,而无需为最少的流量处理大量账单。可扩展每个人都想打造下一个Uber,但您是否愿意冒险配置基础设施以防万一?使用无服务器,您不必做出选择,但您仍然可以为任何数量的增长做好准备。降低人力资源成本就像您不必在硬件上花费数百或数千美元一样,您可以停止向工程师支付维护费用。能够专注于用户体验使公司能够投入更多的时间和资源来开发和改进面向客户的功能。无服务器计算的缺点供应商锁定当您让供应商控制您的运营时,您必须遵守他们的规则。如果您已经在Lambda上进行了设置,那么将您的应用程序移植到Azure也不是一件容易的事。同样的问题涉及编程语言:目前只有Node.js和Python开发人员可以自由选择现有的无服务器选项。学习曲线尽管有全面的文档和社区资源,您可能很快就会发现FaaS工具的学习曲线很陡峭。此外,为了顺利迁移到无服务器,您可能希望将“整体”划分为微服务,这是另一个需要解决的复杂任务。这就是为什么最好从使用无服务器工具的经验丰富的专业人员那里获得帮助。不适合长期任务Lambda给你五分钟的时间来执行任务,如果需要更长的时间,你将不得不调用另一个函数。无服务器非常适合短实时或近实时流程,例如发送电子邮件。但是,长期的操作(比如上传视频文件)需要额外的FaaS功能,或者更合适的“服务器”架构。无服务器架构用例目前,大多数技术采用者都是初创公司,他们寻求平滑扩展和降低进入门槛的可能性。对于不连续运行但有安静期和高峰流量的应用程序,无服务器也是一种完美的方法。IoT应用程序的无服务器方法的实时响应特性非常适合IoT用例。激活上面已经提到的摄像头并对天气、温度或健康状况的变化做出反应的应用程序非常适合不会让您的服务24/7全天候闲置的无服务器用例。虚拟助手和聊天机器人期望即时响应,这就是无服务器数据处理速度更快的原因。随着你的应用从一百个用户增长到几千个用户,你的处理时间也应该保持不变,FaaS可以自动处理。图像丰富的应用程序为了保持良好的用户体验,开发人员必须为不同的屏幕尺寸(从台式机到平板电脑和智能手机)提供同一图像的多个版本。这显着减少了加载时间。然而,来自AWS和谷歌的工具会自动优化您的图像以满足任何需要,使其成为图像密集型应用程序的完美解决方案。敏捷和持续集成管道仅在触发特定事件时才运行代码的想法非常符合敏捷或持续集成原则。将代码分离成函数也有助于纠正错误和发送更新。无服务器是一种实现最大自动化和快速部署过程的整体友好方式。Serverless架构选型随着各种Serverless平台的发展,在选择Serverless平台时需要注意哪些重要的事情?如何权衡无服务器平台的重要特性和监控注意事项。开源的serverless架构OpenFaaS、Kubeless、Fn、OpenWhisk等,是目前比较流行的serverless架构方案。大多数开源产品都在Kubernetes上运行。它们可以在云中的Kubernetes即服务(KaaS)或您的内部Kubernetes集群上运行。部署在内部集群上运行serverless平台是不是有点矛盾?所有这些开源项目仍处于早期阶段。目前尚不清楚哪种解决方案最受欢迎。对这些开源平台的运行时支持,包括广泛的流行语言和构建自定义运行时的能力。每个功能通常部署为Docker容器。只要容器符合接口要求,它就会运行。对于所有这些无服务器平台,可观察性至关重要,因为它们在已经很复杂的平台Kubernetes之上增加了另一层复杂性。无服务器平台和Kubernetes的平稳运行对于托管功能的平稳运行至关重要。其中一些项目已经考虑到可观察性并提供Prometheus指标端点。Fn还包括Zipkin和Jaeger的OpenTracing实现。来自云提供商AWSLambda、GoogleCloudFunctions、MicrosoftAzureFunctionApps以及最近IBM的无服务器架构已通过托管版本的OpenWhisk进入该领域。其中,AWSLambda是运行时间最长、最成熟的产品;它已经运行了亚马逊Alexa服务的重要部分。所有这些托管产品都提供与云中托管产品相同的基本功能,不使用时无需付费,执行时按微秒计费。所有平台都提供Web用户界面和CLI工具来管理这些功能。可以将触发引入到云平台的其他服务中,AWS拥有当今最丰富的服务集。所有平台都提供基本的监控和日志聚合功能。AWSLambda是通过X-Ray提供可观察性的领导者,提供跨各种AWS服务的端到端跟踪。Google的Stackdriver跟踪功能目前仅作为预览版提供,尚不支持自动跟踪无服务器功能。MicrosoftAzure和IBMOpenWhisk不提供任何跟踪功能。运行异构服务有这么多无服务器平台可供选择,问题是哪一个最适合您的需求?好消息是您不必选择。无服务器项目提供了用于管理函数的通用工具和用于将事件映射到函数的事件网关。使用定义文件和命令行工具,管理工具可以将无服务器功能部署到许多提供者,以使用这些提供者支持的任何语言运行时。这种自动化水平使得将功能从一个供应商转移到另一个供应商变得不那么痛苦。然而,函数并不是真正可移植的,因为目前还没有函数入口点、返回数据或运行时可用库的标准。事件网关虽然每个云提供商都有自己的API网关,但它们通常不会为多提供商解决方案提供太多便利。ServerlessEventGateway提供了一种与供应商无关的解决方案,可以作为服务或作为在您需要的地方运行的Docker映像。由于此API网关对任何提供者都是不可知的,因此可以从任何提供者或外部源接收事件并将其路由到任何其他提供者或外部目的地。图:无服务器网关流程。利用第三方网关允许以最少的配置交换无服务器端点。例如,客户端通过HTTP调用事件网关,事件最初被路由到AWSLambda进行处理。通过简单的配置更改,可以将相同的客户端调用路由到GoogleCloudFunctions进行处理;客户端不需要重新配置。无服务器监控观察无服务器框架的性能及其运行功能对于生产环境至关重要。商业产品的领导者是亚马逊的CloudWatch和X-Ray。对于开源,领导者是Fn,因为它已经包括Prometheus指标和Jaeger/Zipkin跟踪。将开源的无服务器平台部署到Kubernetes会创建大量的Deployment、Pod和Container组件。上面的例子展示了一个托管函数OpenFaaS。大多数开源平台当前的实现技术是为每个功能使用单独的Docker镜像,从而导致在Kubernetes上单独部署。无服务器函数容器。借助Instana对Kubernetes集群监控的支持,所有这些部署都会被自动检测和监控。随着通过这些平台的追踪标准的发展,Instana将采用它们来提供完全自动化的分布式追踪。无服务器是未来吗?无服务器化不仅意味着技术变革,还意味着业务变革。对于许多在遗留基础设施上运行的公司来说,迁移将是痛苦的并且不符合成本效益。当您已经建立了工作流时,很难证明采用FaaS工具完全摆脱服务器管理是合理的。此外,无服务器还远未成为主流,尽管它正在朝着这个方向发展,而且速度非常快。作为一个非常有前途的方向,有很多产品没有真正的标准。将应用程序分割成离散的功能确实为CI/CD和计算资源效率提供了优势,但代价是更高的复杂性和绑定到平台的风险。开源产品的开发仍处于早期阶段,可靠性达不到生产标准。例如,我尝试使用提供的helm文件将一些项目部署到GoogleKubernetesEngine,但只有一个项目成功部署。Gartner预测,在2017年新兴技术的炒作周期中,serverless/FaaS将在未来2-5年内达到机器学习、VR和IoT等生产力水平。该技术已经可用,真正的挑战是确定可能用例的广度,并等待所有供应商提供更好的编程语言和功能支持。
