【Free Style】基于華為CCE微服務(wù)改造的技術(shù)實(shí)踐(二)
在上一篇博文中,講解了已有node web app的功能結(jié)構(gòu),技術(shù)棧,和簡要部署內(nèi)容。從中可以看到單一應(yīng)用部署模式帶來的風(fēng)險(xiǎn):1. 任何單一功能模塊出現(xiàn)異常,整個(gè)web app就會出現(xiàn)崩潰或者訪問異常;2. 遇到大流量訪問,模塊之間的依賴會導(dǎo)致性能瓶頸。3. 開發(fā)效率極低。由于前后依賴,開發(fā)任務(wù)無法并行。從而降低了迭代效率,影響產(chǎn)品質(zhì)量。

從本文開始,我們需要引入“Microservice”的概念來解決上述三個(gè)問題,這是一種新的架構(gòu)設(shè)計(jì)方式。將原有的單例模式的應(yīng)用,“拆解”為多個(gè)可部署,可維護(hù)的服務(wù)構(gòu)成。每一個(gè)單一的服務(wù),獨(dú)立維護(hù)一部分功能,收到請求后返回請求所需要的值或者數(shù)據(jù)包。不同的服務(wù)直接可以共享公共資源,例如:key-value store 或者 db services。下面我將原有的單例模式,按照我們的用例圖進(jìn)行資源拆解。請看下圖
圖2-1 微服務(wù)改造示意圖
改造后,我們將app"拆解“為6個(gè)service,每一個(gè)是一個(gè)單獨(dú)的服務(wù)。
1. Public service提供基于的靜態(tài)資源,例如:css,js,media file,config, font package。
2. User service提供登錄,注冊,認(rèn)證服務(wù),需要使用redis,mysql
3. Cousrse service提供課程查詢,學(xué)習(xí)記錄獲取更新,課程評價(jià)。
4. Trial service提供云端DWS sql query engine的連接、查詢、語句執(zhí)行、以及結(jié)果處理功能。
5. Teach提供后臺課程管理
6. Admin用戶權(quán)限管理
根據(jù)上述服務(wù)的簡要介紹,我們可以對已有工程結(jié)構(gòu)進(jìn)行改造,由于每一個(gè)微服務(wù)都是獨(dú)立的,所以他們應(yīng)該使用部分相同的文件名和目錄結(jié)構(gòu),而且每一個(gè)服務(wù)僅僅需要加載本服務(wù)需要的依賴,因此服務(wù)功能包變得更好維護(hù)。下面我將展示工程目錄拆解圖:
圖2-2 工程目錄拆解圖
當(dāng)拆解完后,我們會需要一個(gè)問題,所有的獨(dú)立微服務(wù),如果有機(jī)組織起來,應(yīng)對外界的訪問,或者說是什么機(jī)制來判斷該請求由哪個(gè)服務(wù)來獨(dú)立完成,是不是需要一個(gè)coordinator來協(xié)調(diào)。下面我們引入一個(gè)概念”API Gateway“,它用戶判斷請求由哪個(gè)服務(wù)來獨(dú)立完成。我們重新更新微服務(wù)拆解示意圖,具體如下
圖3-1 網(wǎng)關(guān)引入后
引入網(wǎng)關(guān)后,開始配置網(wǎng)關(guān)。編輯gateway.config.yml,設(shè)置api,services,endingpoint等參數(shù)。請參考下面的樣例:
http:???????? ??????????port:?8080 ??????????hostname:?'localhost' ????????admin: ??????????port:?9876 ??????????hostname:?'localhost' ????????apiEndpoints: ??????????api: ????????????host:?'*' ????????????paths: ??????????????-?/?#此處根據(jù)實(shí)際情況要做改動 ??????????????-?/showAllCourse?#此處根據(jù)實(shí)際情況要做改動 ???????????iam: ?????????????host:?'*' ?????????????paths: ???????????????-?/login?#此處根據(jù)實(shí)際情況要做改動 ???????????????-?/login/*?#此處根據(jù)實(shí)際情況要做改動 ???????????????-?/register?#此處根據(jù)實(shí)際情況要做改動 ???????????????-?/logout?#此處根據(jù)實(shí)際情況要做改動? ????????serviceEndpoints: ??????????userService: ????????????url:?'http://user:3000'??#此處根據(jù)實(shí)際情況要做改動 ????????pipelines: ??????????pipeline_iAM: ????????????apiEndpoints: ???????????????-?iam ????????????policies: ???????????????-?proxy: ??????????????????-?action: ??????????????????????serviceEndpoint:?userService?#此處根據(jù)實(shí)際情況要做改動 ??????????????????????changeOrigin:?true
express gateway詳細(xì)配置資料,請參考www.express-gateway.io/docs/,隨后制作express gateway鏡像,準(zhǔn)備進(jìn)行發(fā)布。其中6個(gè)service要映射到主機(jī)不同的端口上,例如userService是3001,adminService是3002,但是各自在container中expose的端口均是3000,具體做法可以參考docker run command樣例如下:
docker?run?-d?-p?3002:3000?--name?ot-course-c1?--link?redis:redis?--link?ot-app-mysql:mysql?ot-course-api ????docker?run?-d?-p?3001:3000?--name?ot-trial-c1?--link?redis:redis?--link?ot-app-mysql:mysql?ot-trial-api ????docker?run?-d?-p?3002:3000?--name?ot-public-c1?--link?redis:redis?--link?ot-app-mysql:mysql?ot-public-api ????docker?run?-d?-p?3003:3000?--name?ot-course-c1?--link?redis:redis?--link?ot-app-mysql:mysql?ot-course-api ????docker?run?-d?-p?3004:3000?--name?ot-admin-c1?--link?redis:redis?--link?ot-app-mysql:mysql?ot-admin-api ????docker?run?-d?-p?3005:3000?--name?ot-user-c1?--link?redis:redis?--link?ot-app-mysql:mysql?ot-user-api ????docker?run?-d?-p?3000:8080??\ ????--name=ot-gateway-c1?\ ????--link?ot-user-c1:user?\ ????--link?ot-admin-c1:admin?\ ????--link?ot-course-c1:course?\ ????--link?ot-public-c1:public?\ ????--link?ot-trial-c1:trial?\ ????ot-gateway
最后直接訪問主機(jī)http://
鏡像服務(wù) Node.js Express
版權(quán)聲明:本文內(nèi)容由網(wǎng)絡(luò)用戶投稿,版權(quán)歸原作者所有,本站不擁有其著作權(quán),亦不承擔(dān)相應(yīng)法律責(zé)任。如果您發(fā)現(xiàn)本站中有涉嫌抄襲或描述失實(shí)的內(nèi)容,請聯(lián)系我們jiasou666@gmail.com 處理,核實(shí)后本網(wǎng)站將在24小時(shí)內(nèi)刪除侵權(quán)內(nèi)容。
版權(quán)聲明:本文內(nèi)容由網(wǎng)絡(luò)用戶投稿,版權(quán)歸原作者所有,本站不擁有其著作權(quán),亦不承擔(dān)相應(yīng)法律責(zé)任。如果您發(fā)現(xiàn)本站中有涉嫌抄襲或描述失實(shí)的內(nèi)容,請聯(lián)系我們jiasou666@gmail.com 處理,核實(shí)后本網(wǎng)站將在24小時(shí)內(nèi)刪除侵權(quán)內(nèi)容。