1.中间件的功能
中间件是一种独立的系统软件或服务程序,分布式应用软件借助这种软件在不同的技术之间共享资源,中间件位于操作系统之上,管理计算资源和网络通信,实现应用之间的互操作。
(1)负责客户机与服务器之间的连接和通信,以及客户机与应用层之间的高效率通信机制。
(2)提供应用层不同服务之间的互操作机制,以及应用层与数据库之间的连接和控制机制。
(3)提供一个多层架构的应用开发和运行的平台,以及一个应用开发框架,支持模块化的应用开发。
(4)屏蔽硬件、操作系统、网络和数据库的差异。
(5)提供应用的负载均衡和高可用性、安全机制与管理功能,以及交易管理机制,保证交易的一致性。
(6)提供一组通用的服务去执行不同的功能,避免重复的工作和使应用之间可以协作。
2.中间件的分类
采用自底向上的方式来划分,可分为底层中间件、通用型中间件和集成型中间件三个大的层次。底层中间件的主流技术主要有JVM(Java Virtual Machine,Java虚拟机)、CLR(CommonLanguage Runtime,公共语言运行库)、ACE(Adaptive Communication Environment,自适配通信环境)等;通用型中间件也称为平台,其主流技术主要有RPC、ORB、MOM(Message-Oriented Middleware,面向消息的中间件)等;集成型中间件的主流技术主要有WorkFlow、EAI等。
3.中间件的应用
中间件提供了应用系统基本的运行环境,也为应用系统提供了更多的高级服务功能。中间件技术在企业应用集成中扮演着重要的角色,可以从不同层次采用不同种类,不同技术的中间件产品进行应用集成。
4.中间件的发展趋势
中间件作为构筑企业信息系统和电子商务系统的基石和核心技术,向着标准化和构件化方向发展。具体来看,有以下三种发展趋势:
(1)规范化。对于不同类型的中间件,目前都有一些规范可以遵循。规范的建立极大地促进了中间件技术的发展,同时保证了系统的扩展性、开放性和互操作性。
(2)构件化和松耦合。中间件技术朝着面向Web和松散耦合的方式发展。
(3)平台化。一些大的中间件厂商在已有的中间件产品基础上,提出了完整的面向互联网的软件平台战略计划和应用解决方案。
1.远程过程调用
RPC是一种广泛使用的分布式应用程序处理方法。应用程序使用RPC来远程执行一个位于不同地址空间里的过程,并且从效果上看和执行本地调用相同。一个RPC应用可分为两个部分,分别是服务器和客户。这里的“服务器”和“客户”是指逻辑上的进程,而不是指物理计算机。
在RPC模型中,客户和服务器只要具备了相应的RPC接口,并且具有RPC运行支持,就可以完成相应的互操作,而不必限制于特定的服务器。因此,RPC为分布式计算提供了强有力的支持。同时,RPC所提供的是基于过程的服务访问,客户与服务器进行直接连接,没有中间机构来处理请求,因此,也具有一定的局限性。
2.对象请求代理
对象请求代理(Object Request Broker,ORB)的作用在于提供一个通信框架,透明地在异构的分布计算环境中传递对象请求。
3.远程方法调用
RMI是Java的一组用于开发分布式应用程序的API。RMI使用Java语言接口定义远程对象,它集合了Java序列化和Java远程方法协议。
RMI目前使用Java远程消息交换协议(Java Remote Messaging Protocol,JRMP)进行通信。JRMP是专为Java的远程对象制订的协议。因此,RMI具有Java语言本身的一些优点,用RMI开发的应用系统可以部署在任何支持Java运行环境的平台上。但由于JRMP是专为Java对象制订的,RMI对于用非Java语言开发的应用系统的支持不足,不能与用非Java语言书写的对象进行通信。
4.面向消息的中间件
MOM指的是利用高效可靠的消息传递机制进行平台无关的数据交换,并基于数据通信来进行分布式系统的集成。通过提供消息传递和消息排队模型,它可在分布式环境下扩展进程间的通信,并支持多种通信协议、语言、应用程序、硬件和软件平台。
在MOM中,消息传递和排队技术有以下三个主要特点:
(1)通信程序可在不同的时间运行。程序不在网络上直接相互通信,而是间接地将消息放入消息队列。因为程序间没有直接的联系,所以它们不必同时运行。消息放入适当的队列时,目标程序甚至根本不需要正在运行;即使目标程序在运行,也不意味着要立即处理该消息。
(2)对应用程序的结构没有约束。在复杂的应用场合中,通信程序之间不仅可以是一对一的关系,还可以进行一对多和多对一方式,甚至是上述多种方式的组合。多种通信方式的构造并没有增加应用程序的复杂性。
(3)程序与网络复杂性相隔离。程序将消息放入消息队列或从消息队列中取出消息来进行通信,与此关联的全部活动,例如,维护消息队列、维护程序和队列之间的关系、处理网络的重新启动和在网络中移动消息等是MOM的任务,程序不直接与其他程序通信,并且它们不涉及网络通信的复杂性。
MOM系统的基本元素是客户、消息和MOM提供者,后者包括API和管理工具。
5.事务处理监控器
事务处理监控器(Transaction Processing Monitor,TPM)又称为交易中间件,是当前应用最广泛的中间件之一。它能支持数以万计的客户进程对服务器的并发访问,使系统具有极强的扩展性,因此,适于电信、金融、证券等拥有大量客户的领域。
总体上来说,TPM具有有以下功能:
(1)进程管理,包括启动服务器进程、为其分配任务、监控其执行并对负载进行平衡。
(2)事务管理,即保证在其监控下的事务处理的原子性、一致性、独立性和持久性。
(3)通信管理,为客户和服务器之间提供多种通信机制,包括请求/响应、会话、排队、订阅/发布和广播等。
TPM界于客户和服务器之间,进行事务管理与协调、负载平衡、失败恢复等,以提高系统的整体性能,它可以被看作是事务处理应用程序的“操作系统”。
应用在中间件提供的环境中可以更好地集中于业务逻辑,并以构件的形式存在,最终自然而然地在异构环境中实现良好的协同工作。中间件与架构在本质上是一致的。
(1)面向需求。基于架构的构件化软件开发应当是面向需求的,即设计师集中精力于业务逻辑本身,而不必为分布式应用中的非功能质量属性耗费大量的精力,理想的架构在这些方面应当为软件提供良好的运行环境。事实上,这些正是中间件所要解决的问题,因此,基于中间件开发的应用真正是面向需求的,从本质上符合构件化设计的思想。
(2)业务的分隔和包容性。服务器构件要求有很好的业务自包容性,应用开发人员可以按照不同的业务进行功能的划分,体现为不同的接口或交互模式。针对每种业务,设计和开发是可以独立进行的。在提供业务的分隔和包容性方面,架构和中间件有同样的目标。例如,消息中间件规定了消息是有属性的,其中部分属性则与业务的划分有关。构件只进行相应类型的消息交互,至于如何保证业务的分类运行与管理,则是中间件的事情。
(3)设计与实现隔离。构件对外发生作用或构件间的交互,都是通过接口进行的,构件使用者只需要知道构件的接口,而不必关心其内部实现,这是设计与实现分离的关键。中间件在分布交互模式上也规定了接口(或类似)机制,例如,IDL(Interface Definition Language,接口定义语言)就是描述接口的语言规范,从早期的DCE(Distributed Computing Enviornment,分布式计算环境)到现在的CORBA、DCOM、RMI等都使用IDL描述接口,所不同的只是语言规范。
(4)隔离复杂的系统资源。架构很重要的一个功能就是将系统资源与应用构件隔离,这是保证构件可复用甚至“即插即用”的基础,与中间件的意图也是一致的。中间件最大的优势之一就是屏蔽多样的系统资源,保证良好的互操作性。应用构件开发人员只需要按照中间件规定的模式进行设计开发,而不必考虑下层的系统平台。因此,中间件真正提供了与环境隔离的构件开发模式。
(5)符合标准的交互模型。架构是一种抽象的模型,但模型中应当定义一些可操作的成分。例如,标准的协议等。中间件则实现了架构的模型,实现了标准的协议。例如,基于CORBA的中间件使用的是CORBA规范作为架构模型,定义了数据表示语法、数据包格式、消息语义等内容,以实现互操作性协议。因此,基于中间件的构件是符合标准模型的。
(7)软件复用。软件复用是构件化软件开发的根本目标之一,中间件提供了构件封装、交互规则、与环境的隔离等机制,这些都为软件复用提供了方便的解决方案。另外,中间件可以建立访问过去的应用的通道,或者在新的中间件体系中建立特殊的运行容器,封装以往的应用,从而最终做到对遗留系统的继承性复用。
(8)提供对应用构件的管理。基于中间件的软件可以方便地进行管理,因为构件总可以通过标识机制进行划分。例如,COM就是利用Windows系统注册表配合几种唯一标识构件的方式,实现构件的登记、注销和定位。CORBA规范中有接口池、实现池等规范定义,配合应用登记管理的机制,也能对应用构件实施管理。
基于中间件开发的应用是构件化的,中间件提供了构件的架构,大大提高了应用构件开发的效率和质量。
1.分布式的多层应用程序
J2EE平台采用了多层分布式应用程序模型,实现不同逻辑功能的应用程序被封装到不同的构件中,处于不同层次的构件被分别部署到不同的机器中。
2.J2EE构件
J2EE规范是这样定义J2EE构件的:客户端应用程序和applet是运行在客户端的构件;Java Servlet和JSP(Java Server Pages,Java服务器页面)是运行在服务器端的Web构件;EJB(Enterprise Java Bean,企业Java Bean)是运行在服务器端的业务构件。
(1)客户端。客户层可以直接和运行在J2EE服务器中的业务层通信,也可以通过运行在Web层中的JSP页面和Servlet与业务层构件进行通信。J2EE客户层可以分为Web客户端、Applets和Java应用。
(2)中间层。J2EE中间层的内容极为丰富,也是J2EE架构的核心,绝大多数的J2EE应用程序都会将业务逻辑部署在中间层,EJB是J2EE中间层中最重要也是最有特点的构件之一。JB可以从持久化的存储设备中获取数据,对它进行处理(如果需要),并将其发送到客户端应用程序。EJB可以分为三种类型,分别是会话Bean(Session Beans)、实体Bean(Entity Beans)和消息驱动Bean(Message-driven Beans)。
(3)企业信息系统层。企业信息系统层处理企业信息系统软件,并包含诸如企业资源计划、主机事务处理、数据库系统等一些底层系统。
3.J2EE容器
J2EE容器为J2EE标准中每一个构件类型提供底层服务,用户完全不需要自己开发这些服务,而是全力以赴地着手解决业务问题。在容器中可包含若干构件,并为这些构件提供服务。
J2EE容器可以分为J2EE服务器、EJB容器、Web容器和客户端应用程序容器。
(1)J2EE服务器:J2EE服务器是J2EE产品的运行容器,它提供EJB容器和Web容器。
(2)EJB容器:管理它所包含的EJB,负责对象的注册、提供远程接口、创建和清除对象实例、检查对象安全性、管理对象的活动并协调分布式事务处理。
(3)Web容器:管理JSP页面和Servlet构件的执行。Web构件和Web容器运行在J2EE服务器中。
(4)客户端应用程序容器:管理应用程序客户端构件的运行。应用程序客户端和它的容器运行在客户端中。
4.Java EE
Java EE 5从很多开源项目中吸取了不少养分,更关注开发与部署的快捷和简便,增加了对轻量级容器的支持、JSF(Java Server Faces,Java服务器界面)等表现层技术、使用Annotations取代部署描述符、使用EJB3.0简化EJB的开发、增强了对Web Service和SOA的支持。
目前主流的轻量级架构是把Struts、Spring和Hibernate这三种在业内比较推崇的开源技术基于MVC模式相结合。
1.Struts 框架
Struts是一个基于J2EE平台的MVC框架,主要是采用Servlet和JSP技术来实现的。在Struts框架中,模型由实现业务逻辑的JavaBean构成,控制器由ActionServlet和Action来实现,视图由一组JSP文件构成。
Struts将业务数据、页面显示、动作处理进行分离,这有利于各部分的维护。Struts 采用Front Controller (前向控制)模式来实现动作处理,让所有的动作请求都经过一个统一入口,然后进行分发。
2.Spring框架
Spring框架包括声明性事务管理,通过RMI或Web Service远程访问业务逻辑,允许自由选择和组装各部分功能,还提供和其他软件集成的接口。
Spring核心本身是个容器,管理构件的生命周期、构件的组态、依赖注入等,并可以控制构件在创建时是以原型或单例子(Singleton)的方式来创建。Spring的核心概念是控制反转(Inversion of Control,IoC)或依赖注入(Depen-dency Injection),使用Spring,不必在程序中维护构件的依赖关系,只需在构件中加以设定,Spring核心容器就会自动将依赖注入指定的构件。
3.Hibernate框架
Hibernate是一种对象和关系之间映射的框架,是Java应用和关系数据库之间的桥梁。它可以将数据库资源映射为一个或者多个POJO。Hibernate提供了Java对象到数据库表之间的直接映射。
Hibernate是一个开放源代码的对象关系映射框架,它对JDBC进行了非常轻量级的对象封装,使得Java程序员可以随心所欲地使用对象编程思维来操纵数据库。
4.基于Struts、Spring和Hibernate的轻量级架构
(1)表示层。由Struts实现,主要完成如下任务:管理用户请求和响应;提供一个控制器代理以调用业务逻辑和各层的处理;处理从其他层抛给StrutsAction的异常;为显示提供数据模型;借助Struts Validator框架帮助完成Web层的验证工作。
(2)持久层。由Hibernate 实现。它通过一个面向对象的查询语言(Hibernate Query Language,HQL)或正则表达式的API 来检索对象的相关信息。HQL 类似与SQL,只是把SQL 里的表和列用对象和它的字段代替。Hibernate 还负责存储、更新、删除数据库记录。同时Hibernate支持大部分主流数据库,且支持父表/子表关系、事务处理、继承和多态。
(3)业务层。由Spring来实现。使用Spring的优点是,利用延时注入思想组装代码,提高了系统扩展性和灵活性,实现插件式编程。利用其对Hibernate 的会话工厂(Session Factory)、事务管理的封装,可以更简洁地应用Hibernate。
5.轻量级架构和重量级架构的探讨
重量级的开发需要依赖一个非常庞大的容器系统。轻量级框架的优势很大程度上是因为提高了开发的速度,不用部署一个很庞大的容器,系统就可以实现以前需要容器才能实现的功能,可以使用Spring代替无状态的会话Bean,使用Hibernate代替实体Bean,而且可以直接写一个应用程序运行已经完成的系统,立即可以看到结果。
重量级框架在大规模运行时会表现出非常优异的性能,缺点主要是开发效率较低;轻量级框架则正好相反,开发时非常迅速,但在大规模运行时,性能却不如重量级框架。
1…NET Framework
.NET为开发者提供了丰富的API,每一种.NET语言都可以使用这些API。其中包含了大量的类供开发者使用。跨平台是Java的一大特点,而.NET可以认为是跨语言的。这种特点的实现主要依靠通用类型系统(Common Type System,CTS),CTS是.NET语言之间的粘合剂,它对.NET语言所采用的类型进行了统一的定义来保证语言之间的兼容性。
2.通用语言运行时
.NET Framework是一整套的开发模型,其中核心的部分就是CLR。CLR是.NET程序的执行引擎,.NET的众多优点也是由CLR所赋予的。CLR与JVM的功能类似,提供了单一的运行环境。任何.NET应用程序都会被最终编译成为中间语言(Intermediate Language,IL),并在这个统一的环境中运行。
1.JVM与CLR
JVM是J2EE平台的底层支持,而CLR是.NET Framework的核心。无论是JVM还是CLR,都包含了许多新技术。
JVM为了提供平台无关性的支持,它将所有的代码都首先编译为bytecode,然后,在运行过程中,JVM对bytecode进行解释执行。IL是.NET提供的中间语言,所有的.NET程序都将编译为IL,在第一次运行时由JIT(Just In Time,即时)编译为本机代码,然后执行该代码。
由于JVM采用解释的方法运行bytecode,所以Java程序运行速度较慢,而由JIT编译好的本地代码效率更高。但是,因为JIT需要在程序第一次执行时进行实时编译,所以程序第一次运行时速度会慢很多。J2EE同样也支持预编译技术,在用户首次访问某个特定的JSP页面时会执行预编译,编译之后,用户再访问这个页面时,速度就会快很多。
CLR和JVM的内存管理也非常相近,CLR和JVM都使用了自动垃圾收集来回收不再被使用的对象。
2.对多层分布式应用的支持
无论是J2EE还是.NET,都非常适合开发企业计算平台,二者都为构建完整的企业计算平台做出了大量的工作,都支持多层应用的开发。
(1)表现层。J2EE与.NET的最大不同在于,Java本身是跨平台的设计,因此Java 应用程序可以运行在Windows或其他的平台上,而使用.NET开发的本地客户端,只能运行在Windows平台上。在平台支持的广泛性上,Java超过了.NET。但从另一个角度来说,Java无法针对某种特定平台进行优化,只能将各种平台的GUI进行抽象,而.NET则可以获得Windows平台最大限度的支持。因此,当使用本地应用程序作为客户端时,如果有跨平台的需要,Java是不二的选择;反之,如果仅适用在Windows操作系统中,使用.NET可以得到更好的效果与更低的开发成本。
(2)业务层。在业务层,J2EE跨平台的优势得到了充分的体现。当使用到非Windows操作系统的服务器时,如AIX、Solaris等,.NET失去了竞争的可能。除了跨平台的能力外,丰富的Java开源项目也给了开发者更多的选择。虽然基于.NET的开源项目在不断增加,但.NET开源项目无论是数量还是质量上,目前都很难与Java开源相媲美。对于喜欢应用开源项目的组织而言,J2EE会是更好的选择。
(3)数据访问层。J2EE的数据访问层标准是JDBC,它支持绝大多数的关系型数据库,通过JDBC,应用程序可以采用与数据库无关的方式来访问、操作各种关系型数据库。在.NET中,与JDBC相对应的是ADO .NET,它也支持绝大多数的关系型数据库,供应用程序使用。在数据访问层,无论是J2EE还是.NET,都有非常多的优秀方案可供选择。
3.安全性
在安全性方面,.NET借鉴了不少Java中的安全机制,以保护代码的安全性。 Java在运行时进行代码安全性的验证。JVM使用bytecode栈来完成运行时的安全性检查和验证;.NET执行的是静态的代码验证,但是.NET的验证过程非常全面,同时在程序运行时也会执行一小部分动态验证。所以,无论是.NET还是Java,在代码安全性方面都做得非常优秀。
4.部署
.NET不支持非Windows的操作系统。从另一个角度来说,.NET应用程序也不需要面对非Windows操作系统的环境,这降低了.NET部署的风险。J2EE应用程序的部署相对复杂,不同的应用服务器会有不同的表现。J2EE应用程序经常使用在非Windows操作系统中,所以部署J2EE应用需要考虑不同操作系统的特性,来确定部署的方案。
5.可移植性
在可移植性方面,拥有一次编译到处运行的J2EE平台无疑是占了上风。采用.NET平台进行开发,从开发工具、服务器产品到部署环境都需要使用Microsoft公司的产品。
6.外部支持
J2EE得到了很多大厂商的支持,Java开源社区也非常活跃,很多组织为Java提供了一个又一个优秀的开源项目。.NET是Microsoft公司独家的产品,使用.NET意味着必须购买Microsoft公司的工具、操作系统、应用服务器和开发工具,没有其他的选择。
虚拟计算(virtual computing)的本质是资源共享,虚拟计算技术不仅能使人们更有效地共享现有的资源,而且能通过重组等手段,为人们提供更多、更完善的共享服务。虚拟计算环境,是指建立在开放的网络基础设施之上,通过对分布自治资源的集成和综合利用,为终端用户或应用系统提供和谐、安全、透明的一体化服务的环境,实现有效资源共享和便捷合作工作。网络资源的聚合与协同是虚拟计算环境的核心。
P2P(Peer To Peer,对等网络)是一种新型分布式网络通信技术,它使得计算机之间可以直接访问和交换文件,而不是像过去那样连接到服务器去浏览与下载。P2P的参与者共享他们所拥有的一部分硬件资源(例如,处理能力、存储能力、网络连接能力、打印机等),这些共享资源需要由网络提供服务和内容,能被其他节点(peer)直接访问而无需经过中间实体。
1.需要解决的关键问题
P2P计算模式需要解决资源存放、资源定位和资源获取三个关键问题。
(1)资源存放。在P2P系统中,并非个人资源都存放在各自的机器上,很可能是所有机器共同管理资源。例如,在P2P存储系统中,经常采用分布式哈希表(Distributed Hash Table,DHT)存放数据,某个用户的数据可能存放在其他人的机器上。于是,如何进行资源存放就成了必须回答的第一个问题。
(2)资源定位。数据的查找与资源存放的方法是直接相关的,在P2P系统中,一般可以采用三种方式进行资源定位,分别是集中方式、广播方式和DHT方式。集中方式的每个节点将自身能够提供共享的内容注册到一个或几个集中式的目录服务器中。查找资源时,首先通过服务器定位,然后,两个节点之间再直接通信。这种方式的网络实现简单,但往往需要大量的目录服务器的支持,并且系统的健壮性不好;广播方式没有任何索引信息,内容提交与查找都通过相邻接节点直接广播传递。一般情况下,采取这种方式的P2P网络对参与节点的带宽要求比较高;DHT是大多数P2P系统所采取的资源定位方式,不同的DHT算法决定了P2P网络的逻辑拓扑。
(3)资源获取。资源定位后就需要获得资源,有些资源并不能直接获得,例如,计算资源、大文件、流媒体资源等。问题主要在于如何才能更高效地获取资源,或者说如何使一些热点资源服务于更多的需要该资源的用户,这就需要尽量发挥P2P系统中所有参与者的能力。P2P模式充分利用了所有节点的带宽资源,使并行下载能力得到了极大的扩展。
2.网络拓扑结构
P2P技术将各个节点互相结合成一个网络,共享其中的带宽,共同处理其中的信息。在P2P工作方式中,每个客户终端既是客户机又是服务器。以共享下载文件为例,下载同一个文件的众多用户中的每个用户终端只需要下载文件的一个片段,然后互相交换,最终每个用户都能得到完整的文件。
P2P网络结构可分为集中式、分布式和混合式三种,其中分布式又可分为非结构化和结构化两种。
(1)集中式结构模式。在集中式结构模式(第一代P2P网络)中,设有一个中心服务器,其作用是负责记录共享信息和回答对这些信息的查询。集中式P2P模式将所有共享的资料分别存放在提供资料的客户机上,服务器中只保留索引信息。此外,服务器与对等实体、对等实体之间都具有交互能力。
(2)分布式非结构化模式。分布式非结构化模式(第二代P2P网络)采用随机图的方式组织网络,从而能够较快发现目的节点,具有较好的可用性,容易维护,并支持复杂的查询,但不能保证查询结果的完整性。分布式非结构化P2P模式的主要特点是,对象查询是分布式和逐跳的,采用泛洪式查询直到成功或失败(超时)。
(3)分布式结构化模式。集中式P2P结构化模式有利于网络资源的快速检索,且服务器可以扩展,但是其中心化的模式容易遭到直接的攻击;分布式非结构化的P2P模式解决了抗攻击问题,但是又缺乏快速搜索和可扩展性。分布式结构化模式(第三代P2P网络)主要采用DHT技术来组织网络中的结点。
(4)混合结构模式。混合结构模式(第四代P2P网络)引入了网络分层的思想,在P2P网络中采取多级分层结构,实现了多种网络结构并存的网络模型设计,提高了网络的可扩展性和透明性,并降低了主干网络通信流量。
3.P2P的关键技术
P2P是一种基于互联网环境的新的应用型技术,主要包括下列关键技术:
(1)资源查找与定位技术。如何查找和定位共享资源是P2P系统必须首先要解决的问题。
(2)NAT(Network Address Translators,网络地址转换)技术。NAT是一种把内部私有网络IP地址翻译成合法网络IP地址的技术,允许企业以一个公用IP地址出现在Internet上。NAT屏蔽了内部网络,所有内部网计算机对于公共网络来说是不可见的,而内部网计算机用户通常不会意识到NAT的存在。
(3)IP地址解析技术。提供在现有硬件逻辑和底层通信协议上的端到端定位(寻址)技术,建立稳定的连接。
(4)安全技术。P2P网络应用比其他应用要更多地考虑那些低端PC的互联问题,加上P2P网络结构的特殊性,安全管理是个难点,需要进行全面的安全技术做后盾才能保证节点的安全。
(5)应用层上的数据描述和交换技术。
4.P2P的应用
P2P技术的典型应用如下:
(1)共享和交换。共享和交换是最引人注目的P2P应用。事实上,激起P2P革命的就是文件共享的应用,而文件交换的需求直接引发了P2P技术热潮。
(2)内容搜索技术。P2P文件共享首先要解决文件定位的问题,但是,基于P2P的文件搜索技术可以独立出来,成为传统的搜索引擎等系统强大的搜索工具。可利用P2P技术开发互联网上高级智能搜索引擎技术。
(3)对等计算。采用P2P技术的对等计算,是把网络中的众多计算机暂时不用的计算能力连接起来,使用积累的能力执行超级计算机的任务。从本质上而言,对等计算就是网络上CPU资源的共享。可以将P2P看作一个松耦合的分布式计算系统,可以集中控制,也可以是纯P2P架构。
(4)协同工作与在线交流。采用P2P技术,可以在Internet上任意两个用户之间建立实时的联系和信息传输,避免了中央服务器产生的网络处理延迟等性能瓶颈,能够更方便、高效地实现用户之间的协同。
(5)网络存储。P2P带来的一个变化就是内容正在从“中心”走向“边缘”,也就是说,内容将不是存放在几个主要的服务器上,而是存放在所有用户的PC上。这就为网络存储提供了可能性,可以将网络中的剩余存储空间利用起来,实现网络存储。
(6)P2P群集与VPN。P2P应用可以扩展到多点的群集,形成Internet中一个虚拟的子网,构成一个精简的VPN,通过对P2P用户端软件的操作,用户就可以主动地选择并加入不同的VPN中。这种方式可以为行业化的目录服务、信息服务和电子商务所利用。
(7)远程监控和调试。P2P技术为远程监控和调试的应用开辟了新的天地,利用这项功能,可以通过Internet或移动电话遥控操作家用空调、计算机,甚至锅炉等。
(8)宽带网与无线移动网应用。P2P技术与宽带网技术的结合,可以开展许多音频、视频和无线网方面的应用,例如,电话会议、视频会议、远程教育与培训等。
(9)流媒体直播与点播。P2P技术还可以实现流媒体直播。流媒体点播与流媒体直播不同,在流媒体直播中,用户在观看直播节目时不能选择观看指定片段;而在流媒体点播中,用户还可以实现节目指定功能。
(10)IP层语音通信。采取P2P技术,根据通信双方网络进行动态自适应的链路控制与消息转发是可行的解决方案。
(11)网络游戏平台。由于服务器能力有限,大型网络在线游戏往往需要限制场景人数或者不断增加服务器,将P2P技术引入网络游戏支撑平台中,可以有效地解决这个问题。
5.P2P的特点与优势
相对于传统的互联网技术来说,P2P网络具有以下特点与优势:
(1)非集中化。网络中的资源和服务分散在所有节点上,信息的传输和服务的实现都直接在节点之间进行,避免了可能的服务器瓶颈,强调用户端所有权和对数据资源的控制,每个节点都是平等的参与者,既是服务器又是客户机,如何表现取决于用户的要求,网络应用由使用者自由驱动。
(2)可扩展性。由于P2P网络结构的分布性特点,节点的加入很容易,因此,网络结构和规模的扩充很容易,系统整体资源和服务能力也容易同步扩充,较容易满足用户的需要,且能避免传统的服务器连接带宽的限制。
(3)健壮性。P2P由于其完全分布式架构,网络中的节点既可以获取其他节点的资源或服务,同时又是资源或服务的提供者,不依赖于少数集中控制节点,具有比传统的C/S架构更好的健壮性和可靠性,成为搭建高健壮性网络的有效方式。P2P网络在部分节点失效时能够自动调整网络拓扑,保持其他节点的连通性,不存在中心节点失效的问题,具有较强的故障适应能力。P2P网络还能够根据网络带宽、节点数和负载等变化不断地做自适应调整。
(4)匿名与隐私保护。在P2P网络中,由于信息的传输分散在各节点之间进行而无需经过某个集中环节,用户的隐私信息被窃听和泄漏的可能性大大缩小。
(5)自组织。P2P系统的组织(约束/冗余)自然、本能地增加,不通过环境,也不包含其他外部系统来增加控制。
(6)高性价比。性能优势是P2P被广泛关注的一个重要原因。采用P2P架构可以有效地利用互联网中散布的大量普通节点,将计算任务或存储资料分布到所有节点上,利用其中闲置的计算能力或存储空间达到高性能计算和海量存储的目的,通过利用网络中的大量空闲资源,可以用更低的成本提供更高的计算和存储能力。
(7)安全。节点和共享对象间具有信任链、会话密钥交换模式、加密和数字摘要与签名等安全功能。
(8)透明性。P2P的透明性主要体现在位置透明性上,在访问、并发、复制、失效、移动和扩展等方面也具有透明性。
(9)交互能力。P2P根据Sockets和HTTP协议进行通信交互,具有很强的交互能力。
(10)负载均衡。在P2P网络环境中,由于每个节点既是服务器又是客户机,减少了对传统C/S架构服务器计算和存储能力的要求。同时,因为资源分布在多个节点上,更好地实现了整个网络的负载均衡。
6.P2P的流量特性
P2P的流量呈现出与传统流量不同的特性,具有分布非均衡的特性、上下行流量的对称特性、流量的隐蔽性和数据集中性等。
7.存在的问题
(1)标准问题。到目前为止,P2P技术仍然缺乏统一的标准与规范,很难实现P2P应用之间的统一资源定位和统一路由,因此,很难提升P2P的整体性能。
(2)共享与版权问题。版权问题一直是P2P发展的一个突出的问题,大多数P2P服务都将不可避免地与知识产权发生冲突,P2P共享软件的繁荣加速了盗版媒体的分发,提高了知识产权保护的难度。
(3)垃圾信息问题。在缺乏统一管理的情况下,P2P网络很难对搜索结果进行排序,用户将不可避免地陷入垃圾信息的汪洋大海。目前,已有尝试将人工智能技术和专家数据库技术引入P2P网络中,希望能够克服垃圾信息的困扰。
(4)网络流量、带宽与负载均衡问题。P2P网络中的节点本身往往是计算能力相差较大的异构节点,每个节点都被赋予了相同的职责而没有考虑其计算能力和网络带宽,局部性能较差的节点将会导致整体网络性能的恶化,在这种异构节点的环境中容易造成大负荷的网络流量,占用网络带宽,难以实现优化的资源管理和负载平衡,尤其是在传送大量的音频和视频文件的时候。同时,由于用户加入或离开P2P网络的随意性,使得用户获得目标文件具有不确定性,导致许多并非必要的文件下载,而造成大量带宽资源的滥用。
(5)安全性、可靠性与管理问题。安全问题对于P2P技术的发展至关重要,可以说关系到P2P的成败。P2P网络需要在没有中心节点的情况下提供身份验证、授权、安全传输、数字签名、加密等机制,因此,P2P网络采用的分布式结构在提供扩展性和灵活性的同时,也使它面临着巨大的安全挑战。
云计算是一种基于并高度依赖于Internet,用户与实际服务提供的计算资源相分离,集合了大量计算设备和资源,并向用户屏蔽底层差异的分布式处理架构。
1.云计算的应用
(1)存储服务。例如,Amazon所提供的S3,就是一种向用户提供存储服务的云计算应用,Microsoft公司通过Windows Live的SkyDriver向用户提供网络存储服务,Google Docs在2009年7月的一次更新中也开始支持对任意文件的存储。
(2)搜索。各大搜索引擎公司(例如,Google等)为了满足用户的需求,并提供良好的用户体验,都使用了大量的服务器,组成服务器群,把用户的请求进行拆分、执行和返回。
(3)科学计算。小型团队在实验或者项目必须的情况下,必定会有大量的计算需求,但无论是购买设备,还是租用大型计算机,都将有不菲的费用,而通过购买云计算的资源(例如,Amazon的EC2服务),搭建需要的平台,基本可以在前期零投入的情况下来满足相应的计算需求。
(4)软件即服务(Software As a Service,SaaS)。通过利用B/S架构,将企业的业务逻辑和数据都置于云计算的服务器群中,以适应中小企业的低成本满足应用需求的要求。
一般地,当有以下需求的时候,就可以考虑使用云计算服务:
(1)短时间内的中、大规模计算需求。
(2)零成本的前期投入,并且总体拥有成本(Total Cost of Ownership,TCO)较优。
(3)在充分相信云计算服务提供商的情况下的数据安全性需求。
(4)没有足够的服务器管理和运维人员。
(5)在终端设备配置较差的情况下完成较复杂的应用。
3.云计算机的特点
(1)集合了大量计算机,规模达到成千上万。一方面,大量的计算机可以提供强大的整体计算能力;另一方面,整体管理还可以降低管理和维护成本,通过对计算机运行环境的优化,缩短单台计算机的服务周期。
(2)多种软硬件技术相结合。在云计算的组织结构中,使用到了诸如分布式、负载均衡和服务器集群等技术;在基于云计算的应用设计中,还会用到B/S、Web Service、SOA等技术;在硬件组织和机房建设中,又会使用到一些现已成熟的冷却、通风和布线等技术。
(3)对客户端设备的要求低。通常,云计算的客户端系统只需要满足能够运行一个浏览器的要求即可。而且,云计算的客户端是多样的,可以是一台PC,也可以是一部移动电话。客户端只需要将相应的数据展现给客户,并对用户的输入进行收集和提交即可,业务逻辑中的大部分都将转换到云计算服务器上,数据也将存储在云端。例如,在商业的SaaS应用中,大部分的客户端都是浏览器。当然,有些情况下需要安装一些插件。
(4)规模化效应。云计算的服务器是大规模的,用户也是大规模的,这使得管理与维护都得以集中,不仅降低了服务器的维护成本,还使软硬件资源得到最充分的利用。当然,这在很大程度上也加深了灾难的蝴蝶效应,一旦云计算的关键设施出现问题,例如,遭遇攻击,或者网络发生异常等,对于客户的影响将是致命的。
4.云计算的架构
云计算的架构从总体功能上可以分为六层,从上到下分别是客户层、服务层、应用层、平台层、存储层和基础设施层。
(1)客户层。客户层是云计算的最终用户所接触的一层,而且,在用户看来,另外五层都是透明的,用户不需要知道自己的请求最终由哪些计算机怎样去完成,只需要将自己的任务提交给云即可。客户层的配置是很低的,大多数情况下,只需要满足运行浏览器的要求即可。云计算中的数据存储和业务逻辑在客户层中都被弱化。客户层的设计一般都是跨平台的,可能会运行在移动设备、手持设备和瘦客户端,以及普通的胖客户端等。
(2)服务层。服务层主要是将应用以服务的形式提供给用户,也是云计算中与用户进行直接交互的一层,该层将云计算的其他层进行屏蔽。一方面,客户层通过服务层利用云计算的各种资源;另一方面,云计算将所有资源以服务的形式进行封装。当然,服务层并不仅仅针对直接用户,也可以为其他云计算提供服务。服务层是云计算的I/O接口,各种应用都可以以服务的形式进行封装并运行在云计算上。
(3)应用层。应用层主要运行直接提供服务的应用程序,它将云计算的计算资源转化成实际的服务,以实现对计算资源的封装。例如,SaaS的服务端就是以应用程序的形式运行在云计算服务器上。
(4)平台层。平台层主要是提供应用层程序运行的环境,并对相关的计算资源进行调配。
(5)存储层。存储层主要实现存储资源的整合与分配,云计算除了产生巨大的计算压力外,还需要对大量的数据进行临时或者永久性的存储。而且,为了安全考虑,这些数据通常都按照一定的策略进行安全保障。云计算的服务对象众多,还必须对这些数据进行隔离或者有条件的共享,这使得存储资源的分配和管理变得更加复杂。
(6)基础设施层。云计算的基础设施概念相对较广,一般可概括为云计算的计算资源来源,可能是一个或多个服务器群,甚至也可以是一些由网格计算技术组织的计算机资源,还有可能是其他的云计算提供方。
SaaS是基于互联网的服务提供、软硬件资源租赁、数据存储、安全保障等服务的商业应用。它是以互联网为基础,将应用和软件以服务的方式提供的软件运营模式。
1.SaaS的特点
(1)高度依赖Internet。虽然在理论上,只要用户与SaaS运营商的服务器有网络连接就可以完成,但实际上,这个网络连接通常由Internet来扮演。
(2)软件几乎都基于B/S架构。B/S架构的一个重要特点就是客户端的标准化,使得其部署非常简单、方便,甚至基本不需要部署,通常的计算机甚至手持设备都能完成这个任务,只要可以运行支持WWW标准的浏览器即可。B/S架构还带来了表现、逻辑和数据的分离,这使得服务的提供能够更简便,数据的安全性也有一定的保证。
(3)TCO最优。几乎为零的前期投入,按功能、规模和时间取费的收费策略,无论是对于保护投资,还是降低成本,都具有决定性的作用。尤其是SaaS运营提供的免费试用和功能定制,更为降低TCO、避免浪费提供了更多的保证。另外,SaaS不需要用户方的系统管理和维护,也节省了企业的人力运营成本。
(4)多用户并行于一套系统。SaaS之所以能够降低TCO,原因之一就是多个用户的资源共享,包括服务器计算资源、网络带宽,甚至是程序和数据级的共享,例如,多个用户使用同一套系统,将数据存放于同一个数据库中等。
(5)集中的系统管理与维护。B/S架构中的业务逻辑层和数据层被转移到SaaS运营商的服务器上,由其进行集中系统管理与维护,以及软件产品的修改和升级等。不仅提升了系统管理和维护的水平,便于软件系统的更新与升级,也为企业降低了相应的IT运维部门的人力需求。当然,集中的管理模式也会引起灾难的蝴蝶效应,这加大了系统管理与维护的安全压力。
(6)安全隐患。安全隐患可能来自SaaS运营商内部和外部,甚至SaaS软件的其他用户。有意或者无意的破坏都会有非常大的影响,尤其是在多个企业数据被集中的情况下,更容易产生灾难的规模效应。虽然数据存储在企业内部也会有安全问题,但大多数中小企业都不习惯“将自己的鸡蛋放在别人的篮子里”。安全隐患的顾虑,有时也来自信任问题,企业的数据都是其重要财产之一,尤其是客户资料和财务数据,存放在企业外部的服务器上,难免会让人对SaaS运营商产生信任问题。
2.SaaS应用的问题
有很多问题仍然困扰着SaaS的发展。其中,尤以信任、用户的观念转变和安全最为关键。综合考虑信任危机,可以从以下几个
方面着手健全安全机制:
(1)完善和规范相应的法律法规,以期对可能造成不良后果的行为进行威慑。
(2)制定相关的行业准则,做好行业准入和监督工作,并建立一个中立的企业信用档案。
(3)将IT监理引入到SaaS运维行业,做好事中控制,并进行事后审计。
(4)对于企业数据的安全保障,引入保险机制,以期对已经造成的损失进行补偿。
(5)SaaS运营商与大型企业合作,以寻求信用担保与支持。
3.SaaS带来的观念转变
在SaaS实施的过程中,需要让用户和运营商进行以下几个方面的观念转变:
(1)软件不是企业的最终需求,企业信息化的最终目的是使其需求得到满足,而不管是一种什么方式,SaaS就是以服务的方式来满足企业需求的软件经营和管理模式。
(2)鸡蛋并不总要放在自己的篮子里。只要有足够的保障使鸡蛋安全,并不一定要把它拿在自己的手中,而且专门保管鸡蛋的篮子,总是要比放在杂货箱里更安全。SaaS其实就是将安全保障集中化,让多个用户分摊因此而带来的高成本和技术要求的费用。
(3)每个用户都是一份责任,用户越多,运营商更要注意自己信用的积累,也只有如此,客户才能够更多,成本才能够更低,自身才能够更长远的发展。
4.SaaS系统设计
SaaS采取的是B/S架构,因此,其架构也可划分为数据层、业务逻辑层和表示层。只是与传统的搭建于企业内部局域网或Intranet的基础上不同,连接SaaS系统的表示层和业务逻辑层之间的是Internet。在进行SaaS系统设计时,必须考虑到安全性问题,以及数据传输的速率和稳定性有可能会带来的各种影响。另外,SaaS系统的用户数目往往是较大的,不同的用户又要针对需求进行相应的定制,这都是在进行SaaS系统设计时必须面对的问题。
在进行离线应用的设计时,必须考虑到以下几个方面的问题:
(1)常用数据的本地存储。一方面为了减轻服务器压力,另一方面为了保证离线的基础应用,可以考虑将一部分数据做一个本地拷贝,例如,常用的统计数据等。
(2)离线基本操作。在离线使用中,可以保证一些基本使用的正常,例如,基于本地数据拷贝的查询和打印等操作。另外,还要保证离线情况下的本地用户登录和认证。
(3)离线操作的恢复。主要是指网络和连接恢复正常后,对于已经进行离线操作的数据同步,即将离线操作的一些数据上传到服务器中,对于SaaS客户来讲,往往可能会有多个终端用户操作,而多个用户又可能会对同一个数据项进行操作,这就涉及到冲突的解决问题。
网格是把一个局域网、城域网甚至整个Internet整合成一台巨大的超级计算机,实现知识资源、存储资源和计算资源的全面共享。
1.网格的定义
一般认为,网格是一个满足如下三个条件的系统:
(1)网格能协调非集中式控制的资源,能集成和协调资源与用户在不同控制域内的活动。不同的控制域有使用集中计算的用户桌面、同一企业的不同的管理部门,或不同的企业等。同时,网格能解决包括安全、策略、认证、支付和成员资格等各种问题。
(2)使用标准的、开放的、通用的协议和接口,网格是由多用途协议和接口来构建的,该协议将能解决诸如鉴别、授权、资源发现和资源访问等一些基本问题。
(3)提供非常高的服务质量,网格允许按协作的方式来使用其成分资源,以提供各种服务内容,例如,反应时间、容许能力、可利用性和安全性,以及协作配置多重资源类型,以满足复杂的用户要求等,这种组合系统的效用大大高于各部分效用的总和。
2.网格的分类
按照功能划分,网格可以分为以下三种类型:
(1)计算网格。着重于专门留出用于计算能力的资源。在这类网格中,大多数机器都是高性能服务器。
(2)拾遗网格。常用于大量桌面系统,收集机器上可用的CPU周期和其他资源,以便完成某一个功能。
(3)数据网格。负责容纳和提供跨多个组织的数据访问。用户只要有权访问数据,就不必关心数据位于哪里。
3.网格计算的应用领域
网格可以应用在如下几个方面:
(1)协同环境:可以连接多个虚拟环境,使不同位置的用户能进行交互和仿真。
(2)智能设备:可以连接大量的、分布的、远程的设备,进行实时处理和远程操作等。
(3)分布式并行计算:可以使多个异构计算机协同解决单机难以完成的任务,使不同性质的任务调度到最合适的计算机中去运行。
(4)桌面超级计算:可以将普通桌面用户和超级计算中心、大型数据库连接起来,用户可以不受距离限制地使用这些计算能力。
(5)军事仿真:可以模拟战场,通过详细的数字分析,掌握各战斗实体的状况和随之而来的战斗结果。
4.网格系统的特点
根据网格的定义,可以得出网格具有如下特点:
(1)异构性:网格包含多种异构的资源,这些资源可能跨越不同的地理位置和管理区域。多种异构的资源包括各种不同操作系统的主机、服务器或存储设备和数据库等。
(2)结构的不可预测性:与一般局域网系统和单机的结构不同,网格系统由于地域分布和系统的复杂性,整体结构经常变化,网格系统必须做到能够适应这种经常变化的结构。
(3)可适应性:传统的高性能计算机系统中,计算资源是独占的,而网格系统中的资源是异构的、分布的,而且经常发生变化,甚至发生故障,面对这些情况,网格系统应能做到动态的可适应性。
(4)可扩展性:网格系统的初期规模可能很小,随着参与网格计算的计算机的不断加入,系统的规模会越来越大。网格系统必须能够做到适应规模的增加、克服规模的膨胀而造成性能下降或计算的延迟。
(5)多级管理域:由于构成网格系统的超级计算资源通常属于不同的组织,使用不同的安全机制,因此,需要不同的组织共同参与解决多级管理域问题。
5.网格体系结构
网格主要由6个部分组成,分别是网格节点、数据库、贵重网络设备、可视化设备、宽带主干网和网格软件。网格的体系结构比Internet更能有效地利用网上的所有资源。
主要的网格体系结构模型有五层沙漏模型、开放网格体系结构、计算池模型等。
(1)五层沙漏模型。五层沙漏模型把网格系统分为五层,分别是构造层、连接层、资源层、汇集层和应用层,上层协议可调用下层协议的服务,网格内的全局应用都通过协议提供的服务来调用操作系统。
(2)开放网格体系结构(Open Grid Services Architecture,OGSA)。OGSA是在五层沙漏模型的基础上,结合Web Service技术而提出来的一种模型,是网格技术和Web Service的组合体。OGSA最突出的思想是,将一切对象(包括数据库、服务器和仪表等)都看作服务。
(3)计算池模型。计算池模型把分散在各地的高性能计算机用高速网络连接起来,用专门设计的中间件有机地粘合在一起,以Web界面接受各地用户提出的计算请求,并将之分配到合适的节点上运行。计算池模型不把一项任务分解成N个子任务,而只是安排在其中一台合适的机器上运行,通过Web提交任务和查看结果。
Mark Weiser是这样描述普适计算的:“最具有深远意义的是那些从人们注意力中消失的技术,这些技术已经渗透到人们的日常生活中,以至于和生活难以区分”。
1.普适计算的特性
间断连接与轻量计算是普适计算最重要的两个特征,普适计算系统就是要实现在这种环境下的事务和数据处理。
(1)间断连接。在普适计算中,用户必须能够存取服务器信息,在联系中断的情况下,可以处理这些信息。因此,企业计算中心的数据和应用服务器能否与用户保持有效的联系就成为一个十分关键的因素。由于有部分数据要存储在信息设备上,普适计算中的数据库成为一个很关键的软件基础部件,一般采用嵌入式数据库系统。
(2)轻量计算。信息设备的计算资源是相对有限的。普适计算主要用于商业用途的数据处理,通常针对移动办公的工作人员和需要经常在旅途中存取企业数据的职员,他们需要不受地域和时间限制地获取和处理核心系统上的数据。
2.普适计算的应用领域
按照应用的方向不同,普适计算可以分为以下几个方面:
(1)智能环境感知技术。在人体周围环境中布置智能化的技术,而不为人所感觉到。涉及到环境感知、不可见计算、人工智能和自然交互作用等关键技术。
(2)无缝的可移动性。用户无论在任何位置,都感受不到服务效果的变化。包括系统无缝性、业务无缝性和覆盖无缝性等多方面的领域。
(3)普遍的信息访问。用户无论在何时,都可以任何方式访问他们认为有用的信息。
(4)觉察上下文计算。在普适计算中,觉察上下文指的是能识别用户所在的环境。系统能觉察与任务有关的上下文,据此做出决策并自动提供相应的服务。
(5)可以穿戴的计算。这是一种能跟随用户任意移动的新型计算机系统,具有可以再编程的能力。
3.普适计算系统的组成
一般而言,普适计算系统由新的嵌入式系统、系统软件和普适网络组成。
4.普适计算的关键问题
(1)发现。当新设备进入或者已有设备添加新的模块时,系统如何发现它,并且和它交互。面向对象技术给予研究人员很大的启示,就是把每一个新设备或者新模块看作一个对象,这样,就可初步实现动态的服务增减。但是,这需要一个全世界软硬件厂商都认可的协议的支持。
(2)感知。如何感知万事万物,即如何辨别用户在时间、空间的变化。现在的摄影机、数码相机、温度计等感知仪器还不能达到“乱真”的精度。同时,还不具备分析环境的能力。
(3)分析关键因素。在判断上下文中找到关键因素,例如,判断雨伞的关键因素在于天气和温度。这需要建立庞大的资源库和情境模型。
(4)强壮性。在无线通信中,模块间不可能实时联系,服务对象可能有一段时间不在服务区(进入盲点),数据不可避免的丢失。在普适计算中,这应该视为正常而不是故障。
(5)微型化和可持久性。信息设备的能耗问题是普适计算的一大技术难题,如果设备耗电量大,人们就得把精力耗费在更换动力系统上。
有一天,人们感受不到计算机的存在,而每项工作却都有它们默默的支持,同时,人们从中得到了很大的便利。这时,普适计算的时代就真的到来了。
片上系统(System on Chip,SoC)也称为单片系统,是指在单个芯片上集成一个完整的系统,对所有或部分必要的电子电路进行包分组的技术。
SoC为实现许多复杂的信号处理和信息加工提供了新的思路和方法。SoC采用了片内可再编程技术,可使片上系统内硬件的功能可以像软件一样通过编程来配置,从而可以实时地进行灵活而方便的修改和开发。
1.设计概述
SoC的设计应该是一个软件和硬件协同设计的过程,这是SoC的一个非常重要的标志。传统的集成电路设计一般将系统分为两个部分,分别是系统级软件开发部分和电路级硬件设计部分,软件开发和硬件设计往往是相对独立进行的。面向SoC系统级的关键技术包括软硬件协同设计技术、设计复用技术、与底层相结合设计技术,三者相辅相成,相互促进。软硬件协同设计技术常与设计复用技术交织在一起,成为目前SoC系统级设计的主要部分。
2.软硬件协同设计技术
面向SoC的软硬件协同设计方法是面向系统的设计方法,主要通过分析系统任务和所需的资源,采用特定的方法,遵循特定的准则,自动生成符合系统功能要求和成本约束的硬件和软件架构。在SoC中,软硬件的结合是非常紧密的,软件和硬件之间的功能划分,以及它们的实现并没有固定的模式,而是随应用的不同而变化。
这种方法还需要解决的问题比较多,具体如下:
(1)系统描述方法问题。硬件描述语言(Hardware Description Language,HDL)是否仍然有效,如何来定义一个系统级的软件功能描述或硬件功能描述,可供设计者使用的系统功能描述语言。
(2)最优性原则的确定问题。由于采用了全新的理论体系,传统最优性准则已经不能满足要求,除了速度、面积等硬件优化指标外,与软件相关的指标有哪些,以及如何考虑等,都是亟待解决的问题。
(3)如何进行功能验证。包括验证所需的环境、确认设计错误发生的地方和机理等。
(4)功耗问题。传统的IC功耗分析、估计方法已经不能用来分析和估计含有软件和硬件两部分的SoC的功耗。传统方法可以对一个硬件设计进行功耗分析,但无法单独分析软件运行引起的动态功耗。
3.设计复用技术
SoC的设计复用技术主要有两种,分别是基于IP核的模块级复用和基于平台的系统级复用。
4.设计方法与流程
SoC系统级设计方法基本上是采用层次化的设计思想和正交性的设计原则,从性质上可分为三大阵营,分别是自顶向下、自底向上、上下结合或中间相遇。
SoC的验证工作涵盖系统设计全过程,根据有关统计数据,验证工作量大约占整个设计工作量的70%左右,而芯片一次投片成功率在35%左右,造成重复投片的主要原因就是验证工作不够。
1.技术角度
(1)模块/IP核级验证。该验证方法是对SoC模块和复用第三方的IP核在系统集成前进行验证,验证的内容包括软性检查、规范模型检查、功能验证、协议检查、直接随机测试和代码覆盖率分析等方面。
(2)系统级验证。系统级验证主要确认芯片架构满足所赋予的功能或性能要求。验证的内容包括功能验证、软硬件性能验证和系统级基准测试。为了验证的方便,目前还采用仿真技术,主要包括功能仿真、基准测试包和事件驱动仿真等。
(3)FPGA验证。FPGA验证是SoC设计流程中重要的一个环节,用来改进RTL(Register Transfer Level,寄存器传输级)设计代码,验证功能的正确和完整性,提高SoC成功率。
2.功能验证的角度
从功能验证的角度来看,SoC验证方法主要有动态功能验证、静态功能验证、混合功能验证和等效性验证等。
多核是多微处理器核的简称,是将两个或更多的独立处理器封装在一起,集成在一个电路中。
1.多核技术与并发多线程
多核技术可以看作是一种CPU的集成技术,在一个CPU处理模块上,可以集成2个以上的CPU,但是,它们还是单独的物理CPU。并发多线程(Simultaneous Multi-Threading,SMT)技术利用处理器的超标量特性,同时执行多条指令。它的基本理念是,没有一个单一应用可使超标量处理器达到完全饱和状态,因此,部署同时提供输入的多个应用的效果更为理想。
2.多核技术与超线程
超线程是多线程处理的一种形式,例如,大多数Intel处理器采用超线程。超线程技术通过添加与物理线程并行的虚拟线程,实现单核处理器对两个线程的执行。虽然超线程技术可提高处理性能,但潜在的提高远比不上在服务器上添加两个物理处理器核心,这是因为在处理虚拟线程时会出现超负荷处理现象。因此,将多核技术和超线程技术进行结合,可以提供更好的系统性能和扩展性。
1.多核编程技术
多核编程技术主要包括并行计算、共享资源分布式计算、任务分解与调度、Lock-Free编程等内容。
使用多线程进行多核编程比使用多进程有更大的优势,因为:
(1)线程的创建和切换开销比进程更小。
(2)线程之间通信的方式比较多,而且简单也更有效率。
(3)多线程有很多的基础库支持。
(4)多线程的程序比多进程的程序更容易理解和修改。
1.基本概念
(1)方面(aspect)。方面是表达对系统关注抽象出来的一般特性。简单地说,就是将那些与业务无关,却为业务模块所共同调用的逻辑(例如,事务处理、日志管理和权限控制等)封装起来,以减少系统的重复代码,降低模块间的耦合度,并有利于未来的可操作性和可维护性。方面可以分为功能性方面和非功能性方面。功能性方面有同步控制、通信管理、分布式管理和资源共享等,非功能性方面有实时性、安全性、记录日志、异常处理和性能优化等。在引入AOP之前,方面代码贯穿于系统多个功能性构件之间,与其他代码搅混在一起,不利于系统跟踪和维护。
(2)连接点(joinpoint)。连接点是程序执行过程中的一个特定点,用来定义在程序的哪个地方通过AOP加入新的逻辑。例如,对某个方法的调用或某个特定异常的抛出,都可以称为连接点。连接点模型提供了通用的引用框架,允许定义方面的结构。
(3)通知(advice)。通知是AOP框架在某个特定的连接点处所运行的代码。通知有多种类型,包括环绕通知、前置通知、后置通知和异常通知等。通知是不知觉的,因为在连接点没有明确的符号指出要在此运行通知,编写原始基础代码的程序员可能不知道这种变化。
(4)切入点(pointcut)。切入点是指通知的应用条件,用于确定某个通知要被应用到哪些连接点上。AOP框架允许开发人员指定切入点。
(5)引入(introduction)。引入是指向目标对象添加方法或字段的行为。目标对象是指包含连接点的对象,如果一个对象的执行过程受到某个AOP的修改,就称为目标对象。
(6)代理(proxy)。代理是指由AOP框架在将通知应用于目标对象后创建的对象。
(7)编织(weaving)。编织是一种将核心功能模块与方面组合在一起,从而产生出一个工作系统的过程。编织可以在编译时完成,也可以在运行时完成。
2.与OOP的比较
除了可以解决代码混乱和代码分散所带来的问题外,AOP还有一些其他的优点:
(1)模块化横切关注点。AOP用最小的耦合处理每个关注点,使得即使是横切关注点也是模块化的。这样,程序代码的冗余小,系统容易理解和维护。
(2)系统容易扩展。由于方面模块根本不知道横切关注点,所以,很容易通过建立新的方面加入新的功能。另外,当往系统中加入新的模块时,已有的方面自动横切进来,使系统易于扩展。
(3)设计决定的迟绑定。使用AOP,设计师可以推迟为将来的需求作决定,因为他可以把这种需求作为独立的方面很容易地实现。
(4)更好的代码复用性。AOP把每个方面实现为独立的模块,模块之间是松耦合的。松耦合的实现通常意味着更好的代码复用性,在这一点上,AOP比OOP做得更好。
3.软件开发过程
AOP包括三个清晰的开发步骤,分别是方面分解、关注点实现和方面的重新组合。
(1)方面分解。分解需求提取出横切关注点和核心关注点。把核心模块级关注点和系统级的横切关注点进行分离。例如,对于一个信用卡系统,可以分解出三个关注点,分别是核心的信用卡处理、日志和验证。
(2)关注点实现。各自独立地实现这些关注点,用OOP实现核心关注点,用AOP实现横切关注点。例如,可以用OOP实现信用卡处理单元,而用AOP实现日志单元和验证单元。
(3)方面的重新组合。方面集成器通过创建一个模块单元(方面)来制定重组的规则,重组过程也称为编织。
4.需要解决的问题
(1)如何有效地判断和识别系统中的横切关注点。
(2)如何准确把握方面之间及其与核心类之间的相互关系。
(3)如何进一步开发和丰富支持AOP的语言并保证其正确性。
(4)如何利用现有的CASE工具为AOP系统建模。
(5)如何开发有效的工具来满足从软件设计到维护各个阶段的需要。
1.关注点分离
要分离特定的关注点,通常有三种方法,分别是元级编程、自适应编程和组合过滤器。
(1)元级编程。元级编程是一种反映系统为表示自身而融合的结构。编程语言的基本构件(例如,类和对象调用)在元级进行描述,并可以用元级编程进行扩展和重定义。元级编程支持实现级的关注点分离,通过捕获发送到对象的消息和对象接收的消息,元对象能够执行特殊目的的工作。例如,它们可以检查同步约束、确保实时声明、在不同的机器之间移植参数、写日志等。
(2)自适应编程。自适应编程是一种基于代码模式的编程模型。代码模式是按照不同类别划分的,每个模式捕获了编程中的抽象。这些模式可分为传播模式、传输模式和同步模式。传播模式定义数据操作,标识为特殊操作而交互的子类;传输模式抽象了参数化过程,它们用在传播模式中,沿着子类将参数传进或带出;同步模式在并发应用中定义对象之间的同步机制,其目的是控制进程对操作执行的访问。每个模式类处理不同的关注点,它们通过名字消解,以一种松散耦合的方式与其他构件交互。
(3)组合过滤器。组合过滤器模型通过添加对象组合过滤器,对OO模型进行了扩展。过滤器的目的是管理、影响发送和接收的消息,指定消息接受和拒绝的条件。过滤器可在每个类的基础上编程。分离关注点是通过为每个关注点定义一个过滤器来实现的,每个过滤器类负责处理其相关关注点的所有方面。过滤器机制使程序员有机会捕获所有接收和发送的消息,在方法代码实际执行前执行特定的行为。
2.编织
编织是实现AOP 的一个重要机制,利用方面编织器可以把AOP 实现的方面代码织入到用OOP 实现的核心功能代码中,从而构建最终系统。
(1)静态编织和动态编织。静态编织是指在核心功能代码中的适当位置(例如,某段代码执行前或执行后),将方面代码织入,从而形成混合的编码;动态编织可以在程序运行时,根据上下文来决定调用哪些方面和被调用的先后顺序,以及增加或删除一个方面等。
(2)编译时编织。编译时编织可以在编译前进行预处理,将两种代码自动混合,将方面中的代码自动插入到功能模块代码的合适位置处;也可以在编译后进行处理,对编译后的代码进行操作。
(3)载入时编织。载入时编织是在代码载入时,实现代码的编织。程序的主逻辑部分和方面部分可以分别进行开发和编译,而编织操作就发生在框架载入方面代码之时。
(4)运行时编织。运行时编织是指在运行时根据对方法的调用执行适当的方面代码以实现编织。
3.横切
AOP的横切技术通常分为两种类型,分别是动态横切和静态横切。
(1)动态横切。动态横切是通过切入点和连接点在一个方面中创建行为的过程,连接点可以在执行时横向地应用于现有对象。动态横切通常用于帮助向对象层次中的各种方法添加日志记录或身份认证。在很多应用场景中,动态横切技术基本上代表了AOP,其核心主要包括连接点、切入点、通知和方面。
(2)静态横切。静态横切和动态横切的区别在于,它不修改一个给定对象的执行行为。相反,它允许通过引入附加的方法字段和属性来修改对象的结构。此外,静态横切可以把扩展和实现附加到对象的基本结构中。在AOP技术中,静态横切受到的关注相对较少。