2019.03.19 丨 58架构师

函数计算云平台设计与实现-58自研Serverless架构云平台

2019.03.19 丨 58架构师

背景


随着AWSlambda的诞生,无服务器这个词与FaaS一起出现在舞台中,Serverless也开始进入人们的视野。全球各大云服务厂商都纷纷推出各自的Serverless平台,2017年国内两大云服务厂商阿里云、腾讯云先后推出各自的Serverless产品。


Serverless架构是一个全新的事物,中文意思是“无服务器”架构。所谓的“无服务器”不是真的脱离了物理上的服务器,而是指代码不会明确地部署在某些特定的平台或者硬件的服务器之上,运行代码的托管环境是由Serverless平台提供。


“Functions as a Service”即FaaS,FaaS 是Serverless 的子集,也是实现整个应用 Serverless 化的核心服务。Faas应用是指一部分服务逻辑由应用实现,但是跟传统架构不同在于,他们运行于无状态的容器中,可以由事件触发,短暂的,完全被第三方管理,功能上FaaS就是不需要关心后台服务器或者应用服务,只需关心自己的代码即可。


函数计算云平台


函数计算(Faas)平台是58自研的函数计算平台,开发者在开发新应用时,无需申请和管理服务器,只需要在平台提供的函数模板上,使用平台支持的语言,编写业务核心代码。在Faas平台上进行几步简单的操作就可以弹性、安全地运行代码。Faas平台提供管理底层计算资源,包括服务器,cpu、内存、网络等。


Faas平台具有如下特性:

  • 无需运维

    全托管服务,将用户从基础设施的管理工作中解放,不再需要关心周边组件,极大地降低了服务架构搭建的复杂性。

  • 弹性伸缩

    实现毫秒级别的实时弹性伸缩和动态负载均衡,从容应对突发访问。不管您的应用每天的请求数处于波峰还是波谷,均可自动安排合理的计算资源满足业务需求。

  • 持续扩展

    事件触发机制,衔接诸多场景需求,通过运行代码以响应每个触发器来自动扩展应用程序。

  • 简单易用

    技术人员只需编写最重要的“核心代码”,可以快速开发函数代码,快速部署和验证函数功能。

 

Faas平台提供如下功能:

  • 函数管理

    提供一站式编写、构建、部署、下线、回滚等函数管理操作,用户在页面可以直接完成函数管理的全部操作。

  • 日志管理、监控和告警

    提供构建、部署、下线、函数运行日志。提供完善的函数运行指标监控,在Faas管理平台可以查看函数运行指标。对函数运行的关键指标进行告警。

  • 开发语言

    目前支持Java和Nodejs两种开发语言,后续将支持Go、Python、Php等更多开发语言。

  • 触发器

    目前支持Http触发器、WMB消息触发器、定时任务触发器。

 

Faas平台的应用场景:

  • 快速开发新业务

在Faas上只需要在函数中编写业务代码,开发完函数代码后在Faas上直接构建和部署,特别适合业务初始阶段,快速验证商业模式和开发新业务系统。

  • 开发简单功能

开发人员在日常中经常会遇到开发一个很简单的功能,比如数据查询功能,接口数据调整功能,在当前的开发中,为了提供这些简单的功能,需要提供一个完整的系统,完成系统功能的配置、部署、上线等步骤。在Faas平台中只需要开发几个函数就可以搞定整件事情。

  • 基于事件处理

Faas提供事件源的接入,目前已经接入了WMB消息和定时任务触发器,后续将继续接入其它的事件源。比如接入WOS文件存储事件源,在上传图片到WOS后,需要对这些图片进行处理,可以在Faas中编写函数实现图片的处理。


