设计挑战,中间件解决方案,和 ACE

设计挑战,中间件解决方案,和 ACE

1. 网络应用的挑战

作为网络应用的开发者你的工作是理解你的应用所提供的服务,以及用于提供这些服务的环境,然后

  1. 设计服务使用的通讯机制,包括服务之间的通讯和与客户端通讯。
  2. 决定架构和服务安排以获得可用环境的最有效使用。
  3. 使用技术和工具以实现解决方案,消除复杂性,产生正确的,可拓展的,高性能,低维护的软件,实现商业目标。

你必须学习如何解决与开发和配置网络应用相关的固有的和意外的复杂性。固有的复杂性来自复杂网络应用开发的关键域挑战,包括:

  • 选择合适的通讯机制,设计协议以高效使用它们。
  • 设计网络服务,以高效利用可用的计算资源并减少未来的维护成本。
  • 使用并发在你的系统中有效实现可预测,可靠,和高性能。
  • 安排并配置服务,以最大化系统的可用性和灵活性。

意外的复杂性来自用于开发网络应用软件的工具和技术的限制,包括:

  • 类型安全,可移植的,可拓展的原生 OS APIs 的缺乏。
  • 大范围使用算法分解,使维护和拓展网络应用变得很难,这是不必要的。
  • 核心网络应用概念和功能不断地重新发现和重新发明,这使软件的生命周期成本很高,也是不必要的。

2. 网络应用设计维度

域分析是一个归纳的,反馈驱动的过程,它系统的检查应用域以确认它的核心挑战和设计维度,方便将它们映射到有效的解决技术中。这一过程产生下列好处:

  • 它定义域抽象的常见词汇表, 它使开发者彼此间的交流更加高效。反过来,阐明问题空间的词汇表简化了在解决空间中对合适的模式组和软件抽象的映射。例如,对网络协议的通用理解,事件多路复用策略,和并行架构允许我们应用这些概念到我们对包装外观的=以及 ACE 框架的讨论中。
  • 它提升复用性, 通过将设计考虑分为两类:
    1. 对特定类型的应用的特定设计考虑,和
    2. 对域中所有应用的通用设计考虑。

通过关注域中的通用设计考虑,应用和中间件开发者能辨识使用或构建可重用的软件类库的机会。当流动于这些类库中的规程控制被分解和重新聚合时,它们可以形成中间件框架,能大大减少随后的应用开发投入的努力。在成熟的领域中,应用特定的设计考虑因素可以通过拓展和优化现存的中间件框架来解决,通过面向对象语言的特性,例如继承,动态绑定,参数化类型和异常。

在网络应用的域中,开发者面临图 0.3 中描述的 4 个维度的设计决定。这些设计维度主要与管理固定的复杂度有关。它们因此很大程度上独立于特定的生命周期过程,设计方法和符号,编程语言,操作系统平台,和网络硬件。每一个设计维度都由一组相对独立的选项组成。虽然它们这种大部分彼此正交,改变你的网络应用中的一个或多个维度,会据此改变它的 “形状”。因此,设计的改变不是彼此分离的。当你考虑下述设计维度时,记住这一点:

  1. 通讯维度 解决网络程序用于交互的规则,格式,和抽象层级。
  2. 并发维度 解决管理多个服务实例的进程和线程的策略和机制,同样服务内部可能使用多线程。
  3. 服务维度 解决网络应用服务的关键属性,例如每个服务实例的持续时间和结构。
  4. 配置维度 解决网络服务如何被确认,以及何时它们被绑定到一起形成一个完整的应用。配置维度通常影响超过一个服务,包括服务间的关系。
    在这里插入图片描述

3. 面向对象的中间件解决方案

一些最成功的技术和工具被设计出来,用于解决聚焦于面向对象的中间件的网络应用的意外复杂度和固有复杂度,它们也有助于管理应用中的复杂度和不均匀性。面向对象的中间件提供可重用的服务/协议组件和框架软件,在功能上为

  1. 端到端应用功能需求和
  2. 底层操作系统,网络协议栈,和硬件设备

间的沟壑架起桥梁。

面向对象的中间件提供功能,其功能的质量对简化和协调网络应用间如何连接,如何互操作十分重要。

3.1 面向对象的中间件分层

网络协议栈,例如 TCP/IP,能被分解为多层,例如定义于 OSI 引用模型中的物理层,数据链路层,网络层,传输层,会话层,表示层和应用层。与之类似,面向对象的中间件也能被分解为多层,如图 0.4。面向对象中间件的常见继承层级包含的分层如下:
在这里插入图片描述
主机基础架构中间件 封装 OS 并发和进程间通讯 (IPC) 机制以创建面向对象的网络编程功能。这些功能消除许多与通过原生 OS APIs,例如 Sockets 或 POSIX 线程 (Pthreads),开发网络应用相关的冗长的,易出错的,不可移植的活动。

分布式中间件 使用并拓展主机基础架构中间件,以自动化常见的网络编程任务,例如连接和内存管理,marshalingdemarshaling,end-point 和请求的多路复用,同步,多线程。使用分布式中间件的开发者编程分布式应用更像编程独立应用,即,不需要考虑它们的位置,语言,OS,或硬件,就能触发目标对象上的操作。分布式中间件的核心是 Object Request Brokers (ORBs),例如 COM+,Java RMI,和 CORBA

公共中间件服务通过定义更高层级的独立于域的服务,例如事件通知,日志,持久化,安全,和可恢复的事务,来增强分布式中间件。分布式中间件关注管理终端系统的资源,以支持面向对象的分布式编程模型,公共中间件服务关注在分布式系统中分配,调度,和协调不同的资源。没有公共中间件服务,这些端到端的功能必须由每个网络应用临时实现。

