OpenHarmony啃論文成長計劃—淺談中間件
引言
在分布異構環境中,在多種硬件平臺上存在各種各樣的系統軟件(如不同的操作系統、數據庫、語言編譯器等),以及多種用戶界面,這些硬件系統平臺還可能采用不同的網絡協議和網絡體系結構連接。把這些系統集成起來并開發新的應用是一個現實而困難的問題,于是“中間件”技術就應運而生。
概念
中間件是指網絡環境下處于操作系統、數據庫等系統軟件和應用軟件之間的一種起連接作用的分布式軟件。簡而言之,中間件就是操作系統之上的(分布式)系統軟件。因此大家熟知的如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”讓我們拭目以待。