悉尼峰会:Serverless在OpenStack中的实现
Posted 开源云中文社区
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了悉尼峰会:Serverless在OpenStack中的实现相关的知识,希望对你有一定的参考价值。
Serverless并没有一个权威的官方的定义,为了便于理解,我们应该从Serverless能解决什么问题来描述。
澳大利亚悉尼当地时间11月6号上午9点,第16届OpenStack峰会在悉尼国际会议中心盛大开幕,来自全球52个国家2300余名与会者,将就以OpenStack为核心的开放基础架构相关技术和商业实践展开为期三天的讨论,本文为第三天的讨论内容之一。
一、 什么是 Serverless
目前,当开发人员使用OpenStack或者Kubernetes云平台进行业务开发时,仍然需要关心很多和虚机、容器相关的后端工作,比如怎样配置数据库、缓存、监控,应用的负载均衡,虚机的存储和计算资源,横向/纵向的扩展能力,甚至容灾稳定性等非专业逻辑的开发。
这些后端的运维和开发知识、经验降低了开发者的业务开发效率。
设想一下,如果云平台能自动解决上述问题,让开发者只专注业务逻辑,云平台负责应用部署和运行,这样是否可以提升开发效率和产品质量?这种不用关心后端如何支撑服务运行而只需要实现服务本身的理念,我们称之为Serverless。
二、 Serverless 和 Function as Service
Serverless也可以指一部分服务逻辑由应用实现,但跟传统架构不同在于,他们运行于无状态的容器中,可以由事件触发、生命周期短暂、完全被云平台管理。这种思路是‘Functions as a Service / FaaS’。用户通过云平台可以运行自定义的代码(函数),函数是无服务器架构中抽象语言运行时的最小单位。
三、 Serverless设计原则抽象
虽然不能给出精准定义,但我们可将Serverless的设计原则总结和抽象出来,如上图所示:
不用考虑Server的问题。
通过写代码来自定义Function。
每个Function应该只负责单一功能, 这样可以保证函数很容易测试,并稳定运行。通过以一种松散编排的方式将函数和服务组合起来,能够构建易于理解、易于管理的复杂后端系统。 笔者认为这条原则非常重要,否则Function就会变得像一个完整的应用,需要考虑 HA、LB、动态扩缩等功能特性。
而且Function应该无状态, 这样会让无状态功能很强大,让平台得以迅速扩展,处理数量不断变化的请求或者事件。
使用事件驱动的模式,提高不同函数之间的交互效率,降低系统复杂性。
四、 已有的FaaS方案介绍
目前最具代表性的 Serverless 解决方案当属亚马逊的 AWS Lambda。2014年11月14日,AWS发布了AWS Lambda。 该服务最迟支持Node.js,现在也支持Java和Python。它与Alexa Skills Kit(软件开发工具包)紧密集成,亚马逊提供交互式控制台和命令行工具,以便上传和管理代码片段。
其他的方案还有来自Kubernetes社区的Kubeless,以及Google推出的Google Cloud Functions、Iron.io、Fission等等。
五、 OpenStack中的Serverless方案
OpenStack中发起了新的项目,名字叫做 Qinling ( 灵感来自于中国的秦岭山脉 ),目标就是在 OpenStack 平台上提供 Function as a Service 的功能。
下面一张图可以看出Qinling如何利用OpenStack中已有的组件来支撑用户自定的Function运行。OpenStack提供丰富的IaaS层资源以及用户验证( keystone ), 事件监控( Adoh ),负载均衡等功能。用户自定义Function可以灵活地利用这些资源和服务达到效果。
那么Qinling内部又是如何实现的呢。目前Qinling支持的功能比较简单,对应的实现也比较简单:
用户通过代码的方式定义Function的行为。
通过Qinling的CLI,指定代码文件创建Function。
Qinling收到请求之后, 获取用户指定的代码文件,生成Docker image,通过Container COE以容器的方式运行用户定义的Function,执行结束回收这个容器。
Qinling的架构图如下,目前Kubernetes是默认的COE。
六、 Qinling功能Demo
第一个场景,图片压缩:
用户写好代码,实现的行为是:监听swift upload事件,如果有upload发生,则对上传的文件进行压缩
通过CLI将上步中的代码,创建为Function
通过页面上传图片到swift container
最后检查swift中是否有压缩后的文件,以证明Function已经执行
第二个场景,Qinling集成Zaqar:
使用Zaqar创建message queue
使用Qinling创建Function 1,并将执行结果输出到创建好的message queue中
使用Qinling创建Function 2,监听message queue的消息,执行自己的代码
场景二说明了,每一个Function应该是完成单一功能的,且无状态的函数。多个Function之间通过Zaqar这样的已有服务作为连接的中间件。
总结
听完这个Session,Function as a Service的理念让人眼前一亮,有了这个功能,云平台会变得越来越智能,用户只需要实现自己的Function,剩下的一切都由云平台完成。期待之后的Qinling能更智能,更高效的管理Functions,更期待有更多的在OpenStack平台上使用Function as a Service的精彩案例。
感谢 EasyStack 工程师 发自悉尼现场的报道
投稿邮箱:openstackcn@sina.cn
以上是关于悉尼峰会:Serverless在OpenStack中的实现的主要内容,如果未能解决你的问题,请参考以下文章
烽火在2017 OpenStack悉尼峰会上发布最新FitOS6.0云操作系统
中兴通讯在2017OpenStack悉尼峰会上正式发布新一代云平台TECS 6.0