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

Posted OpenHarmony技术社区

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了OpenHarmony啃论文成长计划——浅谈中间件相关的知识,希望对你有一定的参考价值。

  • 大家好!我来自南京,在OpenHarmony成长计划啃论文俱乐部,研究学习中间件相关的技术,我是11组的成员。

致敬华为

目录

1.概念
2.中间件的分类
3.一些开源中间件技术
4.以ShardingSphere为例认识数据库中间件
5.用中间件思维看OpenHarmony架构
6.用中间件思维看OpenHarmony的IMF输入法框架
7.用中间件思维看OpenHarmony系统开发辅助工具SIG
8.OpenHarmony、HarmonyOS与HMS


  • 引言

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

  • 概念

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

  • 中间件的分类


    对中间件进行分类的困难是一些中间件可以执行多个服务
    大致分为:
    远程过程调用中间件(Remote Procedure Call)
    面向消息中间件MOM(Message Oriented Middleware)
    面向对象的中间件OOM(Object Oriented Middleware)
    数据库中间件(Data Access Middleware)
    事务处理中间件(Transaction Proncessing Middleware)Transaction Proncessing又译为交易处理

  • 一些开源中间件技术

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

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

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


    二十年前人们对中间件的展望和二十年后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,定义了一个个面向具体功能场景的接口,不用什么功能模块都从头编程,能直接引用,HMS就符合文中概念给出的 ==中间件== 的概念。
    那么同样OpenHarmony适用于手机部分的“HMS Core”让我们拭目以待。

由于本人水平有限以及知识面的狭隘,文章中有疏漏和不足之处敬请各位老师和读者批评指正。
参考文献
A Survey of Middleware
中间件技术综述 周园春; 李淼; 张建; 李晓欧; 张飞 计算机工程与应用
IMF框架文档

想了解更多关于鸿蒙的内容,请访问:

51CTO和华为官方合作共建的鸿蒙技术社区

https://ost.51cto.com/#bkwz

::: hljs-center

:::

以上是关于OpenHarmony啃论文成长计划——浅谈中间件的主要内容,如果未能解决你的问题,请参考以下文章

OpenHarmony啃论文成长计划-零基础解读分布式软总线通讯(绪论)

OpenHarmony啃论文成长计划--分布式软总线关键技术普适计算初探

PIMFOpenHarmony啃论文俱乐部:拼音输入法_从触摸事件到汉字

ELT.ZIPOpenHarmony啃论文俱乐部——多维探秘通用无损压缩

DQOS啃论文俱乐部——分布式查询优化的历史与现状

ELT.ZIPOpenHarmony啃论文俱乐部——即刻征服3D网格压缩编码