简述 Serverless 原理及运用
概述
Serverless(Serverless Cloud Function)不是一个前端概念,也不是为了解决前端问题而出现的,它是云计算发展的必经过程。它是云原生技术的高级阶段,可以让开发者更专注于业务开发,数据处理和算法策略等,减少对基础架构,硬件状态等关注。Serverless 的出现和完善,是让软件开发更加友好,不仅前端开发需要关注,它属于每个应用软件开发者。
发展历程
2012 Iron.io 提出概念
2014 AWS 发布 Lamdba 开启商业化时代
2017 各大厂商推出 serverless 服务框架
2018 loT, 边缘计算, 混合云, 5G... serverless 无限可能
中文直译,简称「无服务器」。但并不是真的没有服务器,而是开发者不需要关注服务器,行业内有一下解读:
一种软件系统架构方法,通常称为 Serverless 架构,完全依赖于第三方云厂商或云平台完成整个系统的组织和构建。重点关注系统架构,业务开发。
代表一种产品的形态,称为 Serverless 产品,无需理解和管理服务器,按需使用,按需付费,常见的有云存储,云函数等。
云函数即函数即服务(Function as a Service),和后端即服务(Backend as a Service)组合在一起,即可构建自己的 Serverless 架构。
整体流程
函数第一次调用的时候,会有一个冷启动的过程,这个过程需要动态调度实例,下载代码,解压代码,启动实例,得到一个真正可执行函数的代码环境。然后才开始执行初始化函数,执行函数的业务逻辑。函数逻辑执行完毕后,并不会立即释放实例,如果在这段时间有新的调用,则复用实例,这个新的请求不会有冷启动的过程,直到一定时间段内没有新的请求分配到这个实例上,则会回收实例,释放环境。为了减少冷启动带来的影响,要尽量避免冷启动带来的延时,保持请求的稳定。
前后对比
传统应用架构下,需要购买服务器,安装操作系统,搭建环境,构建部署应用,配置负载均衡,搭建日志及监控系统。Serverless 构架下,开发者只需专注业务代码开发及部署,无需关系服务器及运维,可以将精力投入到更有意义的业务开发中。
优势
降低运维需求
解耦了应用和服务器,业务上线无需关注云服务资源,无需购买服务器及配置等。后期运维工作量也大大降低,全部交给了第三方云服务商。
降低运营成本
正常云服务器都是按月租或年租,不管是否有使用,服务都是一直在运行。Serverless 是按需执行的,只有在应有有请求及有事件触发时才会被运行,空闲状态不占用计算资源。Serverless 产品只需要为处理请求的计算资源付费,空闲状态无需付费。
降低创业公司启动成本
当一家新公司创立的时候,研发部门需要大量的基础服务,如持续集成,测试环境,版本管理,数据库服务,面向用户还需要邮件,短信,登录注册等服务。使用 Serverless 就可以降低这些成本。
快速迭代上线,专注业务
Serverless 架构应用功能被解构成若干个细颗粒度的无状态函数。开发者可以更加聚焦在单功能的开发上线,解构后的云函数可独立部署上线,可更加快速的实现业务迭代。
系统安全性
保持服务持续运行且可能会遇到黑客不同类型的攻击并不容易,使用 Serverless 后不必再担心这些问题,都交给云服务商处理。
劣势
不适用高并发应用
为每个请求启动一个进程开销太高,瞬间流量过大容易超时,如秒杀类的活动短时间对系统的开销很大。
过于依赖于第三方
如果将所有的服务都放在第三方平台,可能会有安全性的问题,因此可以将不是很重要的服务放 Serverless。还有当业务发展过大后,需要进行云服务商迁移的成本也会很大。
不适合长时间运行
Serverless 本质是按需使用,为的就是解决空闲时期的服务费用,应用需长时间使用相对应的成本就不划算了。就像长时间租车用何不买一台车呢。
状态管理
要想实现自由的缩放,无状态是必须的,而对于有状态的服务,使用 serverless 这就丧失了灵活性,有状态服务需要与存储交互就不可避免的增加了延迟和复杂性。
冷启动
因 Serverless 本质是按需使用,当没有请求处理的时候实例会被释放出来,下次请求再进入的时候,会重新分配资源,下载代码,解压代码,启动实例,这个过程称为冷启动,会有一定的延时,目前不同的云服务商有不同的策略,可以开启预留实例及预置并发等。
本地测试和调试,排查问题难
因是在第三方云平台使用,且不同云服务商的工具及标准有一定的差距,遇到问题排查会增加一定的成本。
对于无服务应用的集成或者端到端测试尤其困难,很难在本地模拟应用程序的各种连接,并与性能和缩放的特性结合起来测试,并且 serverless 应用本身也是分布式的,简单的将无数的 FaaS 和 BaaS 组件粘合起来也是有挑战性的。
适用场景
个人站点
定时任务
webhook
物联网 Lot
短信,邮件 push
微信公众号机器人
对象存储
消息处理
评论