您还未登录! 登录 | 注册 | 帮助  

您的位置: 首页 > 软件开发专栏 > 开发技术 > 正文

重新思考使用无服务器构建软件的方式

发表于:2018-10-24 作者:佚名 来源:今日头条

软件构建的方式不断变化,以满足持续加快进入市场和跟上竞争的压力。软件开发行业从瀑布到敏捷,从敏捷到DevOps,从DevOps到DevSecOps,从单片应用程序到微服务和容器。今天,一种新方法正在进入竞技场并再次转变范式。无服务器旨在通过运营工作来充分利用对速度的需求。

“无服务器已经在市场化方面改变了游戏,并且已经压缩了人们从不想做的许多步骤,现在并不是真的必须这样做,”Tim Wagner,总经理AWS Lambda和亚马逊API网关在接受SD Times采访时表示。

亚马逊将无服务器描述为“在不考虑服务器的情况下构建和运行应用程序和服务的方法”。无服务器应用程序不需要您配置,扩展和管理任何服务器。您可以为几乎任何类型的应用程序或后端服务构建[无服务器解决方案],并为您处理以高可用性运行和扩展应用程序所需的一切,“该公司在其网站上写道。

云原生计算基金会(CNCF)及其无服务器工作组将无服务器定义为“构建和运行不需要服务器管理的应用程序的概念”。它描述了一个更细粒度的部署模型,其中捆绑为一个或多个功能的应用程序被上载到平台,然后执行,缩放和计费以响应当前所需的确切需求。

尽管名称如此,CNCF表示无服务器并不意味着开发人员不再需要服务器来托管和运行代码,这也并不意味着不再需要运营团队。“相反,它指的是无服务器计算的消费者不再需要在服务器配置,维护,更新,扩展和容量规划上花费时间和资源的想法。相反,所有这些任务和功能都由无服务器平台处理,并完全从开发人员和IT /运营团队中抽象出来,“CNCF 写道。这使团队可以担心他们的代码和应用程​​序业务逻辑和操作工程师更关注关键业务任务。

Wagner解释说这是无服务器的主要好处,因为大多数公司都不从事管理或配置服务器的业务。通过能够抽象出操作任务,容量规划,安全修补和监控,企业可以专注于为客户提供重要的价值。然而,瓦格纳表示虽然无服务器无疑会减轻运营任务,但并不能完全取消运营团队。应用程序和应用程序逻辑仍然需要监视和可观察性。“无服务器的机队部分消失了,坦率地说,这对于运营团队或DevOps团队来说并不是一件令人高兴的事情。现在,他们将活动重点放在业务逻辑上,这对公司来说真正重要,“他说。

如何成功过渡到无服务器

无论是无服务器,您听到的第一件事就是节省成本。无服务器可以降低运营成本,降低开发和扩展成本,因为您可以外包工作,只需支付所需的计算费用。

“它允许以更低的成本构建应用程序,因此,企业能够花更多的时间来获得他们想要的应用程序。应用程序开发软件公司Progress的工程高级主管Mike Salinger说,他们可以将更多的时间用于商业价值和用户体验,而不是过去的传统。

然而,团队的无服务器解决方案提供商Stackery的首席执行官Nate Taggart表示,节省成本的好处有点像红鲱鱼。无服务器的主要好处是速度。

“世界上每个工程团队都在寻找方法来提高他们创造和发布业务价值的速度,”Taggart说。

Velocity是无服务器的主要优点,但是当您拥有多个功能并尝试将大型单片旧应用程序转换为无服务器时,实现速度变得困难。无服务器,在大多数情况下,进入门槛较低。根据Taggart的说法,单个开发人员很容易启动并运行一个功能,但当您尝试将无服务器用作团队或专业设置的一部分时,它变得更加困难。

为了在应用程序中成功部署无服务器,Taggart解释说团队需要利用微服务模式。微服务是一种持续的趋势,组织一直在利用他们的巨型单片应用程序并将其分解为不同的服务。“你不能只是采取整个单片应用程序,并提升并转移到无服务器。它不可互换。如果你有一个很大的单片应用程序,你可能正在使用虚拟机和容器,所以过渡到无服务器会变得非常棘手。我们认为微服务是无服务器的踏脚石之一。“他说。

