抽象层:下一代网络设备中跨平台可重用软件基础

转载 2004年09月02日 22:12:00

By Michael Ward, Program Director, Product Management; LVL7 Systems
Copyright 2004, LVL7 Systems Inc., All Rights Reserved


 

如今,随着分布式的网络计算设备的广泛应用,网络设备开发商也面临着众多的挑战,他们要去面对在私有和公共网络中如何有效实现与别的厂商之间设备的互连互通问题。并且,网络技术发展如此迅速,以至于今天的先进网络设备可能在一年或者半年后就过时了。作为开发者来说,他们必须得考虑这种快速的发展趋势,从眼前和长远的角度出发,基于互操作性、可扩展性以及高性能等要求来规划其产品开发计划。

网络设备供应商在产品开发中要选择一系列的系统组件,比如说网络芯片、CPU、嵌入式OS以及机架。与此同时,他们要对自己的系统软件体系结构充满信心,相信它能够迅速地集成到新的产品设计中,并在类似的新设备中重用任何以前开发的应用。其间,最核心的问题就是如何实现所有网络平台之间的互操作性,而不管所使用的是何种硬件和操作系统。

另外,系统设计者还将面临以下的一些问题。比如说,今天的网络设备必须支持多种标准,这也包括了任何已经出现并逐步成熟的将来的标准。当新技术可用时,网络系统必须能够将它集成进来,从而使得供应商可以加入自己的增值功能来满足一些独特的客户需求。

那么,设备制造商到底要如何来研制产品系统以便和任何其他类似的系统互连互通呢?一种得到验证的方法就是使用抽象的网络软件框架,从而使系统无论是对于当今和将来的标准,还是对于任何硬件设备和操作系统平台,都可扩展并适用于其上。这样的方法使得系统设计人员不仅可以重用内部软件开发的成果,而且也可以迅速地将其他资源组件集成到产品中来,不管它们是开放源代码的或者是第三方商业软件。

硬件及操作系统独立

当今的网络软件需要独立于任何特定的硬件基础设施。假设你为某个固定配置产品编写了一套特定的软件,该产品是基于ASIC芯片设计的,有24个端口,并且没有任何系统冗余。那么,对于一个摆放在AdvancedTCA机架上的,基于网络处理器芯片且具有完全的硬件冗余的设备来说,你将不能将你的软件轻松地移植到其上去。你将需要要投入大量的时间来重写该软件的主要部分。

另外,为了优化产品线中不同层次产品的性价比,很多公司在一系列产品中使用了多个嵌入式操作系统平台。对于价格敏感的低端产品,网络供应商往往会采用不需要版税的Linux来作为操作系统平台,而对于需要复杂功能的高端产品线则可能会使用商业的RTOS比如说VxWorks,或者是同时使用VxWorks和Linux。为了避免针对每个产品都要重写一套软件接口,你需要一个独立于操作系统和硬件的软件平台。

嵌入式Linux逐渐成为了系统设计人员的一种流行的选择,其中的原因也已经不再是它的免收版税的商业模式,更多的是因为它对各种CPU和目标板的支持,以及有了越来越多的熟悉Linux操作环境的工程师。同时,Linux社区和商业Linux提供商也对内核进行了实时扩展,这些扩展特性带给了用户很多商业RTOS所能提供的相同级别的鲁棒性(robustness)。另外,开放源码社区和商业公司所提供的开发工具,也使得Linux成为了一个物美价廉的开发环境,网络设备商可以利用它们来完成跨平台的产品开发。

"硬件及操作系统独立"解决方案就是要将系统软件编写成可重用的构件,它使用了一系列的抽象接口,来完成对特定硬件平台的检测并无缝集成到任何的操作系统中。当你在不同硬件平台上开发产品时,具备抽象层的软件体系结构能够很好地保护你在软件应用开发上的投资。这种抽象层在应用软件和其他程序之间建立了一个公共接口,由于该接口主要与控制平面单元交互,它们对于总体的系统性能的影响会很小甚至可以忽略。

举例来说,软件可以设计成允许所有协议应用都假定自己与某个单独的网络接口交互,其中必须得有一个抽象层来翻译递交的数据库修改请求并将它定向到某个或某几个合适的转发单元(如网络处理器或者ASIC/ASSPs),而该转发硬件甚至可以是一个位于其他设备上的某个网络芯片。

通过将控制派发功能进行抽象,应用协议编程人员不需要了解系统的特殊细节,就可以开发出复杂的软件。

人们可以通过使用如LVL7公司的FASTPATH设备转换层(DTL),在应用软件和网络硬件之间编写一个接口,来实现系统的"网络硬件独立"。当我们使用多个网络芯片时,DTL将决定如何与特定网络硬件设备的物理端口来接口。一些核心的服务如增加路由、删除路由、端口使能、端口禁止、获取端口状态等等将通过标准的API来映射到底层实现。虽然DTL层解决了特定网络接口硬件到应用协议层之间的抽象问题,但它并没有解决平台硬件的抽象问题(这一问题由系统抽象层来处理)。

