.NetCore框架Surging系列(一)介绍
.NetCore框架Surging系列(一)介紹
.NetCore框架Surging系列(二)HTTP
.NetCore框架Surging系列(三)HTTP本地路由發現過程
這里寫自定義目錄標題
- Surging
- 一 簡介
- 二 安裝使用
- 三 工程結構介紹
- 四 擴展工程
- 五 總結
Surging
surging 是一個分布式微服務引擎,提供高性能RPC遠程服務調用,服務引擎支持http、TCP、WS、Mqtt協議,采用Zookeeper、Consul作為surging服務的注冊中心,集成了哈希一致性,隨機,輪詢、壓力最小優先作為負載均衡的算法,底層協議集成采用的組件是dotnetty、websocket-sharp、Kestrel。支持通過docker hub 部署服務引擎,也可以通過nuget 引用組件的方式自定義服務引擎
一 簡介
surging 是一個分布式微服務引擎,提供高性能RPC遠程服務調用,服務引擎支持http、TCP、WS、Mqtt協議,采用Zookeeper、Consul作為surging服務的注冊中心,集成了哈希一致性,隨機,輪詢、壓力最小優先作為負載均衡的算法,底層協議集成采用的組件是dotnetty、websocket-sharp、Kestrel。支持通過docker hub 部署服務引擎,也可以通過nuget 引用組件的方式自定義服務引擎。
二 安裝使用
這個寫的較好:https://www.cnblogs.com/YorkSun/p/10438717.html
作者博客(很久沒有更新了):https://www.cnblogs.com/fanliang11/tag/surging/
三 工程結構介紹
不常用:暫時沒有用上,不代表不重要
對象映射
1 ) 緩存地址管理->配置地址,尋址
2 ) 哈希算法->ConsistentHashNode
3 ) 健康檢查->DefaultHealthCheckService
4 ) 緩存客戶端->ICacheClient
5 ) 緩存管理器->AppConfig負責緩存的配置和注冊緩存實例,實例管理器CacheContainer提供緩存提供器(ICacheProvider)的實例。
6 ) MemoryCache實現
7 ) RedisCache實現
Rpc傳輸消息處理,傳輸消息、接收消息的編碼、解碼
傳輸消息編碼協議,同上
公共方法,擴展字符串、枚舉處理等,不過在擴展的時候沒有修改這里面的內容,是單獨建一個項目,作用等同
服務集群中HTTP路由管理、Rpc命令、緩存
1 ) Consul配置管理。默認配置ConfigInfo,從服務Consul配置(surgingSettings.json)中讀取ConsulOption。
2 ) Consul地址管理,路由添加、路由尋址、Consul健康檢查
3 ) Consul中Key/Value管理。由定時服務管理ClientWatchManager進行定時刷新
Key分類兩類 ,所有接口繼承IServiceKey都會被記錄。其中Key會記錄相關模塊信息。
i. lock_services類
serviceRoutes
ii. services類
{
“ServiceId”: “Surging.IModuleServices.Common.IUserService.GetUser_user”,//路由ID
“FailoverCluster”: 3, //錯誤重試次數
“CircuitBreakerForceOpen”: false, //是否開啟熔斷
“Strategy”: “Injection”, //熔斷后響應策略 故障轉移、返回指定內容、回退
“ExecutionTimeoutInMilliseconds”: 20000, //超時時間
“RequestCacheEnabled”: true,
…省略
“MaxConcurrentRequests”: 20
}
{
“AddressDescriptors”:[
{
//接口地址信息 -> IP 主機地址
//HttpPort -> Http端口
//Port -> Rpc端口
“Value”:"{“Ip”:“127.0.0.1”,“Port”:98,“WanIp”:“127.0.0.1”,“WsPort”:96,“MqttPort”:97,“HttpPort”:280}"
}
],
“ServiceDescriptor”:{
“Id”:“Surging.IModuleServices.Common.IUserService.GetUser_user”, //路由轉為ID 命名空間+類名+方法名
“Token”:“428c32e9df8744c6b7a8d6b90327737b”,
“RoutePath”:“api/v1/user/”, //路由地址
“Metadatas”:{
}
}
}
幾乎是所有模塊的基礎,集群地址、緩存、配置、事件、日志、路由、序列化、RPC傳輸等依賴注入的方法接口、基礎類
Rpc服務器監聽、傳輸通道的消息適配、消息發送、客戶端創建工廠
消息隊列使用的這個組件,可以參考微軟項目eShopOnContainers,消息處理、斷線重連、重試隊列、死信隊列等處理
1 ) 配置管理。默認配置、配置提供、配置改寫(從服務中讀取配置AppConfig改寫默認配置)
2 ) 默認連接方式。DefaultRabbitMQPersisterConnection
3 ) 初始化。EventBusRabbitMQModule
4 ) 消息發送和消息接收管理。EventBusRabbitMQ,包含所有實現連接管理(連接、連接異常處理、斷線重連等)、發送機制(發送時會注冊exchange,模式為direct,該模式要求隊列Queue注冊時信道Route名稱需要完全一致),接收機制(訂閱消息,重試機制和死信隊列機制。如果接收消息并處理相關業務失敗次數大于配置次數加入…)
5 ) 消息隊列屬性。QueueConsumerAttribute,消費者訂閱的隊列。
HTTP服務監聽、處理、轉發、過濾、異常攔截,這個模塊有內存泄漏,很隱蔽,后面可以詳細說明一下:如何發現、如何分析、如何定位、如何修改
緩存的實現模塊,處理連接池、虛擬節點、節點選擇算法、緩存添加刪除(只適配了字符串,其他類型需要按需擴展,是StackExchange.Redis的二次封裝)
http請求的過濾器實現模塊
依賴注入的實現等,很重要但很少修改和擴展
四 擴展工程
團隊可以根據需要擴展Surging,以下是我們擴展的內容
a ) 初始化當前登錄用戶信息等
1、 枚舉字段、屬性用int替換,在上層使用時強轉
2、 枚舉值參數注入
五 總結
整體上Surging是一款非常優秀、功能齊全、性能好。但是內容非常多,同同類功能多個實現,初次接觸上手難度大,如果已經接觸過微服務結構,發現可能有的模塊實現有不太適合有的業務場景,后面會分模塊剖析Surging內部實現,以便大家進化架構時可以更快擴展內容和擴展點。
總結
以上是生活随笔為你收集整理的.NetCore框架Surging系列(一)介绍的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 【编程语言】Java夯实基础(一):Ja
- 下一篇: s标签常用属性