在将单片应用程序转换为无服务器时,亚马逊的Wagner建议将其整合。整个应用程序不必转移到无服务器。他解释说,最重要的是从服务器上获益,并转换这些部分以优化成本和业务成果。根据Wagner的说法,大多数企业已经拥有某种程度上混合的系统,因此您无需在无服务器,容器和微服务之间做出决定,您可以将计算范例与您的利益结合起来。

此外,专业工程团队转向无服务器需要提供一致且可靠的环境。为了做到这一点,Taggart说组织需要制定全公司范围的标准。

“作为一个组织,您希望确保修改或发布应用程序的人以通用的方式执行此操作,以便您可以提高可靠性并避免'它在我的笔记本电脑上工作'问题。当一个开发人员发布无服务器应用程序时,就会出现一种默认的一致性,“他说。“当团队正在开发无服务器应用程序,并且您涉及多个开发人员时,一致性和标准化变得非常重要。”

在基本级别上,通过集中构建过程,标准检测,回滚应用程序的通用方法以及对体系结构和共享依赖项的可见性来实现一致性和可靠性。Taggart解释说,更高级的方法包括集中管理安全密钥,访问角色和策略以及部署环境。

亚马逊的Wagner补充说,限制可以调用功能的人员,限制权限和访问权限以确保应用程序的安全性非常重要。

根据Progress'Salinger的说法,将应用程序转换为无服务器的最佳实践是以一种应用程序无状态的方式工作。“无状态应用程序的完成方式使您的组件可以随时扩展和缩小。你必须确保你的应用程序不依赖于特定的状态,“他说。

另一个设计原则是首先开发您的业务逻辑和用户体验。塞林格指出,一个常见的陷阱是开发人员考虑构建无服务器应用程序,而不是考虑构建应用程序并以一种可以轻松扩展的方式运行功能。

“重点关注用户体验和应用程序的价值,而不必担心所有可重复且对开发人员及其应用程序而言价值较低的副本,”塞林格说。

解决无服务器安全问题

无源服务器仍然是一种“不成熟”的技术,这意味着无服务器安全性更加不成熟,开源安全公司Snyk的首席执行官Guy Podjarny表示。

“平台本身,例如Lambda和Azure Functions,非常安全,但是用于保护无服务器应用程序本身的工具和最佳实践都缺乏并且很难被采用,”Podjarny说。

无服务器解决方案提供商Protego Labs的首席技术官Hillel Solow表示,虽然无服务器无法从根本上改变安全性,但有些事情本身就变得非常困难。Solow表示,无服务器的最大弱点包括不必要的权限,易受攻击的代码和错误的配置。

此外,Red Hat的产品管理高级总监Rich Sharples表示旧的应用程序安全风险再次成为新的无服务器风险。这些风险包括功能事件数据注入,破坏的身份验证,不安全的无服务器部署配置以及功能监视和日志记录不足。

Solow解释说,无服务器安全性并不复杂。例如,severless要求团队将平台,操作系统和运行时的所有权转交给云提供商,如亚马逊,微软和谷歌。“云提供商几乎总是会更好地修补和保护服务,所以你不必担心你的团队处理这些事情,”他说。

当团队开始考虑如何确保他们的应用程序只执行应该执行的操作时,就会出现挑战。Solow解释了您放置安全性的位置以及您如何实施安全性必须改变。

在Protego Labs最近的一份报告中,该公司发现98%的无服务器功能存在风险,16%被认为是严重的。“当我们分析函数时,我们为每个函数分配风险评分。这是基于所发现的姿势弱点,不仅是因素的弱点,而且还包括其发生的背景,“Solow解释道。“在实时应用程序中扫描了成千上万的功能后,我们发现大多数无服务器应用程序根本没有被安全地部署,因为它们需要将风险降至最低。”

