网络操作系统是网络设备厂商的核心技术平台,不同的公司又有不同的技术选择。Cisco作为老牌厂商,采用了多分支并存的发展思路:其IOS家族实际上包括了IOS、IOS XR、IOS XE等众多成员,分别支持诸如边缘路由器、核心路由器、交换机等不同的产品系列,几乎是为每种产品都发布一套新的操作系统。不同系统的架构差异巨大,冠以IOS之名,只是为了统一的品牌。Juniper则始终坚持单操作系统策略:JUNOS采用FreeBSD开源操作系统为内核,可以在路由器、交换机、安全网关等不同产品上跨产品使用。不过JUNOS虽然是单操作系统,但其支持不同的产品实际上采用了不同的版本,虽然架构相似,但很多地方还是有明显的差异。
Comware是H3C公司的软件平台,其地位,如同IOS之于Cisco、JUNOS之于Juniper,支撑着公司众多的网络产品的发展。Comware从其诞生的第一天起,就一刻不停地发展完善自己,不断地进化,经过10年的持续努力,使得无论是内在品质,发展潜力,还是市场份额,Comware都已经进化成当今世界最优秀的网络操作系统之一。
H3C同样采用了单一软件系统策略,却比Juniper做的更彻底:Comware向单一软件版本覆盖更多产品的目标迈进。就象北京奥运的口号,Comware所追求的,是“同一个世界,同一个梦想”。
Comware能够迅速地发展,与其市场定位和发展思路密不可分。Comware立项之初,就被定义成H3C公司的核心竞争力之一,成为公司最为重要的软件平台和核心技术的载体,支撑公司从低端盒式设备到高端框式设备全系列化网络产品的开发。因此,Comware必须具有丰富的特性、良好的可裁减性、灵活的可伸缩性,以支撑各种硬件平台和体系结构。如何能够做到这一点?只有通过良好的架构设计,这一切才有可能。
下面我们来拨开Comware神秘的面纱,看看其内部的构造。
Comware采用了Linux的内核,但却仅仅保留了其内核的最基本的调度功能,而其他诸如内存管理、消息管理都根据自己的需要,替换成自己的。最为重要的是,全部的网络协议,以及网络产品地支撑架构,Comware全部换成了自己的,这样才最适合Comware地发展。
Comware的体系结构由大到小分解,可以分为平面(plane)、子系统(subsystem)和模块(module)三级。其构成如下图所示:
Comware由上至下被分为了4大平面:管理平面、控制平面、数据平面和基础设施平面。其中:基础设施平面在操作系统的基础上提供业务运行的软件基础;数据平面提供数据报文转发功能;控制平面运行路由、MPLS、链路层、安全等各种路由、信令和控制协议;管理平面则对外提供设备的管理接口,如命令行、SNMP管理,WEB管理等。此外,作为一个完整的软件系统,运行Comware软件的产品还有自己的驱动和对应的硬件系统,构成完整的软硬件体系结构,只不过这部分是随着产品变化的,不作为Comware平台化的构件的一部分。
平面之下, Comware被进一步划分成了25个子系统,分别完成一部分相对独立的系统功能。这些子系统各自相对独立,又有一定的依赖关系。每个子系统又可以分解成为大小规模不同的模块。这些模块才是Comware系统运行的基本单元。目前Comware系统已经包含了270多个不同的模块,覆盖路由、交换、无线、安全等不同领域的各种特性,为产品提供了极为丰富的特性。
Comware支持的产品众多,结构差异巨大:从只有一个单核CPU的小盒子,到拥有多核CPU以及各种加速单元的集中式产品,再到拥有双主控和多个业务板的分布式设备;从多个小盒子堆叠而形成的大家伙,到多个分布式设备级联形成的巨无霸。一套代码如何支持这样从简单到复杂的硬件体系结构?答案就来自于Comware系统的层级结构和对硬件的合理抽象。
Comware撇去各种复杂结构的差异,把管理的实体分为端口(port)、子槽(subslot)、槽(slot)、机框(chassis)四级。端口和子槽属于集中式的范畴,槽、框架属于分布式范畴。这样不管产品结构如何变换,最终都落入这样的4级管理结构中。同时,Comware重新定义了主控板和接口板的功能划分,支持主控板出业务口,实际上从功能角度模糊了主控板和接口板界线,同时实现了1:N备份,进一步打破传统双主控系统1:1备份的限制。这样,使得不同的产品结构得到了统一。至此,Comware的世界中只有集中式和分布式两类产品:集中式的产品不必考虑系统间通讯问题,结构简单;分布式产品需要考虑系统间通讯问题,结构相对复杂一点,但所有的分布式问题都被同一化了。
比如,作为Comware基本单元的模块,可以根据产品的需要进行灵活的裁减和定制。产品可以自由的决定需要哪些模块,不要哪些模块,或者决定一个模块所支持的特性规格。这种裁减和定制是通过编译链接完成的。平台并不会针对每款不同的产品提供不同的代码版本,而是提供一个支持所有特性的超集代码,并编译形成一个统一的LIB库。产品只需要修改Comware另外单独提供一套初始化代码和工程文件,就可以在链接时,从这个超集的LIB库中,自动选择自己所需要的特性和规格,把不需要的LIB忽略掉,形成各自不同的目标文件——IMAGE,最终形成自己个性化的产品,彷佛这套代码就是为产品量身定做的一样,不会缺少任何产品所需的规格,也不会有冗余和浪费。
除了提供模块级的功能裁减和定制以外,Comware更是根据自己支持的产品特征,提出了模块和子系统替换概念。举例来说,IPv4路由子系统是一个庞大的系统,内部包括了多种单播路由协议,静态路由,路由协议之间各种复杂的引入引出策略以及各种路由迭代算法。这样的子系统,为了支撑各种复杂的应用,其基干部分——路由管理——的设计也是十分复杂的。即使裁减掉各种路由协议,其基干部分规模客观。而对于一些桌面终端产品而言,仅仅支持静态路由就足够,并且由于硬件限制,诸如内存、Flash太小,无法提供太多的空间容纳这样的规模。于是,子系统替换就派上了用场。Comware另外单独构建了一个轻量级的IPv4路由子系统,其规模甚至远远小于一个模块的平均大小,仅仅支持静态路由,从而满足了对容量的要求。而这样的替换子系统,由于对外提供的子系统间接口与原来的子系统完全一致,Comware内部的其他子系统根本不关心其内部变化,所以新的子系统和Comware整体可以无缝的融合在一起。
面向接口开发,正是Comware支持灵活裁减和定制的一大法宝,也是隔绝不稳定因素在系统中扩散的防火墙。面向接口开发的设计理念,使得Comware在实现“灵活”的同时,又不失“稳重”,所有的工作都有良好的可继承性,使得Comware的规模得以不断的扩张,而质量却并没有随着规模的扩张而下降。目前的Comware已经发展成为有上千万行源代码的庞大系统,但其质量相比5年前的百万行规模的小系统,反而有明显的提升。
由上述特点看出,Comware的软件架构伸缩性极强,同一个版本的软件,即可以运行在4G内存,支持丰富的特性和卓越性能的高端路由器,也可以运行在只有128M内存,特性简单灵活的小盒子上,覆盖了H3C三大产品线,60多款产品,130多个不同的编译版本。综观当前业界,采用单一版本代码可以覆盖如此之广的产品范围,亦是绝无仅有的事情!
采用同一版本的代码为特性的开发和维护都带来巨大的价值,不仅仅加快了特性开发的周期,而且维护也更为方便,代码的质量也更为优秀。同时,也使得同一个特性,在H3C产品体系中表现出天然的一致性,为用户的学习和使用提供了极大的方便。
Comware在业界率先提出了OAA(Open Application Architecture)的理念。通过OAA,Comware对外界开放了自己的编程接口。Comware提供的开发接口,是基于POSIX兼容的,同时,还辅以ACFP、ACSEI等辅助协议工具。POSIX是目前被应用最为广泛的开放接口,业界庞大的第三方软件开发团队都可以轻松使用。而通过ACFP和ACSEI这样的辅助协议工具,第三方开发的软件一旦嵌入到H3C的产品上,就可以轻松控制Comware主系统的行为,使得一切应用皆有可能。
Comware强大生命力的源泉在于自身永远响应市场需求,处于不断的发展进化之中。未来的Comware必将变的更加强大,更为易用,成为所有用户的最佳选择。