函数计算云平台系统概述





  • K8S集群:Faas集群运行在k8s集群中,由k8s集群管理函数运行的容器,k8s的service对外提供统一的api服务,通过k8s的api实现容器的部署、下线和扩缩容。


  • 函数docker容器:函数在Faas上运行时,由Faas在k8s上启动一个函数docker容器。容器内部有一个接入组件,由接入组件对外提供函数的接入层,接入组件将接收到的请求再转发到函数功能上。


  • Faas Gateway:Faas Gateway是Faas对外提供的统一入口,Gateway主要承担两个功能,一是提供Faas的管理API接口,通过API可以部署、下线和扩容函数,查询Faas的内部状态;二是提供访问函数功能的API网关功能,外部通过Gateway访问函数,Gateway根据函数名称,直接将访问请求转发到具体的函数,再将函数返回的结果返回给调用者。


  • Faas管理平台:Faas管理平台是管理和使用函数功能的统一平台,在Faas平台上可以创建应用,在应用下面可以创建函数;提供函数编辑、构建、部署、下线和回滚等操作;可以选择函数的触发器,实现不同触发器下的函数功能;Faas平台还提供函数监控、告警、日志等周边功能。


  • 触发器:触发器是连接外部系统和Faas函数功能的桥梁,触发器可以接受外部事件,将事件转换成调用函数功能的信号,目前提供的触发器有API触发器、定时任务触发器和WMB触发器。


  • Baas服务:在函数功能的实现过程中,需要使用后端提供的有状态服务,这些有状态服务器可以是数据存储、文件存储等;业务在开发过程中,通过SCF、API等方式提供各种业务服务功能,在函数中也可以使用这些服务。

函数计算云平台的核心工作原理

函数构建和启动



1、用户在Faas管理平台编写完函数后,构建函数镜像,将函数代码和运行环境打包到函数镜像中,然后将函数镜像上传到镜像仓库。

2、在Faas管理平台部署函数时,调用Faas Gateway的部署接口,将函数的部署信息发送给Gateway。

3、Gateway根据函数部署信息,调用k8s的api,将函数部署deployment发送给k8s集群。

4、K8s集群从镜像仓库中拉取函数镜像,在k8s中启动函数容器,等待处理函数请求信息。

函数调用过程



1、外部触发器接收事件源发出的事件,根据事件驱动触发器调用函数功能。

2、触发器将请求发送到Gateway,Gateway作为函数功能的统一入口。

3、Gateway根据调用的函数功能,将请求转发到相应的函数。调用函数容器提供的Http接口。

4、函数处理接收到的请求,完成函数功能后,将结果返回给Gateway,Gateway将函数处理结果返回给触发器。

函数扩容和缩容



1、Faas Gateway接收函数请求。将函数请求转发给函数。

2、Faas Monitor监控Gateway,监测函数请求流量。

3、Monitor根据请求监测结果,判断是否对函数容器进行扩容或者缩容。

4、Monitor调用K8S API完成对容器的扩容和缩容。



函数容器的副本数:

Faas为了减少函数容器的冷启动时间,将函数容器的最少副本数设置成1,在部署函数时,会预先启动一个函数容器。当流量逐渐上涨时,会自动实现函数容器的扩容,但是函数容器副本数是有上限的。当函数副本数达到上限时,将无法继续扩容。

小程序云




目前腾讯、阿里、百度、头条等厂商纷纷推出各自的小程序运行平台,这些小程序平台为公司带来了新的流量,扩展新的业务,为了方便开发人员开发各种小程序,58自研了小程序云平台,在小程序云平台上,用户可以借助小程序云提供的组件和Faas开发模式,快速开发新的小程序。


Faas平台给小程序云提供的主要组件是:

  • 数据库服务组件:Faas平台提供一套Nosql数据库存储,用户可以通过数据库服务组件自动创建小程序使用的数据库和表,提供操作数据库的增删改查等功能,方便开发人员快速开发数据库访问功能。

  • WOS文件存储组件:Faas平台提供一套WOS文件存储组件,帮助小程序将文件存储到WOS文件存储系统中,开发人员不需要申请WOS相关的资源就可以实现文件上传和访问功能。

  • 云函数:小程序中调用的后端功能可以在Faas中通过函数功能实现,Faas提供一整套函数创建、构建和部署的功能,提供各种的Http访问方法,Faas中的函数可以调用后端的数据存储、文件存储、SCF服务等各种后端服务。

总结


58 Faas平台是58自研的一站式函数计算平台,目前有多个应用接入Faas平台。本文主要介绍Faas平台的功能和特性,Faas平台的系统架构,以及核心功能的实现方法,以及基于Faas平台提供的小程序云解决方案。由于篇幅限制,其它功能、如日志处理、触发器实现原理、语言的相关特性等功能将在后续的文章中详细介绍。

本文作者:徐海芳

文章来源:58架构师微信公众号,欢迎大家前去关注

文章原址:函数计算云平台设计与实现

媒体联系

票务咨询:赵丹丹 15802217295

赞助咨询:郭艳慧 13043218801

媒体支持:景    怡 13920859305

提交需求