1

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

 2 years ago
source link: https://os.51cto.com/article/704572.html
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
neoserver,ios ssh client
OpenHarmony啃论文成长计划—浅谈中间件-51CTO.COM
OpenHarmony啃论文成长计划—浅谈中间件
作者:离北况归 2022-03-22 15:04:20
中间件是指网络环境下处于操作系统、数据库等系统软件和应用软件之间的一种起连接作用的分布式软件。

f73132d28726e77fb19605ba32b76c241f6cfb.png

​想了解更多内容,请访问:​

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

​https://ost.51cto.com​

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

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

中间件的分类

f31370586ed39979e65292c0212d2e37586af0.png

对中间件进行分类的困难是一些中间件可以执行多个服务。

大致分为:

  • 远程过程调用中间件(Remote Procedure Call)。
  • 面向消息中间件MOM(Message Oriented Middleware)。
  • 面向对象的中间件OOM(Object Oriented Middleware)。
  • 数据库中间件(Data Access Middleware)。
  • 事务处理中间件(Transaction Proncessing Middleware)TransactionProncessing又译为交易处理。

一些开源中间件技术

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

以ShardingSphere为例认识数据库中间件

(简单介绍ShardingSphere实现分布式事务的方式)。

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

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

ShardingSphere支持的事务类型代码如下:

public enum TransactionType{
     LOCAL,XA,BASE
}

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

XA事务的基本概念和原理

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

64d417576a179e34bce230012f95bdc350784a.png

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。

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

f53b26543a5b95cd6a5393b607cac993c0de67.png

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

用中间件思维看OpenHarmony架构

6490b6b90c75c372fa4326f59d79757bb961cd.png

二十年前人们对中间件的展望和二十年后OpenHarmony架构图对比起来,其实框架层和服务层联系起应用层和内核层作用,二者也能一定程度看作是“中间件”。某种程度上OpenHarmony操作系统正是顺应二十年前的展望,将操作系统和中间件进一步融合了起来。

但是严格上意义来说中间件的概念太过庞大,在OpenHarmony这个可裁剪、跨终端和易开发的分布式操作系统中,其中并没有中间件的概念,只有各种子系统和部件。

9919a6d40e261645938515ae1cd38b29818a38.png

OpenHarmony、HarmonyOS与HMS

OpenHarmony、HarmonyOS是操作系统,HMS Core是SDK包。

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

举个通俗易懂的例子,HarmonyOS提供了零件和各种工具,例如扳手和汽配件等,开发者要一辆汽车,可以基于零件和各种工具直接一点一点造汽车各种系统再组装。HMS Core是汽车各个系统,例如转向系统、动力系统,开发者也可以直接拿汽车各个系统快速搭建一辆汽车。这就是SDK包的作用,提高开发效率的,它封装了很多操作系统的api,定义了一个个面向具体功能场景的接口,不用什么功能模块都从头编程,能直接引用,HMS就符合文中概念给出的 中间件 的概念。

那么同样OpenHarmony适用于手机部分的“HMS Core”让我们拭目以待。

​想了解更多内容,请访问:​

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

​https://ost.51cto.com​

71eea7105a1cf9982d2996c42d853b97bd50ef.jpg


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK