[轉]讓.NET應用秒變微服務

隨著近年來微服務的發展,許多團隊開始將自己的單體應用改造為微服務。通常Java或Go的應用可以通過業界已有的微服務框架作為微服務開發和改造的底座,封裝掉解決跨網絡問題帶來的復雜性。但以Chassis模式進行的微服務改造有兩大問題:多語言框架支持問題和侵入式改造代碼問題。
在這個基礎上SideCar模式提供了另外一種接入分布式環境的方式,它使原有應用不與任何框架,平臺或者服務綁定。對業務代碼0侵入,因此不需要考慮SDK和應用如何結合,不存在較高的學習曲線和耗費較長的開發周期。這種作為基礎設施層服務的存在,稱為ServiceMesh。通過ServiceMesh,類似.NET或NodeJS等常見的Web應用不用考慮語言問題,尋找適合各自語言的為服務框架,也不需要侵入式修改代碼就能快速接入微服務系統。
整體部署方案
從實現的角度看,CSE mesher是ServiceMesh模式的一種實現,它基于CSE GO-SDK開發,通常以SideCar的方式與業務服務部署在一起。它是一種網絡代理的存在,業務服務并不感知,只需要配置其http_proxy為CSE mesher的地址即可。
下圖是CSE微服務案例中在線襪子商店SockShop的一個示例。整個SockShop由七個微服務組成,其中user等服務作為服務提供者通過java-chassis或go-chassis注冊到服務注冊中心。另外front-end是NodeJS實現的前端服務應用,orders是實現訂單服務的.NET應用,他們通過mesher接入服務注冊中心和配置中心,具備了服務發現以及服務治理的基本能力。
在線襪子商店SockShop架構
.NET應用與mesher
訂單orders服務是SockShop在線襪子商店的一個子服務,主要提供訂單處理(查詢訂單、運費計算、創建訂單),訂單狀態查詢功能。對接mesher與orders服務,只需要配置完整的代理地址,不需要對orders服務代碼做任何修改。此時orders作為服務消費者訪問payment和shipping服務,將由mesher完成相關微服務的服務發現和負載均衡,并把請求轉發到后端服務,整個過程orders服務本身并不感知。
  1. powershell export http_proxy=http://127.0.0.1:30101
復制代碼
需要注意的是為了使請求通過代理,由mesher管理運行時,不支持使用Halkit框架的.NET服務。訪問其他服務的代碼可使用簡單的WebRequest,示例如下。
  1. java var shipmentData = System.Text.Encoding.ASCII.GetBytes(JsonConvert.SerializeObject(AShipment).ToString());
  2. WebRequest shipmentRequest =WebRequest.Create(AppSettings.ServiceEndpoints.ShippingServiceEndpoint);
復制代碼
其中ShippingServiceEndpoint配置為http://shipping/shipping。該請求經過mesher時,shipping作為服務名在mesher中進行解析和負載均衡。
  1. json
  2. {
  3. ??"ServiceEndpoints":{
  4. ? ? "PaymentServiceEndpoint":"http://payment/paymentAuth",
  5. ? ? "ShippingServiceEndpoint":"http://shipping/shipping"
  6. ??},
  7. ??"Data":{
  8. ? ? "MongoConnection":{
  9. ? ?? ?"ConnectionString":"mongodb://127.0.0.1:27017/",
  10. ? ?? ?"Database":"data"
  11. ? ? }
  12. ??},
  13. ??"Logging":{...}
  14. }
復制代碼
配置和啟動mesher
本例中mesher啟動在本機的30101端口,.NET應用orders通過mesher與其他微服務通信。mesher本身也是通過go-chassis構建的服務,可以通過chassis.yaml配置文件配置監聽地址以及對接的服務中心地址。默認的go-chassis會注冊自己到本地30100端口啟動的service-center。
  1. yaml
  2. protocols:
  3. ??http:
  4. ? ? listenAddress:x.x.x.x:30101 # listen addr of mesher
  5. service:
  6. ??registry:
  7. ? ? address:http://x.x.x.x:30100 # uri of service center
  8. ? ? scope:full #set full to be able to discover other app′s service
  9. ? ? watch:false # set if you want to watch instance change event
  10. ? ? autoIPIndex:true # set to true if u want to resolve source IP to microservice
復制代碼
為了使orders稱為服務提供者需要給mesher配置環境變量SPECIFIC_ADDR為orders服務本身暴露的地址。
  1. powershell export SPECIFIC_ADDR=127.0.0.1:80