系统抽象层

"系统抽象层"(在LVL7公司的FASTPATH软件中叫做SYSAPI)使得你可以实现一种对于RTOS、CPU和所运行产品物理特性完全透明的软件,该层包括了板级支持包(BSP)或者Linux支持包(LSP)。使用这种公共通用接口,高层软件在并不了解底层硬件特性的情况下也可以访问底层服务,比如对非易失性内存的读写。

公共操作系统服务,如任务管理、内存管理和信号灯等,也可以通过RTOS抽象层来映射(在LVL7公司的FASTPATH软件中叫做OSAPI),从而应用程序就可以基于OSAPI来编写而不需要直接调用特定的操作系统服务。通过提供这样的一个抽象层,人们可以使用众多的商业和开放源代码操作系统或是一个内部的操作系统来开发产品。在这里,重要的一点就是,应用软件必须使用抽象调用接口而不是底层操作系统本身的API调用。

底层操作系统IP网络协议栈所提供的服务也可以被当作操作系统服务映射出来,比如说,网络插口调用(socket calls)可以通过OSAPI层来映射。作为另外的一种选择,我们也可以把IP协议栈当作一个单独的实体,与操作系统抽象接口区别开来。

API独立

跨平台互操作性的另外一个关键点是"管理系统抽象层"(在LVL7公司的FASTPATH软件中叫做单元栈管理器数据库即USMDB),它使得用户接口不需了解诸多物理细节,如物理端口在什么位置或者是何种类型等,只需简单地将其视为一个逻辑接口,该抽象层负责将用户请求发送到合适的子系统而不需要用户接口的参与。

管理系统抽象层在软件应用和管理实体之间提供了一个单一的接口,这就允许多个用户接口来控制同一个底层应用服务集,至于底层是网络处理器还是ASIC则并不重要。每个需要管理的数据对象都通过管理系统层接口来映射,从而形成一套统一的访问例程。该抽象层不但适用于协议和应用数据(如OSPF接口信息和L2桥项等),也适用于任何特定硬件系统数据(如物理端口计数器和串行端口速度等)。

所有的用户接口通过一套公共的API来与下层应用交互,这样就可以编写一个单一的接口集来实现设置和获取配置参数或其他数据等功能。SNMP、CLI、Web、TLL和XML都可以访问这个单一的管理接口来获得或设置数据。这与传统的实现方法相比具有巨大的优势,为了获得管理信息,传统方法要针对每个管理接口实现一套自己的访问例程来进入应用代码或者硬件驱动。这种传统的方法也给代码维护升级带来了很大的问题,人们必须付出大量的工作来增加或者扩展一个新功能,因为每个管理接口都要重复几乎同样的工作。

支持多个网络协议标准

然而,硬件和操作系统独立并不能完全满足要求。已有的宽带通信标准纷繁复杂,而新的标准又不断涌现,因此嵌入式网络平台对多个协议标准的支持势在必行。系统软件必须能够支持和兼容已经部署的网络设备上的任何标准,同时也要考虑到将来需要支持的新出现的标准。这是通过一个可增强的体系结构来实现的,它首先提供一个协议和功能基础集,并允许增强的协议实现,而底层协议可作为一个整体功能模块来提供服务。图1表示了FASTPATH体系结构总体框架。

lvl7.gif

图1:FASTPATH体系结构总体框架

如果我们将核心网络协议与服务作为体系结构的一部分来设计,这将有利于我们将来集成新的协议和应用到整个系统中来。比如说,当我们设计一个IP路由子系统时,对不同路由协议如OSPF和RIP之间的路由泄漏问题的仔细考虑会暴露出一些其他的问题,如果我们能够正确地解决它们,这将使我们增加另外的路由协议变得更容易。通过为各种路由协议提供一个统一的注册接口,并向一个单一的路由表管理器(RTM)来注册,这样就建立了一个公共点,基于它可以向任何路由协议或者其他可能需要此类信息的系统模块提供新的路由信息。基于抽象API提供的这种协议框架和注册机制,程序员即使不了解底层系统,他们也能够迅速理解应该如何来对软件进行扩展以增加额外的功能。

许多网络业界经验丰富的人都知道,在产品递交给客户的那一时刻,该设备需要支持的新的协议和RFC便出现了。很多系统设计人员发现,由于Linux和开放源代码社区中存在的大量网络协议相关软件,嵌入式Linux成为了一个很有吸引力的系统操作平台选择。但是,这些软件的完整性和质量却是因组件而不同的。在很多情况下,这些软件可以提供产品质量级的功能,或者至少可以用在产品开发的前期系统原型阶段。

