为什么ServerLess
Serverless
定义
Serverless 至今还没有一个普遍公认权威的定义。正如新零售的概念,谁都在做但是谁也不敢认定它就是这样。按 AWS 官方对于 Serverless 的介绍:
服务器架构是基于互联网的系统,其中应用开发不使用常规的服务进程。相反,它们仅依赖于第三方服务(例如AWS Lambda服务),客户端逻辑和服务托管远程过程调用的组合。
人话:“开发者无需关注服务器,只需关注业务逻辑代码即可。”
为什么出现
近年云计算领域涌入大量改变传统架构与运维方式的新技术,容器、虚拟机、微服务等,都是为了解决一个问题 —— 降低成本与提升效率,无论是选择公有云还是私有的数据中心,都需要提前了解需要多少台服务器,多大的存储与数据库的功能,然后部署依赖环境,而且还不知道这些资源能否支撑未来的业务扩张,是否会浪费资源…,假设我们不想在这些不必要的细节上花费精力,有没有一种简单的架构模型能够满足我们这种想法?—— 参考自AWS费良宏
肯定是有的,那就是 Serverless 。
解决了什么问题
ServerLess,不是具体的一个编程框架、类库或者工具。顾名思义,即无服务架构。它是一种软件系统架构思想和方法,它的核心思想是用户无须关注支撑应用服务运行的底层主机。我的理解更偏向于将 Server 下沉。
按照其发展趋势,两年后,它很可能拥有今天像微服务的地位。
目前业界的各类 Serverless 实现按功能而言主要提供了两个方面的支持:BaaS 和 Faas。
BaaS
Backend-as-a-Service ,指大量依赖第三方服务,后端即服务,比如 AVOS Cloud。
我们不再编写和或管理所有服务端组件,在概念上它更接近SasS(Software as a Service,软件即服务),SaaS就像Github,我们可以使用它一部分流程,比如 github.io
,而 BaaS 的应用粒度更小,由于可以使用Api的形式使用,深受移动App或者单页Spa应用开发团队的欢迎,比如可供前端页面直接使用的数据库。
FaaS
Function-as-a-Servcie ,指暂存容器中运行的自定义代码,函数即服务,比如 AWS Lambda,Serverless 实现通常会依赖 FaaS
。
)图片来自https://github.com/amyers1793/FunctionasaServiceLandscape
FaaS
是一种构建和部署服务端软件的新方式,面向部署单个的函数或者操作。厂商提供服务把主机管理、操作系统管理、资源分配、扩容,甚至是应用逻辑的全部组件都外包出去。很多人认为 Serverless 就是 FaaS
,主要是因为 Serverless 这个词是在 2014 年 AWS Lambda(Amazon 的 FaaS Container)发布以后才开始变得流行开来的。
FaaS
开启的是一种全新的应用架构,完全由事件驱动。更细粒度的部署,需要在 FaaS 组件外面持久化状态。与BaaS不同,BaaS只是把我们从编写逻辑组件中解放出来,但还必须将应用与云厂商提供的特定接口与模式集成。
打个比方,你想卖一些自己的产品,那你就需要买或者租一个店面,然后你还要设计装修买家具,就好比你需要部署和维护,现在有一个“特殊”的店面,你只需要租一个盒子,将你的产品放在盒子里,委托店主帮你销售。
对业务用户强调 noserver 的运维理念,并不是真的没有服务器。技术上不可能有应用程序可以不依赖于服务器,必须要有某种硬件来支持应用程序。服务端逻辑由开发者实现,运行在无状态的计算容器中,由事件触发,以数据库为例,相当于表的查询或搜索,或者通过在表中做一些事情而生成的事件。
它的优点是降低运营与开发成本、拥有可伸缩的扩展能力、有效利用资源,企业服务器一般仅提供5%-15%的平均最大处理能力的输出,是一种资源的巨大浪费,然而 Serverless服务供应商可以给我们提供计算能力满足最大限度实时需求,让我们更有效的利用资源。它作为另一种服务的结果是整个应用程序组件被商品化。
适合什么样的场景
- 需要快速开发迭代的业务(免去基础设施部署步骤)
- 组件系统系统(组件可独立部署和扩展,并且可以让专业人员解决掉非业务的风险)
- 使用量不可预测(不运行不收费),例如聊天机器人,IoT数据分析 等…
但当你企业已经有大量沉淀的基础设施时,Serverless 就显得有点多余,毕竟采用了某云服务厂商的Serverless架构时,就和这个云服务供应商绑定了,再迁到别的云服务就比较艰难。
HOW DO
可以参考 Serverless 架构应用开发指南。但自己做的话(借用@张挺的图)
总而言之,Serverless是变革,一场必定的变革。这是云计算向纵深发展的一种自然而然的过程。