Free Style基于華為CCE微服務(wù)改造的技術(shù)實(shí)踐(二)

      網(wǎng)友投稿 843 2025-04-06

      在上一篇博文中,講解了已有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

      【Free Style】基于華為CCE微服務(wù)改造的技術(shù)實(shí)踐(二)

      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://:8080,直接可以訪問網(wǎng)站。為了測試驗(yàn)證,各api均向外expose了端口,實(shí)際使用不要暴露端口,以免遭受網(wǎng)絡(luò)攻擊。

      鏡像服務(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)容。

      上一篇:自動化--日志模塊
      下一篇:word的文件用wps打開是空白的(wps打開文件是空白的怎么處理)
      相關(guān)文章
      亚洲日韩精品国产3区| 亚洲综合区图片小说区| 亚洲中文字幕日本无线码| 亚洲色图在线观看| 亚洲AV区无码字幕中文色| 亚洲国产精品成人久久| 亚洲处破女AV日韩精品| 国产aⅴ无码专区亚洲av麻豆 | 亚洲欧洲日产国码二区首页| 亚洲欧洲第一a在线观看| 亚洲天天做日日做天天欢毛片| 久久91亚洲精品中文字幕| 亚洲AV无码日韩AV无码导航| 亚洲高清专区日韩精品| 亚洲AV无码久久寂寞少妇| 亚洲AV成人精品网站在线播放| 亚洲第一精品在线视频| 亚洲色图视频在线观看| 亚洲精品视频在线播放| 亚洲国产成AV人天堂无码| 亚洲国产精品乱码在线观看97| 亚洲国产成a人v在线| 亚洲熟妇AV乱码在线观看| 亚洲成a∧人片在线观看无码| 亚洲成a人片在线不卡一二三区 | 全亚洲最新黄色特级网站| 国产成人综合亚洲| 亚洲五月午夜免费在线视频| 亚洲熟妇无码乱子AV电影| 亚洲成AV人片一区二区密柚| 亚洲国产精品第一区二区| 亚洲精品无码久久久久久久| 亚洲av无码片区一区二区三区| 亚洲色欲色欲www在线播放| 亚洲AV第一成肉网| AV在线亚洲男人的天堂| 亚洲国产精品一区二区久久hs| 久久精品国产亚洲av四虎| 亚洲精品视频观看| 亚洲欧洲免费无码| 亚洲精品无码99在线观看|