[架构之路-58]:目标系统 - 平台软件 - 中间件软件(嵌入式)与中间件平台(中台)
Posted 文火冰糖的硅基工坊
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了[架构之路-58]:目标系统 - 平台软件 - 中间件软件(嵌入式)与中间件平台(中台)相关的知识,希望对你有一定的参考价值。
目录
3.1 业务中台 (类似于嵌入式系统中的业务平台,不同的业务不同的业务平台)
5.1 内核空间BOS服务(POSIX接口封装)=》跨进程间通信
5.4 基本API服务之Driver =》 映射设备驱动服务
5.5 基本API服务之SOC抽象层CAL ( Core Abstract Layer)
第1章 中间件概述
1.1 嵌入式软件总体架构
1.2 什么是中间件软件
中间件(middleware)是基础软件的一大类,属于可复用软件的范畴。
顾名思义,中间件处于操作系统软件与用户的应用软件的中间。与用户空间驱动处于并列的位置。
用户空间驱动:负责对硬件设备与业务相关的功能配置(主要通过配置芯片的寄存器来实现)、与业务相关功能状态的监控、在用户空间数据的收发、以及为应用软件提供硬件抽象层的接口(HAL:硬件抽象层接口)。以便于应用软件不需要关注具体硬件的型号、硬件寄存器的定义等硬件相关的细节。为应用程序使用嵌入式系统的各种硬件服务(CPU和RAM之外)提供便利。
中间件层:负责对Linux OS和libc库提供的CPU计算相关的服务(CPU和RAM)进行封装,为应用程序使用嵌入式系统的各种软件服务提供便利:
- 提供本机的CPU和RAM资源
- 提供分布式CPU和RAM资源
中间件最大的作用是支撑分布式、跨平台的应用程序。
如果是单机版,中间件的作用就会得到极大的弱化,应用程序可以直接使用基础中间件libc或STL或boost库即可,增强或扩展中间件的需求并没有那么强烈。
基站系统中的中间件是支持分布式应用的,属于扩展中间件:
基站系统有两个大的网元BBU和RRU,另外BBU有系统板和基带板,运行在这些硬件和操作系统之上的应用软件有着强烈的通信需求。而中间件软件正好能够满足这种应用需求。
另外,基站还支持云部署,应用程序需要运行在分布式的云平台之上,中间件的作用就更加突出。
中间件是介于应用系统和系统软件之间的一类软件。
它使用系统软件所提供的基础服务(功能),衔接网络上应用系统的各个部分或不同的应用,能够达到资源共享、功能共享的目的。它并没有很严格的定义,但是普遍接受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 面向消息的中间件
面向消息的中间件,简称为消息中间件,是一类以消息为载体进行通信的中间件,利用高效可靠的消息机制来实现不同应用间大量的数据交换。
按其通信模型的不同,消息中间件的通信模型有两类:消息队列和消息传递。
通过这两种消息模型,不同应用之间的通信和网络的复杂性脱离,摆脱对不同通信协议的依赖,可以在复杂的网络环境中高可靠、高效率的实现安全的异步通信。消息中间件的非直接连接,支持多种通信规程,达到多个系统之间的数据的共享和同步。面向消息中间件是一类常用的中间件。
2.4 面向对象中间件
面向对象中间件又称分布对象中间件,是分布式计算技术和面向对象技术发展的结合,简称对象中间件。分布对象模型是面向对象模型在分布异构环境下的自然拓广。面向对象中间件给应用层提供各种不同形式的通信服务,通过这些服务,上层应用对事务处理、分布式数据访问,对象管理等处理更简单易行。OMG组织是分布对象技术标准化方面的国际组织,它制定出了CORBA等标准。
2.5 Web应用服务器
Web应用服务器是Web服务器和应用服务器相结合的产物。应用服务器中间件可以说是软件的基础设施,利用构件化技术将应用软件整合到一个确定的协同工作环境中,并提供多种通信机制,事务处理能力,及应用的开发管理功能。由于直接支持三层或多层应用系统的开发,应用服务器受到了广大用户的欢迎,是中间件市场上竞争的热点,J2EE架构是应用服务器方面的主流标准。
2.6 其他
新的应用需求、新的技术创新、新的应用领域促成了新的中间件产品的出现。如,ASAAC在研究标准航空电子体系结构时提出的通用系统管理GSM,属于典型的嵌入式航电系统的中间件,互联网云技术的发展云计算中间件、物流网的中间件等随着应用市场的需求应运而生。
第3章 中台(大平台、小产品)
企业面向客户的前台(类似嵌入式式系统的应用程序)、面向企业资产的后台(类似嵌入式系统的操作系统和硬件设备)存在需求矛盾时,为了满足前台客户的快速迭代需求和后台资源的稳定性需求,中台概念应运而生。中台的核心是当前台需求来临时,中台能快速的进行响应,重复适配、匹配、整合稳定的内部资源(类似嵌入式系统的计算资源、硬件资源等),从而提升企业整体(类似嵌入式软硬件系统)的研发效率,降低创新成本,提高工作效率。
中台,互联网术语,一般应用于大型企业。
一般是指搭建一个灵活快速应对变化的架构,快速实现前端提的需求,避免重复建设,达到提高工作效率目的。
中台,作为平台型组织的一部分,是在前台业务部门和后台资源部门之间的组织模块。这些模块多半是传统组织中所谓的成本中心cost center,它们负责把后台的资源整合成前台打仗所需的“中间件”,方便随需调用。
(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 按中间件存在的形态分类
(1)API静态函数库
- OS POSIX库的进一步封装(内核空间)
- 用户空间库的进一步封装
- gLibc库的进一步封装 (用户空间)
- C++库的进一步封装 (用户空间)
- Boost库的进一步封装(用户空间)
- pThread库的进一步封装(用户空间)
- 各种工具链使用(用户空间)
- 其他库(用户空间)
- 用户空间的服务
备注:这些中间件代码是在调用这些函数的进程空间中执行的。
(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]:目标系统 - 平台软件 - 中间件软件(嵌入式)与中间件平台(中台)的主要内容,如果未能解决你的问题,请参考以下文章
[架构之路-61]:目标系统 - 平台软件 - 基础中间件 - 远程过程(函数)调用RPC原理与其网络架构
[架构之路-57]:目标系统 - 平台软件 - 用户空间驱动与硬件抽象层HAL
[架构之路-60]:目标系统 - 平台软件 - 基础中间件 - Linux进程间通信的主要方式
[架构之路-59]:目标系统 - 平台软件 - 基础中间件 - POSIX(可移植操作系统接口)与标准库函数libc