域特定中间件服务满足特定域的特定需求,例如电信,电子商务,健康保健,过程自动化,和航空电子。其他面向对象的中间件层提供广泛可重用的 “水平” 机制和服务,域特定的服务目标是垂直市场。

面向对象的中间件是开发网络应用的重要工具。它为开发和改进网络应用提供下述三大领域的提升:

  1. 策略关注点, 将应用开发者的关注点超越底层的 OS 并发和网络 APIs。对这些 APIs 之下的概念和功能的熟练掌握是所有网络应用开发的基础。然而,中间件帮助抽象出细节到更高的层级,更易于使用。不需要过于担心底层的细节,开发者能更多关注策略上的,以应用为中心的关注点。
  2. 高效重用, 通过利用以前的开发经验和具体化关键模式的实现到可重用的中间件框架中,来平摊软件生命周期的开发量。未来,大部分的网络应用将通过集成域特定的和公共的 “可插入” 中间件服务组件进行装配,而不是完全从头开始编程。
  3. 开放标准, 提供可移植和可互操作的软件工件。这些工件将帮助引导开发者的关注点到更高层级的网络应用架构和设计关注点,例如互操作的安全性,分层分布式资源管理,和错误容忍服务。开放和标准化 COTS 面向对象的中间件,例如 CORBA,Java 虚拟机,和 ACE,扮演着越来越重要的角色。

3.2 主机基础架构中间件的好处

当开发者受严格的 quality of service (QoS) 的需求和/或维护成本时,主机基础架构中间件优先于其他更高的中间件层级。这也是一个提高中间件基础水平的领域。这些区域和它们的基本原理如下所述。

满足严格的 QoS 需求。 特地类型的应用需要访问原生的 OS API 机制和协议,以满足严格的高效和可预测的 QoS 需求。例如,需要长持续时间,双向字节流通讯服务的多媒体应用不适合一些分布式中间件提供的同步请求/响应范式。尽管优化技术取得了重大进展,很多传统的分布式中间件实现依然会带来显著的吞吐量和延迟开销,缺乏充足的 hooks 来管理其他 QoS 相关的属性,例如 jitter 和可靠性。

相反,主机基础架构中间件通常能更好的保证端到端的 QoS,因为它允许应用:

  • 缺省不必要的功能,例如在同类环境中缺省 marshaling 和 demarshaling。
  • 在通讯行为上提供细粒度控制,例如支持 IP 多播传输和异步 I/O 和
  • 自定义网络协议以优化网络带宽的使用或用共享内存通信替换环回网络通讯

维护成本。

通过提升核心知识,推进实践。

4. ACE 工具包概览

ADAPTIVE Communication Environment (ACE) 是主机基础架构中间件广泛使用的一个例子。
在这里插入图片描述

4.1 ACE OS 适配层

ACE OS 适配层由一个被称为 ACE_OS 的类组成,它包含大约 500 个 C++ 静态方法。这些方法封装了原生的,面向 C 的 OS APIs,隐藏了平台特定的细节,并暴露对 OS 机制的统一接口,用于更高的 ACE 层。

4.2 ACE C++ 包装外观层

包装外观由一个或多个类组成。ACE 包装外观层在 OS 适配层之上,提供基本相同的功能。将这些功能封装成 C++ 类,而不是单独的 C 函数。

4.3 ACE 框架层

ACE 框架层是集成的类集合,类之间相互协作为相关的应用族提供可重用的软件架构。通过应用高级的并发和网络编程模式来具化 ACE 中相关的类族之中的规范控制流和合作,ACE 中的框架集成并加强它的 C++ 包装外观。

下述的 ACE 框架支持对并行应用和服务的高效,稳定,和灵活的开发和配置:

Event demultiplexing and dispatching frameworks。 ACE Reactor 和 Proactor 框架分别实现了 Reactor 和 Proactor 模式。Reactor 和 Proactor 在对基于 I/O,基于定时器,基于信号,基于同步的不同类型事件的响应中,自动化了对应用指定的 handler 的解复用和分发。

Connection establishment and service initialization framework。 ACE Acceptor-Connector 框架实现 Acceptor-Connector 模式。该框架将积极和消极的初始化角色从在初始化被完成后,由通讯对等体服务执行的引用程序处理中解耦。

Concurrency framework。 ACE 提供 Task 框架用于实现关键的并发模式,例如 Active Object 和 Half-Sync/Half-Async,通过将方法执行从方法调用中解耦,以及解耦同步和异步过程,简化了并行编程。

Service configuration framework。 这一框架实现 Component Configuration 模式来支持应用的配置,应用的服务可以在设计周期的后期动态装配,例如,在安装时。它也支持在应用运行期间动态重新配置服务。

Stream framework。 这一框架实现 PipesFilter 模式,能访问并操作流经流模块的数据。ACE Stream 框架简化了分层服务的开发,分层服务能被灵活的组装以创建特定类型的网络应用,例如用户层级的协议栈和网络管理代理。

4.4 ACE 网络服务组件层

5. 示例:网络登录服务

在这里插入图片描述

6. 总结

本章描述了在分布式计算环境中有效开发网络应用和中间件的挑战。在开发软件时,从严格约束的实时和嵌入式系统到最新的中间件抽象以及下一代具有严格的 QoS 需求的网络应用,我们引入了内在复杂度和意外复杂度。我们展现了一种对中间件分层的分类法,强调了主机基本架构中间件的好处,这也是本书所聚集的。

本章也引入了对网络应用架构的关键设计维度的域分析结果。它们被分组为 4 类:

  1. 通讯协议和机制
  2. 并发架构
  3. 服务架构
  4. 服务配置策略

最后,我们引入网络日志服务。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值