發表文章

目前顯示的是有「Architecture」標籤的文章

.Net Core 使用反向代理-YARP

圖片
前言 在參考Clearn Architecture時,看到的一個有趣的東東 YARP 反向代理套件,用來實作Api Gateway架構(如下圖),將多個微服務集合起來,對外統一端點、負載平載、壓縮、緩存等。 圖片來源:微軟電子書 什麼是YARP   微軟開源的專案,運用 .NET (.NET Core) 建置高效能反向代理,Y特點是容易自訂,用戶可以根據需求,自訂並且調整成來滿足特殊場景的需求。 提供了兩個主要使用和自訂的方向,第一個是作為一個全功能代理;另一種使用方式,則是將 YARP 用於高度自定義的環境,用戶可以直接呼叫 YARP 請求轉送程式,繞過路由和負載平衡等模組。開發者甚至可以在同一個程序中混合兩種方式,根據路由切換。( 參考來源twMVC ) POC實作 本文將新增一個ApiGatewary專案及2個WebAPI專案,由ApiGatewary統一對外存取WebAPI。 1.新增ApiGatewary 專案 加入套件 Install-Package Yarp.ReverseProxy -Version 1.1.1 Program.cs  啟用YARP builder.Services.AddReverseProxy()     .LoadFromConfig(builder.Configuration.GetSection("ReverseProxy")); .. app.MapReverseProxy(); 2.新增 WebAPI專案-Product 回傳產品資訊 https://localhost:7298/api/products/Product     [Route("api/products/[controller]")]     public class ProductController : ControllerBase     {         [HttpGet]         public IEnumerable<Product> Get()         {     ...

透過ChangeMonitor實作多個網站同步快取

圖片
   目前公司有一個網站執行在Azure上,並將經常讀取的共用資料快取在記憶內。初期網站的負戴量還沒那麼大時,在快取資料上不會有什麼問題,但之後若成長到一定的程度時,網站勢必要作擴展,此時會造成快取的資料在多個Instance是不同步的。針對此找了幾個解決方案 Azure Redis Cache:最多人使用,也是官方推薦使用,效能快,可以輕易作到多網站之間的快取共享。關於Redis更多 請參考 ps這適合較大的WebFarm使用,若你的擴展不會很多台的話,可以考慮使用第3個方法。 Database Cache 在Nuget有一套件 Ovicus.Caching 實作了ObjectCache(.Net4.0新的快取類別 請參考 ),將資料快取在資料庫內。這樣也可以達到多個網站的共享快取,但在效能會比軙慢了點,尤其在大量的快取存取下更明顯。 透過ChangeMonitor監控快取 :此方案有別於上述兩個,不作共享快取,只作單機快取。透過監控的機制,在資料變更時,通知所有網站清除本身的In-Memory快取,再作資料的重新取得。