2010年底,因电信级支撑平台和业务对虚拟化的需要,我在ZTE开始了从嵌入式Linux向云计算的转型。
当时的OpenStack版本还处于A、B、C阶段,与端庄有型的CloudStack,简洁明快的OpenNebula,高端大气的Eucalyptus相比,可以合称IaaS初生年代的四小龙。其中的Eucalyptus在学术圈被高谈阔论,中国移动的大云用上了OpenNebula,CloudStack被Citrix给收了,OpenStack却还在蹒跚学步。转眼八年过去了, 如今的那三位或淡出江湖,或销声匿迹,只有OpenStack独霸高处,至少在开源界是四顾无人敌,所以一时难免心生唏嘘。
由于当年这四个开源IaaS项目的前景未明,难分上下,所以我们都尝试做了编译部署和源码级预研,代码看得最多的是OpenNebula,一是因其简单易懂的轻量级架构,二是因其采用C 实现,对于嵌入式C开发出身的团队比较容易上手,毕竟那些年Python还没火起来。最后集众家之所长,我们从零起步开发了一个电信级的虚拟化管理平台TECS,底层先是采用了Xen,后来才支持了KVM,发布之后就用在了ZTE的GoTa系统、核心网等通信业务场景中。
TECS平台的通用支撑层中就有基于Qpid的AMQP消息队列,利用了OpenNebula的方案,并进一步改造成了支持多线程、多进程、多节点、层次更丰富的通信模式,并利用该机制实现了一个有向无环图的操作事务系统,支持异常事务的多个并行化步骤的集体操作回滚。当然作为支撑层,除了通信,还有Shell、定时器、序列化、数据库、异常处理等通用组件,记得当时光是针对这个支撑层的设计方案文档就写了100多页。
到了2013年,OpenStack相继发布了Havana、IceHouse版本,仿佛暗示着该从入门ABC到了说Hi的时候了。由于电信运营商重视NFV,需要一个开放的虚拟化平台提供支撑,演化出一个更广阔的技术生态链。所以当时的团队只能忍痛放弃了自己打造了三年的虚拟化平台,转向了维护OpenStack的I版本。起初总归是有些心理排斥感,看到OpenStack的什么功能都是自己曾经玩过的,而且它对细节稳定性的要求跟电信级平台没法比。但是随着业务新功能的二次开发,对OpenStack的统一服务网关入口,高度灵活的实现层动态插件化机制,单线程多协程的服务框架,颇具微服务形态的扩展思路,以及Python语言的快速实现叹为观止,感觉它是在用一种高屋建瓴、大开大合的理念,如同玩乐高积木一样把无数既有的开源项目机动性地拼装成一个达到商用级要求的庞大平台,经过两年的研发与维护投入,从中汲取到了丰富的架构设计经验。
再后来,和OpenStack的缘分继续延伸到了如今的云桌面领域。从初创时的Kilo,到2.0版本的Ocata,OpenStack已经把其它的开源IaaS项目给彻底KO了,自身也到了守江山稳社稷的阶段。OpenStack代码中最核心的五大件,keystone、nova、glance、cinder、neutron,已经牢固成型,不同版本之间主要是在实现层进行细节微调,可用性早已不是问题了。很多云平台的实际使用者也已经很少去关注这些代码级变化,更加关注的是自身的应用场景。
相对甘守寂寞的Linux内核圈,作为上层管理平台级开源项目的OpenStack,操作流程性的代码让新人上手的速度很快,又赶上了如日中天的云计算技术高速发展期,很容易让开发者们浮想联翩,集体爆发,所以核心组件刚站稳脚跟,从sahara,heat开始的各种大帐篷项目便层出不穷,整体架构上的技术杠杆伸得有点长了。其实这种统一的基础平台性的东西,不像微信小程序、手机APP那样的互联网应用,它更需要丰富的现实运维经验加上对底层实现机制的精通,匆忙赶制出来的项目,其稳定性与生产环境的可用性值得商榷。当然,这样的形势并不能否认其开源性质的优势,既然是做一个普适性的大平台,就意味着要兼收并蓄,有容乃大。它能让无数的组件、插件、技术点来来往往,应时顺势,甚至自生自灭,但是那个核心的框架一直存在,就像帕特农神庙一样永远矗立着,本身就是很了不起的事。就像波普尔在《开放社会及其敌人》里面说的那样,好的社会是开放的,开放社会就意味着会有形形色色相互矛盾的观念。正是这种相互矛盾,让社会具有多种选择,多种可能,越变越好。相反,封闭的社会,是一元的、单纯的,但因为这种社会失去了矛盾的对峙,失去选择,就会一错到底,走向倒退。
在桌面上谈谈OpenStack
再来说说云桌面和OpenStack的事。OpenStack本身是个管理平台,给用户带来实际价值的是对其场景化的利用,毕竟搭台的不如唱戏的抢眼,云桌面就是在云平台上唱遍大街小巷的一出好戏。电脑桌面这个整日里相看两不厌的应用,无论是庙堂之高,江湖之远,各行各业都离不开,场景化千差万别。距离人那么近的应用,便携性、易用性,安全性、体验感都是绕不过去的话题,在IaaS日渐推广的今天,桌面上云也成了当仁不让的选择。
但是谈IaaS的场合却似乎少提桌面云,因为桌面虚拟化是先于云计算出现的,在OpenStack之前,已经有形形色色的桌面虚拟化管理系统了,直到现在也是只见多不见少,因为自己开发一个几台电脑的管理系统并不是什么复杂的事,所以云桌面的名字里面也带个云字,但是和IaaS常常是花开两朵各表一枝。其实自己开发的小型化虚拟机管理系统在几根螺丝就能拧死了的小场合,小规模的用一下可以,一旦大规模地铺开建设,除了桌面体验,整个管理平台的高可用性、灵活性,热迁移、存储备份、二次开发便捉襟见肘起来,就像自留地种的小菜一样,虽然口味有机些,但是要常规批量供应大客户就紧缺了。
云桌面的管理平台可以只用到OpenStack中的keystone、nova、glance、cinder、neutron这最成熟的五大件,背靠大树好乘凉。而且目前的桌面操作系统还没法跑在容器里,对K8S之类的容器平台也不感冒。我们目前对OpenStack这个平台已经不用投入太多精力去开发,它在桌面虚拟化应用场景的稳定成熟度已经能让维护人员无需整天提心吊胆了。
更进一步考虑,VDI桌面核心内容是虚拟化,完全可以不依赖于平台管理层,比如我们目前的云桌面平台3.0版已经做到能够以虚拟机镜像,容器镜像的形式安装到任意一个现成的IaaS平台、超融合环境中去,成为真正的DaaS,从而让私有云厂家无须重复开发,私有云用户无须重复建设。坚持使用OpenStack云平台来运行我们的桌面系统,就是看中它有一个开放的标准化的接口体系,能够为我们的桌面应用提供更多的管理功能入口,从云平台这一层来讲,我们的云桌面是把OpenStack这个开源项目做到了最恰如其分的场景化利用。
经过八年的磨砺,OpenStack已经从炙手可热、从者如云到了大隐隐于市的阶段。基本功能的日益成熟,渐趋稳定,版本差异化变小,必然会让它淡出视野。凡事成为过往,就会有许多责之深、爱之切的声音不断发出。不如让它踏踏实实做好自己的平台角色,在一个个项目、产品领域发挥台柱的功力,将会是对这么多年积累下来的开源技术价值最好的印证。
作者介绍:
张文剑,南京机敏科技首席架构师,主攻OpenStack VDI,参与编写中国开源云联盟桌面云标准,主持机敏云平台1.0、2.0版本的研发。