1. Nacos 2.0 正式發(fā)布,性能大幅提升 10 倍!

        共 4820字,需瀏覽 10分鐘

         ·

        2021-03-31 11:57

        點擊上方藍色“小哈學Java”,選擇“設(shè)為星標

        回復“資源”獲取獨家整理的學習資料!

        Nacos 項目起源于阿里巴巴內(nèi)部的五彩石項目,從 2008 年開始,就已經(jīng)在內(nèi)部孵化了。近年來受 Eureka、Consul 等項目的影響,Nacos 越來越受歡迎!

        目前 Nacos 支持主流微服務(wù)開發(fā)語言&主流服務(wù)框架和配置管理框架,比如支持 Duboo、SpringCloud、SCA,還對接了一些云原生的組件比如 coreDNS 和 sentinel 等。

        客戶端語言方面目前支持 Java,go python 等主流語言,最近剛發(fā)布正式版本的還支持 C# 和 C++。

        最近 Nacos 更新動作頻頻,Nacos 2.X 版本迎來了首秀,在 1.X 的架構(gòu)基礎(chǔ)上 新增了對長連接模型的支持。通信層目前通過 grpc 實現(xiàn)了長連接 RPC 調(diào)用和推送能力,使用長鏈接的好處大幅度減少了 1.x 輪詢心跳頻繁導致 JVM Full GC。

        1.X架構(gòu)存在的問題

        接下來看一下 Nacos1.X 架構(gòu)所面臨的幾個比較重要的問題。

        一句話總結(jié),心跳多,無效查詢多,心跳續(xù)約感知變化慢,連接消耗大,資源空耗嚴重。

        圖片

        1. 心跳數(shù)量多,導致 TPS 居高不下

        通過心跳續(xù)約,當服務(wù)規(guī)模上升時,特別是類似 Dubbo 的接口級服務(wù)較多時,心跳及配置元數(shù)據(jù)的輪詢數(shù)量眾多,導致集群 TPS 很高,系統(tǒng)資源高度空耗。

        1. 通過心跳續(xù)約感知服務(wù)變化,時延長

        心跳續(xù)約需要達到超時時間才會移除并通知訂閱者,默認為 15 s,時延較長,時效性差。若改短超時時間,當網(wǎng)絡(luò)抖動時,會頻繁觸發(fā)變更推送,對客戶端服務(wù)端都有更大損耗。

        1. UDP 推送不可靠,導致 QPS 居高不下

        由于 UDP 不可靠,因此客戶端測需要每隔一段時間進行對賬查詢,保證客戶端緩存的服務(wù)列表的狀態(tài)正確,當訂閱客戶端規(guī)模上升時,集群 QPS 很高,但大多數(shù)服務(wù)列表其實不會頻繁改變,造成無效查詢,從而存在資源空耗。

        1. 基于 HTTP 短連接模型,TIME_WAIT 狀態(tài)連接過多

        HTTP 短連接模型,每次客戶端請求都會創(chuàng)建和銷毀 TCP 鏈接,TCP 協(xié)議銷毀的鏈接狀態(tài)是 WAIT_TIME,完全釋放還需要一定時間,當 TPS 和 QPS 較高時,服務(wù)端和客戶端可能有大量的 WAIT_TIME 狀態(tài)鏈接,從而會導致 connect time out 錯誤或者 Cannot assign requested address 的問題。

        1. 配置模塊的 30 秒長輪詢引起的頻繁 GC

        配置模塊使用 HTTP 短連接阻塞模型來模擬長連接通信,但是由于并非真實的長連接模型,因此每 30 秒需要進行一次請求和數(shù)據(jù)的上下文切換,每一次切換都有引起造成一次內(nèi)存浪費,從而導致服務(wù)端頻繁 GC。

        Nacos 2.x 架構(gòu)的優(yōu)缺點

        前面簡要介紹了 Nacos 2.x 的架構(gòu)和新模型的工作方式,接下來我們分析一下這樣的改動有哪些優(yōu)缺點。

        圖片

        優(yōu)點

        1. 客戶端不再需要定時發(fā)送實例心跳,只需要有一個維持連接可用 keepalive 消息即可。重復 TPS 可以大幅降低。
        2. TCP 連接斷開可以被快速感知到,提升反應速度。
        3. 長連接的流式推送,比 UDP 更加可靠;nio 的機制具有更高的吞吐量,而且由于可靠推送,可以加長客戶端用于對賬服務(wù)列表的時間,甚至刪除相關(guān)的請求。重復的無效 QPS 可以大幅降低。
        4. 長連接避免頻繁連接開銷,可以大幅緩解 TIME_ WAIT 問題。
        5. 真實的長連接,解決配置模塊 GC 問題。
        6. 更細粒度的同步內(nèi)容,減少服務(wù)節(jié)點間的通信壓力。

        缺點

        沒有銀彈的方案,新架構(gòu)也會引入一些新問題

        1. 內(nèi)部結(jié)構(gòu)復雜度上升,管理連接狀態(tài),連接的負載均衡需要管理。
        2. 數(shù)據(jù)由原來的無狀態(tài),變?yōu)榕c連接綁定的有狀態(tài)數(shù)據(jù),流程鏈路更長。
        3. RPC 協(xié)議的觀測性不如 HTTP。即使 gRPC 基于 HTTP2.0 Stream 實現(xiàn),仍然不如直接使用 HTTP 協(xié)議來的直觀。

        性能提升

        Nacos 2.x 服務(wù)發(fā)現(xiàn)性能測試都是針對重點功能,通過對 3 節(jié)點規(guī)模集群進行壓測,可以看到接口性能負載和容量,以及對比相同/類似場景下 Nacos1.X 版本的提升。

        • 壓測時服務(wù)及實例容量達到百萬級,集群運行持續(xù)穩(wěn)定,達到預期;(該場景沒有計算頻繁變更導致的頻繁推送內(nèi)容,僅單純計算容量上線,附帶推送的真實場景將在下輪壓測報告中給出)
        • 注冊/注銷實例 TPS 達到 26000 以上,總體較 Nacos1.X 提升至少 2 倍,接口達到預期;
        • 查詢實例 TPS 能夠達到 30000 以上,總體較 Nacos1.X 提升 3 倍左右,接口達到預期;

        兼容性

        配置中心

        • 完全兼容 1.X 客戶端所有 API 接口方法
        • 完全實現(xiàn) 2.X 客戶端所有 API 接口方法
        • 完全兼容所有配置中心相關(guān) openAPI

        服務(wù)發(fā)現(xiàn)

        由于服務(wù)發(fā)現(xiàn)的數(shù)據(jù)模型發(fā)生了比較重大的改變,因此以下功能暫時未支持。

        • 查看當前集群 leader(將廢棄)
        • 批量更新實例元數(shù)據(jù)(Beta,不支持)
        • 批量刪除實例元數(shù)據(jù)(Beta,不支持)

        控制臺

        • 完全兼容配置中心相關(guān)頁面及功能
        • 完全兼容權(quán)限控制相關(guān)頁面及功能
        • 完全兼容命名空間相關(guān)頁面及功能
        • 完全兼容集群管理相關(guān)頁面及功能
        • 完全兼容服務(wù)發(fā)現(xiàn)相關(guān)頁面及功能

        Spring Cloud Alibaba 適配

        由于目前 Spring cloud alibaba 2.2.5 版本內(nèi)置的 nacos-client 為 1.4.1,可通過指定 nacos-client 方式,提前使用 Nacos2.0 長連接功能。

        <dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
            <version>2.2.5.RELEASE</version>
            <exclusions>
                <exclusion>
                    <groupId>com.alibaba.nacos</groupId>
                    <artifactId>nacos-client</artifactId>
                </exclusion>
            </exclusions>
        </dependency>
        <dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
            <version>2.2.5.RELEASE</version>
            <exclusions>
                <exclusion>
                    <groupId>com.alibaba.nacos</groupId>
                    <artifactId>nacos-client</artifactId>
                </exclusion>
            </exclusions>
        </dependency>
        <dependency>
            <groupId>com.alibaba.nacos</groupId>
            <artifactId>nacos-client</artifactId>
            <version>2.0.0</version>
        </dependency>

        最后,期待大家搶先體驗,幫助發(fā)現(xiàn)修復 bug,改善社區(qū),貢獻智慧,參與 Nacos 開源社區(qū)建設(shè)!Nacos 項目起源于阿里巴巴內(nèi)部的五彩石項目,從 2008 年開始,就已經(jīng)在內(nèi)部孵化了。近年來受 Eureka、Consul 等項目的影響,Nacos 越來越受歡迎!

        目前 Nacos 支持主流微服務(wù)開發(fā)語言&主流服務(wù)框架和配置管理框架,比如支持 Duboo、SpringCloud、SCA,還對接了一些云原生的組件比如 coreDNS 和 sentinel 等。

        客戶端語言方面目前支持 Java,go python 等主流語言,最近剛發(fā)布正式版本的還支持 C# 和 C++。

        最近 Nacos 更新動作頻頻,Nacos 2.X 版本迎來了首秀,在 1.X 的架構(gòu)基礎(chǔ)上 新增了對長連接模型的支持。通信層目前通過 grpc 實現(xiàn)了長連接 RPC 調(diào)用和推送能力,使用長鏈接的好處大幅度減少了 1.x 輪詢心跳頻繁導致 JVM Full GC。

        1. Redis單線程已經(jīng)很快了,為什么6.0要引入多線程?帶來什么優(yōu)勢?

        2. 事務(wù)注解 @Transactional 失效的3種場景及解決辦法

        3. SpringBoot 部署 Jar 文件,瘦身優(yōu)化指南 !

        4. 推薦一個高仿微信的項目 有點屌??!

        最近面試BAT,整理一份面試資料Java面試BATJ通關(guān)手冊,覆蓋了Java核心技術(shù)、JVM、Java并發(fā)、SSM、微服務(wù)、數(shù)據(jù)庫、數(shù)據(jù)結(jié)構(gòu)等等。

        獲取方式:點“在看”,關(guān)注公眾號并回復 Java 領(lǐng)取,更多內(nèi)容陸續(xù)奉上。

        文章有幫助的話,在看,轉(zhuǎn)發(fā)吧。

        謝謝支持喲 (*^__^*)

        瀏覽 67
        點贊
        評論
        收藏
        分享

        手機掃一掃分享

        分享
        舉報
        評論
        圖片
        表情
        推薦
        點贊
        評論
        收藏
        分享

        手機掃一掃分享

        分享
        舉報
          
          

            1. 国产99996在线亚洲 | 亚洲精品国产探花 | 嗯~好大用力深一点小说 | 无码精品一区二区三区四区爱奇艺 | 久热精品视频 |