拥抱.NET 5,从自研微服务框架开始
“?
2016年發布了.NET Core第一個正式版本,而.NET5也將在下個月就正式來臨了,技術日新月異,也有點讓人應接不暇。在框架設計上,.NET Framework的全家桶理念,培養了一大批的CRUD,而.NET Core轉變成了按需使用(Pay for what you use),對.NET開發者提出了更高的要求,不僅得知道怎么用,還得知道為什么!
搞技術的,就該有刨根問底的精神。本人自研的微服務框架在各位大佬的幫助下總算迎來了首次線上公開分享,想招募幾個隊友一起干,先來說說這個自研項目!
”
文:WenLiang ?
來源:DotNetdaily?
自研服務注冊發現
微服務架構通常都有幾十上百個服務實例,每個服務實例追求功能單一,極簡設計,為保障服務的可用性和伸縮能力,集群是必須的,服務注冊發現也是必須的了。當下主流的服務注冊發現組件很多,Zookeeper、Consul、ETCD、Eurake都是可選項,本著探究和折騰精神,下面基于Redis封裝了一個ZXAgility.Microservice.RDiscovery
01
服務注冊發現的核心是注冊--發現,說到底就是個數據快速存取,Redis非常擅長。服務注冊就是寫入服務的基本信息到Redis,服務發現就是從Redis讀取服務的基本信息,Done!
02
心跳檢查和移除也是必備功能,Redis沒辦法主動發起心跳,于是乎轉換個思路,要求服務實例來心跳,定期更新Redis信息,否則就過期移除了,Done!
03
共享數據存儲、分布式鎖、集群數據同步等等功能,恰好就是Redis自己擅長的,Done!
以上是設計實例?
具體實現代碼和流程見文章底部
自研微服務網關
網關在微服務架構里面也是必須環節,能屏蔽保護底層的服務實例,還能完成各種緩存、超時、限流、熔斷、降級等服務治理,還能結合IdentityServer4授權中心做集中鑒權授權,也是整個微服務架構后臺流程的入口和起點,重中之重!.NET Core可選的網關組件主要是Ocelot和Kong,但是二者在性能上都有瓶頸,于是乎又來了一波封裝,ZXAgility.Microservice.RGateway:
01
網關的核心是路由映射,請求轉發,結果回發,這里用ASP.NET Core中間件模式做了個極簡的請求轉發,去除了多個無用環節。
02
服務治理上,目前已實現的包括基于Redis分布式緩存、基于Polly封裝的超時熔斷重試、以及用Redis令牌桶的形式實現了限流。
此外還提供了JWT驗證、配置文件以及HttpApi對配置文件管理等,網關常見功能大都實現了,壓測了下,性能比Ocelot能高50%。
自研微服務網關
APM全鏈路追蹤在微服務架構里也屬于必備組件了,因為服務多、節點多、機器多,一旦出個問題,幾乎是沒辦法去定位的,再就是服務節點的各種性能指標統計,都要求全鏈路追蹤,能實時統計出請求的全鏈路,包括調用的參數、結果、發起時間、結束時間等各種信息數據。當下.NET Core沒有成熟全鏈路工具,能選用的skywalking也是為Java而生的,.NET Core至今還不能用最新版本,限制很多。這里基于.NET Core封裝了一個ZXAgility.Microservice.RFullAPM:
01
獨立的數據收集中心,這里用Kafka來做的數據收集中間件,滿足海量吞吐低延遲的需求。
02
網關、實例全節點埋點和整個鏈路數據整理,通過.NET Core提供的AsyncLocal的中間件結合完成,保證高比發下單次請求保證使用同一個RequestID,識別請求鏈路。
03
在數據展示上,對接的Kibana提供的各種報表和查詢圖像展示,還可以無痕的對接業務報表系統,支持定制。
鏈路追蹤還有很多個性化的需求,
項目還在陸續完善,歡迎大家一起共建!
期待你的加入
微服務架構當下已經是成熟的架構體系,以上僅分享了服務注冊發現、網關、全鏈路追蹤,此外還有配置中心、分布式日志分析等諸多技術點。本文未展開講的完整內容,今晚將進行線上成功展示。應用以上組件搭建微服務實戰,并用Docker部署集群,最后用JMeter壓測整個項目做驗證!
作為項目發起人,對大家的加入萬分期待!歡迎加入自研團隊,共同開發,一起建設.Net開源生態!
提示:
凡參與本次線上分享會的小伙伴,期間生成的代碼、已有的經驗筆記等,都會分享給大家,掃碼添加工作人員,可免費領取!
自研團隊期待你的加入
自研微服務框架成果展示
時間:10月2日晚8點
參與:掃碼獲取直播鏈接
總結
以上是生活随笔為你收集整理的拥抱.NET 5,从自研微服务框架开始的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 开源特训营 - Lesson 4 - 如
- 下一篇: 快速了解 ASP.NET Core Bl