目录

​​第1章 中间件概述​​

​​1.1 嵌入式软件总体架构​​

​​1.2 什么是中间件软件​​

​​1.3 中间件的基本功能​​

​​1.4 中间件为应用程序提供服务的基本方式​​

​​1.5 中间件的发展历程​​

​​第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)​​


第1章 中间件概述

1.1 嵌入式软件总体架构

[架构之路-58]:目标系统 - 平台软件 - 中间件软件(嵌入式)与中间件平台(中台)_应用程序

1.2 什么是中间件软件

中间件(middleware)是基础软件的一大类,属于可复用软件的范畴。

顾名思义,中间件处于操作系统软件与用户的应用软件的中间。与用户空间驱动处于并列的位置。

用户空间驱动:负责对硬件设备与业务相关的功能配置(主要通过配置芯片的寄存器来实现)、与业务相关功能状态的监控、在用户空间数据的收发、以及为应用软件提供硬件抽象层的接口(HAL:硬件抽象层接口)。以便于应用软件不需要关注具体硬件的型号、硬件寄存器的定义等硬件相关的细节。为应用程序使用嵌入式系统的各种硬件服务(CPU和RAM之外)提供便利。

[架构之路-58]:目标系统 - 平台软件 - 中间件软件(嵌入式)与中间件平台(中台)_中台_02

中间件层:负责对Linux OS和libc库提供的CPU计算相关的服务(CPU和RAM)进行封装,为应用程序使用嵌入式系统的各种软件服务提供便利:

  • 提供本机的CPU和RAM资源
  • 提供分布式CPU和RAM资源

中间件最大的作用是支撑分布式、跨平台的应用程序。

如果是单机版,中间件的作用就会得到极大的弱化,应用程序可以直接使用基础中间件libc或STL或boost库即可,增强或扩展中间件的需求并没有那么强烈。

基站系统中的中间件是支持分布式应用的,属于扩展中间件

基站系统有两个大的网元BBU和RRU,另外BBU有系统板和基带板,运行在这些硬件和操作系统之上的应用软件有着强烈的通信需求。而中间件软件正好能够满足这种应用需求。

另外,基站还支持云部署,应用程序需要运行在分布式的云平台之上,中间件的作用就更加突出。

[架构之路-58]:目标系统 - 平台软件 - 中间件软件(嵌入式)与中间件平台(中台)_Linux_03

中间件是介于应用系统和​​系统软件​​之间的一类软件。

它使用系统软件所提供的基础服务(功能),衔接网络上应用系统的各个部分或不同的应用,能够达到资源共享、功能共享的目的。它并没有很严格的定义,但是普遍接受IDC的定义:中间件是一种独立的系统软件服务程序,分布式应用软件借助这种软件在不同的技术之间共享资源,中间件位于客户机服务器的操作系统之上,管理计算资源网络通信

从这个意义上可以用一个等式来表示中间件:中间件 = 平台+通信,这也就限定了只有用于分布式系统中才能叫中间件,同时也把它与OS支撑软件实用软件区分开来。

中间件是一类连接软件组件和应用的计算机软件,它包括一组服务一组API。以便于运行在一台或多台机器上的多个软件通过网络进行交互。该技术所提供的互操作性,推动了一致分布式体系架构的演进,该架构通常用于支持并简化那些复杂的分布式应用程序,它包括web服务器、事务监控器和消息队列软件。

近年来,人类生活中越来越多的领域已经变得离不开计算机、网络技术以及通信技术。并且随着计算机技术的快速发展,更多的应用软件被要求在许多不同的网络协议、不同的硬件生产厂商以及不一样的网络平台和环境上运营。这导致了软件开发者需要面临数据离散、操作困难、系统匹配程度低,以及需要开发多种应用程序来达到运营的目的。所以,中间件技术的产生,在极大程度上减轻了应用程序开发者的负担,使得网络的运行更有效率。

1.3 中间件的基本功能

中间件是独立的系统级软件,连接操作系统层和应用程序层,将不同操作系统提供应用的接口标准化,协议统一化,屏蔽具体操作的细节,中间件一般提供如下功能:

(1)通信支持