復制代碼
通過mesher訪問后端微服務
orders訂單服務作為消費者調用payment與shipping這兩個服務。這兩個服務的注冊通過microservice.yaml來配置自己注冊的微服務名和版本,默認版本為0.01。另外可以通過配置chassis.yaml來指定應用ID,默認的應用ID為default。啟動SDK接入的微服務后同樣可以在service center中查詢到。
yaml

?

微服務的私有屬性
  1. service_description:
復制代碼
微服務的公共屬性
  1. APPLICATION_ID: sockshop
復制代碼
設置http_proxy為mesher的監聽地址后可以通過curl命令訪問接入系統的其他服務。查看mesher日志可以看到mesher負責服務發現,解析出payment服務注冊的advertise地址。
  1. powershell export http_proxy=http://127.0.0.1:30101 curl http://payment/health
復制代碼
運行.NET應用
orders服務在創建訂單過程包括對訂單詳細信息處理、調用payment服務的訂單支付接口進行訂單支付、調用shipping服務接口進行訂單運送處理,最后將訂單存入mongodb當中。換言之,Orders服務既作為訂單服務的提供端,也作為支付和運送服務的消費端。在carts中添加襪子后點擊[Proceed to checkout]即可在orders頁面查看訂單。
在線襪子商店SockShop主頁

?


---------------------
作者:looook
來源:CSDN
原文:https://blog.csdn.net/looook/article/details/80190409
版權聲明:本文為作者原創文章,轉載請附上博文鏈接!

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/285641.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/285641.shtml
英文地址,請注明出處:http://en.pswp.cn/news/285641.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

C語言九十三之輸入一個字符x,找到輸入的那句話(字符串)里面一樣字母的位置。

??個人主頁:個人主頁 ??系列專欄:C語言試題200例目錄 ??推薦一款刷算法、筆試、面經、拿大公司offer神器 ?? 點擊跳轉進入網站 ?作者簡介:大家好,我是碼莎拉蒂,CSDN博客專家(全站排名Top 50),阿里云博客專家、51CTO博客專家、華為云享專家 1、題目 輸入一個字…

WPF 使用 MAUI 的自繪制邏輯

這是一個當前還沒開發完成的功能,準確來說連預覽版也算不上的功能。我原本以為 MAUI 是無法在 WPF 上面跑的,然而在看完了 MAUI 整個大的設計,才了解到,原來 MAUI 是一個非常龐大的開發項目。在 MAUI 里面,雖然現在是正…

[轉]redis 5.0.5 5分鐘搭建redis集群

環境:centos 7 1:下載并安裝redis ???????$ wget http://download.redis.io/releases/redis-5.0.5.tar.gz$ tar xzf redis-5.0.5.tar.gz$ cd redis-5.0.5$ make redis 5.0版本 集群搭建不需要我們安裝ruby就可以搭建成功,并且redis…

【土地評價與土地管理】案例:某地區柑橘種植適宜性評價

文章目錄 一、確定評價單元二、評價因子選擇三、評價因子權重的確定四、構建評價分級標準五、綜合評價六、適宜性等級劃分七、得出適宜性評價結果柑橘種植所需的自然條件: 柑橘果樹生長發育、開花結果與溫度、日照、水分(濕度)、土壤以及風、海拔、地形和坡向等環境條件緊密相…

django中怎樣生成非HTML格式的內容。

某些時候可能有這種需求。在網頁中點擊一個鏈接或者一個button希望返回一張圖片、一個pdf文檔、一個csv文檔等而非HTML。在diango中非常easy做到這些。django中的view用來接收http request并返回web response。通常情況下,返回的內容為HTML,但其可以返回…

Window.document對象

一、找到元素: docunment.getElementById("id");根據id找,最多找一個; var a docunment.getElementById("id");將找到的元素放在變量中; docunment.getElementsByName("name")&am…

C# 讀寫文件從用戶態切到內核態,到底是個什么流程?

一:背景 1. 一個很好奇的問題我們在學習 C# 的過程中,總會聽到一個詞叫做 內核態 ,比如說用 C# 讀寫文件,會涉及到代碼從 用戶態 到 內核態 的切換,用 HttpClient 獲取遠端的數據,也會涉及到 用戶態 到 內核…

C語言九十四之請編寫函數fun(char *str, int n),其功能是:使字符串str的前導*號不能多余n個,若多于n個,則刪除多余的*號,若少于或等于n個,則不做處理。

??個人主頁:個人主頁 ??系列專欄:C語言試題200例目錄 ??推薦一款刷算法、筆試、面經、拿大公司offer神器 ?? 點擊跳轉進入網站 ?作者簡介:大家好,我是碼莎拉蒂,CSDN博客專家(全站排名Top 50),阿里云博客專家、51CTO博客專家、華為云享專家 1、題目 規定輸入的…

