OpenHarmony啃論文成長計(jì)劃—淺談中間件
??51CTO和華為官方合作共建的鴻蒙技術(shù)社區(qū)??
引言
在分布異構(gòu)環(huán)境中,在多種硬件平臺上存在各種各樣的系統(tǒng)軟件(如不同的操作系統(tǒng)、數(shù)據(jù)庫、語言編譯器等),以及多種用戶界面,這些硬件系統(tǒng)平臺還可能采用不同的網(wǎng)絡(luò)協(xié)議和網(wǎng)絡(luò)體系結(jié)構(gòu)連接。把這些系統(tǒng)集成起來并開發(fā)新的應(yīng)用是一個(gè)現(xiàn)實(shí)而困難的問題,于是“中間件”技術(shù)就應(yīng)運(yùn)而生。
概念
中間件是指網(wǎng)絡(luò)環(huán)境下處于操作系統(tǒng)、數(shù)據(jù)庫等系統(tǒng)軟件和應(yīng)用軟件之間的一種起連接作用的分布式軟件。簡而言之,中間件就是操作系統(tǒng)之上的(分布式)系統(tǒng)軟件。因此大家熟知的如GFS、MapReduce、Spark和kafka等分布式存儲、分布式計(jì)算和消息隊(duì)列軟件都是中間件。
中間件的分類
對中間件進(jìn)行分類的困難是一些中間件可以執(zhí)行多個(gè)服務(wù)。
大致分為:
- 遠(yuǎn)程過程調(diào)用中間件(Remote Procedure Call)。
- 面向消息中間件MOM(Message Oriented Middleware)。
- 面向?qū)ο蟮闹虚g件OOM(Object Oriented Middleware)。
- 數(shù)據(jù)庫中間件(Data Access Middleware)。
- 事務(wù)處理中間件(Transaction Proncessing Middleware)TransactionProncessing又譯為交易處理。
一些開源中間件技術(shù)
高性能Redis中間件服務(wù) nredis-proxy,基于 RabbitMQ 實(shí)現(xiàn)的消息中間件 WMQ,分布式數(shù)據(jù)庫中間件ShardingSphere,分布式 TCP 推送系統(tǒng) GPush。
以ShardingSphere為例認(rèn)識數(shù)據(jù)庫中間件
(簡單介紹ShardingSphere實(shí)現(xiàn)分布式事務(wù)的方式)。
分布式事務(wù)在分布式環(huán)境下保持?jǐn)?shù)據(jù)一致性
分布式事務(wù)是在分布式環(huán)境下確保數(shù)據(jù)一致性的基本功能。分布式事務(wù)就是要在分布式系統(tǒng)中實(shí)現(xiàn)事務(wù),它其實(shí)是由多個(gè)本地事務(wù)組合而成。作為分布式數(shù)據(jù)庫的一種生態(tài)圈, ShardingSphere提供了對分布式事務(wù)的全面支持。
ShardingSphere支持的事務(wù)類型代碼如下:
public enum TransactionType{
LOCAL,XA,BASE
}
可以看到本地事務(wù)外還提供了分布式事務(wù)實(shí)現(xiàn)方案XA事務(wù)和柔性(BASE)事務(wù)。
XA事務(wù)的基本概念和原理
XA事務(wù)是典型的強(qiáng)一致性事務(wù),完全遵循事物的AICD原則(通俗點(diǎn)就是為了使得一些更新操作要么都成功,要么都失敗)。
XA規(guī)范定義了面向全局的事務(wù)管理器TransactionMananger(TM)和面向局部的資源管理器ResoureMananger(RM)之間的接口。
XA是雙向的系統(tǒng)接口,在TransactionMananger(TM)和ResoureMananger(RM)之間形成通信橋梁。
- 使得Transactionmanager(相當(dāng)于“協(xié)調(diào)者”)控制著全局事務(wù),管理事務(wù)生命周期,并協(xié)調(diào)資源。
- 使得Resourcemanager(相當(dāng)于“參與者”)負(fù)責(zé)控制和管理包括數(shù)據(jù)庫相關(guān)的各種實(shí)際資源。
ShardingSphere中的XA事務(wù)實(shí)現(xiàn)原理
ShardingSphere提供了專門的XAShardingTransactionManager類來支持XA事務(wù)實(shí)現(xiàn)。
XAShardingTransactionManager類是分布式事務(wù)的XA實(shí)現(xiàn)類,主要負(fù)責(zé)對實(shí)際的 DataSource進(jìn)行管理和適配,并且將接入端事務(wù)的begin/commit/rollback操作委托給具體的XA事務(wù)管理器。
例如, XAShardingTransactionManager使用中的TransactionManager完成 commit操作,代碼如下:
@Override
public void commit(){
XAShardingTransactionManager.getTransactionManager().commit();
//這的XAShardingTransactionManager是對各種第三方XA事務(wù)管理器的一種抽象
}
查看XAShardingTransactionManager類的定義和所包含的變量,代碼如下:
public final class XAShardingTransactionManager implements ShardingTransactionManager{
private final Map<String,XATransactionSource> cachedDataSources=new HashMap<>();
private final XATransactionManager xaTransactionManager = XATransactionManagerLoader.getInstance().getTransactionMananger();
}
可以看出XAShardingTransactionManager實(shí)現(xiàn)ShardingTransactionManager接口,同時(shí)保留了一組XAShardingTransactionDataSources。
XAShardingTransactionManager實(shí)例加載采用了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事務(wù)管理器的一種抽象,在找不到合適的XATransactionManager情況下系統(tǒng)會默認(rèn)創(chuàng)建一個(gè)AtomikosTransactionmanager
XATransactionManager就是對各種第三方XA事務(wù)管理器的一種抽象,在找不到合適的XATransactionManager情況下系統(tǒng)會默認(rèn)創(chuàng)建一個(gè)AtomikosTransactionmanager。
二十年前人們對中間件的展望:
中間件是屬于計(jì)算機(jī)軟件中比較底層的內(nèi)容,它和計(jì)算機(jī)操作系統(tǒng)的關(guān)系是相當(dāng)密切的,操作系統(tǒng)的一部分功能可以由中間件來實(shí)現(xiàn),一些中間件的功能也可以由操作系統(tǒng)來實(shí)現(xiàn)。因此,操作系統(tǒng)和中間件會進(jìn)一步融合,從而推動計(jì)算機(jī)軟件體系結(jié)構(gòu)的變革。其次,人們希望實(shí)現(xiàn)不同業(yè)務(wù)邏輯、不同功能的中間件能夠集成在一起,像一個(gè)完整的系統(tǒng)那樣協(xié)調(diào)一致地工作;這些集成的中間件服務(wù)應(yīng)該封裝在一個(gè)框架中。
用中間件思維看OpenHarmony架構(gòu)
二十年前人們對中間件的展望和二十年后OpenHarmony架構(gòu)圖對比起來,其實(shí)框架層和服務(wù)層聯(lián)系起應(yīng)用層和內(nèi)核層作用,二者也能一定程度看作是“中間件”。某種程度上OpenHarmony操作系統(tǒng)正是順應(yīng)二十年前的展望,將操作系統(tǒng)和中間件進(jìn)一步融合了起來。
但是嚴(yán)格上意義來說中間件的概念太過龐大,在OpenHarmony這個(gè)可裁剪、跨終端和易開發(fā)的分布式操作系統(tǒng)中,其中并沒有中間件的概念,只有各種子系統(tǒng)和部件。
OpenHarmony、HarmonyOS與HMS
OpenHarmony、HarmonyOS是操作系統(tǒng),HMS Core是SDK包。
HMS Core是基于HarmonyOS操作系統(tǒng)之上的開發(fā)組件包,相當(dāng)于 中間件。而HarmonyOS是華為基于OpenHarmony開發(fā)的企業(yè)發(fā)行版。
舉個(gè)通俗易懂的例子,HarmonyOS提供了零件和各種工具,例如扳手和汽配件等,開發(fā)者要一輛汽車,可以基于零件和各種工具直接一點(diǎn)一點(diǎn)造汽車各種系統(tǒng)再組裝。HMS Core是汽車各個(gè)系統(tǒng),例如轉(zhuǎn)向系統(tǒng)、動力系統(tǒng),開發(fā)者也可以直接拿汽車各個(gè)系統(tǒng)快速搭建一輛汽車。這就是SDK包的作用,提高開發(fā)效率的,它封裝了很多操作系統(tǒng)的api,定義了一個(gè)個(gè)面向具體功能場景的接口,不用什么功能模塊都從頭編程,能直接引用,HMS就符合文中概念給出的 中間件 的概念。
那么同樣OpenHarmony適用于手機(jī)部分的“HMS Core”讓我們拭目以待。
??51CTO和華為官方合作共建的鴻蒙技術(shù)社區(qū)??