文/鄧欣(中國聯(lián)合網(wǎng)絡(luò)通信有限公司哈爾濱軟件研究院)
為了提高云服務(wù)平臺(tái)的運(yùn)行效果,通過微服務(wù)架構(gòu)技術(shù),實(shí)現(xiàn)云服務(wù)平臺(tái)的數(shù)據(jù)處理、信息集成和功能架構(gòu)創(chuàng)新,從而實(shí)現(xiàn)云服務(wù)平臺(tái)的優(yōu)化設(shè)計(jì),提高云服務(wù)平臺(tái)的服務(wù)質(zhì)量。
分布式系統(tǒng)中的微服務(wù)體系結(jié)構(gòu)沒有精確、統(tǒng)一的使用規(guī)則,但分布式系統(tǒng)有多種構(gòu)造要求。分布式系統(tǒng)中有許多機(jī)器節(jié)點(diǎn),它們分布在不同的數(shù)據(jù)域中。這些節(jié)點(diǎn)作為一個(gè)整體提供服務(wù),通過信息網(wǎng)絡(luò)進(jìn)行連接,并將自己的區(qū)域細(xì)節(jié)共享給客戶端。對(duì)于微服務(wù)體系結(jié)構(gòu),不同的物理節(jié)點(diǎn)有不同的數(shù)據(jù)等待處理,因此很難保持?jǐn)?shù)據(jù)的一致性。另一方面,由于不同微服務(wù)體系結(jié)構(gòu)的數(shù)據(jù)對(duì)同一數(shù)據(jù)模塊的描述是相同的,在這個(gè)過程中,許多數(shù)據(jù)模塊在客戶端是不可見的。因此,在微服務(wù)體系結(jié)構(gòu)的設(shè)計(jì)和構(gòu)建過程中,需要?jiǎng)?chuàng)建多個(gè)子數(shù)據(jù)庫并進(jìn)行時(shí)間耦合。在數(shù)據(jù)模塊中,數(shù)據(jù)通過API網(wǎng)關(guān)進(jìn)行合并和并行計(jì)算。另外,在原有的體系結(jié)構(gòu)中加入了搜索引擎、緩存技術(shù)和離散數(shù)據(jù)列。微服務(wù)體系結(jié)構(gòu)引入數(shù)據(jù)庫耦合技術(shù),實(shí)現(xiàn)了各數(shù)據(jù)系統(tǒng)的高度自治和合理有序。微服務(wù)體系結(jié)構(gòu)的輕量級(jí)協(xié)議也使得分布式系統(tǒng)在處理數(shù)據(jù)時(shí)能夠進(jìn)行集成和部署,并且能夠連續(xù)地傳輸信息。
微服務(wù)體系結(jié)構(gòu)的原單體可以根據(jù)其功能進(jìn)行拆分,掌握體系結(jié)構(gòu)的具體組成部分。將微服務(wù)體系結(jié)構(gòu)按功能劃分為子應(yīng)用后,每個(gè)子應(yīng)用部署在不同的物理節(jié)點(diǎn)上,只完成原來單個(gè)應(yīng)用功能的一部分。具體操作屬于子部件對(duì)應(yīng)的數(shù)據(jù)庫或數(shù)據(jù)表。它們通過網(wǎng)絡(luò)通信的連接相互溝通、協(xié)調(diào)與合作,最終將外部服務(wù)作為一個(gè)整體輸出。系統(tǒng)控制的每個(gè)物理節(jié)點(diǎn)存儲(chǔ)多個(gè)不同的數(shù)據(jù)庫或數(shù)據(jù)表,參與整個(gè)微服務(wù)體系結(jié)構(gòu)的構(gòu)建。微服務(wù)架構(gòu)技術(shù)需要調(diào)用不同物理節(jié)點(diǎn)的數(shù)據(jù)來完成分布式數(shù)據(jù)中心的數(shù)據(jù)處理工作。同時(shí),微服務(wù)體系結(jié)構(gòu)的組件可以看作是分布在網(wǎng)絡(luò)計(jì)算機(jī)上的。它們高度自治,相互密切配合,完成通信協(xié)調(diào)和信息傳遞。
微服務(wù)架構(gòu)在分布式系統(tǒng)中的存儲(chǔ)體系均互相獨(dú)立,且不是提供持久化的存儲(chǔ)服務(wù)。微服務(wù)架構(gòu)的存儲(chǔ)結(jié)構(gòu)使用Redis來完成底層存儲(chǔ)。微服務(wù)架構(gòu)存儲(chǔ)一個(gè)數(shù)據(jù)庫需要調(diào)用多個(gè)節(jié)點(diǎn)進(jìn)行處理。微服務(wù)架構(gòu)中為確保數(shù)據(jù)存儲(chǔ)時(shí)一個(gè)數(shù)據(jù)單元的多個(gè)操作的原子具有一致性,采取分布式事務(wù)處理方式進(jìn)行數(shù)據(jù)存儲(chǔ)。具體方式是事務(wù)的參與者、存儲(chǔ)服務(wù)器、資源管理器分別處于分布式系統(tǒng)的不同物理節(jié)點(diǎn)之上。微服務(wù)通常是直接面對(duì)用戶的,每個(gè)微服務(wù)通常直接為用戶提供某個(gè)功能。類似的功能可能針對(duì)開戶有一個(gè)服務(wù),針對(duì)繳費(fèi)是另外一個(gè)服務(wù)。在SOA設(shè)計(jì)模式中這種情況通常會(huì)用到的模式返回一個(gè)大而全的結(jié)果兼顧到所有的客戶端的需求。
在分布式系統(tǒng)中,雖然節(jié)點(diǎn)之間不存在共享內(nèi)存,但是本地對(duì)象和遠(yuǎn)程對(duì)象不應(yīng)該被看作是同一個(gè)對(duì)象,這是微服務(wù)體系結(jié)構(gòu)導(dǎo)致的數(shù)據(jù)劃分的結(jié)果。對(duì)微服務(wù)體系結(jié)構(gòu)進(jìn)行劃分后,分布式系統(tǒng)可以共享同一CPU的信號(hào)量和并發(fā)操作的控制。對(duì)于分布式系統(tǒng)中的一些問題,物理分區(qū)的概念和處理模型可以進(jìn)行一些容錯(cuò)和更新處理,如檢測和順序處理,可以集成多種解決方案。微服務(wù)架構(gòu)下分布式系統(tǒng)的實(shí)現(xiàn)方法和服務(wù)治理模式是設(shè)計(jì)和實(shí)現(xiàn)一個(gè)基于zoo-keeper的分布式服務(wù)中間件,并執(zhí)行存儲(chǔ)命令。首先,采用公共java接口作為微服務(wù)載體,分布式服務(wù)包含兩個(gè)基本元素:服務(wù)提供者和服務(wù)使用者。其次,組件類似于SOA架構(gòu)。SOA體系結(jié)構(gòu)相當(dāng)于將單個(gè)服務(wù)拆分為一個(gè)共享的基本服務(wù)。這樣,拆分可以對(duì)一些性能瓶頸應(yīng)用的運(yùn)行維護(hù)進(jìn)行單獨(dú)的優(yōu)化和管理,也在一定程度上防止了垂直拆分的重復(fù)。從單一服務(wù)到SOA的演進(jìn)需要結(jié)合水平和垂直拆分。微服務(wù)體系結(jié)構(gòu)采用統(tǒng)一的協(xié)議與SOA進(jìn)行服務(wù)間的通信,運(yùn)行在一個(gè)獨(dú)立的硬件平臺(tái)上,同時(shí)使分布式系統(tǒng)服務(wù)。通過對(duì)SOA體系結(jié)構(gòu)的介紹,微服務(wù)體系結(jié)構(gòu)被廣泛應(yīng)用于分布式系統(tǒng)和傳統(tǒng)web應(yīng)用的應(yīng)用開發(fā)中。
在微服務(wù)體系結(jié)構(gòu)下,不同的分布式系統(tǒng)之間存在著大量基于HTTP或RPC消息的網(wǎng)絡(luò)通信,經(jīng)常會(huì)發(fā)生接口和消息的重復(fù)調(diào)用。在具體的網(wǎng)絡(luò)交易實(shí)踐中,網(wǎng)絡(luò)波動(dòng)會(huì)導(dǎo)致服務(wù)提供者的接口被調(diào)用兩次。當(dāng)接口被反復(fù)調(diào)用時(shí),消息被系統(tǒng)組織反復(fù)傳輸。這種實(shí)踐錯(cuò)誤使得系統(tǒng)接口調(diào)用程序混亂,導(dǎo)致系統(tǒng)bug出現(xiàn),甚至觸發(fā)了未關(guān)閉的再審機(jī)制。微服務(wù)體系結(jié)構(gòu)在實(shí)踐中表現(xiàn)出冪等性,即具有相同業(yè)務(wù)ID參數(shù)的請(qǐng)求將被拒絕。當(dāng)后臺(tái)有通信時(shí),前臺(tái)需要根據(jù)數(shù)據(jù)對(duì)通信過程進(jìn)行管理。當(dāng)服務(wù)離線/更新/升級(jí)時(shí),前臺(tái)需要重新部署。當(dāng)前辦公桌是移動(dòng)應(yīng)用程序時(shí),業(yè)務(wù)變化的速度通常更快。此外,在微服務(wù)體系結(jié)構(gòu)的冪等原理下,通信服務(wù)的接口調(diào)用也發(fā)生了。用戶登錄信息和權(quán)限管理在系統(tǒng)中名為OAuth的地方進(jìn)行維護(hù)和管理。它利用冪等原理來提高遠(yuǎn)程接口服務(wù)的可用性,保證微服務(wù)體系結(jié)構(gòu)集群的服務(wù)治理和故障處理能力。
對(duì)于微服務(wù)架構(gòu)下的獨(dú)立數(shù)據(jù)庫或分布式存儲(chǔ)系統(tǒng)的應(yīng)用,其一致性、可擴(kuò)展性和兼容性是相同的。然而,由于分布式系統(tǒng)中數(shù)據(jù)存儲(chǔ)和網(wǎng)絡(luò)通信的復(fù)雜性,使得分布式系統(tǒng)維護(hù)數(shù)據(jù)一致性比單個(gè)應(yīng)用更加困難。由于采用了多種加法算法和密鑰,系統(tǒng)的穩(wěn)定性和可靠性得到了很大的提高。同時(shí),相關(guān)安全技術(shù)在通信系統(tǒng)中的應(yīng)用響應(yīng)了國家通信軟件安全政策,獨(dú)立可控應(yīng)用。