写点什么

OpenHarmony 啃论文成长计划——浅谈中间件

作者:离北况归
  • 2022 年 4 月 02 日
  • 本文字数:4162 字

    阅读完需:约 14 分钟

OpenHarmony啃论文成长计划——浅谈中间件
  • 大家好!我来自南京,在 OpenHarmony 成长计划啃论文俱乐部,我是 11 组的成员,与华为、软通动力、润和软件、拓维信息、深开鸿等公司一起,学习和研究操作系统技术…




致敬华为


目录


1.中间件概念

2.中间件的分类

3.一些开源中间件技术

4.以 ShardingSphere 为例认识中间件

5.用中间件思维看 OpenHarmony 架构

6.用中间件思维看 OpenHarmony 的 IMF 输入法框架

7.用中间件思维看 OpenHarmony 系统开发辅助工具 SIG

8.OpenHarmony、HarmonyOS 与 HMS




引言

在分布异构环境中,在多种硬件平台上存在各种各样的系统软件(不同的操作系统、数据库、语言编译器等),这些硬件系统平台还可能采用不同的网络协议和体系结构连接。把这些系统集成起来并且开发新应用是一个实际而麻烦的问题,于是“中间件”技术便应运而生。

概念

中间件是指网络环境下处于操作系统、数据库等系统软件和应用软件之间的一种起连接作用的分布式软件。简而言之,中间件就是操作系统之上的(分布式)系统软件。因此大家熟知的如 GFS、MapReduce、Spark 和 kafka 等分布式存储、分布式计算和消息队列软件都是中间件。

中间件的分类


对中间件进行分类的困难是一些中间件可以执行多个服务。但是大致能分为:基于 RPC 方式的中间件(Remote Procedure CallMiddleware)面向消息中间件 MOM(Message Oriented Middleware)面向对象的中间件 OOM(Object Oriented Middleware)数据访问中间件 (Data Access Middleware)事务处理中间件(Transaction Proncessing Middleware)Transaction Proncessing 又译为交易处理

基于 RPC 方式的中间件

基于 PRC 方式的中间件是面向过程的,采用的是同步通信。通过这种远程过程调用机制,程序员编写客户方的应用,需要时可以调用位于远端服务器上的过程。它的工作方式如下:当一个应用程序 A 需要与远程的另一个应用程序 B 交流信息或要求 B 提供协助时,A 在本地产生一个请求,通过通讯链路通知 B 接收信息或提供相应的服务,B 完成相关处理后将信息或结果返回给 A。

面向消息中间件 MOM

消息中间件是一种由消息传送机制或消息队列模式组成的中间件技术,利用高效可靠的消息传递机制进行平台无关的数据交流,并基于数据通信来进行分布式系统的集成。面向消息中间件能细分为发布/订阅模式以及消息队列模式。

面向对象的中间件 OOM

面向对象的中间件提供一种通讯机制,透明地在分布异构计算环境中传递对象请求,而这些对象可以位于本地或者远程机器。这种对象请求代理机制和远程过程调用之间有相似的地方。它们的最大区别前者调用的是位于某个特定对象中的特定方法。而在于后者调用的是某个特定的功能。

数据访问中间件

数据访问中间件(或者说是数据库中间件)位于数据库管理系统和应用程序之间,实现了应用程序和异构数据库之间的统一接口,有效地解决了应用系统在不同后台数据之间的移植问题。

事务处理中间件

事务处理中间件(Transaction Proncessing Middleware)Transaction Proncessing 又译为交易处理。事务处理中间件是在分布、异构环境下提供保证交易完整性和数据完整性的一种环境平台;它是针对复杂环境下分布式应用的速度和可靠性要求而实现的。常见的功能包括全局事务协调、事务的分布式两段提交(准备阶段和完成阶段)、资源管理器支持、故障恢复、高可靠性、网络负载平衡等等。

一些开源中间件技术

