作者:十眠
背景
隨著 Apache Dubbo、Nacos 以及 Spring Cloud 等服務(wù)框架的流行,越來(lái)越多的企業(yè)開始采用微服務(wù)架構(gòu)來(lái)構(gòu)建其應(yīng)用程序。微服務(wù)架構(gòu)使企業(yè)能夠?qū)⑵鋺?yīng)用程序拆分成多個(gè)小型服務(wù),這些服務(wù)可以獨(dú)立部署和擴(kuò)展。這種架構(gòu)模式也使企業(yè)更容易實(shí)現(xiàn)敏捷開發(fā)和持續(xù)交付,從而提高了其業(yè)務(wù)效率和響應(yīng)能力。
微服務(wù)四大件:注冊(cè)中心、服務(wù)提供者、服務(wù)消費(fèi)者、服務(wù)治理
如今,隨著服務(wù)提供者、服務(wù)消費(fèi)者、服務(wù)注冊(cè)中心以及服務(wù)治理等微服務(wù)幾大件的出現(xiàn)和成熟,使得我們使用微服務(wù)開發(fā),不僅可以做到快速開發(fā),更能夠追求微服務(wù)的高效和穩(wěn)定。
單體 or 微服務(wù)?
從上圖我們可以看到,隨著業(yè)務(wù)規(guī)模的增大,選擇單體架構(gòu)與微服務(wù)架構(gòu)的選擇趨勢(shì),他們之間存在一個(gè)交點(diǎn)。在交點(diǎn)之后,選擇微服務(wù)架構(gòu),業(yè)務(wù)規(guī)模越大越可以享受到微服務(wù)架構(gòu)帶來(lái)的效率的提升。我們可以觀察到,這個(gè)交點(diǎn)在持續(xù)地向左移動(dòng)。數(shù)字化進(jìn)程的快速發(fā)展普遍讓企業(yè)的 IT 系統(tǒng)更復(fù)雜,開源以及云計(jì)算推進(jìn)的技術(shù)標(biāo)準(zhǔn)化,正在大幅度地降低微服務(wù)架構(gòu)的技術(shù)門檻,在云上小公司也可以很好地玩轉(zhuǎn)微服務(wù)。隨著這個(gè)趨勢(shì)的到來(lái),還在使用單體架構(gòu)的企業(yè)也逐漸考慮向微服務(wù)轉(zhuǎn)型。我們發(fā)現(xiàn)在云上大部分 Java 應(yīng)用仍然是基于 SpringBoot 的,Spring Boot 應(yīng)用由于其架構(gòu)實(shí)現(xiàn)的簡(jiǎn)單性,客戶端只需通過(guò) http 和域名就能實(shí)現(xiàn)服務(wù)調(diào)用。因此,許多中小型公司仍然采用該方式進(jìn)行應(yīng)用開發(fā)。從技術(shù)角度上看,我們?nèi)绾紊?jí) SpringBoot 應(yīng)用至微服務(wù)架構(gòu),享受到微服務(wù)治理帶來(lái)的技術(shù)紅利,我們需要增加 SpringCloud 的 maven 依賴?需要業(yè)務(wù)進(jìn)行代碼改造?本文可以回答你,不需要一行代碼改動(dòng)。
本方案可以通過(guò) MSE 無(wú)侵入實(shí)現(xiàn) Java 應(yīng)用的注冊(cè)、發(fā)現(xiàn)與治理能力。
- 當(dāng)前 MSE 提供的注冊(cè)中心產(chǎn)品能力主要集中在非持久化服務(wù)發(fā)現(xiàn),即服務(wù)的狀態(tài)維護(hù)在 client,需要業(yè)務(wù)方依賴 SDK 主動(dòng)注冊(cè)服務(wù),并維持心跳;本方案提供了一種的持久化服務(wù)發(fā)現(xiàn)能力。
- 解決跨平臺(tái)服務(wù)發(fā)現(xiàn)問(wèn)題,如跨 K8s 服務(wù)發(fā)現(xiàn)、非 K8s 服務(wù)和 K8s 服務(wù)互相發(fā)現(xiàn)等。
- 無(wú)侵入實(shí)現(xiàn)基于 Spring Boot 應(yīng)用的服務(wù)治理能力,如全鏈路灰度、限流降級(jí)、安全可信等。
方案實(shí)踐與探索
為了驗(yàn)證該場(chǎng)景,我們提供了一個(gè)稍微比較復(fù)雜的Demo,通過(guò)該 Demo 來(lái)分別演示如何通過(guò) MSE 無(wú)侵入實(shí)現(xiàn) Spring Boot 應(yīng)用的服務(wù)注冊(cè)與服務(wù)治理。Demo 是根據(jù) K8s Service 進(jìn)行服務(wù)發(fā)現(xiàn)并且通過(guò)簡(jiǎn)單的 HttpClient 進(jìn)行請(qǐng)求調(diào)用,詳細(xì)請(qǐng)求如下:
? ~ curl http://47.97.117.48/A/spring_boot
A[10.0.3.238] -> B[10.0.3.227] -> C[10.0.3.230]%
架構(gòu)如下所示:
介紹完 Demo 之后,我們來(lái)逐步演示如何通過(guò)服務(wù)治理進(jìn)行服務(wù)注冊(cè)。
通過(guò)服務(wù)治理完成服務(wù)注冊(cè)
- 進(jìn)入到對(duì)應(yīng)的 MSE Nacos 實(shí)例頁(yè)面,選擇創(chuàng)建服務(wù)
-
我們填寫好服務(wù)名、分組名之后,可以選擇一個(gè)服務(wù)治理的應(yīng)用進(jìn)行注冊(cè)
-
開啟了健康檢查能力后,我們還可以選擇健康檢查的協(xié)議
- 點(diǎn)擊確定后,我們就實(shí)現(xiàn)了通過(guò)服務(wù)治理方式注冊(cè)應(yīng)用與實(shí)例至 MSE Nacos 中
- 根據(jù)下圖配置,我們分別將 A 應(yīng)用注冊(cè)成 sc-A、B 應(yīng)用注冊(cè)成 sc-b、C 應(yīng)用注冊(cè)成 sc-c
-
同時(shí)我們修改 Zuul 應(yīng)用的 Nacos 地址配置,使其通過(guò) SDK 方式注冊(cè)至 MSE Nacos 中
-
我們通過(guò)服務(wù)治理方式注冊(cè)的服務(wù),我們還可以通過(guò)服務(wù)治理方式將對(duì)應(yīng)的節(jié)點(diǎn)從 MSE Nacos 中下線
- 點(diǎn)擊 MSE 服務(wù)治理中節(jié)點(diǎn)詳情頁(yè)面的服務(wù)下線,在不用重啟應(yīng)用 pod 的條件下,實(shí)現(xiàn)服務(wù)從注冊(cè)中心中下線
到目前為止,我們完成了通過(guò)服務(wù)治理實(shí)現(xiàn)服務(wù)注冊(cè)。
通過(guò)服務(wù)治理完成服務(wù)訂閱
- 我們?cè)谛枰嗛?Nacos 服務(wù)的應(yīng)用中增加如下 Env
- 如何訂閱對(duì)應(yīng)的服務(wù)?
我們 Http 請(qǐng)求域名直接調(diào)用對(duì)應(yīng)的服務(wù)即可,比如:
restTemplate.getForObject("http://sc-b:20002/spring_boot", String.class);
其中 sc-b 為服務(wù)名,默認(rèn)的分組名可以通過(guò) mse_nacos_group 指定,如果需要指定分組名可以調(diào)用 http://sc-b:20002/spring_boot?mse_nacos_group=xxx 即可。
- 驗(yàn)證
a.通過(guò) MSE Nacos 控制臺(tái)可以驗(yàn)證,明確訂閱關(guān)系
b.通過(guò)端到端請(qǐng)求驗(yàn)證
? ~ curl http://47.97.117.48/A/spring_boot
A[10.0.3.238] -> B[10.0.3.229] -> C[10.0.3.241]%
無(wú)侵入實(shí)現(xiàn)基于 SpringBoot 應(yīng)用的全鏈路灰度
到目前為止,我們默認(rèn)就具備了符合如上場(chǎng)景的全鏈路灰度能力。
? ~ curl http://47.97.117.48/A/spring_boot -H "x-mse-tag: gray"
Agray[10.0.3.240] -> B[10.0.3.229] -> Cgray[10.0.3.241]%
總結(jié)
使用 Spring Boot 應(yīng)用一樣可以快速享受到全鏈路灰度能力帶來(lái)的發(fā)布體驗(yàn)。我們通過(guò)MSE 服務(wù)治理能力與Nacos引擎的整合,可以進(jìn)一步簡(jiǎn)化與降低研發(fā)在云上需要關(guān)注的部分,應(yīng)用的客戶端可以再輕量化,進(jìn)一步提升研發(fā)效率。
文章來(lái)源:http://www.zghlxwxcb.cn/news/detail-449553.html
點(diǎn)擊此處進(jìn)入微服務(wù)引擎 MSE 官網(wǎng)查看文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-449553.html
到了這里,關(guān)于Spring Boot 單體應(yīng)用一鍵升級(jí)成 Spring Cloud Alibaba的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!