加入收藏 | 设为首页 | 会员中心 | 我要投稿 三明站长网 (https://www.0598zz.com/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长资讯 > 外闻 > 正文

深入理解无服务器架构(Faas/Serverless)

发布时间:2019-03-19 07:28:26 所属栏目:外闻 来源:DevOps
导读:副标题#e# 无服务器架构(Faas/Serverless),是软件架构领域的热门话题。 AWS,Google Cloud和Azure - 在无服务器上投入了大量资金,已经在看到了大量专门针对Faas/Serverless的文章、书籍,开源项目,会议。 但什么是无服务器,为什么(或不是)值得考虑? 1.
副标题[/!--empirenews.page--]

无服务器架构(Faas/Serverless),是软件架构领域的热门话题。 AWS,Google Cloud和Azure - 在无服务器上投入了大量资金,已经在看到了大量专门针对Faas/Serverless的文章、书籍,开源项目,会议。 但什么是无服务器,为什么(或不是)值得考虑?

1. What is Serverless?

无服务器架构是一种包含第三方“后端即服务”(BaaS)服务的应用程序设计方式,和/或包括(FaaS)平台上的托管临时容器中运行的自定义代码。 此类体系结构消除了对传统的始终在线服务器的大部分需求。 这可以显着降低的运维成本,复杂性以及减少项目的上线准备时间,代价是增加了对供应商依赖性和相对不成熟支持服务的依赖。

首先,没有人清楚地知道无服务器是什么。它包含两个不同但是有关联的领域:

无服务器可以描述一个”富客户端 + 第三方云托管应用程序和服务的”的应用程序。这些“富客户端”应用程序一般是移动应用程序,使用庞大的云端数据库或SSO服务(Auth0,AWS Cognito等)。这些类型的服务以前被描述为“后端即服务”。

无服务器也可以指服务器端逻辑仍然由应用程序开发人员编写,但是与传统体系结构不同,它运行在无状态计算容器中,这些容器是事件触发的短暂的(可能只持续一次调用,或Deployment会保留,根据运行负载自动调节运行实例数量),并且完全由第三方管理(也许就是”FaaS”此名称的来源 )AWS Lambda是目前Faas平台最受欢迎的实现之一,比国内的云服务商便宜很多,看好亚马逊市值最先破万亿(Apple may 打脸)。

在本文中,显然我们将重点关注后者,FaaS/Serverless。

2. 几个引申的例子

让我们考虑一个带有服务器端逻辑的传统的三层面向客户端的系统。一个很好的例子是一个典型的电子商务应用程序 - 在线宠物商店。

架构像这样:

深入理解无服务器架构(Faas/Serverless)

在这个架构里,客户端可以相对不用那么智能,绝大多数的逻辑在服务端完成,授权,页面导航,查询,交易等等。

在无服务架构里,看起来会是这个样子:

二者对比中,我们可以看到一系列明显的变化:

我们去掉了原始应用程序中的身份验证逻辑,并将其替换为第三方BaaS服务(例如,Auth0)

我们允许客户端直接访问我们的数据库(用于产品列表),该数据库本身完全由第三方(例如Google Firebase)托管。我们可能采用和服务器资源访问数据库不同的安全配置文件让客户端去访问数据库。

前两点意味着非常重要的第三点:宠物商店服务器中的一些逻辑现在位于客户端内 - 例如,跟踪用户会话,理解应用程序的UX结构,从数据库读取并将其转换为一个可用的视图等客户端正在成为单页应用程序。

我们可能希望在服务器中保留一些与UX相关的功能,例如,如果它是计算密集型或需要访问大量数据。在我们的宠物商店中,一个例子是“搜索”。而不是像原始体系结构中那样拥有一个始终运行的服务器,我们可以实现一个FaaS功能,通过API网关响应HTTP请求。客户端和服务器“搜索”功能都从同一数据库中读取产品数据。

最后,我们可以把购买的实现替换成另一个独立的Faas函数,安全的原因吧,这也是由API网关给引入的。在使用FAAS时,把不同的逻辑要求,拆分成独立的部署组件是一种很常见的方法。

3. “Faas”的面纱

现在是时候深入了解FAAS的真正含义。为此,我们来看看亚马逊FaaS产品的开头描述:Lambda。

AWS Lambda允许您在不配置或管理服务器的情况下运行代码。 (1)使用Lambda,您可以运行几乎任何类型的应用程序或后端服务的代码(2)所有这些都是零管理。只需上传代码,Lambda就会负责运行所需的一切(3)以高可用性扩展实例。(4)可以设置代码以自动从其他AWS服务触发(5)或直接从任何Web或移动应用程序调用它。

详细说来:

从FaaS是运行后端代码而无需管理自己的服务器系统或应用程序。与容器和PaaS等其他现代架构趋势相比,是否存在长期存在的服务器和应用程序是一个关键的区别。

FaaS产品不需要对特定框架或库进行编码。 FaaS功能是语言和环境的常规应用程序。例如,AWS Lambda函数可以把Javascript,Python,Go,任何JVM语言(Java,Clojure,Scala等)或任何.NET语言视为“一等公民”。不过Lambda函数还可以与其部署包一起执行在另一个进程,因此实际上可以使用任何可以编译为Unix进程的语言。FaaS函数具有重要的体系结构限制,特别是在涉及状态和执行持续时间时。

部署与传统系统有很大不同,因为我们没有自己运行的服务器应用程序。在FaaS环境中,我们将功能的代码上传到FaaS提供商,提供商执行配置资源,实例VM(Container),管理流程等所需的一切。

水平缩放完全是自动的,弹性的,并由Faas管理。如果系统需要并行处理100个请求,则Faas将处理该请求而无需你进行任何额外配置。执行函数的容器是临时的,FaaS创建和销毁它们,完全由运行时决定。最重要的是使用FaaS,云厂商可以处理所有底层资源配置和分配,而用户根本不需要集群或VM管理。

FaaS中的函数通常由提供程序定义的事件类型触发。使用AWS,此类事件包括S3(文件/对象)更新,时间(定时任务)以及消息总线的消息。

大多数Faas运营商还允许HTTP请求触发函数,在AWS中,通常通过使用API网关来实现这一点。我们在宠物商店示例中使用API网关进行“搜索”和“购买”功能。函数也可以通过平台提供的API直接调用,无论是在外部还是在同一个云环境中,但这是一种相对不常见的用法。

4. Faas需要关注的特点

有无状态

FaaS函数在本地(VM/容器实例)状态(即存储在内存中的变量中的数据或写入本地磁盘的数据)中具有很大的限制。一般情况下你确实可以这样存储,但是不能保证这种状态在多个调用中保持不变,更重要的是,你本来就不应该假设一次调用函数的状态可用于同一函数的另一次调用。因此,FaaS函数通常被描述为无状态,或者更准确地说,需要持久化的FaaS函数的任何状态都需要在FaaS函数实例之外进行。

(编辑:三明站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

热点阅读