无服务器架构:云计算的演变
随着无服务器架构在cloudscape上的发展,下面是基于MongoDB谈谈对无服务器架构的看法,以及它们如何适应变化的时代。
介绍
自从计算机问世以来,构建软件一直是一个复杂的过程。在过去的十年中,出现了新的基础设施方法(IaaS和PaaS)、软件体系结构(SOA和微服务)和方法(敏捷、持续交付和DevOps),以减轻应用程序开发的复杂性。虽然微服务在过去几年中一直是热门趋势,但无服务器架构通过提供一种新的方法来构建可伸缩且具有成本效益的应用程序而获得了发展势头。无服务器计算通过自动提供服务器和存储、维护基础设施、升级软件和只对消耗的资源收费,将开发人员从构建应用程序的传统成本中解放出来。
什么是无服务器计算?
无服务器计算是云计算中的下层抽象状态。这并不意味着没有服务器,而是底层的基础设施(物理和虚拟主机、虚拟机、容器),以及操作系统,都是从开发人员那里想象出来的。应用程序是在事件触发的无状态计算容器中运行的(例如,用户上传的照片触发了对他/她的追随者的通知)。开发人员创建应用,并依赖基础设施分配适当的资源来执行应用。如果应用上的负载增长,基础设施将创建应用的副本,并进行扩展以满足需求。
无服务器计算支持多种语言,因此开发人员可以选择他们最喜欢的工具。用户只对运行时和应用消耗的资源(例如RAM)收费;因此,不再存在供应不足或过剩的概念。
例如,如果一个应用的运行时间为500ms,并且消耗了15mb的RAM,那么用户只需要为500ms的运行时间和使用15mb RAM的成本付费。
无服务器体系结构是微服务的自然扩展。与微服务类似,无服务器体系结构应用程序被分解为特定的核心组件。微服务可以将类似的功能分组到一个服务中,而无服务器应用程序将功能划分为更细粒度的组件。自定义代码是作为运行在无状态计算服务中的独立、自治、细粒度应用开发和执行的。
为了说明这一点,让我们看一个简单的例子,说明微服务和无服务器体系结构的不同之处。
在图1中,客户机与“User”微服务交互。容器预先配置了容器中“User”服务的所有功能。该服务由不同的应用(update_user、get_user、create_user、delete_user)组成,并根据整个服务的总体负载进行伸缩。服务将在空闲时消耗硬件资源,并且用户仍将为未充分利用的资源付费。
图 1
对于无服务器架构,“用户”服务将被分成更细粒度的功能。在图 2 中,每个 API 接口对应一个特定的应用和文件。当客户端发起“创建用户”请求时,“用户”服务的整个代码库不必运行;相反,只有 create_user.js 会执行。无需预先配置容器,因为独立功能仅在需要时消耗资源,并且用户只需为其功能的实际运行时间付费。这种粒度还有助于并行开发工作,因为可以独立测试和部署功能。
图 2
无服务器计算的好处
成本随使用而增加:
无服务器计算的最大好处之一是您只需为应用的运行时间付费。没有“空闲”资源的概念,因为如果不执行该功能,则不会向您收费。这对于每小时仅使用几次的应用程序特别有用,这意味着任何专用硬件、VM 或容器在大部分时间都处于闲置状态,并且用户需要为未充分利用的资源付费。借助无服务器计算,企业可以构建整个基础架构,并且在客户开始使用该应用程序之前无需为任何计算资源付费。
弹性可扩展性:
无服务器架构的弹性可扩展性也很简单。如果应用需要扩展,基础设施将制作应用的副本来处理负载。这方面的一个例子可能是响应天气请求的聊天机器人。在无服务器架构中,聊天机器人功能将通过检索用户的位置并响应温度来处理响应。对于少数请求,这不是问题,但是如果聊天机器人服务每秒充斥着数千个请求,会发生什么。对于这种情况,聊天机器人功能将通过实例化该功能的数千个副本来自动扩展。一旦请求平息,环境将终止空闲实例并缩减,从而允许成本与用户需求成比例地扩展。
快速开发和迭代:
无服务器计算非常适合需要快速开发、原型和迭代的公司。开发速度更快,因为对 IT 运营没有任何依赖。应用是单线程的,这使得调试和部署应用更简单。构建过程也被分解成更小、更易于管理的块。这增加了可以通过持续交付管道推送的更改数量,从而实现快速部署和更多迭代反馈。迭代速度快,因为架构有利于快速进行大量代码更改,从而产生更多客户反馈和更好的产品市场契合度。
更少的系统管理:
无服务器并不意味着您完全消除了基础设施的操作元素,但它确实意味着更少的系统管理。无需管理、配置和扩展服务器,也无需修补和升级。服务器自动部署在多个可用区,提供高可用。支持也得到了简化;如果在半夜出现问题,则云提供商有责任解决问题。
开发人员生产力:
通过使用无服务器架构,开发人员可以更专注于编写代码,而不必担心管理应用程序的操作任务。这使他们能够开发创新功能并专注于对业务最重要的核心业务逻辑。
MongoDB Atlas 和无服务器计算
借助MongoDB Atlas,用户可以从无服务器环境中利用 MongoDB 的丰富功能——富有表现力的查询语言、灵活的架构、永远在线的可用性、分布式横向扩展。
MongoDB Atlas 是一种数据库即服务,提供数据库的所有功能,而无需设置操作任务的繁重工作。开发人员不再需要担心供应、配置、修补、升级、备份和故障恢复。Atlas 提供了弹性的可扩展性,无论是通过在一系列实例大小上扩展还是通过自动分片进行扩展,所有应用程序都不会停机。
设置 Atlas 很简单。
图 3
选择适合您的应用程序需求的实例大小,然后单击“CONFIRM & DEPLOY”。根据实例大小,可以在几秒钟内配置 MongoDB 集群。
图 4
MongoDB Atlas 为那些有兴趣构建无服务器架构的人提供了许多好处:
供应商独立性:
云供应商通常只提供特定于该供应商的数据库,这可能不符合开发人员的需求。MongoDB Atlas 提供独立于底层云提供商的能力,并使开发人员能够根据自己的需求选择合适的工具。开发人员可以利用MongoDB查询语言的丰富功能和灵活的数据模型,无需担心管理数据库的操作任务。如果您决定转移到另一个云提供商,您将不必使用不同的数据库技术重新填充您的数据。MongoDB Atlas 目前仅在 AWS 上可用,即将支持 Microsoft Azure 和 Google Cloud Platform (GCP)。
MEAN 堆栈:
无服务器架构加速了将业务逻辑从后端转移到前端的趋势。这使得前端框架的选择变得更加重要。AngularJS非常适合此要求,并且是无服务器架构的流行前端。AngularJS 是动态 Web 应用程序的结构化 Javascript 框架,它提供交互功能和 AJAX(用于创建快速和动态网页的技术)丰富的组件。结合NodeJS、ExpressJS和 MongoDB,这些工具形成了 MEAN 堆栈(MongoDB、ExpressJS、AngularJS、NodeJS)。在整个无服务器堆栈中使用 JavaScript 和 JSON 有巨大的优势。从事前端工作的人可以轻松理解应用(后端)代码和数据库查询。此外,在整个堆栈中使用相同的语法和对象可以让您的团队从理解多种语言的最佳实践中解放出来,并降低理解代码库的门槛,从而提高软件性能和开发人员的生产力。
快速部署:
使用 MongoDB Atlas,可以在几分钟甚至几秒钟内调配和部署 MongoDB 集群。开发人员不再需要担心配置或管理服务器。将 MongoDB Atlas 集成到无服务器平台需要您将连接字符串传递到无服务器应用程序中。
图 5
MongoDB Atlas 具有广泛的功能来防御、检测和控制对 MongoDB 的访问,提供任何现代数据库中最完整的安全控制:
· 用户权限管理:使用行业标准机制在数据库级别进行身份验证和授权,控制对敏感数据的访问
· 加密:保护网络上的动态数据和持久存储中的静态数据
为确保开箱即用的安全系统,自动启用身份验证和 IP 地址白名单。
IP 地址白名单是 MongoDB Atlas 的一项关键安全功能,它添加了一个额外的层来防止第 3 方访问您的数据。除非客户端的 IP 地址已添加到MongoDB Atlas 组的IP 白名单,否则客户端将无法访问数据库。
对于 AWS,MongoDB Atlas 的 VPC Peering 正在开发中,即将推出,提供简单、强大的解决方案。它将允许将包含您的应用程序服务器的 VPC 中的整个 AWS 安全组列入白名单。
可扩展性:
您应该期望您的无服务器功能能够向外扩展,因此需要对下游设置进行架构以跟上您的功能并进行扩展。关系数据库往往会因这种模型而崩溃。MongoDB Atlas 的设计以可扩展性为核心原则。当您的集群达到某个阈值时,MongoDB Atlas 会提醒您,您可以一键配置新服务器。
灵活的架构:
由于无服务器架构是事件驱动的,因此许多用例都围绕着物联网 (IoT) 和移动设备展开。MongoDB 非常适合这些用例以及更多用例,因为其灵活的文档模型使您能够存储和处理任何类型的数据:事件、地理空间、时间序列、文本、二进制和其他任何类型。向文档结构添加新字段很简单,可以轻松处理由事件驱动的应用程序生成的更改数据。开发人员花更少的时间修改模式,更多的时间用于创新。
原文连接:
https://dzone.com/articles/serverless-architectures-the-evolution-of-cloud-c
文章转载自公众号:新钛云服