高性能 Redis 中间件服务 nredis-proxy,基于 RabbitMQ 实现的消息中间件 WMQ,分布式数据库中间件 ShardingSphere,分布式 TCP 推送系统 GPush。

以 ShardingSphere 为例认识中间件

ShardingSphere 提供了事务处理,数据访问等多种中间件服务。(下面简单介绍 ShardingSphere 实现分布式事务的方式)

分布式事务在分布式环境下保持数据一致性

分布式事务是在分布式环境下确保数据一致性的基本功能。分布式事务就是要在分布式系统中实现事务,它其实是由多个本地事务组合而成。作为分布式数据库的一种生态圈, ShardingSphere 提供了对分布式事务的全面支持。ShardingSphere 支持的事务类型代码如下:


public enum TransactionType{
LOCAL,XA,BASE}
复制代码


可以看到本地事务外还提供了分布式事务实现方案 XA 事务和柔性(BASE)事务。

XA 事务的基本概念和原理

XA 事务是典型的强一致性事务,完全遵循事物的 AICD 原则(通俗点就是为了使得一些更新操作要么都成功,要么都失败)



XA 规范定义了面向全局的事务管理器 TransactionMananger(TM)和面向局部的资源管理器 ResoureMananger(RM)之间的接口。XA 是双向的系统接口,在 TransactionMananger(TM)和 ResoureMananger(RM)之间形成通信桥梁。


  • 使得 Transactionmanager(相当于“协调者”)控制着全局事务,管理事务生命周期,并协调资源。

  • 使得 Resourcemanager(相当于“参与者”)负责控制和管理包括数据库相关的各种实际资源。

ShardingSphere 中的 XA 事务实现原理

ShardingSphere 提供了专门的 XAShardingTransactionManager 类来支持 XA 事务实现。


XAShardingTransactionManager 类是分布式事务的 XA 实现类,主要负责对实际的 DataSource 进行管理和适配,并且将接入端事务的 begin/commit/rollback 操作委托给具体的 XA 事务管理器。例如, XAShardingTransactionManager 使用中的 TransactionManager 完成 commit 操作,代码如下:


