メインコンテンツにスキップ

パフォーマンス最適化

何百万人ものユーザーまたは権限を持つ本番環境で適用されると、Casbinの強制力でパフォーマンスが低下する可能性があります。通常、2つの原因があります。

大容量トラフィック

1秒あたりのリクエスト数が大きすぎます。例えば、単一のCasbinインスタンスに対して10,000のリクエスト/秒などです。 このような場合、単一のCasbinインスタンスは通常、すべてのリクエストを処理するのに十分ではありません。 2つの解決策があります:

  1. マルチスレッドを使用して複数のCasbinインスタンスを有効にすることで、マシン内のすべてのコアを完全に使用できます。 詳細はこちらをご覧ください: マルチスレッド.

  2. Casbin インスタンスをクラスタ(複数のマシン)にデプロイします。 Watcherを使用して、すべてのCasbinインスタンスが一貫していることを保証します。 詳細はこちらをご覧ください: ウォッチャー.

note

上記の両方のメソッドを同時に使用できます。例えば、Casbin を 10 マシン クラスタにデプロイするなどです。 各マシンには同時に5スレッドがあり、Casbin強制リクエストに応答します。

ポリシールールの数が多いです

クラウドまたはマルチテナント環境で何百万ものポリシールールが必要になる場合があります。 各執行呼び出しまたは最初にポリシールールを読み込むことは非常に遅いです。 このようなケースは通常、いくつかの方法で軽減できます。

  1. あなたのカスビンモデルまたはポリシーはよく設計されていません。 よく書かれたモデルとポリシーは、ユーザー/テナントごとに重複したロジックを抽象化し、ルールの数を非常に小さなレベル (< 100): e. 、すべてのテナントでいくつかのデフォルトのルールを共有し、ユーザーに後でルールをカスタマイズさせることができます。 カスタマイズされたルールはデフォルトのルールを上書きすることができます。 それでも質問がある場合は、GitHub Issue を Casbin リポジトリに送信してください。

  2. Casbin 施行者が小さなポリシールールのみをロードできるようにするためにシャーディングを行います。例えば、 enforcer_0 は tenant_0 から tenant_99 までしか機能しません。enforcer_1 は tenant_100 から tenant_199までしか機能しません。 すべてのポリシールールのサブセットのみをロードするには、詳細は次を参照してください: ポリシーサブセットの読み込み.

  3. 直接ユーザーの代わりにRBACロールに権限を付与します。 CasbinのRBACは、(キャッシュとして)ロール継承ツリーによって実装されています。 だから、アリスのようなユーザーを考えると、CasbinはRBACツリーをクエリしてロールユーザーの関係を確認し、強制を行うのにO(1)時間しか使用しません。 gルールが頻繁に変更されない場合は、RBACツリーを更新する必要はありません。 詳細はこちらをご覧ください: https://github.com/casbin/casbin/issues/681#issuecomment-763801583

note

上記のすべての方法を同時に試すことができます。