日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程语言 > asp.net >内容正文

asp.net

ASP.NET Core中Ocelot的使用:基于服务发现的负载均衡

發(fā)布時(shí)間:2023/12/4 asp.net 49 豆豆
生活随笔 收集整理的這篇文章主要介紹了 ASP.NET Core中Ocelot的使用:基于服务发现的负载均衡 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

本系列相關(guān)文章:

  • 《ASP.NET Core中Ocelot的使用:API網(wǎng)關(guān)的應(yīng)用》

  • 《ASP.NET Core中Ocelot的使用:基于Spring Clound Netflix Eureka的動(dòng)態(tài)路由》

本文將基于前兩篇文章所述內(nèi)容,繼續(xù)介紹如何在服務(wù)發(fā)現(xiàn)和動(dòng)態(tài)路由的基礎(chǔ)上,使用Ocelot實(shí)現(xiàn)負(fù)載均衡。Ocelot本身是帶有負(fù)載均衡功能的,這一點(diǎn)其實(shí)跟Nginx提供的HTTP load balancer是類似的功能(我覺(jué)得整個(gè)Ocelot提供的功能,通過(guò)Nginx也都可以實(shí)現(xiàn),不過(guò)Ocelot更加.NET化,對(duì)于.NET開(kāi)發(fā)人員來(lái)說(shuō)更為簡(jiǎn)單和容易接受)。根據(jù)官方文檔,Ocelot支持如下幾種負(fù)載均衡策略:

  • LeastConnection:根據(jù)服務(wù)當(dāng)前正在處理的請(qǐng)求個(gè)數(shù)來(lái)決定將使用哪個(gè)服務(wù)來(lái)處理新接收到的請(qǐng)求,將請(qǐng)求轉(zhuǎn)發(fā)給當(dāng)前連接數(shù)最少的服務(wù)

  • RoundRobin:經(jīng)典模式,輪詢法,逐個(gè)選擇可用的服務(wù)來(lái)處理接收到的請(qǐng)求

  • NoLoadBalancer:僅使用第一個(gè)可用的服務(wù)來(lái)處理接收到的請(qǐng)求

  • CookieStickySessions:通過(guò)使用Cookie,確保特定的請(qǐng)求能夠被分配到特定的服務(wù)上進(jìn)行處理

今天我們選擇RoundRobin來(lái)看看如何基于服務(wù)發(fā)現(xiàn)來(lái)實(shí)現(xiàn)負(fù)載均衡。同樣,首先需要對(duì)架構(gòu)進(jìn)行調(diào)整。

調(diào)整架構(gòu)

與上文中的架構(gòu)相比,這里不會(huì)引入新的服務(wù),而相比之下會(huì)讓兩個(gè)A服務(wù)的實(shí)例同時(shí)運(yùn)行。調(diào)整后的架構(gòu)如下圖所示:

