Dromara コミュニティの新しいオープンソース プロジェクト - Akali、軽量ホットスポットおよびダウングレード処理フレームワーク!

序文

Dramara コミュニティにメンバー プロジェクトが追加されました。

今日はアカリについて紹介したいと思います。

軽量かつコンパクトで、痕跡なく行き来でき、コードは 500 行未満ですが、高トラフィックのシナリオにおける主な問題であるホットスポット処理と劣化処理を解決できます。

導入

Akali は、大規模なトラフィック シナリオに適した軽量のローカライズされたホットスポット検出/ダウングレード フレームワークであり、ビジネスにおける超高トラフィックの同時クエリなどのシナリオを簡単に解決できます。アクセスと使用は非常に簡単で、10 秒でアクセスして使用できます。

Akali フレームワークのコンセプトは、コンパクトで実用的であり、完全な体力でチーム戦を戦えることです。完全な体力でフィールドを離れ、そこに行くものはすべて無になります。

Gitee:https://gitee.com/dromara/Akali

Github:https://github.com/bryan31/Akali

公式サイト: https: //akali.yomahub.com/

使用

依存関係を導入します。

<dependency>
  <groupId>com.yomahub</groupId>
  <artifactId>akali</artifactId>
  <version>1.0.1</version>
</dependency>

ホットスポットの任意の方法

このアノテーションを追加するだけで@AkaliHot、どのメソッドでもホットスポット検出を取得し、ホットスポット期間中にホットスポット データを使用して返すことができ、ホットスポット期間が経過すると、元のビジネス ロジックが自動的に呼び出されます。

例: たとえば、製品クエリ ビジネスがある場合、SkuCode を渡して製品情報を返します。製品がセールになると、訪問数は増加しますが、同じ SkuCode の場合、短い時間枠内で返される SkuInfo は一貫しています。私たちの目標は、製品 SKU が大量にクエリされた場合に、この製品 SKU のフレームワークが短期間でホットデータとして挙げることができ、キャッシュして返すことで下流のビジネスへの負担を軽減できます。ホットスポット値が合格すると、フレームワークはホットスポット値を自動的に削除して、元の方法でクエリできるようにします。

その本質は、ホット スポットをリアルタイムで監視し、ホット スポット データを短期間キャッシュすることと同等です。

次の例は、同じ skuCode が 5 秒以内に 50 回を超えて呼び出された場合、この skuCode の値が自動的にホットスポットとして呼び出され、最後の戻り値が直接返されます。呼び出しが 5 秒間に 50 回未満の場合、フレームワークはこのホットスポットを自動的に削除します。通常は元のコードを呼び出して論理計算を実行して返すようにします。すべて自動です。

@AkaliHot(grade = FlowGradeEnum.FLOW_GRADE_QPS, count = 50, duration = 5)
public SkuInfo getSkuInfo(String skuCode){
  //do your biz and return sku info
}

ディメンション統計grade加えて、パラメータではディメンション統計として数値も使用されます。例えば:QPSThread

@AkaliHot(grade = FlowGradeEnum.FLOW_GRADE_THREAD, count = 50, duration = 5)
public SkuInfo getSkuInfo(String skuCode){
  //do your biz and return sku info
}

これは、特定の skuCode で 5 秒以内に 50 を超えるスレッドが実行されている場合、それがホットスポットとして言及され、ホットスポット データが直接返されることを意味します。

オープンソース プロジェクトに詳しい学生ならこれを見て JD.com のフレームワークを思い浮かべたはずですが、JD.com とhotkeyは異なり完全にローカルで動作しサーバーに依存せず、アクセスもJD.com よりはるかに便利です。パフォーマンスはまったく同等ですAkalihotkeyhotkeyhotkey

任意のメソッドをダウングレードする

注釈を追加するだけです@AkaliFallbackダウングレード機能を取得するには、任意の方法を使用できます。

例: 特定のメソッドは外部インターフェイスを呼び出す必要がありますが、外部インターフェイスのパフォーマンスは低く、時間がかかります。同時実行性が高いと、スレッド プールがいっぱいになり、スレッド プールのキューが徐々に蓄積されてタイムアウトや破棄が発生し、ひどい場合にはシステム全体がダウンします。

現時点では、@AkaliFallbackこのメソッドにアノテーションを追加するだけで問題を解決できます。

@AkaliFallback(grade = FlowGradeEnum.FLOW_GRADE_THREAD, count = 100)
public String sayHi(String name){
  return "hi,"+name;
}

public String sayHiFallback(String name){
  return "fallback str";
}

上記の注釈は、このメソッドで同時に実行されているスレッドの数が 100 を超えると、ダウングレードがトリガーされることを示しています。ダウングレードでは、メソッド名が自動的に呼び出されます (パラメーターは一貫している必要があります)。ダウングレードがトリガーされると原方法名+Fallbackfallback strスレッド数が 100 未満の場合、フレームワークも自動的にダウングレードを削除して出力しますhi,xxxx

クラスにフォールバック メソッドが定義されていない場合、ダウングレードがトリガーされるとエラーが報告されます。もちろん、ダウングレード メソッドでエラーをスローして、メソッドがボトルネックに達したことを上流システムに知らせることもできます。

予防

Akali は Springboot と Spring 環境のみをターゲットにしており、マークされたすべてのクラス、@AkaliHotまたは@AkaliFallbackSpring コンテキストに登録する必要があります。

Akali は Springboot ですべてのアノテーション付きクラスを自動的にスキャンします。設定を行う必要はありません。Spring では、次の設定を行う必要があります。

<bean class="com.yomahub.akali.strategy.FallbackStrategy"/>
<bean class="com.yomahub.akali.strategy.MethodHotspotStrategy"/>
<bean class="com.yomahub.akali.spring.AkaliScanner"/>

やっと

ご興味がございましたら、Gitee でアカリに小さな星を付けてください。

Gitee:https://gitee.com/dromara/Akali

おすすめ

転載: www.oschina.net/news/266848
おすすめ