软件系统中最基本的诉求,就像人需要交流是基本诉求一样,通信手段的有效性程度,决定了整个系统信息交流有效性的程度。没有消息交流的系统就是一座孤岛。

中间件为其所支持的应用软件提供平台化的运行环境,该环境屏蔽底层通信之间的接口差异,实现互操作,所以通信支持是中间件一个最基本的功能,嵌入式系统的基础设施,就像一个社会的交通网、通信网、社交网一样。

早期应用与分布式的中间件交互主要的通信方式为:(1)远程调用和(2)消息两种方式。

通信模块中,远程调用通过网络进行通信,通过支持数据的转换和通信服务,从而屏蔽不同的操作系统和网络协议。远程调用是提供给予过程的服务访问,为上层系统只提供非常简单的编程接口或过程调用模型。

消息提供异步交互的机制。 

(2)应用支持

中间件的目的就是服务上层应用,提供应用层不同服务之间的互操作机制(应用层程序之间相互发送和接收收据)。它为上层应用开发提供统一的平台和运行环境,并封装不同操作系统提供API接口,向应用提供统一的标准接口,使应用的开发和运行与操作系统无关,实现其独立性。

中间件松耦合的结构,标准的封装服务和接口,有效的互操作机制,从而给应用结构化和开发方法提供有力的支持。 

(3)公共服务

公共服务是对应用软件中共性功能或约束的提取。将这些共性的功能或者约束分类实现,并支持复用,作为公共服务,提供给应用程序使用。

通过提供标准、统一的公共服务,可减少上层应用的开发工作量,缩短应用的开发时间,并有助于提高应用软件的质量。

1.4 中间件为应用程序提供服务的基本方式

(1)基于远程过程调用的复用

(2)基于Web服务(通过URL从服务器获取服务)

(3)基于消息的服务(如进程间通信的服务、线程间通信的服务)

(4)基于API函数调用的服务(如定时器服务、Log服务)

1.5 中间件的发展历程

(1)中间件早期发展

中间件的目的是屏蔽分布环境中异构的OS网络协议,它必须能够提供分布式环境下的通信服务,将这种通信服务称为中间平台,OS和网络协议称为基础平台

(2)中间件发展阶段

中间件技术的发展,经历了面向过程的分布计算技术、面向对象的分布计算技术、面向Agent的分布计算技术3个阶段。中间件产品也分为:

  • 远程过程调用中间件( Remote Procedure Call,RPC)  =》 远程函数调用。
  • 面向消息的中间件(Mes-sage Oriented Middleware,MOM)
  • 面向对象请求代理中间件

其中面向消息的中间件技术最为成熟。

第2章 中间件的分类

2.1 事务式中间件

事务式中间件又称事务处理管理程序,是当前用的最广泛的中间件之一,其主要功能是提供联机事务处理所需要的通信、并发访问控制、事务控制、资源管理、安全管理、负载平衡、故障恢复和其他必要的服务。

随着​​分布计算​​​技术的发展,分布应用系统对大规模的事务处理也提出了需求。事务处理监控程序位于客户和服务器之间,完成事务管理与协调、​​负载平衡​​、失效恢复等任务,以提高系统的整体性能。

事务式中间件支持大量客户进程的并发访问,具有极强的扩展性。由于事务式中间件具有可靠性高、极强的扩展性等特点,主要应用于电信、金融、飞机订票系统、证券等拥有大量客户的领域。 

2.2 过程式中间件

过程式中间件又称​​远程过程调用​​中间件。

过程中间件一般从逻辑上分为两部分:客户和服务器。

客户和服务器是一个逻辑概念,既可以运行在同一计算机上,也可以运行在不同的计算机上,甚至客户和服务器底层的操作系统也可以不同。客户机和服务器之间的通信可以使用同步通信,也可以采用线程式异步调用。所以过程式中间件有较好的异构支持能力,简单易用,但由于客户和服务器之间采用访问连接,所以在易剪裁性和容错方面有一定的局限性。 

2.3 面向消息的中间件

面向消息的中间件,简称为消息中间件,是一类以消息为载体进行通信的中间件,利用高效可靠的消息机制来实现不同应用间大量的数据交换。

