无服务器计算(Serverless Computing,以下简称SC)的概念最近很流行,甚至被解读为第四代技术架构。就像出行服务:最早的时候,我们需要有辆车才能驾车出行(Physical Machine);后来我们只需要从提供汽车租赁服务的公司租辆车就可以满足出行需求(VM及微服务);再后来我们不需要自己开车,通过手机就可以即时或者定时地给自己或他人安排接送服务(Serverless)。
SC在保障企业基础架构代运维的同时,又完全满足了应用开发的客制化。它首次提出了“功能即服务(Function-as-a-Service,FaaS)”的概念,它将一些常用的服务预打包好,比如AWS Lambda(AWS的SC云)的SES(邮件服务)、队列服务、CI/CD管道服务等等。
严格意义上说,FaaS只是SC服务的一类形式,此外还有后端即服务(Backend-as-a-Service,BaaS)以及基于FaaS的数据库。前者提出了无运维(NoOps)的概念,开发上线的应用不用担心可用性的问题;后者将传统意义的数据库服务变得更灵活,无需担心容量不够或超分问题,按实际使用收费,适用于无法预知的读写压力(如新站点)、周期性压力(如定期交付的开发测试项目)以及间断性压力(如博客)。
相较于PaaS服务,SC架构的自动化程度更高,对于开发环境的依赖度更低,且应用只在被调用时唤醒因此收费更加合理。
除了AWS有自己的SC云Lambda之外,知名的云服务厂商Azure也有自己的SC云Functions,Google有Cloud Functions。除此之外我们也可以借助一些开源工具,比如Kubeless来搭建本地的SC环境。
Github上有kubeless的安装包,截至小编访问的时候,版本是上月的V1.0.2。
下载下来后,根目录下的README.MD文件里有详尽的使用介绍。参照帮助文档,我们首先解压zip包,安装kubeless。
然后按照实例,创建命名空间和触发器,触发器包括http调用的触发器和cron计划任务的触发器。
接下来按照帮助文档,我们安装python和nodejs的运行时。根据需要,您可以选择自己擅长的编译语言。
拿NODEJS为例,实例程序是获取输入,然后输出“Hello World!”
NODEJS的function名为myfunction,测试时根据帮助文档获得的命令kubeless function call myfunction --data '字符串'可验证测试结果。同时通过kubeless logs可以查看function被调用的日志。
除了定义SC相关服务外,Kubeless还可以定义网络规则,限定不同客户机对服务的访问权限,这里就不一一赘述了,对无服务器计算感兴趣的同学可以上github.com/kubeless/kubeless站点自己试一把哈~