目录
第1章 中间件概述
1.1 嵌入式软件总体架构
1.2 什么是中间件软件
1.3 中间件的基本功能
1.4 中间件为应用程序提供服务的基本方式
1.5 中间件的发展历程
1.6 中间件的层次
1.7 三大基础中间件
第2章 中间件的分类
2.1 事务式中间件
2.2 过程式中间件
2.3 面向消息的中间件
2.4 面向对象中间件
2.5 Web应用服务器
2.6 其他
第3章 中台(大平台、小产品)
3.1 业务中台 (类似于嵌入式系统中的业务平台,不同的业务不同的业务平台)
3.2 数据中台(类似嵌入式系统中的数据库平台)
3.3 组织中台(类似嵌入式系统中前端负载均衡器)
第4章 基站中间件总体架构
4.1 概述
4.2 中间件的好处
4.3 按中间件存在的形态分类
第5章 基站中间件五大类API服务
5.1 内核空间BOS服务(POSIX接口封装)=》跨进程间通信
5.2 用户空间的服务工具
5.3 基本API服务之trace和log服务
5.4 基本API服务之Driver =》 映射设备驱动服务
5.5 基本API服务之SOC抽象层CAL ( Core Abstract Layer)
中间件(middleware)是基础软件的一大类,属于可复用软件的范畴。
顾名思义,中间件处于操作系统软件与用户的应用软件的中间。与用户空间驱动处于并列的位置。
用户空间驱动:负责对硬件设备与业务相关的功能配置(主要通过配置芯片的寄存器来实现)、与业务相关功能状态的监控、在用户空间数据的收发、以及为应用软件提供硬件抽象层的接口(HAL:硬件抽象层接口)。以便于应用软件不需要关注具体硬件的型号、硬件寄存器的定义等硬件相关的细节。为应用程序使用嵌入式系统的各种硬件服务(CPU和RAM之外)提供便利。
中间件层:负责对Linux OS和libc库提供的CPU计算相关的服务(CPU和RAM)进行封装,为应用程序使用嵌入式系统的各种软件服务提供便利:
中间件最大的作用是支撑分布式、跨平台、跨操作系统的应用程序。
如果是单机版,中间件的作用就会得到极大的弱化,应用程序可以直接使用基础中间件libc或STL或boost库即可,增强或扩展中间件的需求并没有那么强烈。
基站系统中的中间件是支持分布式应用的,属于扩展中间件:
基站系统有两个大的网元BBU和RRU,另外BBU有系统板和基带板,运行在这些硬件和操作系统之上的应用软件有着强烈的跨板的通信需求。而中间件软件正好能够满足这种应用需求。
另外,基站还支持云部署,应用程序需要运行在分布式的云平台之上,中间件的作用就更加突出。
中间件是介于应用系统和系统软件之间的一类软件。
它使用系统软件所提供的基础服务(功能),衔接网络上应用系统的各个部分或不同的应用,能够达到资源共享、功能共享的目的。它并没有很严格的定义,但是普遍接受IDC的定义:中间件是一种独立的系统软件服务程序,分布式应用软件借助这种软件在不同的技术之间共享资源,中间件位于客户机服务器的操作系统之上,管理计算资源和网络通信。
从这个意义上可以用一个等式来表示中间件:中间件 = 平台+通信,这也就限定了只有用于分布式系统中才能叫中间件,同时也把它与OS支撑软件和实用软件区分开来。
中间件是一类连接软件组件和应用的计算机软件,它包括一组服务和一组API。以便于运行在一台或多台机器上的多个软件通过网络进行交互。该技术所提供的互操作性,推动了一致分布式体系架构的演进,该架构通常用于支持并简化那些复杂的分布式应用程序,它包括web服务器、事务监控器和消息队列软件。
近年来,人类生活中越来越多的领域已经变得离不开计算机、网络技术以及通信技术。并且随着计算机技术的快速发展,更多的应用软件被要求在许多不同的网络协议、不同的硬件生产厂商以及不一样的网络平台和环境上运营。这导致了软件开发者需要面临数据离散、操作困难、系统匹配程度低,以及需要开发多种应用程序来达到运营的目的。所以,中间件技术的产生,在极大程度上减轻了应用程序开发者的负担,使得网络的运行更有效率。
中间件是独立的系统级软件,连接操作系统层和应用程序层,将不同操作系统提供应用的接口标准化,协议统一化,屏蔽具体操作的细节,中间件一般提供如下功能:
(1)通信支持
软件系统中最基本的诉求,就像人需要交流是基本诉求一样,通信手段的有效性程度,决定了整个系统信息交流有效性的程度。没有消息交流的系统就是一座孤岛。
中间件为其所支持的应用软件提供平台化的运行环境,该环境屏蔽底层通信之间的接口差异,实现互操作,所以通信支持是中间件一个最基本的功能,嵌入式系统的基础设施,就像一个社会的交通网、通信网、社交网一样。
早期应用与分布式的中间件交互主要的通信方式为:(1)远程调用和(2)消息两种方式。
通信模块中,远程调用通过网络进行通信,通过支持数据的转换和通信服务,从而屏蔽不同的操作系统和网络协议。远程调用是提供给予过程的服务访问,为上层系统只提供非常简单的编程接口或过程调用模型。
消息提供异步交互的机制。
(2)应用支持
中间件的目的就是服务上层应用,提供应用层不同服务之间的互操作机制(应用层程序之间相互发送和接收收据)。它为上层应用开发提供统一的平台和运行环境,并封装不同操作系统提供API接口,向应用提供统一的标准接口,使应用的开发和运行与操作系统无关,实现其独立性。
中间件松耦合的结构,标准的封装服务和接口,有效的互操作机制,从而给应用结构化和开发方法提供有力的支持。
(3)公共服务
公共服务是对应用软件中共性功能或约束的提取。将这些共性的功能或者约束分类实现,并支持复用,作为公共服务,提供给应用程序使用。
通过提供标准、统一的公共服务,可减少上层应用的开发工作量,缩短应用的开发时间,并有助于提高应用软件的质量。
(1)基于远程过程调用的复用
(2)基于Web服务(通过URL从服务器获取服务)
(3)基于消息的服务(如进程间通信的服务、线程间通信的服务)
(4)基于API函数调用的服务(如定时器服务、Log服务)
中间件的目的是屏蔽分布式环境中异构的OS和网络协议,它必须能够提供分布式环境下的分布式通信服务与分布式计算,将这种通信服务称为中间平台,另外,OS和网络协议称为基础平台.
中间件技术的发展,主要经历了三个阶段:
其中面向消息的中间件技术最为成熟,最常见。
基础中间件:解决同一个操作系统管辖下的不同进程、线程之间通信的服务需求,该中间件不会跨越不同的操作系统 。
集成中间件:解决跨越或屏蔽不同操作系统之间的通信诉求,构建在异系统之上。
行业领域应用平台:构建在异系统的集成中间件之上,为特定的行业应用构建的平台。
三大基础中间件分别为交易中间件、消息中间件和应用服务器中间件,其中:
(1)交易(事务)中间件
是专门针对联机业务处理系统而设计的,是所有中间件类型中理论较为成熟、功能和性能界定比较清晰的中间件产品。
联机业务:是指操作员的终端直接与主要相联,业务数据实时性地进入到主机的数据库中。
联机事务处理 (OLTP) :使用计算机系统对事务数据进行管理称为联机事务处理 (OLTP)。 OLTP 系统在组织的日常运营中发生业务交互时对其进行记录,并且支持对该数据进行查询来做出推断。
事务数据是指一种信息,用于跟踪与组织活动相关的交互。 这些交互通常是业务事务,如从客户收到的付款、对供应商进行的付款、从库存移动的产品、接受的订单或交付的服务。 表示事务本身的事务事件通常包含时间维度、一些数值和对其他数据的引用。
事务通常需要原子性和一致性。 原子性意味着整个事务始终作为一个工作单元成功或失败,永远不会处于半完成状态。 如果无法完成某个事务,数据库系统必须回退任何已作为该事务的一部分完成的步骤。
在联机(在线)业务处理系统中,需处理大量并发进程,涉及到操作系统、文件系统、数据通讯、数据库管理等,通过交易中间件,可降低联机业务处理系统的开发难度,提高系统运行的安全稳定性。
交易(买卖)中间件主要应用在金融、财税、运输、电力、电信等行业中,如银行业务系统、电信计费系统等。
(2)消息队列(Message Quequing)中间件(主要应用于嵌入式系统数据路由)
消息是两台计算机间传送的数据单位,消息队列在将消息从它的源中继到它的目标时充当中间人,主要目的是提供路由并保证消息的传递;
消息队列是在消息传输过程中保存消息的容器,消息中间件即为消息队列的承载形式。
如果发送消息时接收者不可用,消息队列会保留消息,直到可以成功地传递它。
消息可以承载的数据内容包括:
消息队列主要解决:
(3)分布式应用服务器中间件(主要应用于互联网Web服务器)
位于客户浏览器Web Client和服务器端的数据库之间,为应用程序提供业务逻辑的代码。
应用服务器通过组件的应用程序接口将商业应用逻辑曝露给客户端的程序,同时为应用提供运行平台和系统服务,并管理对数据库的范围。
对于高端需求,分布式应用服务器具有高可用性监视、集群化、负载平衡、集成冗余和高性能分布式应用服务,以及对复杂的数据库访问的支持等功能。
目前,市场上应用服务器平台中有J2EE,WebLogic,Glassfish,JBoss企业应用平台,以及Apache Tomcat和Apache Geronimo等。
事务式中间件又称事务处理管理程序,是当前用的最广泛的中间件之一,其主要功能是提供联机事务处理所需要的通信、并发访问控制、事务控制、资源管理、安全管理、负载平衡、故障恢复和其他必要的服务。
随着分布计算技术的发展,分布应用系统对大规模的事务处理也提出了需求。事务处理监控程序位于客户和服务器之间,完成事务管理与协调、负载平衡、失效恢复等任务,以提高系统的整体性能。
事务式中间件支持大量客户进程的并发访问,具有极强的扩展性。由于事务式中间件具有可靠性高、极强的扩展性等特点,主要应用于电信、金融、飞机订票系统、证券等拥有大量客户的领域。
过程式中间件又称远程过程调用中间件。
过程中间件一般从逻辑上分为两部分:客户和服务器。
客户和服务器是一个逻辑概念,既可以运行在同一计算机上,也可以运行在不同的计算机上,甚至客户和服务器底层的操作系统也可以不同。客户机和服务器之间的通信可以使用同步通信,也可以采用线程式异步调用。所以过程式中间件有较好的异构支持能力,简单易用,但由于客户和服务器之间采用访问连接,所以在易剪裁性和容错方面有一定的局限性。
面向消息的中间件,简称为消息中间件,是一类以消息为载体进行通信的中间件,利用高效可靠的消息机制来实现不同应用间大量的数据交换。
按其通信模型的不同,消息中间件的通信模型有两类:消息队列和消息传递。
通过这两种消息模型,不同应用之间的通信和网络的复杂性脱离,摆脱对不同通信协议的依赖,可以在复杂的网络环境中高可靠、高效率的实现安全的异步通信。消息中间件的非直接连接,支持多种通信规程,达到多个系统之间的数据的共享和同步。面向消息中间件是一类常用的中间件。
面向对象中间件又称分布对象中间件,是分布式计算技术和面向对象技术发展的结合,简称对象中间件。分布对象模型是面向对象模型在分布异构环境下的自然拓广。面向对象中间件给应用层提供各种不同形式的通信服务,通过这些服务,上层应用对事务处理、分布式数据访问,对象管理等处理更简单易行。OMG组织是分布对象技术标准化方面的国际组织,它制定出了CORBA等标准。
Web应用服务器是Web服务器和应用服务器相结合的产物。应用服务器中间件可以说是软件的基础设施,利用构件化技术将应用软件整合到一个确定的协同工作环境中,并提供多种通信机制,事务处理能力,及应用的开发管理功能。由于直接支持三层或多层应用系统的开发,应用服务器受到了广大用户的欢迎,是中间件市场上竞争的热点,J2EE架构是应用服务器方面的主流标准。
新的应用需求、新的技术创新、新的应用领域促成了新的中间件产品的出现。如,ASAAC在研究标准航空电子体系结构时提出的通用系统管理GSM,属于典型的嵌入式航电系统的中间件,互联网云技术的发展云计算中间件、物流网的中间件等随着应用市场的需求应运而生。
企业面向客户的前台(类似嵌入式式系统的应用程序)、面向企业资产的后台(类似嵌入式系统的操作系统和硬件设备)存在需求矛盾时,为了满足前台客户的快速迭代需求和后台资源的稳定性需求,中台概念应运而生。中台的核心是当前台需求来临时,中台能快速的进行响应,重复适配、匹配、整合稳定的内部资源(类似嵌入式系统的计算资源、硬件资源等),从而提升企业整体(类似嵌入式软硬件系统)的研发效率,降低创新成本,提高工作效率。
中台,互联网术语,一般应用于大型企业。
一般是指搭建一个灵活快速应对变化的架构,快速实现前端提的需求,避免重复建设,达到提高工作效率目的。
中台,作为平台型组织的一部分,是在前台业务部门和后台资源部门之间的组织模块。这些模块多半是传统组织中所谓的成本中心cost center,它们负责把后台的资源整合成前台打仗所需的“中间件”,方便随需调用。
(1)前台:各种不同的业务前台。
(2)中台:支撑各种业务的中台。
(3)后台:组织内部各种现有的资源(与业务无关的通用资源,被业务中台整合成与业务相关的资源)
中台更多的是一种“思想”、是一种“思维模型”
前台、中台、后台是相对的,在不同的系统中,前台、中台、后台含义不同。
在嵌入式系统中:前台是各种应用程序;中台是中间件和用户空间硬件设备驱动;后台是操作系统libc或C++库。
在互联网应用中:前台就是Web页面;中台就是提供各种业务的框架(大中台);后台就是各种虚拟机。
在企业内:前台是一个能赚钱的部门;中台就是各种成本中心;后台是企业的职能部门和软硬件资源、人力资源。
中台分为三类:业务中台、数据中台和组织中台。
多半是传统的成本中心,把后台的资源整合成前台打仗需要的“中间件”,方便被随需调用。
典型的业务中台如字节跳动的直播中台、腾讯的技术中台等。
“业务中台”也被称为“有形的中台”,因为是有实体部门存在的。
(数据中台为不同的业务提供数据存储和数据分析的服务)
数据中台应该被称之为“业务中台的数据化”,其让内部资源和内部能力在极度共享后形成数据汇集,并基于算法进行智能决策,以支持业务中台和组织中台的运作。
简单地受,数据中台,就是把企业内部(类似嵌入式系统中的计算、内存、硬件外设)的各种有形也无形的资源进行量化,形成大数据,并使用特定的算法对数据进行分析和智能决策,为业务中台提供数字的信息和决策结果。
有了数字中台,企业的物理资源都本量化成一个个数字。业务中台不在基于物理资源进行调度,而是基于数字化后的资产进行资源的整合,满足客户的需求。有数字中台负责把数字资源转换为对应的物理资源。
由财务、人力、战略等部门向前台派出的业务伙伴(BusinessPartner, BP)组成的团队。BP团队会进入前台的小团队,用专业视角共同作战,同时也代表后台高效配置资源和政策。
“组织中台”也被称为“无形的中台”,就是因为没有实体部门,像水一样,无孔不入地渗透到每个业务单元。
组织中台,类似于“总前委”,负责根据客户的需求和企业内部的资源,快速的决策。
基站软件的中间件处于Linux OS和基站应用程序(OAM/网络应用/L2/L3软件,L1独立于Linux OS)之间的程序,为应用程序提供各种底层服务。
(1)可移植性
方便应用程序在不同硬件平台的移植,在产品的持续迭代中,硬件不断的迭代更新,通过中间件,可以屏蔽硬件持续迭代变化。
嵌入式系统的硬件和操作系统都会不断的演进,通过中间件,可以隔离硬件平台与易变的应用程序。
没有中间件在应用程序和特定的硬件平台之间进行缓冲,硬件平台的一点变动,都可能影响应用程序的代码 。
(2)易用性
中间件为应用程序提供了更加便捷的方式使用Linux操作系统的各种软硬件服务,提升了应用程序的开发效率。
没有中间件,应用程序员需要使用操作系统、Libc和C++、线程库等各种库最原始的API函数时,需要了解底层库函数的使用的细节,这对关于业务的应用程序员是一种挑战,同时当有大量的应用程序员都关注这些底层函数库的细节的时候,也是精力上的巨大浪费。
(1)API静态函数库
备注:这些中间件代码是在调用这些函数的进程空间中执行的。
(2)运行在应用程序进程空间中的线程
这些中间件线程,可以运行在应用程序的进程空间,为应用程序提供服务。
不同的应用程序,如果需要,会在自己的进程空间创建这些线程的实例。如
(3)运行在自己独立进程空间中的后台进程
(1)Buffer工具
(2)调试工具
(3)通信工具
透明进程间通信(Transparent Inter-process Communication,缩写为TIPC)是一种用于进程间通信的网络通信协议,原本是为集群间通信特别设计的。它允许设计人员能够创建可以和其它应用快速可靠地通信应用,无须考虑在其它需要通信的应用在集群环境中的位置。
TIPC项目是TIPC协议的开源实现。TIPC项目组正在关注TIPC的演化,并致力于开发一个自由的可移植的TIPC协议实现。
在Linux和VxWorks中,TIPC已经可用,对Solaris的支持则正在开发当中。用C或C++编写的应用能够创建AF_TIPC协议簇的套接字(Socket)来使用TIPC协议,为Perl, Python和Ruby的插件现在也可使用。
TIPC 协议从Linux kernel版本2.6.16开始已经在内核支持,也可以作为模块置于之前版本的内核。其他操作系统中也有支持,包括Wind RiverVxWorks和Sun Microsystems的Solaris。
和大多数如IP等网络协议不同,地址并不是与接口关联,而是和整个物理节点关联。一个节点也只能拥有整个网络中唯一的一个地址。
地址模式映射到逻辑网络拓扑。易读的标识为
(4)程序管理工具
(5)网络工具
存储或打印trace或日志log,是嵌入式系统一个非常有用的机制,没有该机制,只能使用printf把日志信息打印到屏幕上。有了trace或log服务,应用程序可以把日志打印到指定的文件中,还可以为日志分级等。
(1)code trace:跟踪工具,可以按照指定的等级,记录代码详细的执行流程。code trace的等级可以动态设置。这对于实时调试和跟踪目标系统的执行非常有帮助,每个应用程序都可以根据自身的逻辑,在代码中调用该工具,按照指定的等级条件code trace。该信息实时地显示到终端上,而不是飞行记录中。
(2)log:跟踪工具,用于把错误信息添加到飞行日志中。
(3)飞行记录:用于记录和捕捉系统中的各种异常事件和软件log事件,并把这些信息记录到系统文件中,用于程序员查找和定位问题。
硬件设备驱动程序可以封装成中间件的接口,提供给应用程序。
也可以直接通过后HAL接口,提供给应用程序。
这些接口提供了访问SOC内部硬件资源的接口,特别是SOC芯片内部各种加速器硬件。
CAL与SOC的硬件密切相关。