按其通信模型的不同,消息中间件的通信模型有两类:消息队列和消息传递。

[架构之路-58]:目标系统 - 平台软件 - 中间件软件(嵌入式)与中间件平台(中台)_架构_04

通过这两种消息模型,不同应用之间的通信和网络的复杂性脱离,摆脱对不同通信协议的依赖,可以在复杂的网络环境中高可靠、高效率的实现安全的异步通信。消息中间件的非直接连接,支持多种通信规程,达到多个系统之间的数据的共享和同步。面向消息中间件是一类常用的中间件。 

2.4 面向对象中间件

面向对象中间件又称分布对象中间件,是​​分布式计算技术​​​和​​面向对象技术​​​发展的结合,简称对象中间件。分布对象模型是​​面向对象模型​​在分布异构环境下的自然拓广。面向对象中间件给应用层提供各种不同形式的通信服务,通过这些服务,上层应用对事务处理、分布式数据访问,对象管理等处理更简单易行。OMG组织是分布对象技术标准化方面的国际组织,它制定出了CORBA等标准。 

2.5 Web应用服务器

Web应用服务器是Web服务器和应用服务器相结合的产物。应用服务器中间件可以说是软件的基础设施,利用构件化技术将应用软件整合到一个确定的协同工作环境中,并提供多种通信机制,事务处理能力,及应用的开发管理功能。由于直接支持三层或多层应用系统的开发,应用服务器受到了广大用户的欢迎,是中间件市场上竞争的热点,​​J2EE架构​​是应用服务器方面的主流标准。 

2.6 其他

新的应用需求、新的技术创新、新的应用领域促成了新的中间件产品的出现。如,ASAAC在研究标准航空电子体系结构时提出的通用系统管理GSM,属于典型的嵌入式航电系统的中间件,互联网云技术的发展​​云计算中间件​​、物流网的中间件等随着应用市场的需求应运而生。

第3章 中台(大平台、小产品)

企业面向客户的前台(类似嵌入式式系统的应用程序)面向企业资产的后台(类似嵌入式系统的操作系统和硬件设备)存在需求矛盾时,为了满足前台客户的快速迭代需求和后台资源的稳定性需求,中台概念应运而生。中台的核心是当前台需求来临时,中台能快速的进行响应,重复适配、匹配、整合稳定的内部资源(类似嵌入式系统的计算资源、硬件资源等),从而提升企业整体(类似嵌入式软硬件系统)的研发效率,降低创新成本,提高工作效率。

中台,​​互联网​​术语,一般应用于大型企业。

一般是指搭建一个灵活快速应对变化的​​架构​​,快速实现前端提的需求,避免重复建设,达到提高工作效率目的。

中台,作为​​平台型组织​​的一部分,是在前台业务部门后台资源部门之间的组织模块。这些模块多半是传统组织中所谓的成本中心cost center,它们负责把后台的资源整合成前台打仗所需的“中间件”,方便随需调用。

[架构之路-58]:目标系统 - 平台软件 - 中间件软件(嵌入式)与中间件平台(中台)_中间件_05

(1)前台:各种不同的业务前台。

(2)中台:支撑各种业务的中台。

(3)后台:组织内部各种现有的资源。

中台更多的是一种“思想”、是一种“思维模型”

前台、中台、后台是相对的,在不同的系统中,前台、中台、后台含义不同。

在嵌入式系统中:前台是各种应用程序;中台是中间件和用户空间硬件设备驱动;后台是操作系统libc或C++库。

在企业内:前台是一个能赚钱的业务;中台就是各种成本中心;后台是企业的职能部门和软硬件资源、人力资源。

中台分为三类:​​业务中台​​​、​​数据中台​​​和​​组织中台​​。 

​3.1 业务中台​​ (类似于嵌入式系统中的业务平台,不同的业务不同的业务平台)

多半是传统的成本中心,把后台的资源整合成前台打仗需要的“中间件”,方便被随需调用。

典型的业务中台如字节跳动的直播中台、腾讯的技术中台等。

“业务中台”也被称为“有形的中台”,因为是有实体部门存在的。

