【PIMF】OpenHarmony啃论文俱乐部——浅谈中间件 原创 精华

发布于 2022-3-20 20:55
浏览
6收藏
  • 大家好!我来自南京,在OpenHarmony成长计划啃论文俱乐部,我是11组的成员,与华为、软通动力、润和软件、拓维信息、深开鸿等公司一起,学习和研究操作系统技术…

致敬华为
@toc


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

  • 概念

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

  • 中间件的分类

【PIMF】OpenHarmony啃论文俱乐部——浅谈中间件-开源基础软件社区
对中间件进行分类的困难是一些中间件可以执行多个服务
但是大致能分为:
基于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原则(通俗点就是为了使得一些更新操作要么都成功,要么都失败)
【PIMF】OpenHarmony啃论文俱乐部——浅谈中间件-开源基础软件社区

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操作,代码如下:

@Override
public 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架构

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

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

==Input Method Framework输入法框架==,主要是拉通应用和输入法,起到了连接输入法和应用作用。保证应用可以通过输入法进行文本输入,相当于==中间件==。IMF框架将会提供了输入法开发所需要的接口,为当前输入法的开发提供了扩展的空间。
OpenHarmony中的IMF输入法框架在架构图中的位置
【PIMF】OpenHarmony啃论文俱乐部——浅谈中间件-开源基础软件社区(本文笔者的拙见不过多叙述关于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框架文档

©著作权归作者所有,如需转载,请注明出处,否则将追究法律责任
已于2022-5-5 14:40:23修改
11
收藏 6
回复
举报
回复
添加资源
添加资源将有机会获得更多曝光,你也可以直接关联已上传资源 去关联
    相关推荐