Serverless的技术特点
- 按需加载
应用的加载(load)和卸载(unload)由Serverless云计算平台控制。这意味着应用不总是一直在线的。只有当有请求到达或者有事件发生时才会被部署和启动。当应用空闲至一定时长时,应用会被自动停止和卸载。 - 事件驱动
应用的加载和执行由事件驱动,通过将不同事件来源(EventSource)的事件(Event)与特定的函数进行关联,实现对不同事件采取不同的反应动作,这样可以非常容易地实现事件驱动(EventDriven)架构。 - 状态非本地持久化
云计算平台自动控制应用实例的加载和卸载,且应用和服务器完全解耦,应用不再与特定的服务器关联。因此应用的状态不能,也不会保存在其运行的服务器之上,不能做到传统意义上的状态本地持久化。 - 非会话保持
应用不再与特定的服务器关联。用户无法保证同一客户端的两次请求由同一个服务器上的同一个应用实例来处理。也就是说,无法做到传统意义上的会话保持(StickySession)。因此,Serverless架构更适合无状态的应用。 - 自动弹性伸缩
Serverless应用原生可以支持高可用,可以应对突发的高访问量。应用实例数量根据实际的访问量由云计算平台进行弹性的自动扩展或收缩,云计算平台动态地保证有足够的计算资源和足够数量的应用实例对请求进行处理。 - 应用函数化
每一个调用完成一个业务动作,应用会被分解成多个细颗粒度的操作。由于状态无法本地持久化,这些细颗粒度的操作是无状态的,类似于传统编程里无状态的函数。 - 依赖服务化
所有应用依赖的服务都是一个个后台服务(BackendService),应用通过BaaS方便获取,而无须关心底层细节。
Serverless的应用场景
- web应用
Serverless架构可以很好地支持各类静态和动态Web应用。通过FaaS的自动弹性扩展功能,ServerlessWeb应用可以很快速地构建出能承载高访问量的站点。 - 移动互联网
- 物联网
- 多媒体处理
- 数据及事件流处理
Serverless可以用于对一些持续不断的事件流和数据流进行实时分析和处理,对事件和数据进行实时的过滤、转换和分析,进而触发下一步的处理。 - 系统集成
Serverless应用的函数式架构非常适合用于实现系统集成。函数应用的分散式的架构,使得集成逻辑的新增和变更更加灵活。
Serverless的局限
- 控制力
Serverless的一个突出优点是用户无须关注底层的计算资源,但是这个优点的反面是用户对底层的计算资源没有控制力。 - 可移植性
Serverless应用的实现在很大程度上依赖于Serverless平台及该平台上的FaaS和BaaS服务。不同IT厂商的Serverless平台和解决方案的具体实现并不相同。 - 安全性
在Serverless架构下,用户不能直接控制应用实际所运行的主机。不同用户的应用,或者同一用户的不同应用在运行时可能共用底层的主机资源。对于一些安全性要求较高的应用,这将带来潜在的安全风险。 - 性能
当一个Serverless应用长时间空闲时将会被从主机上卸载。当请求再次到达时,平台需要重新加载应用。应用的首次加载及重新加载的过程将产生一定的延时。对于一些对延时敏感的应用,需要通过预先加载或延长空闲超时时间等手段进行处理。 - 执行时长
Serverless的一个重要特点是应用按需加载执行,而不是长时间持续部署在主机上。目前,大部分Serverless平台对FaaS函数的执行时长存在限制。因此Serverless应用更适合一些执行时长较短的作业。 - 技术成熟度
目前Serverless相关平台、工具和框架还处在一个不断变化和演进的阶段,开发和调试的用户体验还需要进一步提升。
Serverless架构-上
出处:《深入浅出Serverless》