目录
1.Serverless基础
Serverless架构中文名称叫无服务器架构,是指在构建和运行应用时,不再需要将更多的精力放到服务器管理上。实际上,它描述了一种更细粒度的部署模型,Serverless是函数粒度的部署。即一个应用程序捆绑一个或多个函数,开发者只需要将这些函数开发完成,并上传到供应商提供的Serverless架构平台,然后执行即可,至于其中可能需要的服务器运维、扩缩容等操作,都由供应商考虑并提供技术支持。
Serverless并不意味着我们不再需要服务器来运行程序,也不意味着不再需要运维工程师。它指使用无服务器架构后,不再需要花费时间和资源来进行服务器配置、维护、更新、扩容和容量规划。所有的这些任务都交给Serverless平台来处理。因此,开发人员可以专注于编写应用程序的业务逻辑代码,运维工程师也能够将关注点放在关键业务上。
Serverless架构中包括两种角色:一个是Developer,即开发人员,一个是,即供应商。
其中开发人员在指定平台编写代码并部署执行,这里的指定平台就是Serverless平台;供应商为外部或内部客户部署Serverless平台。部署Serverless平台就是提供相关的BaaS与Faas能力。
Serverless实际上是Faas+Baas,所谓Faas,就是Function as a Service,通常提供事件驱动计算。开发人员使用由事件或HTTP请求触发的函数来运行和挂历应用程序代码。开发人员将代码以函数为单元部署到Faas平台,这些代码将根据需要执行,在执行过程中,开发者无须管理服务器或任何其他底层基础设施。
而所谓的BaaS则是Backend as a Service,它是基于API的第三方服务,可替代应用程序中的核心功能子集。因为这些API是作为可以自动扩展和透明操作的服务而被提供的,所以对于开发人员表现为Serverless。
当我们所开发的应用满足以下情况时,可以优先考虑才有Serverless架构:
- 异步、并发、易于并行化为独立的工作单元
- 不经常或有零星的需求,在扩展要求方面存在巨大的、不可预测的差异
- 无状态、短暂的、对瞬间冷启动时间没有过多需求
- 在业务需求变更方面具有高度动态性,需要加快开发的速度
- 执行逻辑以响应数据库更改
- 对物联网传感器输入消息进行分析
- 流处理(分析或修改动态数据)
- 管理单次提取、转换和加载的作业,这些作业需要在短时间内进行大量处理
- 通过聊天机器人界面提供认知计算
- 调度执行时间很短的任务,例如Cron或批处理调用等
- 服务于机器学习和AI模型
- 持续继承Pipeline,按需为构建作业提供资源,而不是保留构建从属主机池等待作业分派
Serverless使开发人员能够专注于由事件驱动的函数组成的应用程序,这些函数响应各种触发器并让平台负责其余的事情,例如从触发器到函数逻辑、从一个函数传递到另一个函数的信息、自动设置容器和运行时间、自动扩容、身份管理等。
2.Serverless的目标受众
- 希望在单个函数中更多地关注业务逻辑的开发人员,这些函数可根据需求自动扩展
- 希望更快地构建应用程序并且更少地关注运维的开发人员
- 创建事件驱动应用程序的开发人员和团队,例如响应数据库更改、物联网读数、人工输入等
- 在标准和最佳实践尚未完全建立的领域,能够轻松采用尖端技术的组织
3.Serverless对于开发人员和运维人员的要求
- 迭代函数,在本地Web开发环境中构建和测试
- 将单个函数上传到Serverless平台
- 声明事件触发器、函数及其运行时,以及事件到函数的关系
- 测试并观察生产中的应用
- 无须更新配置以确保高可用性和扩展以匹配需求
4.Serverless的优点
- 开发人员的关注点已经远离运维问题,如管理高可用函数的部署,开发人员可以更多地转向函数逻辑本身
- 开发人员可以根据需求或工作量自动扩展
- 利用新的"即用即付"成本模型,仅按照代码实际运行的时间收费
- 操作系统,运行时甚至容器生命周期都是完全抽象的(Serverless)
- 更适合涉及物联网、数据和消息的新兴事件驱动和不可预测的工作负载
- 通常是无状态、不可变和短暂的部署。每个函数都以指定的角色和明确定义有限的资源访问权限运行
- 中间件层将得到调整和优化,应用程序的性能随着时间的推移将提高
- 易于将第三方API集成为定制的Serverless API,既可以扩展使用,又可以灵活地从客户端或服务器调用
5.Serverless的缺点
- 一种新兴的计算模型,快速创新,缺乏全面的文档、示例及稳定的工具和最佳实践
- 由于运行时更具动态性,于IaaS和PaaS相比,调试可能更具挑战性
- 由于是按需架构,如果运行时在空闲时删除函数的所有实例,则某些Serverless应用运行时的"冷启动"可能有性能问题
- 在更复杂的情况下(例如触发其他函数的函数),对于相同数量的逻辑,可能存在更多的测试需求
- 缺乏标准化和生态系统成熟度
- 由于是平台的编程模型,事件和消息接口和BaaS产品有被平台锁定的可能性
Serverless从诞生之日起到目前为止,经历了从不为人知到广为人知的过程,有人对Serverless异常看好,也有人对其表示怀疑,但是无论如何,这个架构确实在不断地流行起来,究其根本,就是因为它的众多优点带来了极大的便利。