# serverless

Serverless架构让人们不再操心运行所需的资源,只需关注自己的业务逻辑,并且为实际消耗的资源付费。可以说,随着Serverless架构的兴起,真正的云计算时代才算到来了。

# 是个啥?

  • 服务演变过程

    • 主机 => VM虚拟机 => docker容器技术 => Functions
  • 简单说可以叫做无服务架构,不需要运维,不需要打系统补丁,不需要打应用补丁,无需数据本分,软件配环境配置的一种新兴开发模式。

  • Serverless是一种构建和管理基于微服务架构的完整流程,允许你在服务部署级别而不是服务器部署级别来管理你的应用部署。它与传统架构的不同之处在于,完全由第三方管理,由事件触发,存在于无状态(Stateless)、暂存(可能只存在于一次调用的过程中)计算容器内。构建无服务器应用程序意味着开发者可以专注在产品代码上,而无须管理和操作云端或本地的服务器或运行时。Serverless真正做到了部署应用无需涉及基础设施的建设,自动构建、部署和启动服务。

  • 了解两个概念 (FaaS, BaaS)

    • FaaS Function As A Server 函数即服务
      • 以函数为单位的计算能力提供方式。
      • 仅需编写和上传核心业务代码,交由平台完成部署、调度、流量分发、弹性伸缩等能力。
      • 降低与计算使用门槛
    • BaaS Backend As A Server 后端即服务
      • 各种云产品和云服务,例如对象存储COS,消息队列CMQ,云数据库CDB、TDSQL,云缓存CRedis、CMemcached,甚至到各种以 API 形式提供的服务如万象优图 CI,视频处理 VC。这些产品或服务,用户直接开通即可使用,无需考虑部署、扩容、备份、优化、安全等各种运维工作,做到了开箱即用,无需自己去进行服务器或应用的维护和管理,因此同样也是Serverless的一部分。

# 应用场景

  • 适合于任何事件驱动的各种不同的用例,

    • Web及移动端服务
    • IoT场景下可高效的处理实时流数据
    • 物联网,移动应用,基于网络的应用程序和聊天机器人等。
  • 应用负载有显著的波峰波谷

    • 因为业务的不同可能会有明显的波峰波谷的应用,削峰填谷由Serverless提供商自动完成,用户按量计费(一般比传统服务器部署便宜)
    • 业界普遍共识是,当自有机器的利用率小于 30%,使用 Serverless 后会有显著的效率提升。
    • 对于提供ServerLess的厂商,多业务等峰值和谷值可以相对均匀分布在各个时间段上,实现节约服务器计算资源的目的。
  • 基于事件驱动的应用案例

    • 对于那些比较通用的功能,可以封装成函数的应用,比如视频转码,人脸识别。
    • 开发这将任务流按照流程链接即可,天然高可用、实时弹性伸缩,用户不需要关心机器层面问题。

# 优点

  • 公司节约运维成本
  • 相对来说服务器比正常购买还便宜了
  • 开发变得简单
  • 由腾讯阿里云等厂商提供可靠保障
  • 天然具备高可用,实时弹性伸缩,节约程序员心智
  • 按次计费,例如腾讯云提供一定量的免费调用次数,小公司基本免费使用了。

# 存在问题

  • 存在冷启动问题
    • 接受到请求等事件才会运行,不运行就会进入休眠
      • 一般优化会将长时间多调用的函数,可以让其一直服务,知道指定事件没有事件才会睡眠或回收。
  • 容易对提供serverless的服务商产生依赖
    • 服务和供应商绑定了,以后再将服务移到其他服务上就不容易了。
    • 如果不想产生依赖,就要简历隔离层。隔离 API 网关、隔离数据库层等等,就是需要很多需要手动开发的地方。
    • 使用起来,有一定的复杂性,加上并不成熟现在。