Dapr牵手.NET学习笔记:跨物理机负载均衡服务调用
dpar在同一臺電腦上不能run 相同appid,這個在上篇說過,所以就用外部負載均衡nginx來對應,那在不同的host中跑同一服務,看看dapr內部的負載均衡是怎么實現(xiàn)的。
說說現(xiàn)有的服務,兩個服務,訂單服務,支付服務;下完訂單后同步調支付服務。
一、demo項目的mock代碼
OrderSystem項目,端口5000
using Microsoft.AspNetCore.Mvc; using Microsoft.Extensions.Configuration; using Microsoft.Extensions.Logging; using System; using System.Net.Http; using System.Threading.Tasks;namespace OrderSystem.Controllers; [ApiController] [Route("[controller]")] public class HomeController : ControllerBase {private readonly ILogger<HomeController> _logger;private readonly IHttpClientFactory _clientFactory;private readonly string? _payUrl;public HomeController(ILogger<HomeController> logger, IHttpClientFactory clientFactory, IConfiguration configuration){_payUrl = configuration.GetSection("payurl").Value;_clientFactory = clientFactory;_logger = logger;}[HttpGet("/order")]public async Task<IActionResult> Order(){_logger.LogInformation($"下單開始");await Task.Delay(400);_logger.LogInformation($"訂單完成 調用支付系統(tǒng)");var client = _clientFactory.CreateClient();var content = await client.GetStringAsync(_payUrl);return new JsonResult(new { pay_result = content });} }appsettings.json
PaymentSystem項目,端口6000
appsettings.json
二、應用部署調用關系圖
在windows10部署order服務,并啟動sidecar
dapr?run?--app-id?order?--app-port?5000??--dapr-http-port?3500
在windows10和mac下分別部署pay服務,并啟動sidecar
dapr?run?--app-id?pay?--app-port?6000?--dapr-http-port?3600
三、測試
postman調用地址:localhost:3500/v1.0/invoke/order/method/order
在多次調用中,支付接口返回的結果中的host是在變換的,說明pay達到了負載均衡的效果(dapr本地部署負載均衡的服務發(fā)現(xiàn)是用mDNS來實現(xiàn)的,通過sidecar把各自代碼服務的信息多路廣播到局域網(wǎng)中的其他sidecar,來共享同步服務的相關信息)。
返回結果1:
返回結果2:
心得:
受到傳統(tǒng)的負載均衡器的測試影響,總想把Pay服務在兩個電腦上跑起來,用postman直接連http://localhost:3600/v1.0/invoke/pay/method/pay調用,看兩個服務是不是輪詢訪問,這里就與dapr的思想不一致了。
dapr最核心的功能通過sidecar代表應用,來處理一切事務,sidecar是全權代表,意思調用者也有自己的sidecar,給自己的sidecar索要外部資源。上例中order端口5000,sidecare的http端口是3500,它們是一組;pay端口是6000,sidecar的http端口是3600;如果order調用pay,那order應該在自己sidecare的3500端口上調用pay,所以調用地址是:http://localhost:3500/v1.0/invoke/pay/method/pay。
換句話說,如果想用postman調用pay服務,同理,需要給postman起個3400的sidecare,也可以用postman調http://localhost:3400/v1.0/invoke/pay/method/pay來訪問pay服務了,相當于postman和3400的sidecar是一家人,內部調用,全權代理,這樣被調用的pay就會在win和mac上輪詢調用了。
所以這里需要默念10次:服務和它的sidecar是一家人,有困難找自己的sidecar……
總結
以上是生活随笔為你收集整理的Dapr牵手.NET学习笔记:跨物理机负载均衡服务调用的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: BeetleX.WebFamily文件图
- 下一篇: .NET 6 中的HTTP 3支持