但是,当我们从不同的软件发布中获取组件时,必须得考虑到的一个方面就是这些组件相互之间的集成程度。虽然某些高层网络应用程序如小文件传输协议(TFTP)和网络时间协议(NTP)可以被看作是单独的应用;但是,它们仍然需要一定程度的集成以便为系统提供一个合适的统一的用户接口。在另外的情况下,如对于包括了生成树协议、802.3ad 链路汇聚协议,和动态VLAN注册协议(GVRP)等在内的L2层的以太网协议,它们必须得提供一个统一的管理接口,同时也要相互紧密结合到一起。在这些情形下,到底是使用这些最小集成度的从各种发布中得到的组件,还是使用一套由商业公司提供的紧密集成的组件,系统设计者必须仔细权衡其间的利弊。

软件的灵活性带来硬件投资的最大回报

如果网络设备供应商使用一种开放的、具备必要的接口和挂钩的软件体系结构,它允许人们添加增值功能;那么,这一平台对于最终设备制造商来说是很有吸引力的,因为它允许他们提供自己的增值特性。这样,网络设备供应商就可以只出售一个单一核心平台给那些有众多截然不同的目标市场的公司。比如说,某个公司可能定位在家庭接入市场,但是通过增加组播路由协议,它的设备也可以推销给那些定位在企业级市场的公司。确实,通过软件实现设备的可配置、可扩展和灵活性,网络设备供应商可以极大地扩展它某个给定体系结构产品的市场空间,同时也可以将软件重用到将来的产品中。由于大多数的高层功能是由软件来实现的,因而可以用最少的投资,通过简单的升级来构建设备,并在市场上不断地创造新的利润增长点。

软件工程-可重用构件的特点

本文参考自自张海藩老师和牟永敏的《软件工程导论》 目标:在各种各样的软件系统中方便的重复的使用 需要满足的要求: 可靠  经过反复测试,被确认是正确的。具备一定的健壮性。 模...
  • time_hunter
  • time_hunter
  • 2013-12-19 22:39:59
  • 1056

JSP - 可重用组件JavaBean

  1 JavaBean 介绍 1.1  定义:     在一个应用里面可以被重用和组合的 java  类。  1.2  Javabean 的特点:  (1)实现了可序列化(可以通过网络交换到磁盘文件...
  • meng090914
  • meng090914
  • 2009-11-03 17:51:00
  • 1413

socket重用

1.closesocket(一般不会立即关闭而经历TIME_WAIT的过程)后想继续重用该socket:BOOL bReuseaddr=TRUE;setsockopt(s,SOL_SOCKET ,SO...
  • killalarm
  • killalarm
  • 2011-04-08 11:40:00
  • 2801

向架构师进军-->可重用架构资源

软件架构有三个主要来源:拿取、方法以及直觉。拿取也就是可重用资源。对于一个标准的系统而言,可能包含80%的拿取、19%的方法和1%的直觉。而崭新的系统则包含30%的拿取、50%的方法和20%的直觉。由...
  • wyxhd2008
  • wyxhd2008
  • 2014-05-17 23:08:00
  • 1879

设计模式可复用面向对象软件的基础(1)--图例

开始学习 设计模式, 从网上下了个《设计模式可复用面向对象软件的基础》,看了引言,发现自己以前写过那么多自以为不错的代码,但用设计模式的思想来看,全都是垃圾!!看来要好好充电了。千里之行,始于足下,先...
  • uoyevoli
  • uoyevoli
  • 2005-04-19 13:08:00
  • 2620

Java内部锁的可重用性(Reentrancy)

Java提供了强制原子性的内部锁机制:synchronized块。但是内部锁是可重入的,当线程试图获得它自己占有的锁时,请求会成功。简单的说,就是在一个synchronized方法内部调用本类的其他s...
  • haydenwang8287
  • haydenwang8287
  • 2010-08-25 15:38:00
  • 5016

Java笔记(三)类的重用

Java语言的重用机制,重用的形式可以是类的组合或继承。基于类和对象的重用比传统程序的重用更容易。 1.类的继承 (1)继承的概念(子类,超类) ...
  • LiuShuaiQ
  • LiuShuaiQ
  • 2016-06-10 14:05:42
  • 1734

TCP端口重用[转]

原文:http://hi.baidu.com/liaimin/blog/item/07f1fdfa521ff0dbb58f315f.html  在以前的文章中,我曾经引用过一篇端口重用与端口独占程序设...
  • maray
  • maray
  • 2010-06-03 21:18:00
  • 7712

可重用性-一旦一个函数被写入

新的程序员经常问:“我们不能把代码里面的代码直接放在里面吗?”“在许多情况下(特别是简单的例子),它可以。然而,函数提供了一些好处,使他们非常有用的非平凡的程序。 组织程序越来越复杂,有所有的代码都...
  • shazhugw
  • shazhugw
  • 2016-08-22 17:12:11
  • 669

《C语言接口与实现:创建可重用软件的技术》

《C语言接口与实现:创建可重用软件的技术》  C Interfaces and Implementations:Techniques for Creating Reusable Software   ...
  • johnny012011
  • johnny012011
  • 2006-04-26 23:41:00
  • 1742
收藏助手
不良信息举报
您举报文章:抽象层:下一代网络设备中跨平台可重用软件基础
举报原因:
原因补充:

(最多只允许输入30个字)