Serverless 架构 - childlabor/blog GitHub Wiki
Serverless
Serverless 架构即“无服务器”架构,它是一种全新的架构方式,是云计算时代一种革命性的架构模式。
Serverless 不是具体的一个编程框架、类库或者工具。它是一种软件系统架构思想和方法,它的核心思想是用户无须关注支撑应用服务运行的底层主机。也就是说用户无须关心软件应用运行涉及的底层服务器的状态、资源(比如 CPU、内存、磁盘及网络)及数量。软件应用正常运行所需要的计算资源由底层的云计算平台动态提供。
从最早的物理服务器开始,整个行业都在不断地抽象或者虚拟化服务器。
一个显而易见的优势:提高应用交付的效率,降低应用运营的工作量和成本。
从谷歌热词趋势来看,Serverless 近两年来处于稳步上升的趋势,并且近一年的热度一直处于较高的水平,热度地区分布图中中国排在了 No.1,由此也可以看出大家对 Serverless 的热衷。
云计算的发展从基础架构即服务(Infrastructure as a Service, IaaS),平台即服务(Platform as a Service,PaaS),软件即服务(Software as a Service,SaaS),慢慢开始演变到函数即服务(Function as a Service,FaaS)以及后台即服务(Backend as a Service,BaaS),Serverless 无服务化。
FaaS与BaaS
简单来讲,FaaS(Function as a Service) 就是一些运行函数的平台,比如阿里云的函数计算、AWS 的 Lambda 等。 BaaS(Backend as a Service)则是一些后端云服务,比如云数据库、对象存储、消息队列等。利用 BaaS,可以极大简化我们的应用开发难度。
Serverless 则可以理解为运行在 FaaS 中的,使用了 BaaS 的函数。
AWS Lambda,最早被大众所认可的 Serverless 实现。
AWS Lambda 是一种函数即服务(Function-as-a-Servcie,FaaS)的计算服务,简单的来说就是:开发人员直接编写运行在云上的函数、功能、服务。由云服务产商提供操作系统、运行环境、网关等一系列的基础环境,我们只需要关注于编写我们的业务代码即可。
在 Serverless 应用中,开发者只需要专注于业务,剩下的运维等工作都不需要操心
Serverless 是真正的按需使用,依赖于特定的云平台、第三方服务
在一个基于 AWS 的 Serverless 应用里,应用的组成是:
- 网关 API Gateway 来接受和处理成千上万个并发API调用,包括流量管理、授权和访问控制、监控等
- 计算服务 Lambda 来进行代码相关的一切计算工作,诸如授权验证、请求、输出等等
- 基础设施管理 CloudFormation 来创建和配置 AWS 基础设施部署,诸如所使用的 S3 存储桶的名称等
- 静态存储 S3 作为前端代码和静态资源存放的地方
- 数据库 DynamoDB 来存储应用的数据
Serverless 并不意味着没有服务器,只是服务器以特定功能的第三方服务的形式存在。
Serverless 的优势
- 低运维成本
- 事件驱动触发
- 按需计费
- 安全可靠:云产商保障
- 弹性伸缩:方便扩容,提前应对峰值流量
Serverless 的局限
- 可移植性:平台依赖性强
- 执行时长:Serverless 的一个重要特点是应用按需加载执行,而不是长时间持续部署在主机上。目前,大部分 Serverless 平台对 FaaS 函数的执行时长存在限制。因此 Serverless 应用更适合一些执行时长较短的作业。
一个比喻:云服务器EC2 相当于你买了一辆车,而 Lambda 相当于你租了你一辆车。
下面以 AWS S3 实际操作来体验下。
... ... ...