社区编辑申请
注册/登录
OpenHarmony啃论文成长计划—浅谈中间件
系统 OpenHarmony
中间件是指网络环境下处于操作系统、数据库等系统软件和应用软件之间的一种起连接作用的分布式软件。

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

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

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

引言

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

概念

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

中间件的分类

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

大致分为:

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

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、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​

责任编辑:jianghua 来源: 鸿蒙社区
相关推荐

2022-03-28 15:28:42

分布式软总线通讯Harmony

2022-03-15 15:17:03

开源技术HarmonyMQTT协议

2022-04-02 20:45:04

Hi3516开发板操作系统鸿蒙

2022-04-15 14:31:02

鸿蒙操作系统

2022-04-20 20:28:40

HDF 驱动框架鸿蒙操作系统

2022-03-08 15:23:20

序列化反序列化鸿蒙

2022-03-31 16:13:27

Avro数据序列化系统Harmony

2022-05-11 15:08:52

驱动开发系统移植

2022-03-30 14:43:00

Harmony分布式软总线通讯

2022-04-07 14:33:31

操作系统鸿蒙HarmonyOS

2022-05-24 15:55:37

避障小车华为

2022-02-16 16:28:22

RPC鸿蒙操作系统

2022-02-24 16:32:26

OpenHarmon压缩编码鸿蒙

2022-04-15 14:57:57

Flex布局鸿蒙操作系统

2022-04-18 10:37:01

鸿蒙操作系统开发工具

2022-05-19 15:59:23

组件焦点鸿蒙

2022-03-28 15:17:12

JSONXMLHarmony

2022-04-01 15:18:04

HarmonyHDF 驱动鸿蒙

2022-04-06 11:27:05

harmonyeTS 开发NAPI开发

2022-04-07 15:28:16

HarmonyOS鸿蒙操作系统

同话题下的热门内容

DAYU200最新烧录OpenHarmony系统教程基于搭载OpenHarmony避障小车连接华为云心得体会OpenHarmony3.2的编译烧录OpenHarmony - ArkUI(ETS) 自定义图片查看组件OpenHarmony3.1-WIFI子系统之STA模式源码解析OpenHarmony之 eTS DataAbility 的使用及数据管理OpenHarmony之 网络管理 Socket 模块的使用HarmonyOs - ArkUI(JS)画布组件Canvas之自定义柱状图

编辑推荐

HarmonyOS 2.0鸿蒙第二期开发者Beta公测申请指南HarmonyOS LYEVK-3861开发板播放《蜜雪冰城》鸿蒙HarmonyOS分布式软总线:构建低时延、高带宽的多设备虚拟网络华为HarmonyOS的强势突围: 直面物联网迷宫的蓄力进击鸿蒙HarmonyOS2.0发布会现场回忆录
我收藏的内容
点赞
收藏

51CTO技术栈公众号