surging受到很多.net同窗的青睞,也提了很多問題,提的最多的是何時集成API 網關,在這裏回答你們最近已經開始着手研發,應該在1,2個月內會有個第一版API網關,其它像Token身份驗證,限流降級等功能完成時間會日後推html
最近也更新了surging新的版本git
更新內容:github
1. Cache中間件基於Redis 所依賴的第三方庫已將servicestack.redis轉成stackexchange
2. 增長緩存降級
3. 增長攔截緩存降級的例子redis
開源地址:https://github.com/dotnetcore/surgingjson
IDE:Visual Studio 2017 15.3 Preview ,vscode
框架:.NET core 2.0緩存
vscode 技術支持:服務器
在剝析surging的架構思想這篇文章中大體提了下Cache中間件,你們也對Cache中間件有了初步印象,這一節咱們將談談怎麼使用Cache中間件架構
1.建立配置文件app
cacheSettings.json
{ "CachingSettings": [ { "Id": "ddlCache", "Class": "Surging.Core.Caching.RedisCache.RedisContext,Surging.Core.Caching", "Properties": [ { "Name": "appRuleFile", "Ref": "rule" }, { "Name": "dataContextPool", "Ref": "ddls_sample", "Maps": [ { "Name": "Redis", "Properties": [ { "value": "127.0.0.1:6379::1" } ] }, { "Name": "MemoryCache" } ] }, { "Name": "defaultExpireTime", "value": "120" }, { "Name": "connectTimeout", "Value": "120" }, { "Name": "minSize", "Value": "1" }, { "Name": "maxSize", "Value": "10" } ] } ] }
能夠支持多個實例配置經過配置id來標識惟一,而且經過配置Maps,來初始化服務節點列表,經過哈希一致性來選擇服務節點
配置參數列表
參數
|
做用
|
---|---|
CachingSettings |
包含多個實例的父級配置節 |
Id |
惟一標識 |
Class |
對於Context的適配 |
Properties | Cache 相關配置節 |
Maps |
配置服務節列表 |
minSize |
對象池最小數 |
maxSize |
objectpool最大數 |
2.代碼配置
/// <summary> /// 配置緩存服務 /// </summary> public static void ConfigureCache(IConfigurationBuilder build) { build .AddCacheFile("cacheSettings.json", optional: false); }
以上咱們就完成了緩存中間件配置,接下來就能夠經過如下代碼進行調用
基於redis的緩存調用
cacheProvider = CacheContainer.GetInstances<ICacheProvider>(「ddlCache.Redis」);
基於MemoryCache的緩存調用
CacheContainer.GetInstances<ICacheProvider>("MemoryCache")
對於服務所返回的數據,有些是不須要常常修改,能夠經過緩存返回數據,好比商品應用,商品分類,商品列表、用戶信息,訂單信息,購物車等,經過以上需求咱們就要對於proxy進行攔截,返回緩存或者刪除緩存。
對於緩存會有如下疑問
緩存降級
surging的緩存降級就是針對於proxy進行攔截,若是有緩存數據,則返回緩存數據,不然調用Proceed方法調用遠程服務。
在數據進行update,delete的時候就須要針對於依賴的緩存進行刪除,能夠經過proxy進行攔截的方式把緩存進行刪除
緩存降級有如下優勢
1.高性能:能夠減小響應時間和提升吞吐量
2.高效:針對於業務邏輯的設計,無需考慮緩存,作到了無縫集成
如下經過示例來介紹如何使用
在業務接口方法上添加以下特性
[Command(Strategy= StrategyType.Failover,FailoverCluster =3,RequestCacheEnabled =true)] //RequestCacheEnabled =true 就是啓用緩存
攔截獲取緩存
[InterceptMethod(CachingMethod.Get, Key = "GetUser_id_{0}", Mode = CacheTargetType.Redis, Time = 480)]
攔截刪除緩存
[InterceptMethod(CachingMethod.Remove, "GetUser_id_{0}", "GetUserName_name_{0}", Mode = CacheTargetType.Redis)]
應用[CacheKey]來標識緩存Key,如
public class UserModel { [CacheKey(1)] public int UserId { get; set; } public string Name { get; set; } public int Age { get; set; } }
配置攔截器
.AddClientIntercepted(typeof(CacheProviderInterceptor))
測試環境
CPU:Intel Core i7-4710MQ
內存:16G
硬盤:1T SSD+512G HDD
網絡:局域網
已經開始研發API網關,近期更新只會修復BUG和提交單元測試。如感興趣請多關注或者加入QQ羣:542283494