迎元旦,庆surging 1.0发布
一位攝影程序員的獨(dú)白
?????? 每個(gè)人都有愛好,都有釋放壓力的活動(dòng),而我也不例外,我除了每天上班,周末就會(huì)約一群好友去拍妹子,成家后,就改為拍蟲子,一拍就到了30歲,到了30歲就感覺到了中年的壓力,這時(shí)候停下手中的攝影,開始研究技術(shù),我開始翻閱各種技術(shù)博客,各種開源作品,靜下心去研究技術(shù)時(shí),發(fā)現(xiàn).NET的技術(shù)非常薄弱,各種解決方案都非常欠缺,尤其是微服務(wù),在.NET領(lǐng)域基本上一片空白,這時(shí)候碰巧.NET CORE 的出現(xiàn),研發(fā)surging想法也開始萌芽,也到處跟同事說,我要研發(fā)一套微服務(wù)框架,真正意義上的微服務(wù)框架,讓大家都去關(guān)注業(yè)務(wù),而無需去關(guān)注webapi,rest,http,tcp,rabbitmq,緩存等與業(yè)務(wù)無關(guān)的技術(shù),這些都由框架和中間件去實(shí)現(xiàn),而同事,朋友投過來的都是鄙夷,驚訝,意思是就憑你,是啊!就憑我,在不斷學(xué)習(xí)下,2017年我開始邁出了研發(fā)的第一步,2017年6月16日開始在github 進(jìn)行開源。而半個(gè)月后被邀請(qǐng)到TCC開源小組孵化surging.
??????? 轉(zhuǎn)眼間已經(jīng)到2018年年尾,還有一個(gè)星期就跨入2019年,在新年到來的日子,surging 也準(zhǔn)備發(fā)布1.0穩(wěn)定版本,在這1年半的日子里,耗費(fèi)了多少個(gè)日日夜夜我已經(jīng)記不清,每天下班回來我都要理清下surging ,還有哪些欠缺,需要彌補(bǔ),需要完善,耗費(fèi)了心血和時(shí)間在surging上,但是這一切都是值得的,因?yàn)橛行┕疽呀?jīng)采用surging? ,在微服務(wù)上已經(jīng)給了非常好的解決方案,并且有一家物聯(lián)網(wǎng)公司已經(jīng)使用surging 的ws,mqtt協(xié)議,據(jù)了解客戶端設(shè)備就有好幾萬臺(tái)。那下面我們來看看1.0版本有那些功能。
?
組件介紹
一、通信組件
1. Dotnetty:
針對(duì)于底層的http,mqtt,TCP協(xié)議采用了dotnetty進(jìn)行實(shí)現(xiàn) ,并且可以配置使用Libuv,而dotnetty 是微軟的Azure團(tuán)隊(duì),使用C#實(shí)現(xiàn)的Netty的版本,性能非常強(qiáng)大。
2.websocket-sharp:
針對(duì)于底層的websocket采用了websocket-sharp進(jìn)行實(shí)現(xiàn),因?yàn)楣俜轿粗С?net core,所以把它轉(zhuǎn)化支持.NET CORE,并且源碼放到surging ,并且同時(shí)和suring 一起發(fā)布
2.Kestrel:
針對(duì)于底層的Http協(xié)議采用了Kestrel進(jìn)行實(shí)現(xiàn),并且swagger也依賴于Kestrel,后期會(huì)擴(kuò)展身份驗(yàn)證,數(shù)據(jù)加密,服務(wù)聚合等功能以代替網(wǎng)關(guān),并且還會(huì)完善基于Kestrel的文件服務(wù)
二、編解碼組件
1.Newtonsoft.Json
針對(duì)于json 的編解碼采用了Newtonsoft.Json進(jìn)行實(shí)現(xiàn) ,并且默認(rèn)使用Newtonsoft.Json進(jìn)行編解碼
2.MessagePack-CSharp
針對(duì)于messagepack 的編解碼采用MessagePack-CSharp進(jìn)行實(shí)現(xiàn),MessagePack-CSharp是用于C#實(shí)現(xiàn)的MessagePack序列化組件,比官方的MsgPack-Cli快10倍,與其他所有C#序列化程序相比,具有最好的性能
3.protobuf-net
針對(duì)于二進(jìn)制的protobuf格式的編解碼采用的是protobuf-net進(jìn)行實(shí)現(xiàn)
三、日志組件
1.Nlog
Nlog組件
2.log4net
log4net組件進(jìn)行實(shí)現(xiàn),并且可以寫入到Console,file,database
四、注冊(cè)中心
1. consul
針對(duì)于MqttServiceRoute、ServiceCache、ServiceCommand、ServiceRoute采用了consul的Key/Value 進(jìn)行存儲(chǔ),并且更新是采用了心跳進(jìn)行更新
2. zookeeper
針對(duì)于MqttServiceRoute、ServiceCache、ServiceCommand、ServiceRoute采用了zookeeper指定path進(jìn)行node 儲(chǔ)存,并且更新是采用了watcher進(jìn)行更新
五、隊(duì)列
1. rabbitmq
針對(duì)于消息隊(duì)列rabbitmq 實(shí)現(xiàn)了消息的重試,失敗回滾,消息的延遲處理,目前只實(shí)現(xiàn)了direct
2. kafka
實(shí)現(xiàn)了針對(duì)于topic 進(jìn)行發(fā)布訂閱。
六、緩存
1.MemoryCache
由surging 的Caching組件提供的內(nèi)存緩存,使用該類型可以方便的在程序內(nèi)部緩存數(shù)據(jù)并對(duì)于數(shù)據(jù)的有效性進(jìn)行方便的管理
2.Redis
key-value
七:動(dòng)態(tài)代理
1.ProxyGenerator
針對(duì)動(dòng)態(tài)代理是通過Roslyn構(gòu)建腳本來生成編譯AOP動(dòng)態(tài)代理,以提供通過接口創(chuàng)建代理方式訪問。
負(fù)載均衡
一、容錯(cuò)策略
?
1. 隨機(jī)(Random):
通過生成隨機(jī)數(shù)隨機(jī)選擇服務(wù)地址,調(diào)用量越大分布越均勻
2. 輪詢(Polling)
通過輪詢地址選擇服務(wù)地址,存在比較慢的機(jī)器容易在這臺(tái)機(jī)器的請(qǐng)求阻塞較多,默認(rèn)使用此負(fù)載算法
3.哈希一致性(HashAlgorithm)
通過第一個(gè)參數(shù)生成的哈希值進(jìn)行哈希一致性選取服務(wù)地址,對(duì)于第一個(gè)相同參數(shù)的值的請(qǐng)求會(huì)定位到同一個(gè)服務(wù)提供者上
4.壓力最小優(yōu)先(FairPolling)
通過輪詢優(yōu)先選擇壓力最小的服務(wù)地址,針對(duì)于壓力比較小的服務(wù)器會(huì)分配更多的請(qǐng)求。
?
服務(wù)容錯(cuò)和熔斷
一、容錯(cuò)策略
1.故障轉(zhuǎn)移策略(Failover):
通過設(shè)置故障轉(zhuǎn)移群集數(shù)(FailoverCluster),從而服務(wù)故障自動(dòng)轉(zhuǎn)移到健康的服務(wù)提供者
2.腳本注入策略(Injection):
通過設(shè)置腳本注入(Injection),服務(wù)發(fā)生錯(cuò)誤時(shí)會(huì)返回所定義運(yùn)行的腳本結(jié)果
3.回退策略(FallBack)
通過設(shè)置回退的實(shí)例名(FallbackName),服務(wù)發(fā)生錯(cuò)誤時(shí)通過FallBackName去調(diào)用依賴注入的接口IFallbackInvoker
二、熔斷
1.錯(cuò)誤率熔斷
通過設(shè)置錯(cuò)誤率(BreakeErrorThresholdPercentage),當(dāng)失敗調(diào)用數(shù)/遠(yuǎn)程調(diào)用數(shù)大于錯(cuò)誤率,會(huì)啟用熔斷
2.超時(shí)熔斷
通過設(shè)置執(zhí)行超時(shí)時(shí)間(ExecutionTimeoutInMilliseconds),當(dāng)服務(wù)調(diào)用超過執(zhí)行時(shí)間會(huì)啟用熔斷
3.并發(fā)熔斷
通過設(shè)置信號(hào)量最大并發(fā)度(MaxConcurrentRequests),在多線程環(huán)境下超過設(shè)置的信號(hào)量,會(huì)啟用熔斷
4.錯(cuò)誤數(shù)熔斷
通過設(shè)置調(diào)用失敗的錯(cuò)誤數(shù)(BreakerRequestVolumeThreshold),在10秒鐘范圍內(nèi)超過設(shè)置的調(diào)用失敗錯(cuò)誤數(shù),會(huì)啟用熔斷
眾籌活動(dòng)
針對(duì)surging,體系比較龐大,組件涵蓋比較多,需要4名人員一起完善surging中英文文檔,然后經(jīng)過大家商量進(jìn)行眾籌,然后得到了大家熱烈響應(yīng),決定完成后,和參加者一起去云南旅游,不夠我自己補(bǔ)上費(fèi)用,經(jīng)過4天的募捐已經(jīng)達(dá)到6478元,最近也邀請(qǐng)同事,朋友參加,已經(jīng)有2名非常優(yōu)秀的人員參加英文文檔編寫,他們的英文非常好,可以和老外遠(yuǎn)程會(huì)議,并且公司藏龍臥虎的人非常多,最近有小組成員去了芝加哥出差,對(duì)于我這個(gè)英語二把刀的人來說,完全是個(gè)互補(bǔ)。并且每個(gè)月1號(hào)會(huì)把貢獻(xiàn)者名單更新到github
總結(jié)
surging 還有很長(zhǎng)的路要走,我會(huì)花很多時(shí)間在surging 維護(hù)和完善上,也請(qǐng)大家關(guān)注元旦1.0版本的發(fā)布,QQ群還有神秘大禮哦!
原文地址:https://www.cnblogs.com/fanliang11/p/10165757.html
.NET社區(qū)新聞,深度好文,歡迎訪問公眾號(hào)文章匯總 http://www.csharpkit.com
總結(jié)
以上是生活随笔為你收集整理的迎元旦,庆surging 1.0发布的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: .NET Core开发日志——结构化日志
- 下一篇: 直播预告 - 博时基金DevOps体系建