这是来自martinfowler.com的Serverless架构一文的大意翻译。
其次,Serverless也意味着应用会有一些服务器端逻辑,但是不像传统架构是运行在无态容器中,通过事件触发,它是瞬间的,可能只使用一次,完全由第三方管理,一种思想认为这是“Functionsasservice函数服务”简称Faas,AWSLambda就是一种流行的Faas实现,当然还有其他。
当开发Baasshaped应用,特别当开发一个富Web应用,而不是移动应用时,你会需要一些服务器端定制功能,Faas功能也许对于这种情况是一种好的解决方案,特别是如果他们和你使用的BaaS服务集成到一定程度时,这样功能案例包括数据校验和计算敏感的处理,比如图片和视频的制作。
下面是一些案例应用:UI驱动应用:让我们看看带有服务器端逻辑的传统三层面向客户端系统,比如电子商务应用,传统的架构是看上去像下面:
而使用Serverless架构则会如下面:
而在Serverless架构下,会有多个“点击处理器”作为点击事件的消费者,这些消费应用也是作为FaaS功能运行在第三方提供的事件驱动上下文场景下的。注意,第三方提供消息系统Broker和FaaS环境,这两个系统会彼此紧密联系在一起。
FaaS环境可以并行处理几个点击事件,只要将函数代码实例化多个即可。
解密“函数作为服务”为了解密FaaS,我们看看Amazon的Lambda产品:
AWSLambda让你无需任何配置或管理服务器的代价下运行你的代码:(1)Lambda可以运行你的几乎所有类型的应用或后端服务的代码(2)因为零管理,只要上传你的代码和lambda会照顾运行等一切(3)并以高可用性扩展(4)你代码的运行性能.你能设置你的代码自动从AWS服务触发(5)或者直接从任何web或移动应用直接调用你的代码(6)(此处略去关于上述6点AWS详细说明…………)
状态在本地状态方面FaaS功能有显著的约束,你能假设任何函数的调用创造的状态,无论是同一个进程或同一个主机内的状态,都不适用于下次调用了,RAM中状态需要写到本地磁盘,也就是说,FaaS是无态的。
这对应用程序体系结构产生了巨大的影响。这意味着FaaS是自然地无态,提供纯输入的函数转换,如果需要存储状态,使用数据库或跨应用的缓存或网络文件存储等等,实现跨请求的状态存储,为下一个请求访问上个请求的状态。
这意味着长任务运行不适合PaaS,因此你可能需要重新架构:比如创建几个不同的协调的FaaS函数,而在传统环境中,你只需要一个这样的任务,既做协调又做执行。
启动延迟FaaS函数响应一个请求会有延迟,其延迟有多长取决于很多情况,也许会从10ms到2分钟,让我们使用AWSlambda作为一个案例:
这些情况可以通过这个丑陋方式避免:每隔5分钟ping一下函数的方式确认它是活着。
API网关(Gateway)它是一个HTTP服务器,通过配置实现路由和REST端点服务,每个路由URI都和相应的FaaS函数对应,当API网关接收到一个请求,会通过路由配置匹配到哦相应的FaaS函数。也就是说,API网关是将FaaS函数调用结果转化为Http响应然后返回调用者。
除了纯粹的路由请求以外,API网关也可以执行身份验证,输入验证,响应代码的映射等功能。
开源因为Serverless的FaaS应用能够提供生产运行环节的质量要求,而开源项目比如Docker等容器则不属于这个范畴,
Apex开源项目能提供易于构建部署和管理AWSLambda函数,能让你用语言方式开发Lamda函数,而不是直接使用Amazon支持的Lambda。
与PaaS比较如果PaaS能够在20ms内启动实例运行半秒,那么可以称它为serverless。
PaaS并不是将整个应用只为每个请求启动使用的,而FaaS平台恰好是这么做的。
NoOpsServerless不意味着无运营"NoOps",只是意味着没有内部系统管理。
存储过程作为服务一些FaaS函数除了访问数据库的语句以外只有很少的代码,因此这样的FaaS函数也被称为存储过程的服务。但也有些问题,比如会需要使用具体厂商的语言,难以测试和进行版本控制等时比较棘手。MikeRoberts对这些问题都进行了认真讨论。
什么是Serverless无服务器架构?
Serverless不代表再也不需要服务器了,而是说:开发者再也不用过多考虑服务器的问题,计算资源作为服务而不是服务器的概念出现。Serverless是一种构建和管理基于微服务架构的完整流程,允许你在服务部署级别而不是服务器部署级别来管理你的应用部署,你甚至可以管理某个具体功能或端口的部署,这就能让开发者快速迭代,更快速地开发软件。
以AWSLambda为案例,Lambda能让不用思考任何服务器,也就是说,不用你处理服务器上的部署、服务器容量和服务器的扩展和失败容错,还有服务器上选择什么OS操作系统,语言的更新,日志等等问题。你的应用程序只需要和多个第三方的API或服务打交道,也可以自我创建一个无服务器的API。
Serverless有以下几个特点:
Serverless意味无维护,Serverless不代表完全去除服务器,而是代表去除有关对服务器运行状态的关心和担心,它们是否在工作,应用是否跑起来正常运行等等。Serverless代表的是你不要关心运营维护问题。有了Serverless,可以几乎无需Devops了。
Serverless不代表某个具体技术,有些人会给他们的语言框架取名为Serverless,Serverless其实去除维护的担心,如果你了解某个具体服务器技术当然有帮助,但不是必须的。
Serverless中的服务或功能代表的只是微功能或微服务,Serverless是思维方式的转变,从过去:“构建一个框架运行在一台服务器上,对多个事件进行响应。”变为:“构建或使用一个微服务或微功能来响应一个事件。”,你可以使用djangoornode.js和express等实现,但是serverless本身超越这些框架概念。框架变得也不那么重要了。
Serverless规模扩展性方面由于充分利用云计算的特点,因此其扩展是平滑的,同时由于Serverless是基于微服务的,而一些微功能微服务的云计算是零收费,这样有助于降低整体运营费用。