3.2 数据中台(类似嵌入式系统中的数据库平台)

(数据中台为不同的业务提供数据存储和数据分析的服务)

数据中台应该被称之为“业务中台的数据化”,其让内部资源和内部能力在极度共享后形成数据汇集,并基于算法进行智能决策,以支持业务中台组织中台的运作。

简单地受,数据中台,就是把企业内部(类似嵌入式系统中的计算、内存、硬件外设)的各种有形也无形的资源进行量化,形成大数据,并使用特定的算法对数据进行分析和智能决策,为业务中台提供数字的信息和决策结果。

有了数字中台,企业的物理资源都本量化成一个个数字。业务中台不在基于物理资源进行调度,而是基于数字化后的资产进行资源的整合,满足客户的需求。有数字中台负责把数字资源转换为对应的物理资源。

​3.3  组织中台​​(类似嵌入式系统中前端负载均衡器)

财务、人力、战略等部门向前台派出业务伙伴(BusinessPartner, BP)组成的团队。BP团队会进入前台的小团队,用专业视角共同作战,同时也代表后台高效配置资源和政策。

“组织中台”也被称为“无形的中台”,就是因为没有实体部门,像水一样,无孔不入地渗透到每个业务单元。

组织中台,类似于“总前委”,负责根据客户的需求和企业内部的资源,快速的决策。

第4章 基站中间件总体架构

4.1 概述

基站软件的中间件处于Linux OS和基站应用程序(OAM/网络应用/L2/L3软件,L1独立于Linux OS)之间的程序,为应用程序提供各种底层服务。

4.2 中间件的好处

(1)可移植性

方便应用程序在不同硬件平台的移植。

嵌入式系统的硬件会不断的演进,通过中间件,可以隔离硬件平台与易变的应用程序。

没有中间件在应用程序和特定的硬件平台之间进行缓冲,硬件平台的一点变动,都可能影响应用程序的代码 。

(2)易用性

中间件为应用程序提供了更加便捷的方式使用Linux操作系统的各种软硬件服务,提升了应用程序的开发效率。

没有中间件,应用程序员需要使用操作系统、Libc和C++、线程库等各种库最原始的API函数时,需要了解底层库函数的使用的细节,这对关于业务的应用程序员是一种挑战,同时当有大量的应用程序员都关注这些底层函数库的细节的时候,也是精力上的巨大浪费。

4.3 按中间件存在的形态分类

[架构之路-58]:目标系统 - 平台软件 - 中间件软件(嵌入式)与中间件平台(中台)_应用程序_06

(1)API静态函数库

  • OS POSIX库的进一步封装(内核空间)
  • 用户空间库的进一步封装
  1. gLibc库的进一步封装 (用户空间)
  2. C++库的进一步封装 (用户空间)
  3. Boost库的进一步封装(用户空间)
  4. pThread库的进一步封装(用户空间)
  5. 各种工具链使用(用户空间)
  6. 其他库(用户空间)
  • 用户空间的服务

备注:这些中间件代码是在调用这些函数的进程空间中执行的。

(2)运行在应用程序进程空间中的线程

这些中间件线程,可以运行在应用程序的进程空间,为应用程序提供服务。

不同的应用程序,如果需要,会在自己的进程空间创建这些线程的实例。如

  • LEC:负责监控并收集某个进程内执行过程的出错信息(abort signal)
  • BCI:负责为每个进程提供独立的在线命令行机制
  • Btime:负责为每个进程提供独立的定时器服务,管理进程内所有线程创建的定时器,并执行定时服务程序,这个定时器服务程序是属于进程的,因此,能够访问进程内的全局变量。
  • UMSG:提供线程间消息通信机制,为进程内的线程创建消息队列机制,应用程序可以使用该消息队列接收消息。
  • Pub/Sub:为进程空间的所有线程提供一个注册和定向发布机制。

