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

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

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

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

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

引言

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

概念

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

中间件的分类

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

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

大致分为:

  • 远程过程调用中间件(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原则(通俗点就是为了使得一些更新操作要么都成功,要么都失败)。

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啃论文成长计划—浅谈中间件

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

用中间件思维看OpenHarmony架构

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

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

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

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

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​

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

文章版权声明

 1 原创文章作者:Dada,如若转载,请注明出处: https://www.52hwl.com/95193.html

 2 温馨提示:软件侵权请联系469472785#qq.com(三天内删除相关链接)资源失效请留言反馈

 3 下载提示:如遇蓝奏云无法访问,请修改lanzous(把s修改成x)

 免责声明:本站为个人博客,所有软件信息均来自网络 修改版软件,加群广告提示为修改者自留,非本站信息,注意鉴别

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2024年1月16日 下午10:33
下一篇 2024年1月16日 下午10:34