日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

微服务神经元(Neural)

發布時間:2023/12/9 编程问答 49 豆豆
生活随笔 收集整理的這篇文章主要介紹了 微服务神经元(Neural) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.


微服務架構中的神經組織,主要為分布式架構提供了集群容錯的三大利刃:限流、降級和熔斷。并同時提供了SPI、過濾器、JWT、重試機制、插件機制。此外還提供了很多小的黑科技(如:IP黑白名單、UUID加強版、Snowflake和大并發時間戳獲取等)。

Features

  • 分布式限流(Limiter)
    • 致力于分布式服務調用的流量控制,可以在服務之間調用和服務網關中進行限流!
  • 服務降級(Degrade)
    • 致力于提供分布式的服務降級開關!
  • 個性化重試(Retryer)
    • 致力于打造更加智能的重試機制,帶你見證重試AI!
  • 服務鑒權(Auth)
    • 致力于保證每次分布式調用鑒定,可在服務注冊、訂閱及調用環節進行服務鑒權!
  • 鏈路追蹤(Trace)
    • 致力于為微服務架構提供鏈路追蹤的埋點!
  • 黑科技
    • Perf:性能測試神器,可以用于為單個方法或代碼塊進行性能測試
    • NUUID:UUID擴展版,提供更豐富的UUID生產規則
    • Filter:基于責任鏈模式的過濾器
    • IPFilter:IP黑白名單過濾器
    • Snowflake:基于Snowflake算法的分布式ID生成器
    • SystemClock:解決大并發場景下獲取時間戳時的性能問題

1 NPI

1.1 JDK中SPI缺陷

  • JDK標準的SPI會一次性實例化擴展點所有實現,如果有擴展實現初始化很耗時,但如果沒用上也加載,會很浪費資源
  • 不支持擴展點的IoC和AOP
  • 不支持實現排序
  • 不支持實現類分組
  • 不支持單例/多例的選擇

1.2 NPI功能特性

  • 支持自定義實現類為單例/多例
  • 支持設置默認的實現類
  • 支持實現類order排序
  • 支持實現類定義特征屬性category,用于區分多維度的不同類別
  • 支持根據category屬性值來搜索實現類
  • 支持自動掃描實現類
  • 支持手動添加實現類
  • 支持獲取所有實現類
  • 支持只創建所需實現類,解決JDK原生的全量方式
  • 支持自定義ClassLoader來加載class

TODO:需要實現對擴展點IoC和AOP的支持,一個擴展點可以直接setter注入其它擴展點。

1.3 使用方式

第一步:定義接口

@NPI public interface IDemo {} 復制代碼

第二步:定義接口實現類

@Extension("demo1") public class Demo1Impl implements IDemo {}@Extension("demo2") public class Demo2Impl implements IDemo {}</pre> 復制代碼

第三步:使用接口全路徑(包名+類名)創建接口資源文件

src/main/resources/META-INF/neural/io.neural.demo.IDemo

第四步:在接口資源文件中寫入實現類全路徑(包名+類名)

io.neural.demo.Demo1Impl io.neural.demo.Demo2Impl</pre> 復制代碼

第五步:使用ExtensionLoader來獲取接口實現類

public class Demo{public static void main(String[] args){IDemo demo1 =ExtensionLoader.getLoader(IDemo.class).getExtension("demo1");IDemo demo2 =ExtensionLoader.getLoader(IDemo.class).getExtension("demo2"); } }</pre> 復制代碼

2 限流(Limiter)

在分布式架構中,限流的場景主要分為兩種:injvm模式和cluster模式。

2.1 injvm模式

2.1.1 并發量(Concurrency)

使用JDK中的信號量(Semaphore)進行控制。

public class Test{public static void main(String[] args){Semaphore semaphore = new Semaphore(10,true);semaphore.acquire();//do something heresemaphore.release();} }</pre> 復制代碼

2.1.2 速率控制(Rate)

使用Google的Guava中的限速器(RateLimiter)進行控制。

public class Test{public static void main(String[] args){RateLimiter limiter = RateLimiter.create(10.0); // 每秒不超過10個任務被提交limiter.acquire(); // 請求RateLimite} }</pre> 復制代碼

2.2 cluster模式(待完成)

分布式限流主要適用于保護集群的安全或者用于嚴格控制用戶的請求量(API經濟)。

2.3 限制瞬時并發數

  • 定義:瞬時并發數,系統同時處理的請求/事務數量
  • 優點:這個算法能夠實現控制并發數的效果
  • 缺點:使用場景比較單一,一般用來對入流量進行控制

2.4 限制時間窗最大請求數

  • 定義:時間窗最大請求數,指定的時間范圍內允許的最大請求數
  • 優點:這個算法能夠滿足絕大多數的流控需求,通過時間窗最大請求數可以直接換算出最大的QPS(QPS = 請求數/時間窗)
  • 缺點:這種方式可能會出現流量不平滑的情況,時間窗內一小段流量占比特別大

2.5 令牌桶

算法描述

  • 假如用戶配置的平均發送速率為r,則每隔1/r秒一個令牌被加入到桶中
  • 假設桶中最多可以存放b個令牌。如果令牌到達時令牌桶已經滿了,那么這個令牌會被丟棄
  • 當流量以速率v進入,從桶中以速率v取令牌,拿到令牌的流量通過,拿不到令牌流量不通過,執行熔斷邏輯

屬性

