浅谈云计算之四:什么是FaaS
-
我们之前介绍了云计算的基本概念和其中最重要三种云服务,即:
除了这三种云服务,我们经常也看到很多其它所谓的云服务(各种XaaS),比如
- BaaS:即所谓的Backend as a Service,为三方提供后端逻辑和状态的管理服务。
- FaaS:提供所谓的基于云的函数服务,知名的如亚马逊的Lambda,Google的 Cloud Functions等
- DBaaS:提供基于云的数据存储服务,如SnowFlake,Google的Cloud SQL,AWS上一堆的可直接使用的数据库
- IDaaS:提供基于云的身份管理和验证的服务,如Okta,Auth0等提供的服务
- SECaaS:提供基于云的安全管理服务
- 等等
虽然他们名称上与上面的IaaS,PaaS和SaaS不同,但它们都是这三种基本服务类型的变种或可以归属为其中之一;像上面的BaaS可以归属为PaaS,DBaaS,IDaaS和SECaaS可以看做是有一定特殊性的SaaS服务(之所以说他们特殊是他们解决的是一类特殊且专业的基础性问题)。但其中的FaaS,即本文的主角,却值得单独提出来做个更详细的介绍。
FaaS的全称是Function as a Service,我们称之为云函数平台服务或函数即服务:通俗点说,它是一种为用户提供函数运行环境的服务,即用户提供一段可执行的代码(即函数),FaaS为这段代码提供和管理运行环境,并根据用户的需要决定代码的运行时间和方式和实现更高级的如弹性扩展等功能。从这个定义来看,我们可以把FaaS理解为一种特定的PaaS系统,但和PaaS不同之处在于,它为用户提供计算服务而非构建完整应用服务。在FaaS中,每个被执行的用户函数(代码)可以被看做是一个最小的对外提供服务功能的模块组件,如果用户愿意,通过一组函数也可以对外提供一个完整的应用服务。
FaaS的出现是因为软件行业的两个趋势所形成的必然结果:
-
微服务(Microservice)化:软件系统日趋复杂,为了降低系统设计实施复杂度,方便快速开发迭代以应对业务变化,软件系统的开发从之前的单体式系统(Monolithic)逐步演变为面向服务(SOA)的系统;这个进程演变到极致就成了现在大家所熟知的微服务化系统。所谓微服务化即将软件功能按照一定原则进行细分,将强聚合的部分提炼出来形成一个小的,往往是无状态的服务,即微服务,而整个软件应用则通过调用这些微服务和微服务之间的交互来完成业务功能。
微服务化将原来不可控或很难控制的复杂逻辑分割成若干更可控,更容易实现的独立模块,通过分而治之和分层的方式将整个系统复杂度分解并转换到了了若干个逻辑上独立的,可自行扩展的,微型化的服务模块,从而极大的降低了设计和实现难度,提升了开发效率和软件系统升级迭代的速度(但如后文提到,它也将软件系统的管理运维变得更为复杂和专业)。而微服务化到极致,则可能成为一个一个的函数,这个也是FaaS平台中被管理的基本单元,如下图所示:
-
去服务端(Serverless)化:随着云计算的普及和大前端的发展,由于客户端的处理能力越来越强,软件应用开发出现的另外一个趋势则是所谓的去服务端化:软件的客户端(移动端或桌面网页端)处理了越来越多的业务逻辑,而传统后端逻辑逐步演变”简化“为围绕状态管理的服务端逻辑,而这部分逻辑可以完全放倒云端(即所谓的去服务端),利用现有的云服务(如PaaS,SaaS和FaaS等),开发人员无需关注后端的部署、运行和运维。
这种去服务端华极大的降低了企业开发和拥有软件应用的难度:企业不仅能更好的专注于自己业务系统的开发,还可大幅降低开发和运营成本并获得极大的的扩展上的灵活性。下图可以看见传统的维护服务端和使用去服务端化的系统在成本和扩展性上的区别:传统的服务端意味着更多的成本支出和非线性的扩展,而去服务端化通过先用后付费(Pay as you use)方式实现成本节约和完美的线性扩展(水平扩展)能力。
这两个趋势的出现在极大的改变了软件系统的设计理念和开发实施实践,尤其是去服务端化直接催生了FaaS:从本质上来说,FaaS是帮助用户在不用维护和管理服务器,甚至不用维持一个长期运行的服务程序的情况下运行业务所需的后端逻辑(如状态管理,流程驱动等),它定义了云端去服务化的一个标准方式和实践。
作为最知名的云服务厂商,亚马逊早在2014年即率先推出了业界第一个符合定义的FaaS服务,AWS Lambda服务:一个通过事件驱动的,支持多种开发语言的,帮助用户去服务端化的函数计算平台服务。使用AWS Lambda服务,用户可以用所支持的任何语言编写响应和处理所触发事件的业务逻辑代码(即事件的响应函数),并在代码中可以管理各种资源和进行状态维护,而无需关心这段逻辑代码在什么地方如何进行执行和扩展。我们可以把每个这样的函数视为最简单最基本的的微服务,AWS Lambda为这个函数或微服务提供了完备的运行环境支撑并可根据用户的需要进行灵活的弹性扩展。
但是FaaS并不仅仅是帮助客户简化了应用系统的开发,它本身也引入了一些其它问题,其中之一则是如何进行监控?由于FaaS相对其它云服务类型,其抽象粒度太小,所以很难采用传统的方式进行监控(例如你无法在FaaS上部署所谓的监控采集器,也无法连上一个FaaS函数进行测量);如何对FaaS系统进行监控呢?一般来说
- 你需要能具备从FaaS服务供应商获得足够的底层监控数据的能力
- 在设计和编写FaaS代码时需要通过标准的插件或框架来完成对业务处理的监控需求
择维士作为新一代监控理念的倡导者和实践者,在这方面已经有充足的经验和案列,可以为有需要的客户提供咨询、实施和其它帮助,如果你想了解择维士是如何对FaaS做监控的, 请访问择维士官网并注册试用;我们在后续的文章中也会逐步介绍一些好的监控方案和框架,帮助客户更好、更放心的使用FaaS服务。