(3)运行在自己独立进程空间中的后台进程

  • Laucher:启动进程,根据配置文件的配置,负责启动指定的应用程序进程,并把他们绑定到指定的核上。
  • xxx_proxy:提供特定功能的代理服务,比如DSP与主控CPU的代理。
  • Lec mon:Linux Error Collector,负责管理文件系统中的错误日志文件的分割与迁移。
  • lec snap:负责监控所有进程的错误执行(如SIGHUP信号),负责收集进程执行异常时的上下文(通过执行配置的命令序列),并存储成snapshot文件,供程序分析软件异常。
  • watchdog:多核软件看门狗服务,每个core有一个独立的线程进行监控,实现对不同的cpu core进行喂狗服务。某个CPU core程序走飞时,看门狗就无法喂狗,超时后,试图通过重启系统恢复系统。
  • std out:该进程复杂把终端的打印信息(串口或ssh)重定向到指定的文件中,便于程序员查看调试信息。

第5章 基站中间件五大类API服务

5.1 内核空间BOS服务(POSIX接口封装)=》跨进程间通信

  • 内核消息队列
  • 信号量
  • 互斥量
  • 定时器
  • 单向链表
  • 双向链表
  • 共享内存
  • 文件操作
  • socket

5.2 用户空间的服务工具

(1)Buffer工具

  • Ring Buffer:循环缓冲区,用于L2和L1 proxy之间的数据承载
  • 缓冲区管理:为了降低malloc申请和释放内存的开销以及克服内存碎片的问题,可以预先在用户 空间向内核申请一个大的内存空间,然后按照特定的大小进行组织和管理。供应用程序申请,这样,应用程序就不需要向内核申请缓冲区。该缓冲区为所有的进程共享。这种方法,非常适合一个进程内所有线程的通信。

(2)调试工具

  • Trace服务:日志服务,通过trace服务,可以确保所有的线程打印的log是按照时间排序的,是按照特定的格式组织的。
  • Coredump服务:提供dumpDSP和FPGA 上下文的服务。
  • LEC:一组工具,用于收集出错信息。
  • OPTF (Optimized Files):RAM文件系统,把Falsh文件重定向到RAM中。
  • BCI:命令行解释器,有了个解释器,每个应用程序可以定义自己的命令行。

(3)通信工具

  • Pub/Sub:提供publish/subscribe机制
  • UMesg:是对TIPC的封装,提供跨板间通信的机制
  • eMSG:对UMesg进一步封装,提供更简化的跨板间通信的机制

(4)程序管理工具

  • Embryo:这个一个管理应用程序的框架程序,一个应用程序,可能会依赖其他的动态链接库so. 通过Embryo框架,可以方便的管理应用程序和依赖程序的关系。启动程序会先加载依赖库,再执行可执行程序。

(5)网络工具

  • IPIF:IP协议栈接口,用于设置网络接口的IP地址。

5.3 基本API服务之trace和log服务

存储或打印trace或日志log,是嵌入式系统一个非常有用的机制,没有该机制,只能使用printf把日志信息打印到屏幕上。有了trace或log服务,应用程序可以把日志打印到指定的文件中,还可以为日志分级等。

(1)code trace:跟踪工具,可以按照指定的等级,记录代码详细的执行流程。code trace的等级可以动态设置。这对于实时调试和跟踪目标系统的执行非常有帮助,每个应用程序都可以根据自身的逻辑,在代码中调用该工具,按照指定的等级条件code trace。该信息实时地显示到终端上,而不是飞行记录中。

(2)log:跟踪工具,用于把错误信息添加到飞行日志中。

(3)飞行记录:用于记录和捕捉系统中的各种异常事件和软件log事件,并把这些信息记录到系统文件中,用于程序员查找和定位问题。

  • software logs
  • software errors
  • alarms
  • hardware errors
  • initialization
  • internal messages
  • external messages
  • user defined event

5.4 基本API服务之Driver =》 映射设备驱动服务

硬件设备驱动程序可以封装成中间件的接口,提供给应用程序。

也可以直接通过后HAL接口,提供给应用程序。

5.5 基本API服务之SOC抽象层CAL ( Core Abstract Layer)

这些接口提供了访问SOC内部硬件资源的接口,特别是SOC芯片内部各种加速器硬件。

CAL与SOC的硬件密切相关。

[架构之路-58]:目标系统 - 平台软件 - 中间件软件(嵌入式)与中间件平台(中台)_中台_07