根据Podjarny的说法,无服务器可以改变安全优先级并将应用程序拆分成许多小块。“未修补的服务器和拒绝服务攻击等威胁在移动到平台时几乎被消除,极大地改善了大门外的安全状况。这一现实将攻击者的注意力从服务器转移到应用程序,因此应用程序安全性的所有方面都变得越来越重要,“他说。“每件作品都会产生一个需要保护的攻击面,为链中的薄弱环节创造了数百倍的机会。此外,由于应用程序如此分散,因此它们很难跟踪应用程序范围内的活动,因为它们在功能之间反弹,为跨功能交互中的安全漏洞提供了机会。“

Red Hat的Sharples补充说,安全团队应该考虑无服务器环境中的数据,考虑最少权限控制和细粒度授权,实践良好的软件卫生,并记住数据访问仍然是他们的责任

为了成功解决无服务器安全问题,Podjarny建议良好的应用程序安全实践应该由开发团队拥有和运营,并且应该伴随着大量的自动化。此外,Protego Labs的Solow建议采用更加无服务器的安全模型,该模型在资源所在的地方使用安全性。

“好消息是这些都是可以解决的问题,”索洛说。“无服务器应用程序使您可以配置各个功能的安全权限。这使您可以实现比传统应用程序更精细的控制,从而在攻击者能够访问时显着降低风险。无服务器应用程序需要做出更多的最佳策略决策,如果没有合适的工具,这可能会带来挑战,但如果准确完成,这些决策可以使无服务器应用程序比非无服务器模拟程序更安全。“

Solow建议的其他安全最佳实践包括:

  • 映射您的应用程序以查看完整图片并了解潜在风险
  • 在功能级别应用周边安全性
  • 为每个功能制定最小角色
  • 保护应用程序依赖性
  • 通过应用代码审查和监控代码和配置,对不良代码保持警惕
  • 将服务配置测试添加到CI / CD
  • 观察信息流以确保它到达正确的位置
  • 减少拒绝服务和拒绝钱包,黑客可以通过“压倒”攻击您的应用程序来攻击您的应用程序,从而增加费用并考虑限制功能实例生命周期的策略

无服务器的顶级用例

根据CNCF,有10个无服务器技术的最佳用例

  • 多媒体处理:执行转换过程以响应文件上载的功能的实现
  • 数据库更改或更改数据捕获:审核或确保更改符合质量标准
  • 物联网传感器输入消息:响应消息和缩放的能力
  • 大规模流处理:在可能无限的消息流中处理数据
  • 聊天机器人:自动扩​​展以满足高峰需求
  • 批处理作业/计划任务:需要强大并行计算,IO或网络访问的作业
  • HTTP REST API和Web应用程序:传统的请求和响应工作负载
  • 移动后端:在BaaS API之上构建REST API后端工作负载的能力
  • 业务逻辑:执行一系列步骤的微服务工作负载的编排
  • 持续集成管道:无需预配置主机的能力

无服务器的三次革命

根据云计算公司DigitalOcean的最新报告,虽然无服务器正在获得牵引力,但大多数开发人员仍然没有清楚地了解它是什么。无服务器解决方案提供商Protego Labs的首席技术官Hillel Solow解释说,无服务器的含义可能令人困惑,因为它有三个不同的核心价值:无服务器基础架构,无服务器架构和无服务器运营。

Solow解释说,无服务器基础设施是指企业如何消费和支付云资源。“你从云提供商租用什么?这是关于'规模为零','不支付闲置,'真正的自动扩展'等。无服务器基础设施革命提议停止租赁机器,并开始支付实际的资源消耗,“他写道在一篇文章中。

无服务器架构着眼于“如何构建软件以实现水平扩展。”作为其中的一部分,Solow说有一些关键的设计原则:

  • 将无服务器存储设置为文件或数据存储,以便可以根据应用程序的需要进行扩展
  • 将所有应用程序状态移动到少量无服务器存储和数据库
  • 确保计算由外部事件(如用户输入和API调用)或内部事件(如基于时间的事件或存储触发器)事件驱动
  • 将计算机组织成无状态微服务,负责应用程序逻辑的不同部分