整個(gè)API的調(diào)用過(guò)程如下:

  • A服務(wù)的兩個(gè)實(shí)例、B服務(wù)以及API網(wǎng)關(guān)在啟動(dòng)的時(shí)候均向Spring Cloud Eureka注冊(cè)自己

  • API用戶通過(guò)訪問(wèn)Eureka獲得API網(wǎng)關(guān)的地址

  • API用戶使用獲得的API網(wǎng)關(guān)地址,發(fā)送一個(gè)查詢A服務(wù)的請(qǐng)求

  • API網(wǎng)關(guān)根據(jù)指定的A服務(wù)的名稱,從Eureka查詢A服務(wù)所注冊(cè)的服務(wù)實(shí)例

  • API網(wǎng)關(guān)根據(jù)設(shè)定的負(fù)載均衡策略,向找到的服務(wù)實(shí)例發(fā)出請(qǐng)求,并將調(diào)用結(jié)果反饋給API用戶

  • 可以看到,前面部分的調(diào)用過(guò)程與上文所述都是非常類似的,不同的僅有API網(wǎng)關(guān)在尋找A服務(wù)的實(shí)例這個(gè)部分,前面是直接獲得訪問(wèn)地址,而此處則通過(guò)負(fù)載均衡來(lái)選擇一個(gè)地址。接下來(lái),我們看看如何改變我們的代碼,來(lái)實(shí)現(xiàn)這個(gè)架構(gòu)。

    代碼修改

    這里的代碼修改會(huì)基于上文結(jié)尾時(shí)的代碼,也就是實(shí)現(xiàn)了Ocelot的動(dòng)態(tài)路由。首先,我們?cè)谟?jì)算服務(wù)(也就是A服務(wù))中增加一個(gè)API,用以返回當(dāng)前設(shè)置在主機(jī)上的machineName環(huán)境變量(如果設(shè)置為空,那么就直接返回主機(jī)機(jī)器名):

    12345678910[Route("api/[controller]")][ApiController]public class ValuesController : ControllerBase{????[HttpGet("info")]????public ActionResult<string> Info()????????=> Environment.GetEnvironmentVariable("machineName") ?? Environment.MachineName;????// 其它代碼省略}

    然后,就是配置Ocelot,使其能夠?qū)崿F(xiàn)負(fù)載均衡:

    1234567891011121314151617181920{??"ReRoutes": [??],??"GlobalConfiguration": {????"RequestIdKey": "OcRequestId",????"AdministrationPath": "/administration",????"ServiceDiscoveryProvider": {??????"Host": "localhost",??????"Port": 8761,??????"Type": "Eureka",??????"Token": null,??????"ConfigurationKey": null????},????"LoadBalancerOptions": {??????"Type": "RoundRobin"????},????"DownstreamScheme": "http"??}}

    只需注意上面的LoadBalancerOptions部分,這里我們采用了RoundRobin模式,這個(gè)配置文件的其它部分都與之前的一樣,沒(méi)有區(qū)別。

    好了,代碼改好了。什么?就改好了?對(duì)的,就是這么簡(jiǎn)單!接下來(lái)讓我們測(cè)試一下。先在Eclipse里啟動(dòng)Spring Cloud Eureka:

    然后,進(jìn)入CalcService的編譯輸出目錄,首先設(shè)置machineName環(huán)境變量,然后用下面的命令啟動(dòng)服務(wù):

    用同樣的命令再啟動(dòng)另一個(gè)CalcService的實(shí)例:

    OK,兩個(gè)CalcService的實(shí)例已經(jīng)啟動(dòng),分別偵聽(tīng)49814和49815兩個(gè)端口,接下來(lái),啟動(dòng)我們的Ocelot API網(wǎng)關(guān)。等Ocelot API網(wǎng)關(guān)啟動(dòng)之后,查看Eureka的服務(wù)注冊(cè),可以看到所有的服務(wù)已經(jīng)就緒:

    請(qǐng)注意,對(duì)于CALC這個(gè)應(yīng)用程序,我們可以看到,有兩個(gè)實(shí)例已經(jīng)注冊(cè)成功。然后,我們通過(guò)訪問(wèn)API網(wǎng)關(guān)進(jìn)而訪問(wèn)剛剛新加的Info API,可以看到,服務(wù)調(diào)用成功。然后按F5刷新,可見(jiàn)返回的結(jié)果會(huì)在CalcService-1與CalcService-2之間來(lái)回切換,也就意味著我們的請(qǐng)求被依次分配到兩個(gè)不同的Calc服務(wù)的實(shí)例上執(zhí)行。動(dòng)圖為證:


    由此可見(jiàn),我們已經(jīng)實(shí)現(xiàn)了基于Ocelot API網(wǎng)關(guān)的負(fù)載均衡。當(dāng)然,我們可以繼續(xù)修改ASP.NET Core MVC的前端頁(yè)面,讓它能夠直觀地顯示這個(gè)效果。這里也就不貼代碼了,大家可以按本文后面的源代碼鏈接下載源碼,自己研究。

    解決方案容器化

    同樣,我們可以把整個(gè)解決方案容器化,與上一篇文章所述的容器化有區(qū)別的一點(diǎn)是,對(duì)于CalcService的Dockerfile,我們要擴(kuò)充它的EXPOSE的端口范圍,原來(lái)是寫死的49814,現(xiàn)在讓它能夠曝露從49800到49899的所有端口,以便新的服務(wù)可以通過(guò)不同的端口接收請(qǐng)求。此外,還需要在docker-compose.yml中增加另一個(gè)Calc服務(wù)的配置,詳細(xì)可以仿照docker-compose.yml中已有的服務(wù)配置信息,這里也不多啰嗦了,源代碼庫(kù)中有完整的內(nèi)容供參考。

    完成這些配置之后,可以直接用docker-compose一次性啟動(dòng)所有服務(wù),然后看看我們的API頁(yè)面,其中的“計(jì)算服務(wù)名稱”會(huì)隨著頁(yè)面的刷新動(dòng)態(tài)改變:

    總結(jié)

    本文對(duì)前文的案例做了一些簡(jiǎn)單的調(diào)整,實(shí)現(xiàn)了基于Ocelot API網(wǎng)關(guān)的負(fù)載均衡。其實(shí),負(fù)載均衡還可以實(shí)現(xiàn)在某個(gè)微服務(wù)的多個(gè)實(shí)例的層面,然后將這個(gè)層面的負(fù)載均衡器地址注冊(cè)到Eureka上,也是可以的。這樣的架構(gòu)能夠更好地控制每個(gè)服務(wù)的伸縮,并對(duì)其進(jìn)行監(jiān)控。接下來(lái)的文章中,我會(huì)繼續(xù)嘗試基于微服務(wù)的一些部署拓?fù)?#xff0c;以及在云中如何運(yùn)行我們的微服務(wù)架構(gòu)。

    源代碼的使用

    請(qǐng)?jiān)L問(wèn)https://github.com/daxnet/ocelot-sample/releases/tag/chapter_3下載本文相關(guān)案例的源代碼。

    相關(guān)文章:

    • AspNetCore中使用Ocelot之 IdentityServer4

    • Ocelot-基于.NET Core的開(kāi)源網(wǎng)關(guān)實(shí)現(xiàn)

    • .NET Core微服務(wù)之基于Ocelot+IdentityServer實(shí)現(xiàn)統(tǒng)一驗(yàn)證與授權(quán)

    • Swagger如何訪問(wèn)Ocelot中帶權(quán)限驗(yàn)證的API

    • Ocelot.JwtAuthorize:一個(gè)基于網(wǎng)關(guān)的Jwt驗(yàn)證包

    • .NET Core微服務(wù)之基于Ocelot實(shí)現(xiàn)API網(wǎng)關(guān)服務(wù)

    • .NET Core微服務(wù)之基于Ocelot實(shí)現(xiàn)API網(wǎng)關(guān)服務(wù)(續(xù))

    • .NET微服務(wù)體系結(jié)構(gòu)中為什么使用Ocelot實(shí)現(xiàn)API網(wǎng)關(guān)

    • Ocelot簡(jiǎn)易教程(一)之Ocelot是什么

    • Ocelot簡(jiǎn)易教程(二)之快速開(kāi)始1

    • Ocelot簡(jiǎn)易教程(二)之快速開(kāi)始2

    • Ocelot簡(jiǎn)易教程(三)之主要特性及路由詳解

    • Ocelot簡(jiǎn)易教程(四)之請(qǐng)求聚合以及服務(wù)發(fā)現(xiàn)

    • Ocelot簡(jiǎn)易教程(五)之集成IdentityServer認(rèn)證以及授權(quán)

    • Ocelot簡(jiǎn)易教程(六)之重寫配置文件存儲(chǔ)方式并優(yōu)化響應(yīng)數(shù)據(jù)

    • Ocelot簡(jiǎn)易教程(七)之配置文件數(shù)據(jù)庫(kù)存儲(chǔ)插件源碼解析

    • ASP.NET Core中Ocelot的使用:API網(wǎng)關(guān)的應(yīng)用

    • ASP.NET Core中Ocelot的使用:基于Spring Cloud Netflix Eureka的動(dòng)態(tài)路由

    原文地址:?http://sunnycoding.cn/2018/11/06/aspnetcore-ocelot-service-discovery-load-balancing/


    .NET社區(qū)新聞,深度好文,歡迎訪問(wèn)公眾號(hào)文章匯總 http://www.csharpkit.com

    總結(jié)

    以上是生活随笔為你收集整理的ASP.NET Core中Ocelot的使用:基于服务发现的负载均衡的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

    如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。