无服务器是一种下一代云原生开发模型,允许开发者构建应用程序和运行代码,无需担心服务器配置、管理和扩展。术语“无服务器”并不意味着没有服务器,而是反映服务器配置和管理已被抽象化(或隐藏)从最终用户。
在使用无服务器模型的情况下,开发团队可以专注于编写和交付代码,底层基础设施将根据需要自动扩展,允许开发者减少运营开销并加快上市时间。
无服务器架构意味着应用程序是利用一组完全托管、托管在云中的服务构建的。在无服务器架构中,第三方供应商,通常是云提供商,将负责根据应用程序的需求进行服务器配置和扩展,并仅根据您的使用情况向您收费。通常,当没有执行任何操作时,您无需支付任何费用。
在传统的架构中,开发团队必须担心启动虚拟机或购买运行应用程序所需的服务器,这需要 upfront 的高额成本,这有一些直接的缺点
只要您有实例,无论是否在使用,您都要为实例付费
服务器扩展通常是手动进行的 - 您需要关注使用情况并根据需要扩展或缩小实例
如果您需要扩展,它将是一个逐步函数到下一个层级 - 当您只需要短期内增加1%时,它可能比您需要的30%更大(并且更贵30%)
无服务器模型为开发者提供了更经济高效的方式来构建和运行应用程序,同时允许他们专注于业务逻辑。您无需花费时间担心管理服务器或提前规划实例层升级,只需编写代码,并让它在必要的规模下运行。
无服务器架构中最常见的形式之一是函数即服务(FaaS)。函数即服务是一种无服务器云计算形式,它使开发者能够在应用程序中构建、运行和管理业务逻辑,其中每个逻辑函数都是一个短暂的、独立的单元。函数是事件驱动的,这意味着当调用无服务器函数时,服务在容器中实例化它,按需运行并产生适当的输出。当没有更多需求时,容器将被销毁。
由于实例并非总是处于运行状态,FaaS可能会出现所谓的冷启动问题。如果一段时间内没有调用函数,则响应可能会增加额外的等待时间,以便设置实例。只要持续使用,基础设施就会保持运行,延迟会缩短。然而,如果在一段时间内函数未被使用,实例将被删除,下一次调用将会有冷启动。
FaaS通常被称为无服务器计算,尽管该术语也被更广泛地使用。AWS Lambda通常被认为在2014年首次将无服务器计算引入大众,因此许多开发者往往将无服务器计算视为与函数即服务(FaaS)同义。然而,现在有许多技术和服务符合无服务器模型 - 包括BaaS(后端即服务)解决方案、应用程序开发平台,甚至数据库。
FaaS允许您以无服务器方式运行代码,而后端即服务(BaaS)则使用无服务器执行模型运行应用程序的完整后端。后端即服务平台用无服务器、托管的后端服务替换了服务器端自管理组件,通常包括数据库管理、云存储、身份验证、推送通知、API等功能。在BaaS架构中,客户端连接到BaaS,BaaS连接到数据库(或可能内置一个)。在BaaS中,通常通过API或API网关调用无服务器函数。
通过使用如Google Firebase或AWS Amplify这样的无服务器BaaS平台,开发者可以构建Web和移动应用程序,无需担心任何幕后方面,而可以专注于前端。
某些后端即服务平台是完全无服务器的,基础设施和成本与需求精确匹配,而另一方面,其他平台可能即使在没有使用的情况下,也可能使用实例大小或按小时收费的概念。
与BaaS类似,还有一些前端应用程序开发平台,如Vercel和Netlify,它们运行在无服务器架构上。这些平台为开发者提供构建前端应用程序所需的一切,并使用无服务器函数提供后端以运行服务器端代码。这些平台通过将难以推理的函数转换为特定的REST或GraphQL API端点,专注于易用性,从而消除了用户部署和管理FaaS的需求。它们通常无需编排,并会自动与应用程序需求一起扩展;然而,开发者仍然需要将这些平台与数据库集成,以存储其应用程序数据。
无服务器计算和无服务器架构的益处现在也被扩展到了数据库领域,而“无服务器数据库”这一概念仍相对较新。[无服务器数据库]。在传统的云数据库服务[数据库即服务(DBaaS)]中,数据库由您完全托管和托管,并以特定的预配置实例大小和特定价格部署。云数据库的无服务器架构意味着您无需选择实例大小——相反,您只需设置数据库,随着数据大小和吞吐量的增加,它会相应地扩展——成本也会相应地增加。
与传统无服务器计算产品(如FaaS)相比,无服务器数据库仍需维护状态,以安全地存储您应用程序的数据,即使在没有流量到您的应用程序的情况下,您也可能需要支付少量数据存储费用。
无服务器和容器架构都可以通过允许开发人员将应用程序代码分解成更小的组件(或称为微服务)来减少基础设施开销,但是它们之间还是有显著差异。容器是应用程序代码及其依赖的暂时性包装,在隔离环境中运行,可以根据需要扩展或缩小其大小。
通常,管理容器的开发人员必须更新每个部署的配置和依赖项,并维护容器系统。而在无服务器服务方面,维护完全由供应商(云提供商或服务提供商)管理。容器架构可以通过使用容器编排平台(如Kubernetes)进行自动化,Kubernetes是一个用于自动化容器化应用程序部署、扩展和管理的开源系统。
一些开发人员可能会选择使用混合架构,将无服务器功能部署到容器中,以便获得更多控制,实际上,甚至有围绕这一模式构建的解决方案,如Google Cloud Run和AWS Fargate。这些平台允许用户在无服务器基础设施上运行容器,抽象化构建和托管容器化应用程序通常与底层基础设施管理相关联的任何内容。
无服务器计算在许多方面都优于传统的开发方法
缩短上市时间:无服务器架构通过消除您自己配置和管理基础设施的操作开销,可以帮助您更快地构建应用程序。由于没有基础设施要设置,也没有依赖其他团队,大多数无服务器服务允许您立即开始构建。
弹性扩展:使用无服务器解决方案,扩展由供应商处理,无需您进行任何工作。如果您出现意外的使用峰值,服务将自动扩展以满足需求,并在流量减慢时自动缩小,而不会对您的用户造成任何中断。
提高开发者生产力:当使用无服务器架构构建应用程序时,开发者可以专注于编写使应用程序与众不同的应用程序代码和业务逻辑,而不是花费时间在像扩展服务器这样的运营任务上。
成本效益:与您可能需要为未使用的资源(如CPU和RAM)付费的传统云平台相比,无服务器平台通常具有很高的成本效益。无服务器平台利用基于使用的模型,您只需为使用付费,您永远不会因为基础设施闲置而收费。请注意,具体定价因服务而异,因此您始终应确保了解定价模型,以避免费用迅速增加。
像许多开发方法一样,考虑无服务器方法是否适合您的应用程序和业务非常重要。一般来说,在以下任何情况下,您都应该考虑无服务器架构:
您不知道预期的负载规模
您不想为未使用的资源付费
您尽可能想避免基础设施管理
您的应用程序逻辑可以被分解成离散的函数
您想在无需管理基础设施的情况下托管整个应用程序后端
您需要在其他服务的流程中添加一小部分自定义功能
您想将大量边缘设备连接到后端(例如,移动设备或物联网设备)
实际上,这些场景适用于大多数现代应用程序。因此,如果您首先考虑无服务器选项,那么在什么情况下它可能不适用呢?如果您还没有采用云服务,或者出于监管原因需要托管自己的基础设施,显然无服务器架构不是一个好的选择。对于经历持续稳定流量、关键任务且需要低延迟,或具有严格的安全或合规性要求的应用程序,也可能不适合无服务器,可能更适合在开发人员有更多细粒度控制的专业云环境中运行。
一如既往,您应该仔细调查无服务器产品,以确认其满足您对延迟(即最小冷启动问题)、安全性等方面的要求。一般来说,大多数无服务器技术都内置了特定的开发模式,所以在您做出承诺之前,请确保您喜欢这种方式。
无服务器架构或无服务器计算可用于各种场景,但最常用于需求不频繁或不可预测波动的应用程序或事件驱动应用程序。一些最常见的无服务器应用场景包括:
无服务器技术的最常见用例之一是应用程序开发和测试。在构建和测试应用程序时,经常存在未知因素和空闲时期,此时为预先配置的基础设施付费可能没有意义。利用无服务器解决方案不仅可以节省成本,还可以消除入门障碍,使您能够快速开始并快速迭代,而无需运营开销。
随着无服务器解决方案的日益流行,越来越多的开发人员自然会寻求利用它们以更快的速度开发新的应用程序。
另一个常见用例,其中无服务器技术非常有价值,是构建事件驱动应用程序或微服务。事件驱动的微服务旨在实时响应用户操作或系统变化等事件,并通过触发器自动执行无服务器函数来实现。由于其本质,微服务可以受益于无服务器提供的即时、弹性可扩展性和仅在活动时付费的成本经济学。
CI/CD是一种通过将自动化引入应用程序开发生命周期的方法,从集成和测试阶段到交付和部署。
无服务器架构也可以用于自动化CI/CD管道中的许多阶段。例如,代码提交可以触发一个函数来创建构建,而拉取请求可以触发自动测试。
边缘计算是一种分布式计算范式,它将应用程序计算和数据存储更接近数据源(即物联网设备),以帮助提高响应时间延迟并提供更快的洞察。
无服务器解决方案非常适合边缘计算,因为它们具有高度可扩展性和轻量级,可以靠近您的最终用户进行集中或分布式部署。在物联网的例子中,边缘用例经常涉及使用量的间歇性峰值,并可以从无服务器提供的按需扩展中受益。
尽管上述用例突出了如何构建无服务器应用程序,但无服务器解决方案还可以用于构建应用程序代码或架构的特定组件,例如构建RESTful API(利用无服务器函数与API网关一起使用)或者在作为服务的后端的情况下,构建整个中间件和后端层。
MongoDB Atlas 是一个完全托管的开发者数据平台,旨在帮助开发者构建 现代无服务器应用程序。基于文档模型,Atlas 为开发者提供了在单一统一解决方案中处理各种数据和工作负载类型的灵活性 - 有助于降低基础设施复杂性。凭借无服务器和预配置的 部署类型 以及安全、可靠和可扩展的基础设施,您可以自信地构建任何规模的应用程序。
Atlas 提供了多项服务,这些服务抽象化了服务器的配置和管理,以提供无服务器架构的好处,并能够无缝集成到各种流行的平台和框架中,包括
AWS Lambda、AWS Fargate、Amazon EventBridge、AWS AppSync
Azure Functions、Azure App Service
Google Cloud Functions、Google Cloud Run
Vercel
Netlify
以及其他许多
为开发者提供构建最佳级别应用程序的构建块,以及使用他们已经熟悉和喜爱的工具和服务的灵活性来构建应用程序。
以下是一些关于如何使用 Atlas 满足某些无服务器应用程序需求的示例,但请注意,所提及的功能可以根据用户或组织的具体需求独立使用或结合使用。
无服务器微服务由执行应用程序中特定角色的无服务器函数组成。MongoDB Atlas 提供了功能,使开发者能够轻松地使用我们开发者数据平台中直接提供的云 函数、触发器和API(REST和GraphQL)构建无服务器微服务。
无服务器微服务通常易于管理和扩展,非常适合复杂、不断发展的应用程序以及可以分解为短事件驱动任务的应用程序。
许多无服务器应用程序旨在处理不可预测或交通流量的大幅波动,数据库能够做到这一点非常重要。Atlas在专用集群和无服务器实例中提供弹性自动扩展,以减轻开发团队的负担。
Atlas无服务器实例提供按需端点,可自动扩展以满足应用程序需求,无需预先配置。它们基于基于操作的费用模式,只对使用资源和存储收费,并且在没有流量时将降至零。
Atlas专用集群根据存储和计算资源需求分为多个集群层级,并启用自动扩展,以利用情况为基础进行扩展或缩减。与动态扩展的无服务器实例不同,专用集群为开发者提供了更多控制权,可以选择设置最小和最大扩展阈值,或在预期尖峰时手动扩展到另一个集群层级。
对于没有稳定流量或开发环境并不总是被使用的应用程序,为预配置数据库付费可能没有意义。在这种情况下,可以使用Atlas无服务器实例来优化成本,避免为未使用的资源付费,同时确保在有流量时数据库可以即时扩展。
如果您已经开始开发无服务器应用程序,或者已经有一个正在生产的无服务器应用程序 - MongoDB Atlas可以帮助您将其提升到下一个层次。我们的开发者数据平台为您提供了访问扩展数据服务的能力,包括搜索、数据可视化、边缘到云同步、数据归档等,帮助您满足不断变化的应用程序需求,而不会引入额外的复杂性。同时,它还提供了部署应用程序的灵活性,以适应您的需求。MongoDB Atlas与广泛的流行开发工具和服务集成,允许您使用您选择的架构和堆栈构建和运行无服务器应用程序。
请注意:此图不代表与MongoDB Atlas一起使用的所有解决方案。虽然它突出了您可能在无服务器架构中找到的典型组件,但它并不是使用MongoDB构建应用程序的唯一方式。
无论您是否已经将无服务器技术作为您堆栈的一部分使用,还是刚刚开始 - MongoDB Atlas可以帮助您将您的应用程序提升到下一个层次。
无服务器计算的一个常见误解是它不安全或可能对自托管或传统云计算产品带来安全风险。然而,在无服务器架构中,云服务提供商或服务提供商为您管理基础设施安全。因此,您无需担心安全配置错误和潜在的安全漏洞问题。但是,应用程序安全仍然是您的责任。使用MongoDB Atlas,我们确保默认启用企业级安全控制,因此您可以在确保数据安全的前提下构建和部署应用程序。了解我们的安全控制。
与完全管理的云托管解决方案类似,在无服务器架构中,云服务提供商或服务提供商负责根据应用程序需求进行服务器配置和扩展。他们还负责管理安全控制和版本升级。
无服务器和PaaS(平台即服务)解决方案在底层基础设施和服务器方面都从服务的最终用户那里抽象出来。然而,它们之间有一些明显的区别,可以区分彼此 - 最值得注意的是可伸缩性和定价模式。与无服务器解决方案不同,PaaS解决方案不能立即自动扩展,通常需要开发者进行预测和配置以自动扩展解决方案。无服务器解决方案的计费也是基于消耗的精确资源量,而PaaS解决方案通常依赖于预先配置的价格模型,并基于预先确定的(计算、存储等)服务器资源收取固定费用。