【土地評價與土地管理】案例:某地區土地農業利用潛力評價

文章目錄 一、確定評價單元二、擬定潛力評價系統表、確定指標權重三、指標評價四、評定潛力等級五、得出潛力評價結果一、確定評價單元 土地潛力評價單元采用地塊作為評價單元,此地塊是建立在土地利用現狀的基礎上, 綜合土地的自然屬性來確定,評價單元界線與土地現有界線基本…

WIKIOI 1519 過路費

1519 過路費 1519 過路費 時間限制: 1 s 空間限制: 256000 KB 題目等級 : 大師 Master 題解 題目描述 Description 在某個遙遠的國家里,有 n個城市。編號為 1,2,3,…,n。這個國家的政府修建了m 條雙向道路,每條道路連接著兩個城市。政府規定從城市…

code point,code unit

2019獨角獸企業重金招聘Python工程師標準>>> 從一段API描述談起: 在String的length的API中描述是這樣的! lengthpublic int length() Returns the length of this string. The length is equal to the number of 16-bit Unicode characters i…

Android之解決JsonObject里面的JsonArray數據會有斜杠問題

1、問題 本地保存了多個json格式的字符串 {"event":"sdk_ad_request_status","timestamp":1640180549231,"ad_app_id":"10104","pool_test":0,"ad_type":0,"ad_request_time":0,"requ…

【土地評價與土地管理】案例:蘭州市榆中縣農用地分等

文章目錄 一、資料收集二、確定標準耕作制度、基準作物、指定作物、光溫(氣候生產潛力)三、劃分指標區,確定分等因素及權重四、編制“指定作物-分等因素-自然質量分”記分規則表五、繪制分等因素分值圖,劃分分等單元六、計算農用地自然質量分七、計算自然質量等指數八、計算…

.NET7之MiniAPI(特別篇) :Preview5優化了JWT驗證(下)

Preview5對策略驗證的方式沒有改變,只不過內置了Token的生成,和《.NET6之MiniAPI(十):基于策略的身份驗證和授權》的驗證方式基本相同,都是生成和驗證使用的驗證參數要一致,用繼承AuthorizationHandler的子類來作每次請…

業務多變的公司上云后蒸蒸日上

一、云服務器與傳統服務器的對比 1)、傳統服務器 傳統服務器是一個獨立的硬件設備,可以理解成是一臺放在機房的高配置電腦,可根據需求安裝各種操作系統以及配置各種環境,性能也比較強大。 2)、云服務器 云服務器是構建在硬件服務器集群之上,…

2016福州大學軟件工程第四次團隊作業-系統設計成績匯總

第四次團隊作業——系統設計打分統計結果如下: 學號組別團隊分數貢獻比例個人分數031401433606notconnected141613.83031402606606notconnected141413.33031402618606notconnected141814.34031402629606notconnected141413.33031402631606notconnected141914.590314…

[轉]在C#中像Python一樣編寫TensorFlow機器學習代碼

機器學習是一個令人激動人心的領域,一直有新的技術突破。研究人員不斷推動機器智能的提升,教機器如何聽說讀寫——這些曾經是我們人類專屬的技能。機器學習的首選語言是Python,最受歡迎的庫是Google的TensorFlow。幾乎所有的代碼示例都是用Py…

【土地評價與土地管理】教案 第一章:土地評價要素的選擇

文章目錄 1.1 土地構成要素與其農業利用1、光能條件2、熱量條件3、降水條件1.1 土地構成要素與其農業利用 1、光能條件 ? 光能是綠色植物進行光合作用和生物運動發展的主要能源 ? 太陽輻射、日照時數 ? 太陽輻射量隨地域和季節變化較大,導致了土地利用的多樣性和土地資源…

Blazor University (33)表單 —— EditContext、FieldIdentifiers

原文鏈接:https://blazor-university.com/forms/editcontext-fieldidentifiers-and-fieldstate/EditContext、FieldIdentifiers 和 FieldState請注意,對于那些希望了解 Blazor 如何“在后臺”工作的人來說,這是一個高級主題。無需了解此信息即…

Flutter之Container的寬度如何設置為手機屏幕寬度

1、問題 Container的寬度如何設置為手機屏幕寬度 2、解決辦法 width: MediaQuery.of(context).size.width,Row(children: [Container(height: 40,width: MediaQuery.of(context).size.width,// width: double.infinity,color: Colors.red,child: Row(children: [Containe…