这个世界每天都在发生新的变化,无论你是否觉察到,它总是无声无息的发生着。技术生态也是一样,就像光阴,不会因为我们而驻留,从早期的 Cloud/Virtualization、IaaS、PaaS、CaaS 以及到当前比较火热的 Serverless ,无一不是基于业务发展的需要。
据相关报道,2019 年,Serverless 被 Gartner 称为最有潜力的云计算技术发展方向,并被赋予是必然性的发展趋势。Serverless 从底层开始变革计算资源的形态,为软件架构设计与应用服务部署带来了新的设计理念。
同时,随着 AWS Lambda 和 Fargate 等服务的日益普及和市场落地,无服务技术在越来越多的公司技术生态栈中受到更多的关注。无服务器的应用已成为迎接 Devops 公司独特需求的福音和理想的最佳选择。毕竟,借助无服务器技术可以帮助各大公司或厂商扩展其基于云的架构。据 2019 年 Forrester 报告称,49% 的公司正在使用或计划在未来12个月内使用无服务器架构。
起初,传统的三层基础架构的物理和软件组件是成立,维护和管理的昂贵。对于开发人员来说,对应用程序的简单修改应该变成一个广泛耗时的项目,以确保每一层都有一切都会在每个级别工作。无服务器计算有望改变所有这些。通过使用 AWS Lambda 等无服务器基础架构服务,从开发人员的角度来看,需要维护物理基础架构和系统软件的需要。无服务器架构是高度可扩展的,提供高性能,并允许我们仅为我们的应用程序实际消耗的资源支付。可能在某一瞬间,我们的代码效率与运行它的成本之间存在直接,线性关系。运行速度越快,我们的支付越少。
从本质上而言,无服务器计算是一种基于云的应用程序架构,应用程序的基础架构和支持服务层完全从软件层中抽象出来。
简单地说,无服务器架构是一个事件和请求驱动的技术解决方案,允许开发人员在云中创建可操作的工作环境,其中具有平滑编码流所需的所有必要的计算资源。此框架尤其是当时间是一个问题时,分配的任务是非常资格密集的。此外,在选择无服务器的服务中为简化应用程序开发过程中,我们可以大大提高其他相关联业务优化举措 - 如 Devops 和 Agile 实践。
接下来,我们先来了解下基于传统架构与无服务器架构的相关特性对比,具体如下示意图所示。
基于上述的对比,我们可以得知,一方面,这两种架构具有相似的功能性质,即,它们可以最大限度地减少操作成本以及应用部署周期,处理有效的开发要求,并优化日常时间和资源敏感的任务。另一方面,微服务和无服务器型号之间存在一些明显的差异。
从微服务本质来看,其采用的是一种基于轻量级、较小类型的 SOA 架构模型,应用程序可以完全访问云端服务器上托管的相关库,并允许它们与多个协议和API一起部署并进行各种协议类型的交互,例如 JSON、RESTful、AMQP、SOAP等等。通常而言,目前应用成熟的微服务架构通过软件可执行程序包等数据集装箱,如 Docker,所有必要的数据都随着开发人员访问给定 API 而被拆卸。
而对于无服务器架构而言,其更是为广大开发人员的日常工作带来福音。因为它提供了按需执行基于云的工作环境的操作。这意味着只有在某个事件设置时才触发无服务器函数。完成此操作,根据用户具有输入的命令执行一系列操作。然后,无服务器平台应用一组预处理算法和规则来处理计算并提出可操作的结果。正如 Gartner 所言:“Serverless architectures enable developers to focus on what they should be doing — writing code and optimizing application design — making way for business agility”
通常,任何计算机程序都需要硬件运行,所以它们确实在服务器上运行。在一个真正无服务的范例中,程序代码在由第三方托管和管理的基础架构上运行 - 通常是云服务 - 这不仅要处理配置,缩放,负载平衡和保护基础架构,还可以安装和管理操作系统,修补程序,代码库和所有必要的支持服务。就用户而言,随着应用程序负载的增加或减少,无服务器后端将自动扩展和加载平衡,同时保持在线应用程序。用户只需要支付运行应用程序所消耗的资源。基于此种场景,至少这使得具有大大降低的开发周期和低运营成本的承诺。这就是为什么无服务器在今天的IT世界中是一个热门的流行语。
在本文中,我们将聚焦以 Lambda 作为无服务器计算服务的示例,因为我认为它目前是最成熟的解决方案。当然,除此之外,目前市面上还有其他值得研究的解决方案,包括Azure 函数,Google 云功能,IBM Open Whisk 和 Auth0 WebTask。
无服务器工作原理
作为由预配置事件驱动的 Snaptorless 作为开发模型,利用许多分布式基于云的服务来简化软件部署工作流程。通常,无服务器体现了两个互补的服务模型:
1、作为服务的后端(BAAS)
2、作为服务的功能(FAAS)
让我们深入研究他们的一些特殊功能。因此,BAAS 是关于利用第三方多租户架构功能,以增强我们自己的应用部署和交付效率。它通常作为 SDK 或 API 网关提供的共同特征,并且只在云中执行所有所需的操作,并且通常被称为我们的遗留内部基础架构或代码数据。该解决方案享有真正快速的开发周期,并在 BAAS 提供商的肩部对软件和基础设施维护提供全部责任。更重要的是,它的能力几乎是无穷无尽的,这使得 App 开发人员能够扩展 Deployment 流程。
例如,FAAS 平台,例如 AWS Lambda 是事件驱动开发架构的类型,可确保使用每次使用付费型号并仅当用户预定的某些功能或事件被用于操作时触发触发。用于激活 FAAS 函数的常见触发器是预定的事件,文件上传,新提交到存储库,电子邮件,数据库更新,HTTP API 调用等。在进行某些特定场景时,BAAS 和 FAAS 模型可以帮助开发人员处理复杂的资源密集型任务,涉及托管我们的数据,基础架构以及业务逻辑元素。如此,无服务器包括这两种方法,从而使用户具有广泛的功能益处。
那么,针对无服务器,其基于何种设计呢?我们以 AWS 设计理念进行简要解析,具体:
1、计算服务进行代码执行
无服务器使用诸如 Lambda,Azure 函数,Auth0 WebTask 或 Google Cloud 函数的无服务器计算服务来执行代码。不要运行或管理我们自己的任何服务器,VM 或 Container 容器。
2、事件驱动管道
在整个架构体系中,创建基于推送的事件驱动的管道,以执行复杂的计算和任务。使用无服务器计算服务来协调不同服务之间的操作,并尝试以创建事件驱动的管道的方式构建。尽可能避免轮询或手动干预。
3、写入单一的无状态功能
此架构风格遵循单一责任原则(SRP),只有单一责任的写作。此类功能更易于考虑,测试和调试。我们可以在每个功能周围构建微服务,但应根据要求和上下文决定适当的粒度水平。粒度服务,专注于具体行动,往往是一个良好的赌注。
4、强大的前端
基于此模型,将尽可能多的逻辑移动至前端,使其更加智能。所建立的前端应该能够直接与服务进行交互,以限制无服务器功能的数量。当然,将有可能无法直接与服务通信的实例,可能有隐私或安全原因。在这些实例中,我们可以借助无服务器函数来执行调用。
5、拥抱多元化
在基于此种架构框架下,我们通常可以尝试减少使用的自定义代码的数量,而是利用其他人所建造好的服务,并基于当前环境的综合评估,以决策其是否适合我们的当前所需。
最后,我们来了解下基于 Serverless 架构或者技术生态,其主要应用于在什么样的场景下,来充分发挥其独特优势呢?
基于 Serverless 架构生态所衍生的一切产品以及应用,均是完全依托于云而构建的,是典型且完全的云原生的架构、产品或应用。Serverless 产品所具备的产品特性、技术、费用等优势,将成为新一代云产品的发展方向;而基于 Serverless 架构推进完成开发的应用或架构,将充分享受到云时代带来的强大助力,使得云计算能真正成为业务的助推器。故此,满足云化场景的业务需求,或多或少均可以在 Serverless 架构中发挥其独特优势。
最典型的场景,莫过于“物联网”领域。基于 Serverless 架构,物联网设备所采集的数据信息将可以作为云函数的触发事件,从而实现数据的实时处理、分析及应用。同时,伴随着物联网设备计算能力的进一步提升,云函数作为最小粒度的计算单元,有机会被调度到设备端运行,以实现边缘(云)计算,从而达到「端 - 云」联合的 Serverless 架构。除此之外,基于云函数和 API 网关及 HTTP 触发器,可以对外提供 URL 访问地址,成为 Web、小程序、或移动应用等的后端服务。基于 Serverless 架构既可以直接用于构建后台来服务应用,也可以通过类似 BFF 模式,构建中台和应用间的桥梁。当然,除上述所述的场景外,也有其他的场景基于 Serverless 架构发挥其潜在优势,比如,消息处理结果、网络存储及其他关联服务组件等等。
Serverless — 基于其云化的产品,即 “云函数”,作为云虚拟机、容器技术之后的下一代计算形态代表,将引领云计算生态体系新的浪潮。围绕着云函数而建设的产品能力、工具、生态、以及应用开发,也将引来新的一轮发展及竞争。随着无服务器的产品和生态逐渐成熟,其将必然逐步承载起企业的核心业务。
以上为基于 Serverless 架构生态的相关解析,本文到此为止,大家有任何问题或建议,可以随时留言、沟通。