  • 長期來看,符合流量的速率是受到令牌添加速率的影響,被穩定為:r
  • 因為令牌桶有一定的存儲量,可以抵擋一定的流量突發情況
    • M是以字節/秒為單位的最大可能傳輸速率。 M>r
    • T max = b/(M-r) 承受最大傳輸速率的時間
    • B max = T max * M 承受最大傳輸速率的時間內傳輸的流量

優點:流量比較平滑,并且可以抵擋一定的流量突發情況

3 熔斷(CircuitBreaker)

在分布式架構中,熔斷的場景主要分為兩種:injvm模式和cluster模式。

3.1事件統計熔斷器(EventCountCircuitBreaker)

在指定時間周期內根據事件發生的次數來實現精簡版熔斷器。如10秒之內觸發5次事件,則進行熔斷。

3.2 門限熔斷器(ThresholdCircuitBreaker)

TODO

4 降級(Degrade)(待完成)

服務降級是指當服務器壓力劇增時,根據當前業務情況及流量對一些服務和頁面有策略的降級,以此緩解了服務器資源壓力,以保證核心任務的正常運行,同時也保證了部分甚至大部分客戶得到正確響應。

4.1 管理方式

4.1.1 直接管理方式:運維人員可以指定哪些模塊降級

當服務器檢測到壓力增大,服務器監測自動發送通知給運維人員,運維人員根據自己或相關人員判斷后通過配置平臺設置當前運行等級來降級。降級首先可以對非核心業務進行接口降級。如果效果不顯著,開始對一些頁面進行降級,以此保證核心功能的正常運行。

4.1.2 分級管理方式:運維人員無需關心業務細節,直接按級別降低即可

業務確定好對應業務的優先級別,指定好分級降級方案。當服務器檢測到壓力增大,服務檢測自動發送通知給運維人員。運維人員根據情況選擇運行等級。

5 重試(Retryer)

5.1 重試策略

5.1.1 塊策略(BlockStrategy)

使當前線程使用Thread.sleep()的方式進行休眠重試。

5.1.2 停止策略(StopStrategy)

  • NeverStopStrategy:從不停止策略
  • StopAfterAttemptStrategy:嘗試后停止策略
  • StopAfterDelayStrategy:延遲后停止策略

5.1.3 等待策略(WaitStrategy)

  • FixedWaitStrategy:固定休眠時間等待策略
  • RandomWaitStrategy:隨機休眠時間等待策略,支持設置隨機休眠時間的下限值(minmum)與上限值(maxmum)
  • IncrementingWaitStrategy:定長遞增休眠時間等待策略
  • ExponentialWaitStrategy:指數函數(2^x,其中x表示嘗試次數)遞增休眠時間等待策略。支持設置休眠時間的上限值(maximumWait)
  • FibonacciWaitStrategy:斐波那契數列遞增休眠時間等待策略。支持設置休眠時間的上限值(maximumWait)
  • CompositeWaitStrategy:復合等待策略,即支持以上等待策略的組合計算休眠時間,最終休眠時間是以上策略中休眠時間之和
  • ExceptionWaitStrategy:異常等待策略

5.2 指定結果重試

retryIfResult(Predicate< V> resultPredicate):設置重試不滿足條件的結果

eg:如果返回結果為空則重試:retryIfResult(Predicates.< Boolean>isNull())

5.3 指定異常重試

  • retryIfException():重試所有異常
  • retryIfRuntimeException():重試運行時異常
  • retryIfExceptionOfType(Class<? extends Throwable> exceptionClass):重試指定類型異常
  • retryIfException(Predicate< Throwable> exceptionPredicate) :自定義過濾后的異常重試

5.4 重試監聽器(RetryListener)

withRetryListener(RetryListener listener):添加重試監聽器

5.5 嘗試時間限制器(AttemptTimeLimiter)

withAttemptTimeLimiter(AttemptTimeLimiter< V> attemptTimeLimiter):添加嘗試時間限制器

6 JWT(JSON Web Token)

功能來源于java-jwt項目,但有一定的調整,后續會繼續簡化。

7 過濾器(Filter)

基于@NPI擴展方式和責任鏈模式實現的過濾器機制。

8 黑科技(Micro)

  • Perf:性能測試工具
  • IPFilter:IP黑白名單過濾器
  • SystemClock:解決大并發場景中獲取System.currentTimeMillis()的性能問題
  • Snowflake:基于Snowflake算法實現的高性能Long型ID生成器。理論QPS > 400w/s
  • NUUID:UUID擴展版。支持36/32/22/19位的UUID生成方式(不犧牲精度),支持犧牲一定精度后的15位超短UUID

需要更詳細思維導圖和視頻資料的可以加一下技術交流分享群:“603619042”免費獲取

同時我經過多年的收藏目前也算收集到了一套完整的學習資料,包括但不限于:分布式架構、高可擴展、高性能、高并發、Jvm性能調優、Spring,MyBatis,Nginx源碼分析,Redis,ActiveMQ、、Mycat、Netty、Kafka、Mysql、Zookeeper、Tomcat、Docker、Dubbo、Nginx等多個知識點高級進階干貨,希望對想成為架構師的朋友有一定的參考和幫助



作者:Java高端架構老王
鏈接:https://juejin.im/post/5cc84cb6518825250e146c61
來源:掘金
著作權歸作者所有。商業轉載請聯系作者獲得授權,非商業轉載請注明出處。


轉載于:https://juejin.im/post/5cb82a1df265da035b619184

總結

以上是生活随笔為你收集整理的微服务神经元(Neural)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。