摘要: Martin Flower在2016.6.17号发表了一篇博客: [《Serverless Architectures》](http://martinfowler.com/articles/serverless.html),引起业界广泛关注: 在这篇博客里,他介绍了serverless架构,以及F
Martin Fowler最近非常推崇的serverless架构模式,是BaaS云架构实现的核心架构模式。
Martin Fowler在2016.6.17号发表了一篇博客: 《Serverless Architectures》,引起业界广泛关注:
在这篇博客里,他介绍了serverless架构,以及FaaS,Microservice,Docker等流行的架构和概念,描述了Amazon AWS lambda的价值, 进一步将这种云时代的架构清晰的展现在大家的视野里。
__ 本文很多内容来自这篇博客,让大家清晰了解Martin对serverless架构的概念和价值的阐述。__ 在此基础上我按照模式的讲解思路将进一步阐述我个人对Serverless架构和BaaS之间的关系,以及后续的发展。
概念(Concept)
Serverless是最新兴起的架构模式,中文意思是“无服务器”架构。跟很多其它软件类似,对Serverless还没有清晰定义,但是肯定有两个互相有重叠的定义:
1. Serverless最初是用于描述依赖第三方服务(‘云端’)实现对逻辑和状态进行管理的应用。典型的包括“富客户端”(例如单页Web应用、移动应用),
他们一般都使用基于云端的数据库(例如Parse、Firebase),认证服务(Auth0、AWS congnito)等。
这类服务以前被称为“(Mobile) backend as a Service (https://en.wikipedia.org/wiki/Mobile_backend_as_a_service)”,我将在本文中称他们为“BaaS”。
2. Serverless也可以指这样的应用,一部分服务逻辑由应用实现,但是跟传统架构不同在于,他们运行于无状态的容器中,可以由事件触发,短暂的,完全被第三方管理。
(感谢ThoughtWorks在最近Tech Radar中做出的定义)。这种思路是‘Functions as a Service / FaaS’,AWS Lambda是目前最佳的FaaS实现之一,
本文后续介绍中将使用FaaS作为这种架构的缩写。当开发Baas shaped应用,特别当开发一个富Web应用,而不是移动应用时,你会需要一些服务器端定制功能,
Faas功能也许对于这种情况是一种好的解决方案,特别是如果他们和你使用的BaaS服务集成到一定程度时,这样功能案例包括数据校验和计算敏感的处理,比如图片和视频的制作。
但是我更愿意讨论的是本领域第二种方式,相比来说技术架构更新,引领了Serverless的很多创新。然而,这两个领域开始融合,一个例子是Auth0(https://auth0.com/),一开始Auth0是作为Baas(‘Authentication as a Service’),但是随着Auth0 webtask的发布,演变成了FaaS应用。
更多场合,当开发基于BaaS的应用时,特别当开发基于web的应用而不是移动应用时,更需要一部分服务端功能。特别当跟正在使用的BaaS整合在一起时,FaaS模式可以作为最佳实践。这类功能包括数据认可(以免客户端恶意攻击)和计算敏感进程(例如图像或者视频篡改)。
问题(Problem):
在目前主流云计算IaaS和PaaS中,开发者进行业务开发时, 仍然需要关心很多和服务器相关的服务端开发, 比如缓存,消息服务, web应用服务器, 数据库, 需要对服务器进行性能优化,考虑存储和计算资源, 考虑负载和扩展,考虑服务器容灾稳定性等非业务逻辑的开发。 这些服务器的运维和开发,知识和经验极大的限制了开发者进行业务开发的效率。 如何让开发者无需在服务器实现和部署服务,而直接租用服务或者开发服务而无需关注如何在服务器中运行部署服务,对开发者来说,这是一种去服务器而直接使用服务的架构。
背景(Context)
服务端开发在云计算时代基本是如下趋势:
Real Server->Virtual Server-> Server with Middlewares -> Service
__ 云计算的发展从IaaS,PaaS,SaaS,到最新的BaaS,在这个趋势中serverless(去服务器化)越来越明显。
IaaS将真实的物理机变成了虚拟机, PaaS进一步将虚拟机变成了包含基础设施的中间件服务。 BaaS&SaaS将中间件服务扩展到更基础的后端能力。 这些是云计算解决效率很成本的重要体现。 Serverless这种无服务器架构,用服务代替服务器,无需了解落实服务进一步提高云计算的成本和效率,从而为BaaS这种新时代云计算提供架构基础__
限制(Force)
BaaS要被开发者广泛接受,需要在云端解决以下的限制:
- BaaS服务的治理
- BaaS服务需要提供逻辑定制扩展
- BaaS服务能力独立部署,快速启动
- BaaS服务可以弹性扩展,满足大并发需要
- BaaS服务可以被监控,计费
- BaaS服务要解决DevOps相关的问题
- ...
解决(Solution)
要实现serverless架构, 需要利用以下技术和方案,
- 实现BaaS中的云代码特性, 开发者可以直接开发在云端业务代码,实现Functions as a Service。
- 实现API网关,对用API代表服务的入口,并对所有服务进行治理。