@Overridepublic void commit(){XAShardingTransactionManager.getTransactionManager().commit();//这的XAShardingTransactionManager是对各种第三方XA事务管理器的一种抽象}
复制代码


查看 XAShardingTransactionManager 类的定义和所包含的变量,代码如下:


public final class XAShardingTransactionManager implements ShardingTransactionManager{
private final Map<String,XATransactionSource> cachedDataSources=new HashMap<>();
private final XATransactionManager xaTransactionManager = XATransactionManagerLoader.getInstance().getTransactionMananger();}
复制代码


可以看出 XAShardingTransactionManager 实现 ShardingTransactionManager 接口,同时保留了一组 XAShardingTransactionDataSources。XAShardingTransactionManager 实例加载采用了 JDK 中的 ServiceLoader 类,代码如下


private XATransactionManager load() {    Iterator<XATransactionManager>xaTransactionManagers=ServiceLoader.load(XATransactionManager.class). iterator();    if (!xaTransactionManagers.hasNext (){        return new AtomikosTransactionmanager();    XATransactlonManager result=xaTRansactionManagers.next();    }    if (xatransactionmanagers.hasnext(){        log.warn("There are more than one transaction mangers existing, chosen first one by default. ");    }    return result;}   //XATransactionManager就是对各种第三方XA事务管理器的一种抽象,在找不到合适的XATransactionManager情况下系统会默认创建一个AtomikosTransactionmanager
复制代码


XATransactionManager 就是对各种第三方 XA 事务管理器的一种抽象,在找不到合适的 XATransactionManager 情况下系统会默认创建一个 AtomikosTransactionmanager

二十年前人们对中间件的展望:

中间件是属于计算机软件中比较底层的内容,它和计算机操作系统的关系是相当密切的,操作系统的一部分功能可以由中间件来实现,一些中间件的功能也可以由操作系统来实现。因此,操作系统和中间件会进一步融合,从而推动计算机软件体系结构的变革。其次,人们希望实现不同业务逻辑、不同功能的中间件能够集成在一起,像一个完整的系统那样协调一致地工作;这些集成的中间件服务应该封装在一个框架中。

用中间件思维看 OpenHarmony 架构


二十年前人们对中间件的展望和二十年后 OpenHarmony 架构图对比起来,其实框架层和服务层联系起应用层和内核层作用,二者也能一定程度看作是“中间件”。某种程度上 OpenHarmony 操作系统正是顺应二十年前的展望,将操作系统和中间件进一步融合了起来。但是严格上意义来说中间件的概念太过庞大,在 OpenHarmony 这个可裁剪、跨终端和易开发的分布式操作系统中,其中并没有中间件的概念,只有各种子系统和部件。

用中间件思维看 OpenHarmony 中的 Input Method Framework 输入法框架

Input Method Framework 输入法框架,主要是拉通应用和输入法,起到了连接输入法和应用作用。保证应用可以通过输入法进行文本输入,相当于==中间件==。IMF 框架将会提供了输入法开发所需要的接口,为当前输入法的开发提供了扩展的空间。OpenHarmony 中的 IMF 输入法框架在架构图中的位置



(本文笔者的拙见不过多叙述关于 OpenHarmony 中的 IMF 输入法框架,后续将会更新相关内容,欢迎与我私信讨论)

用中间件思维看 OpenHarmony 系统开发辅助工具 SIG

为丰富 OpenHarmony 社区生态,深开鸿搭建辅助工具 SIG(Special Interest Group),负责 OpenHarmony 社区特定子领域及创新项目的架构设计、开源开发及项目维护等工作。

中间件主要解决异构网络环境下分布式应用软件的互连与互操作问题,提供标准接口、协议,屏蔽实现细节,提高应用系统易移植性。相当于中间件在操作系统这个“一楼”的基础上和“二楼”应用软件上架起了起连接作用的“楼梯”。如果中间件思维看 OpenHarmony 系统开发辅助工具 SIG,SIG 则是搭建起了开发者和 OpenHarmony 开发中的图形子系统中开机动画的快速定制优化驱动 HDF 框架 HDI 接口的开发流程、系统框架层与应用层间接口 NAPI 的开发流程这层“楼梯”。

OpenHarmony、HarmonyOS 与 HMS

OpenHarmony、HarmonyOS 是操作系统,HMS Core 是 SDK 包。HMS Core 是基于 HarmonyOS 操作系统之上的开发组件包,相当于 中间件。而 HarmonyOS 是华为基于 OpenHarmony 开发的企业发行版。

举个通俗易懂的例子,HarmonyOS 提供了零件和各种工具,例如扳手和汽配件等,开发者要一辆汽车,可以基于零件和各种工具直接一点一点造汽车各种系统再组装。HMS Core 是汽车各个系统,例如转向系统、动力系统,开发者也可以直接拿汽车各个系统快速搭建一辆汽车。这就是 SDK 包的作用,提高开发效率的,它封装了很多操作系统的 api,定义了一个个面向具体功能场景的接口,不用什么功能模块都从头编程,能直接引用。那么同样 OpenHarmony 适用于手机部分的“HMS Core”让我们拭目以待。


由于本人水平有限以及知识面的狭隘,文章中有疏漏和不足之处敬请各位老师和读者批评指正。参考文献A Survey of Middleware

中间件技术综述 周园春; 李淼; 张建; 李晓欧; 张飞 计算机工程与应用

IMF框架文档

发布于: 10 小时前阅读数: 26
用户头像

离北况归

关注

还未添加个人签名 2022.03.26 加入

还未添加个人简介

评论

发布
暂无评论
OpenHarmony啃论文成长计划——浅谈中间件_中间件_离北况归_InfoQ写作平台