左海春 苑俊英 張鑒新 王 虓 吳恒志
(廣州南方學(xué)院,廣東 廣州 510970)
隨著云計算的迅速發(fā)展,云服務(wù)已成為許多組織和企業(yè)構(gòu)建和交付軟件應(yīng)用的關(guān)鍵方法。微服務(wù)架構(gòu)作為一種軟件架構(gòu)風(fēng)格,通過將應(yīng)用程序拆分為小型、自治的服務(wù)單元,為構(gòu)建和擴展云應(yīng)用提供了靈活性和可伸縮性。然而,隨著云微服務(wù)規(guī)模的不斷增長,如何高效地開發(fā)和裝配云微服務(wù)是當(dāng)前一個重要挑戰(zhàn)[1-3]。
盡管已經(jīng)有一些研究關(guān)注云微服務(wù)的開發(fā)和部署,但對于基于云微服務(wù)的軟件開發(fā)方法中的裝配過程仍然存在一些關(guān)鍵問題。這些問題可能包括如何有效組織和協(xié)調(diào)大規(guī)模的微服務(wù)集合、如何確保微服務(wù)之間的適配性和互操作性,以及如何在開發(fā)過程中提供有效的工具和支持[4,5]。因此,本研究旨在提供基于云微服務(wù)的軟件開發(fā)方法中裝配過程的深入理解和解決方案。
通過深入研究基于云微服務(wù)的軟件開發(fā)方法的裝配過程,可以為企業(yè)和組織提供更可靠、靈活和高效的軟件開發(fā)方法,推動云計算和微服務(wù)架構(gòu)的進(jìn)一步發(fā)展。
建立以云環(huán)境為基礎(chǔ)、微服務(wù)群為平臺與服務(wù)裝配為開發(fā)三層體系結(jié)構(gòu),如表1所示。對于安全性、性能要求較高的企業(yè)我們可以自建云環(huán)境。對于學(xué)校實驗、研究可以選擇公有云。微服務(wù)群平臺基于容器發(fā)布微服務(wù)組件,構(gòu)建一個可伸縮的微服務(wù)容器,從而為上層提供服務(wù)組件與平臺,并且微服務(wù)組件可以實現(xiàn)二次開發(fā),以滿足不同場景開發(fā)需求。裝配開發(fā)層,可以基于服務(wù)接口實現(xiàn)軟件系統(tǒng)開發(fā),并提供可視化與腳本兩種開發(fā)選擇。
表1 云環(huán)境、微服務(wù)群平臺、裝配開發(fā)三層級結(jié)構(gòu)體系
研究構(gòu)建出一種基于云服務(wù)支撐環(huán)境下的微服務(wù)裝配軟件開發(fā)方法,其基本開發(fā)流程如圖1所示。
圖1 云微服務(wù)的軟件開發(fā)流程
其整個開發(fā)過程都是基于云環(huán)境下進(jìn)行的,開發(fā)階段實現(xiàn)微服務(wù)功能,然后自動推送至代碼庫,通過編譯后智能配置與自動打包成鏡像,然后運行實體拉取鏡像與裝配系統(tǒng)并運行,從而完成系統(tǒng)開發(fā)。整個過程可以不斷迭代,持續(xù)開發(fā)部署與運行。
基于“縱橫分離,織入系統(tǒng)”思想構(gòu)建微服務(wù)??v:指微服務(wù)業(yè)務(wù)邏輯;橫:指微服務(wù)輔助公共代碼,織入:縱橫代碼進(jìn)行裝配,從而完整微服務(wù)系統(tǒng)開發(fā)。這種編程模型設(shè)計可降低耦合度,減少代碼,增加復(fù)用,便于擴展,提高靈活性,并對系統(tǒng)的可操作性和可維護性更加友好。在微數(shù)據(jù)服務(wù)編程模型中,編碼的具體實現(xiàn)分為拆分、實現(xiàn)和織入三個過程,如圖2所示。
圖2 微數(shù)據(jù)服務(wù)編程模型
(1)拆分:從系統(tǒng)需求中抽取公共服務(wù)點,并建立核心業(yè)務(wù)點。它們具有明確的分工與合作關(guān)系。公共服務(wù)點是指公共復(fù)用代碼部分,核心業(yè)務(wù)點是指業(yè)務(wù)核心代碼部分。
(2)實現(xiàn):通過核心業(yè)務(wù)點實現(xiàn)業(yè)務(wù)模塊的開發(fā);通過公共服務(wù)點實現(xiàn)公共模塊的開發(fā)。
(3)織入:將公共模塊編織入業(yè)務(wù)模塊(目標(biāo)對象),在指定的業(yè)務(wù)目標(biāo)處執(zhí)行公共模塊代碼,從而整合二個模塊,實現(xiàn)微服系統(tǒng)。
基于H5+Javascript 技術(shù),以及本地緩存技術(shù)LocalStorage與SessionStor-age技術(shù)、SQLite技術(shù),建立交互服務(wù)模型,容器服務(wù)模型,積木式自由組合界面模型。
(1)交互服務(wù)模型:交互界面上的供用戶輸入數(shù)據(jù)的元素、將數(shù)據(jù)輸出到其他元素或者系統(tǒng)的元素。
(2)容器服務(wù)模型:形態(tài)為資源容器。例如,一個數(shù)據(jù)結(jié)構(gòu)、一個文件、一個記錄集、一張關(guān)系數(shù)據(jù)庫表、一項NoSQL數(shù)據(jù)、一項GrigDoc文檔元素,以及由它們組合而成的集合、記錄集及JSON格式的數(shù)據(jù)。
(3)積木式自由組合界面模型,采用Javascript+H5 技術(shù)開發(fā)實現(xiàn)。
(4)界面服務(wù)模型原理:通過數(shù)據(jù)視圖模型,建立視圖模型與數(shù)據(jù)業(yè)務(wù)模型,實現(xiàn)雙向綁定,如圖3所示。
圖3 界面服務(wù)模型原理
界面模型采用發(fā)布者/訂閱者模式,數(shù)據(jù)變化將被數(shù)據(jù)視圖所監(jiān)聽,觸發(fā)相應(yīng)的監(jiān)聽回調(diào)函數(shù),并更新視圖中的數(shù)據(jù)。同時,數(shù)據(jù)視圖接收用戶交互事件操作。數(shù)據(jù)視圖模型主要工作過程如圖4所示。
(1)數(shù)據(jù)視圖模型構(gòu)建,使用事件監(jiān)聽器實現(xiàn),由觀察者監(jiān)聽到數(shù)據(jù)的變化??梢酝ㄟ^遍歷方法對數(shù)據(jù)對象添加setter和getter方法。對象數(shù)據(jù)賦值回調(diào)setter方法,獲取對象數(shù)據(jù)通過調(diào)用getter方法完成。
(2)編譯者解析指令。通過數(shù)據(jù)解析數(shù)據(jù),并初始化渲染頁面視圖,當(dāng)數(shù)據(jù)發(fā)生變化時,會觸發(fā)相應(yīng)的更新函數(shù)來更新視圖。隨著數(shù)據(jù)的變化和訂閱者的通知,能夠動態(tài)更新網(wǎng)頁視圖,以反映最新的數(shù)據(jù)狀態(tài)。
(3)訂閱者。當(dāng)對象收到通知時,調(diào)用自己持有的update方法,完成視圖更新。
(4)數(shù)據(jù)視圖模型對象作為界面服務(wù)模型的核心,基于觀察者、編譯者和訂閱者實現(xiàn):觀察者監(jiān)聽model數(shù)據(jù)變化,并通過編譯者來解析指令,完成視圖更新;同時,它還實現(xiàn)了視圖交互變化和數(shù)據(jù)模型變更的雙向綁定效果。
基于AJAX 技術(shù)原理,解決客戶與服務(wù)數(shù)據(jù)模型通信,及數(shù)據(jù)更新等技術(shù)問題。(1)基于事件驅(qū)動拉取數(shù)據(jù),并自動渲染到界面組件。(2)注冊服務(wù)信息,創(chuàng)建客戶信息。(3)界面模型加載與抽取數(shù)據(jù)服務(wù)。
云微服務(wù)裝配方法,它通過微代碼開發(fā),容器對象生成,對象裝配組成,具體過程詳細(xì)見圖5 云微服務(wù)裝配,它可分為微服務(wù)的編程、請求與獲取、裝配與部署三個階段。
圖5 云微服務(wù)裝配
(1)編程階段
編程階段主要是微服務(wù)的設(shè)計與實現(xiàn),將微服務(wù)代碼上傳到微服務(wù)資源庫中,編譯并測試。資源庫可以分類管理微代碼,如公共類、業(yè)務(wù)類等。
(2)請求與獲取階段
軟件開發(fā)人員根據(jù)需求模型、工具,自動生成微服務(wù)請求配置腳本,并向微服務(wù)資源庫申請云數(shù)據(jù)服務(wù)模型(包括核心服務(wù)模型與公共服務(wù)模型),資源庫接受相應(yīng)的請求,然后解析,并選擇對應(yīng)的微服務(wù)模塊,再選取微服務(wù),加載到容器中。
(3)裝配與部署階段
根據(jù)軟件實施流程邏輯,把容器中的界面服務(wù)對象(前端)、數(shù)據(jù)服務(wù)對象等裝配在一起,形成初步的軟件框架。在微服務(wù)裝配過程中,基于配置文件自動裝配后,再由研發(fā)人員手動裝配與優(yōu)化,進(jìn)一步完善軟件框架功能。
各種開發(fā)團隊可以基于云服務(wù)的模式按需使用,個人開發(fā)者也可以通過網(wǎng)站注冊申請來使服務(wù)。開發(fā)者通過軟件開發(fā)云可隨時隨地在云端進(jìn)行項目管理等以上工作,這讓開發(fā)者能夠?qū)W⒖焖賱?chuàng)新和應(yīng)對永無止境的需求變化,讓軟件開發(fā)更加簡單高效,提升了個人和團隊的交付能力和效率,也能進(jìn)一步幫助企業(yè)提高競爭力。
將本研究成果應(yīng)用于軟件工程的專業(yè)實踐,基于微服務(wù)方式開發(fā)各類應(yīng)用系統(tǒng),能提升學(xué)生實驗的積極性與開發(fā)效率,如圖6所示。微服務(wù)的開發(fā)分為教師開發(fā)與學(xué)生開發(fā),教師與學(xué)生開發(fā)的微服務(wù)存入代碼庫中。學(xué)生根據(jù)企業(yè)項目需求,配置實驗環(huán)境,在集群上分割出獨立安全的實驗環(huán)境,并為每個實驗環(huán)境進(jìn)行資源分配。學(xué)生根據(jù)不同的實驗場景申請額外資源,主要包括申請與項目相關(guān)的“微服務(wù)”項,完成項目組合,并進(jìn)行實驗。
圖6 教學(xué)實踐的應(yīng)用
本研究旨在探索基于云微服務(wù)的軟件開發(fā)方法中的裝配過程,并提供相關(guān)的方法和指導(dǎo)。本研究對基于云微服務(wù)的軟件開發(fā)方法的裝配過程進(jìn)行了深入研究,并提供了一套系統(tǒng)化和規(guī)范化的方法和指導(dǎo)。通過理論分析和實證研究的結(jié)合,為開發(fā)人員和組織提供了在云環(huán)境下構(gòu)建高質(zhì)量、可擴展和靈活的軟件應(yīng)用的有效方式。
然而,在實踐中也意識到本研究存在一些局限性。首先,實證研究的規(guī)模和范圍可能受限于資源和時間的限制,可能無法涵蓋所有可能的應(yīng)用場景。其次,本研究的方法和指導(dǎo)仍需要在更廣泛的實踐中進(jìn)行驗證和推廣。最后,云計算和微服務(wù)領(lǐng)域的快速發(fā)展可能會導(dǎo)致研究結(jié)果的時效性問題。
因此,未來的研究可以繼續(xù)深化基于云微服務(wù)的軟件開發(fā)方法的研究,并結(jié)合實踐經(jīng)驗進(jìn)一步改進(jìn)和優(yōu)化方法。同時,應(yīng)密切關(guān)注云計算和微服務(wù)領(lǐng)域的最新發(fā)展,并及時調(diào)整研究方向,以滿足不斷變化的需求和挑戰(zhàn)。