云原生安全:攻防实践与体系构建
上QQ阅读APP看书,第一时间看更新

2.5 Serverless

随着云原生技术的不断发展,应用的部署模式逐渐趋向于“业务逻辑实现与基础设施分离”的设计原则,而Serverless作为一种新的云计算模式,较好地履行了上述设计原则。此外,从目前云原生技术的发展脉络来看,Serverless可谓云原生技术发展的最终阶段。

2016年8月,martinfowler网站上发表的Serverless[6]一文对Serverless做了详细阐述。简单来说,Serverless可在不考虑服务器的情况下构建并运行应用程序和服务,它使开发者避免了基础设施管理,如集群配置、漏洞修补、系统维护等。Serverless并非字面理解的不需要服务器,只是服务器均交由第三方管理。

Serverless通常可分为两种实现方式,即BaaS(Backend as a Service,后端即服务)和FaaS(Functions as a Service,函数即服务),其中FaaS是Serverless的主要实现方式。简而言之,FaaS即开发者编写一段代码,并定义何时以及如何调用该函数,随后该函数在云厂商提供的服务端运行,在此过程中开发者只需编写并维护一段功能代码。

此外,FaaS本质上是一种事件驱动并由消息触发的服务,事件类型可能是一个HTTP请求,也可能是一次上传或保存操作,事件源与函数的关系如图2-4所示。

图2-4 FaaS事件源触发示意图

FaaS的典型代表为AWS Lambda,为便于理解,下述为一个简单的Lambda Python处理函数:


import json
def lambda_handler(event, context):
return {
    'statusCode': 200,
'body': json.dumps('Hello from Lambda!')
}

可以看出,以上代码导入了JSON Python库并定义了一个lambda_handler函数,该函数需接收两个参数,分别为event和context,其中event参数包含此函数收到的事件源信息,参数类型通常是Python的dict类型,也可以是list、str、int、float等类型,而context参数包含此函数相关的运行时上下文信息。

图2-5大致展示了传统的服务端应用部署和FaaS应用部署,当应用程序部署在物理机、虚拟机、容器中时,它实际上是一个应用进程,并且由许多不同的函数构成,这些函数之间有着相互关联的操作,一般需要长时间在操作系统中运行;而FaaS通过抽离虚拟机实例、操作系统和应用程序进程改变了传统的部署模式,使开发者只需关注单个函数操作,剩余基础设施管理均由第三方托管平台提供,当有事件触发时函数被执行,开发者为使用的资源付费。

图2-5 传统服务端应用与FaaS应用部署比较图