
內(nèi)容來(lái)源:2017年11月23日,華為開(kāi)發(fā)工程師李達(dá)港在“ServiceComb在線(xiàn)直播”進(jìn)行《ServiceComb 快速入門(mén)》演講分享。IT 大咖說(shuō)(ID:itdakashuo)作為獨(dú)家視頻合作方,經(jīng)主辦方和講者審閱授權(quán)發(fā)布。
閱讀字?jǐn)?shù):2097?| 4分鐘閱讀
獲取嘉賓演講視頻回放及PPT,請(qǐng)點(diǎn)擊:http://t.cn/EP0dyep
摘要
ServiceComb項(xiàng)目組開(kāi)發(fā)工程師李達(dá)港在線(xiàn)直播分享如何對(duì)ServiceComb服務(wù)框架進(jìn)行微服務(wù)開(kāi)發(fā),主要涵蓋三方面內(nèi)容:
從零開(kāi)始開(kāi)發(fā)體質(zhì)指數(shù)應(yīng)用;
微服務(wù)治理能力體驗(yàn);
微服務(wù)快速上云。
從零開(kāi)始開(kāi)發(fā)體質(zhì)指數(shù)應(yīng)用
在開(kāi)始開(kāi)發(fā)前,需先確保相關(guān)依賴(lài)工具已于本地安裝,主要包括:git, oracle JDK 1.8, maven 3.x, docker 1.11.2,intelliJ idea。
此外,需先在本地安裝 ServiceComb Java Chassis(SDK),執(zhí)行以下指令:
并運(yùn)行 Service Center
在 ServiceComb 微服務(wù)框架中,Service Center 提供服務(wù)注冊(cè)及服務(wù)發(fā)現(xiàn)功能。
體質(zhì)指數(shù)應(yīng)用主要包含兩個(gè)微服務(wù),一個(gè)是負(fù)責(zé)后臺(tái)運(yùn)算的體質(zhì)指數(shù)計(jì)算器,另一個(gè)是提供用戶(hù)界面及網(wǎng)關(guān)服務(wù)的體質(zhì)指數(shù)界面。
其運(yùn)行流程為:
其中,虛線(xiàn)表示服務(wù)注冊(cè)及服務(wù)發(fā)現(xiàn)的過(guò)程。
現(xiàn)在從intelliJ創(chuàng)建一個(gè)全新的工程,并引入相關(guān)依賴(lài)項(xiàng)。
需要注意的是,此處java-chassis-dependencies這個(gè)依賴(lài)項(xiàng)是以pom的方式導(dǎo)入的,主要為了統(tǒng)一整個(gè)項(xiàng)目的依賴(lài)項(xiàng)的版本,避免出現(xiàn)版本沖突問(wèn)題。
然后,需要新增一個(gè)模塊用于實(shí)現(xiàn)運(yùn)算服務(wù)。主要包括以下步驟:
1、引入依賴(lài)項(xiàng):
2、運(yùn)算結(jié)果數(shù)據(jù)結(jié)構(gòu)定義:
具體運(yùn)算實(shí)現(xiàn)。根據(jù)公式
進(jìn)行實(shí)現(xiàn),代碼如下:
4、實(shí)例信息接口及其實(shí)現(xiàn)。
5、服務(wù)端點(diǎn)定義。用于生成服務(wù)契約,使得服務(wù)間能無(wú)縫進(jìn)行通信。
6、暴露運(yùn)算服務(wù)的Restful端點(diǎn):
這里用@RestSchema注釋端點(diǎn)后, ServiceComb 微服務(wù)框架會(huì)自動(dòng)生成對(duì)應(yīng)的服務(wù)端點(diǎn)契約,并根據(jù)如下的resources/ microservice.yaml 文件中的定義來(lái)配置端點(diǎn)端口,將契約和服務(wù)一起注冊(cè)到服務(wù)注冊(cè)中心。
6、服務(wù)啟動(dòng)入口。只需添加 @EnableServiceComb 的注解即可啟用 ServiceComb 微服務(wù)框架,代碼如下:
經(jīng)過(guò)以上簡(jiǎn)單幾步即可完成運(yùn)算服務(wù)的開(kāi)發(fā)。接下來(lái)將進(jìn)行體質(zhì)指數(shù)界面的實(shí)現(xiàn),此時(shí)再新建一個(gè)模塊。
1、引入依賴(lài)項(xiàng)
2、服務(wù)啟動(dòng)入口。只需要聲明啟用ServiceComb和Zuul即可。
3、在 resources/application.yaml 文件中配置路由規(guī)則及服務(wù)端口信息:
4、在 resources/microservice.yaml 文件中配置網(wǎng)關(guān)服務(wù)的信息和服務(wù)注冊(cè)中心的地址。
5、在resources目錄下新建一個(gè)名為static的目錄用于存放前端網(wǎng)頁(yè)文件,具體的實(shí)現(xiàn)可在https://github.com/ServiceComb/ServiceComb-Java-Chassis/blob/master/samples/bmi/webapp/src/main/resources/static/index.html獲取。
至此,體質(zhì)指數(shù)應(yīng)用已開(kāi)發(fā)完畢。此時(shí),分別在IDE中選中運(yùn)算服務(wù)和網(wǎng)關(guān)服務(wù)的啟動(dòng)入口文件右鍵運(yùn)行,待服務(wù)啟動(dòng)完畢,即可通過(guò)http://localhost:8889訪(fǎng)問(wèn)體質(zhì)指數(shù)應(yīng)用,屆時(shí)將能看到如下界面,并可輸入您的身高和體重信息驗(yàn)證服務(wù)是否正常運(yùn)行。
微服務(wù)治理能力體驗(yàn)
負(fù)載均衡
當(dāng)對(duì)體質(zhì)指數(shù)計(jì)算器進(jìn)行水平擴(kuò)展時(shí),需要將請(qǐng)求均衡地分發(fā)到多個(gè)體質(zhì)指數(shù)計(jì)算器上。
開(kāi)啟:默認(rèn)情況下會(huì)使用內(nèi)置的一個(gè)簡(jiǎn)單的負(fù)載均衡的實(shí)現(xiàn),不需要額外的配置。
驗(yàn)證:對(duì)體質(zhì)指數(shù)計(jì)算器微服務(wù)進(jìn)行水平擴(kuò)展,使其運(yùn)行實(shí)例數(shù)為2,即新增一個(gè)運(yùn)行實(shí)例,此時(shí)需要修改運(yùn)算服務(wù)模塊中的microservice.yaml文件,將服務(wù)運(yùn)行端口由7777改為7778,以避免出現(xiàn)端口沖突,然后再運(yùn)行一個(gè)運(yùn)算服務(wù)即可。
此時(shí)點(diǎn)擊 Submit 按鈕就可以看到如下兩個(gè)界面中的實(shí)例ID交替出現(xiàn)。
流量控制
流量控制機(jī)制通過(guò)控制數(shù)據(jù)傳輸速率來(lái)避免微服務(wù)過(guò)載運(yùn)行。
開(kāi)啟:
1、在體質(zhì)指數(shù)計(jì)算器的pom.xml文件中添加依賴(lài)項(xiàng):
2、在體質(zhì)指數(shù)計(jì)算器的microservice.yaml文件中指明使用流量控制的處理鏈及指定流控策略:
驗(yàn)證:
訪(fǎng)問(wèn)http://localhost:8889,在身高和體重的輸入框中輸入正數(shù),嘗試在1秒內(nèi)多次點(diǎn)擊 Submit 按鈕,此時(shí)就能看到網(wǎng)頁(yè)由左側(cè)的正常的界面變成了右側(cè)提示由于流控受限而請(qǐng)求被拒的界面。
服務(wù)治理
服務(wù)治理主要用于解決或緩解服務(wù)雪崩的情況,即個(gè)別微服務(wù)表現(xiàn)異常時(shí),系統(tǒng)能對(duì)其進(jìn)行容錯(cuò)處理,從而避免資源的耗盡。
啟用:
1、在體質(zhì)指數(shù)計(jì)算器的pom.xml文件中添加依賴(lài)項(xiàng):
2、在體質(zhì)指數(shù)計(jì)算器的microservice.yaml文件中指明使用服務(wù)治理的處理鏈及指定熔斷和容錯(cuò)策略:
驗(yàn)證:
1、使服務(wù)進(jìn)入熔斷狀態(tài)。訪(fǎng)問(wèn)http://localhost:8889,在身高或體重的輸入框中輸入一個(gè)負(fù)數(shù),連續(xù)點(diǎn)擊三次或以上 Submit 按鈕,此時(shí)在網(wǎng)頁(yè)下方能看到類(lèi)似左圖的界面。
2、驗(yàn)證服務(wù)處于熔斷狀態(tài)。在身高和體重的輸入框中輸入正數(shù),再次點(diǎn)擊 Submit 按鈕,此時(shí)看到的界面依然是類(lèi)似左圖的界面。同時(shí)在體質(zhì)指數(shù)計(jì)算器運(yùn)行日志也能看到調(diào)用不再拋出異常,而是出現(xiàn)類(lèi)似 fallback called 的日志。
3、驗(yàn)證服務(wù)恢復(fù)正常。約15秒后,在身高和體重的輸入框中輸入正數(shù),點(diǎn)擊 Submit 按鈕,此時(shí)界面顯示正常。
分布式調(diào)用鏈追蹤
分布式調(diào)用鏈追蹤用于有效地監(jiān)控微服務(wù)的網(wǎng)絡(luò)延時(shí)并可視化微服務(wù)中的數(shù)據(jù)流轉(zhuǎn)。
啟用:
1、在體質(zhì)指數(shù)計(jì)算器的pom.xml文件中添加依賴(lài)項(xiàng):
2、在體質(zhì)指數(shù)計(jì)算器的microservice.yaml文件中添加分布式追蹤的處理鏈:
3、在體質(zhì)指數(shù)界面的pom.xml文件中添加依賴(lài)項(xiàng):
體質(zhì)指數(shù)應(yīng)用中已配置好了上述配置項(xiàng),只需執(zhí)行以下幾步即可:
使用 Docker 運(yùn)行 Zipkin 分布式追蹤服務(wù);
重啟體質(zhì)指數(shù)計(jì)算器微服務(wù);
重啟體質(zhì)指數(shù)界面微服務(wù)。
驗(yàn)證:
1、訪(fǎng)問(wèn)http://localhost:8889,在身高和體重欄處輸入正數(shù),并點(diǎn)擊 Submit 按鈕。
2、訪(fǎng)問(wèn)http://localhost:9411,查看分布式調(diào)用追蹤情況,可得下方界面。
微服務(wù)快速上云
通過(guò)使用docker-mavn-plugin可快速實(shí)現(xiàn)開(kāi)發(fā)的微服務(wù)打包為docker鏡像的功能。而基于ServiceComb開(kāi)發(fā)的微服務(wù)也能實(shí)現(xiàn)無(wú)縫上云,只需以下簡(jiǎn)單幾步:
1、在項(xiàng)目pom文件中添加華為ServiceStage的profile:
2、分別在運(yùn)算服務(wù)和網(wǎng)關(guān)服務(wù)中修改服務(wù)中心地址,并新增配置中心地址和監(jiān)控中心地址:
然后即可通過(guò)我們提供的一鍵發(fā)布腳本將應(yīng)用從編譯到最后部署到華為ServiceStage上的鏡像倉(cāng)庫(kù)的流程自動(dòng)化。隨后即可通過(guò)我們提供的一鍵部署模板實(shí)現(xiàn)華為ServiceStage的微服務(wù)自動(dòng)部署運(yùn)行。
有不同的意見(jiàn)也歡迎來(lái)和我們進(jìn)行討論,參與到社區(qū)工作中:
ServiceComb官網(wǎng):
http://servicecomb.io/cn/
ServiceCombGithub:
https://github.com/ServiceComb
微服務(wù)引擎交流論壇:
http://forum.huaweicloud.com/forum.php?mod=forumdisplay&fid=622。
最后,祝賀華為云發(fā)起的開(kāi)源項(xiàng)目ServiceComb全票通過(guò)進(jìn)入Apache孵化器。歡迎大家一起攜手建設(shè)更活躍的ServiceComb社區(qū),為Apache開(kāi)源生態(tài)貢獻(xiàn)力量。