# 中间件

中间件处于操作系统、网络和数据库之上，网络、数据库应用软件下层

按照中间件在分布式系统中承担的职责不同，可以划分为
**通信处理**（消息）中间件：建网和制定出通信协议，以保证系统能在不同平台之间通信，实现分布式系统中可靠、高效、实时的跨平台数据传输
**事务处理**（交易）中间件：大量事务在多台应用服务器上能实时并发运行，并进行负载平衡的调度，实现与昂贵的可靠性和大型计算机系统的同等功能
**数据存取**管理中间件：为在网络上虚拟缓冲存取、格式转换、解压等带来方便
Web服务中间件：有负载均衡、缓存、安全性等功能
安全中间件：加密、认证等
跨平台和构架的中间件：解决跨平台问题，如CORBA
专用平台中间件：为特定应用领域设计参考模式、建立相应构架
网络中间件：包括网管、接入、网络测试、虚拟社区和虚拟缓冲等

# 软件构件

构件又称为组件，是一个==自包容、可复用（最重要的属性）== 的程序集。构件是一个程序集或者说是一组程序的集合
这个集合可能会以各种方式体现出来，如源程序或二进制的代码。
这个集合整体向外提供统一的访问接口，构件外部只能通过接口来访问构件，而不能直接操作构件内部。

构件是独立的、自包容的，因此构架的开发也是独立的，构件之间通过接口相互协作。
![[构件设计过程.png|697]]
**构件组装模型的优点如下：**
	构件的自包容性让系统的扩展变得更加容易；
	设计良好的构件更容易被重用，降低软件开发成本；
	构建的粒度较整个系统更小，因此安排开发任务更加灵活，可以将开发团队分成若干组，并行地独立开发构件
**构件组装模型的缺点如下：**
	对构件的设计需要经验丰富的架构设计师，设计不良的构件难以实现构件的优点，降低构件组装模型的重用度；
	在考虑软件的重用度时，往往会对其他方面做出让步，如性能等；
	使用构件组装应用程序时，要求程序员能熟练地掌握构件，增加了研发人员的学习成本；
	第三方构件库的质量会最终影响软件的质量，而第三方构件库的质量往往是开发团队难以控制的

**常见的构件标准**
主流的商用构件标准规范包括
对象管理组织（Object Management Group，OMG）的CORBA、Sun的J2EE、Microsoft的DNA

**CORBA**（Common Object Request Broker Architecture）
主要分为三个层次：对象请求代理、公共对象服务和公共设施
- 最底层的对象请求代理（Object Request Broker，ORB）规定了分布对象的定义（接口）和语言映射，实现对象间的通信和互操作，是分布对象系统中的软总线
- 在ORB之上定义了很多公共服务，可以提供注入并发服务、名称服务、事务（交易）服务、安全服务等各种各样的服务
- 最上层的公共设施定义了构件框架，提供可直接为业务对象使用的服务，规定业务对象有效协作所需的协定规则
![[请求流.png]]
- 伺服对象（Servant）：CORBA对象的真正实现，负责完成客户端请求。
- 对象适配器（Object Adapter）：用于屏蔽ORB内核的实现细节，为服务器对象的实现者提供抽象的接口，以便他们使用ORB内部的某些功能。
- 对象请求代理（Object Request Broker）：解释调用并负责查找实现该请求的对象，将参数传给找到的对象，并调用方法返回结果。客户不需要了解服务对象的位置、通信方式、实现、激活或存储机制。
- POA是对象实现与ORB其他组件之间的中介，它将客户请求传送到伺服对象，按需创建子POA，提供管理伺服对象的策略。