无服务器操作定义了您部署和操作软件的方式。Solow表示,运营部门专门研究如何协调,部署和监控云原生应用程序。“云原生意味着云平台是新的操作系统,”他说。“您正在编写应用程序以在此计算机上运行AWS。正如大多数开发人员没有充分考虑确切的底层处理器体系结构,以及他们运行多少个超线程内核,当你使用本机云时,你真的想停止思考这些机器而你想开始考虑服务。这就是你为Android或Windows编写软件的方式,这就是你应该如何为云编写软件。“

此外,Red Hat的产品管理高级主管Rich Sharples表示,无服务器通常被称为功能即服务或FaaS,因为它是一种更容易思考它的方式。FaaS实际上是无服务器这一更广泛术语的一个子集,但它是一个重要的部分,因为它是“将所有这些服务连接在一起的粘合剂”,他解释道。

“FaaS是一种编程模型,它真正说明了具有小型可部署单元的能力,以及能够将其分离和隔离以及将其与某些操作部分分离的能力,”总经理Tim Wagner说道。适用于AWS Lambda和Amazon API Gateway。“当我想到无服务器时,我通常意味着一个由公共云供应商运营的功能模型,并提供无限量的规模和自动化管理的感知。”

无服务器工具和框架

Apache OpenWhisk:Apache OpenWhisk是一个开源的无服务器云平台,旨在执行响应事件的功能。它目前正在Apache Software Foundation进行孵化。

AWS Lambda: AWS Lambda可能是市场上最早,最受欢迎的无服务器计算平台之一。功能包括使用自定义逻辑扩展其他AWS服务的能力,构建自定义后端服务的能力以及使用任何第三方库的能力。此外,亚马逊解释说,开发人员可以在零管理的情况下为任何类型的应用程序或后端服务运行代码。

Azure功能:由Azure开发,Azure Functions旨在为开发人员提供事件驱动的无服务器计算体验。它具有管理应用程序而非基础架构的能力,针对业务逻辑进行了优化,并使开发人员能够使用他们选择的编程语言创建功能。

CloudEvents:CloudEvents是一项持续的工作,旨在开发一种以通用方式描述事件数据的规范。“缺乏一种描述事件的通用方式意味着开发人员必须不断重新学习如何接收事件。这也限制了库,工具和基础设施的可能性,以帮助跨环境(如SDK,事件路由器或跟踪系统)交付事件数据。我们可以从事件数据中获得的可移植性和生产力总体上受到阻碍,“据该网站称。最终目标是最终向Cloud Native Computing Foundation提供规范。

云功能:Cloud Foundations是Google Cloud的事件驱动无服务器计算解决方案。主要功能包括无服务器管理,自动扩展能力,响应事件运行代码以及连接和扩展云服务。

Fission:Fission是一个开源的功能即服务无服务器框架,适用于Kubernetes,由Platform 9设计,它是一个混合云和容器编排提供商。Fission是作为AWS Lambda的替代品而构建的。据该公司称,Lambda在开发部署包的大小,内存量和并发函数执行数方面给开发人员带来了问题。Fission旨在让团队从云供应商锁定中解放出来。通过使用Kubernetes,Fission可以在Kubernetes运行的任何地方运行,并删除一些使用容器创建的“软件管道”。使用Fission,开发人员不必担心构建容器或管理Docker注册表。

IBM Cloud Functions: IBM提供基于Apache OpenWhisk的多语言功能即服务编程平台。它旨在在可扩展的无服务器环境中按需执行代码。功能包括访问OpenWhisk生态系统,加速应用程序开发,认知服务和使用付费的能力。

Kinvey: Progress Kinvey是一个无服务器的云平台,用于构建移动,Web和其他数字渠道的应用程序。该平台使开发人员无需考虑服务即可构建应用程序,因此他们可以专注于应用程序的价值,而无需担心基础架构,后端代码和扩展。