[转]让.NET应用秒变微服务
生活随笔
收集整理的這篇文章主要介紹了
[转]让.NET应用秒变微服务
小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
隨著近年來(lái)微服務(wù)的發(fā)展,許多團(tuán)隊(duì)開(kāi)始將自己的單體應(yīng)用改造為微服務(wù)。通常Java或Go的應(yīng)用可以通過(guò)業(yè)界已有的微服務(wù)框架作為微服務(wù)開(kāi)發(fā)和改造的底座,封裝掉解決跨網(wǎng)絡(luò)問(wèn)題帶來(lái)的復(fù)雜性。但以Chassis模式進(jìn)行的微服務(wù)改造有兩大問(wèn)題:多語(yǔ)言框架支持問(wèn)題和侵入式改造代碼問(wèn)題。
在這個(gè)基礎(chǔ)上SideCar模式提供了另外一種接入分布式環(huán)境的方式,它使原有應(yīng)用不與任何框架,平臺(tái)或者服務(wù)綁定。對(duì)業(yè)務(wù)代碼0侵入,因此不需要考慮SDK和應(yīng)用如何結(jié)合,不存在較高的學(xué)習(xí)曲線和耗費(fèi)較長(zhǎng)的開(kāi)發(fā)周期。這種作為基礎(chǔ)設(shè)施層服務(wù)的存在,稱為ServiceMesh。通過(guò)ServiceMesh,類似.NET或NodeJS等常見(jiàn)的Web應(yīng)用不用考慮語(yǔ)言問(wèn)題,尋找適合各自語(yǔ)言的為服務(wù)框架,也不需要侵入式修改代碼就能快速接入微服務(wù)系統(tǒng)。
整體部署方案
從實(shí)現(xiàn)的角度看,CSE mesher是ServiceMesh模式的一種實(shí)現(xiàn),它基于CSE GO-SDK開(kāi)發(fā),通常以SideCar的方式與業(yè)務(wù)服務(wù)部署在一起。它是一種網(wǎng)絡(luò)代理的存在,業(yè)務(wù)服務(wù)并不感知,只需要配置其http_proxy為CSE mesher的地址即可。
下圖是CSE微服務(wù)案例中在線襪子商店SockShop的一個(gè)示例。整個(gè)SockShop由七個(gè)微服務(wù)組成,其中user等服務(wù)作為服務(wù)提供者通過(guò)java-chassis或go-chassis注冊(cè)到服務(wù)注冊(cè)中心。另外front-end是NodeJS實(shí)現(xiàn)的前端服務(wù)應(yīng)用,orders是實(shí)現(xiàn)訂單服務(wù)的.NET應(yīng)用,他們通過(guò)mesher接入服務(wù)注冊(cè)中心和配置中心,具備了服務(wù)發(fā)現(xiàn)以及服務(wù)治理的基本能力。
在線襪子商店SockShop架構(gòu)
.NET應(yīng)用與mesher
訂單orders服務(wù)是SockShop在線襪子商店的一個(gè)子服務(wù),主要提供訂單處理(查詢訂單、運(yùn)費(fèi)計(jì)算、創(chuàng)建訂單),訂單狀態(tài)查詢功能。對(duì)接mesher與orders服務(wù),只需要配置完整的代理地址,不需要對(duì)orders服務(wù)代碼做任何修改。此時(shí)orders作為服務(wù)消費(fèi)者訪問(wèn)payment和shipping服務(wù),將由mesher完成相關(guān)微服務(wù)的服務(wù)發(fā)現(xiàn)和負(fù)載均衡,并把請(qǐng)求轉(zhuǎn)發(fā)到后端服務(wù),整個(gè)過(guò)程orders服務(wù)本身并不感知。
powershell export http_proxy=http://127.0.0.1:30101 復(fù)制代碼
需要注意的是為了使請(qǐng)求通過(guò)代理,由mesher管理運(yùn)行時(shí),不支持使用Halkit框架的.NET服務(wù)。訪問(wèn)其他服務(wù)的代碼可使用簡(jiǎn)單的WebRequest,示例如下。
java var shipmentData = System.Text.Encoding.ASCII.GetBytes(JsonConvert.SerializeObject(AShipment).ToString()); WebRequest shipmentRequest =WebRequest.Create(AppSettings.ServiceEndpoints.ShippingServiceEndpoint); 復(fù)制代碼
其中ShippingServiceEndpoint配置為http://shipping/shipping。該請(qǐng)求經(jīng)過(guò)mesher時(shí),shipping作為服務(wù)名在mesher中進(jìn)行解析和負(fù)載均衡。
json { ??"ServiceEndpoints":{ ? ? "PaymentServiceEndpoint":"http://payment/paymentAuth", ? ? "ShippingServiceEndpoint":"http://shipping/shipping" ??}, ??"Data":{ ? ? "MongoConnection":{ ? ?? ?"ConnectionString":"mongodb://127.0.0.1:27017/", ? ?? ?"Database":"data" ? ? } ??}, ??"Logging":{...} } 復(fù)制代碼
配置和啟動(dòng)mesher
本例中mesher啟動(dòng)在本機(jī)的30101端口,.NET應(yīng)用orders通過(guò)mesher與其他微服務(wù)通信。mesher本身也是通過(guò)go-chassis構(gòu)建的服務(wù),可以通過(guò)chassis.yaml配置文件配置監(jiān)聽(tīng)地址以及對(duì)接的服務(wù)中心地址。默認(rèn)的go-chassis會(huì)注冊(cè)自己到本地30100端口啟動(dòng)的service-center。
yaml protocols: ??http: ? ? listenAddress:x.x.x.x:30101 # listen addr of mesher service: ??registry: ? ? address:http://x.x.x.x:30100 # uri of service center ? ? scope:full #set full to be able to discover other app′s service ? ? watch:false # set if you want to watch instance change event ? ? autoIPIndex:true # set to true if u want to resolve source IP to microservice 復(fù)制代碼
為了使orders稱為服務(wù)提供者需要給mesher配置環(huán)境變量SPECIFIC_ADDR為orders服務(wù)本身暴露的地址。
powershell export SPECIFIC_ADDR=127.0.0.1:80 復(fù)制代碼
通過(guò)mesher訪問(wèn)后端微服務(wù)
orders訂單服務(wù)作為消費(fèi)者調(diào)用payment與shipping這兩個(gè)服務(wù)。這兩個(gè)服務(wù)的注冊(cè)通過(guò)microservice.yaml來(lái)配置自己注冊(cè)的微服務(wù)名和版本,默認(rèn)版本為0.01。另外可以通過(guò)配置chassis.yaml來(lái)指定應(yīng)用ID,默認(rèn)的應(yīng)用ID為default。啟動(dòng)SDK接入的微服務(wù)后同樣可以在service center中查詢到。
yaml
service_description: 復(fù)制代碼
微服務(wù)的公共屬性
APPLICATION_ID: sockshop 復(fù)制代碼
設(shè)置http_proxy為mesher的監(jiān)聽(tīng)地址后可以通過(guò)curl命令訪問(wèn)接入系統(tǒng)的其他服務(wù)。查看mesher日志可以看到mesher負(fù)責(zé)服務(wù)發(fā)現(xiàn),解析出payment服務(wù)注冊(cè)的advertise地址。
powershell export http_proxy=http://127.0.0.1:30101 curl http://payment/health 復(fù)制代碼
運(yùn)行.NET應(yīng)用
orders服務(wù)在創(chuàng)建訂單過(guò)程包括對(duì)訂單詳細(xì)信息處理、調(diào)用payment服務(wù)的訂單支付接口進(jìn)行訂單支付、調(diào)用shipping服務(wù)接口進(jìn)行訂單運(yùn)送處理,最后將訂單存入mongodb當(dāng)中。換言之,Orders服務(wù)既作為訂單服務(wù)的提供端,也作為支付和運(yùn)送服務(wù)的消費(fèi)端。在carts中添加襪子后點(diǎn)擊[Proceed to checkout]即可在orders頁(yè)面查看訂單。
在線襪子商店SockShop主頁(yè)
?
微服務(wù)的私有屬性?
---------------------
作者:looook
來(lái)源:CSDN
原文:https://blog.csdn.net/looook/article/details/80190409
版權(quán)聲明:本文為作者原創(chuàng)文章,轉(zhuǎn)載請(qǐng)附上博文鏈接!
總結(jié)
以上是生活随笔為你收集整理的[转]让.NET应用秒变微服务的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: [转].NET 开源项目 Anet 介绍
- 下一篇: WPF 用代码实现WrapPanel右侧