ワーカー間でのデータ共有とキャッシュの設定

キャッシングを使用するポリシープロジェクトの例は、 「データキャッシングポリシーの例」​を参照してください。

Envoy は、ポリシーの要求処理能力を高めるために多くのワーカーを生成します。1 つのワーカーが、発信接続や応答フローなど、特定の要求のすべてのフェーズを処理します。これにより、特定の要求の内部ステータスを追跡したり、基盤となるイベント駆動型の実装には関係なく、逐次的な実行フローを作成したりできます。

各ワーカーは与えられた時間内に 1 つの要求を処理します。特定のワーカーでグローバルな状態を共有するには、同時変更のリスクがない ​RefCell​ を使用します。

用意されている​キャッシュ​メカニズムを使用して、すべてのワーカーで共有されるグローバル状態を作成します。

キャッシュビルダーを挿入したら、キャッシュの ID とキャッシュがサポートする要素の最大数を指定します。

次の例では、10 個の要素を保持できるキャッシュを設定しています。

#[entrypoint]
async fn configure(
    launcher: Launcher,
    cache_builder: CacheBuilder,
) -> Result<()> {
    let cache = cache_builder.new(String::from("caching")).max_entries(10);
    ...

キャッシュは以下のインターフェースを持ちます。

pub trait Cache {
    fn save(&self, key: &str, value: Vec<u8>) -> Result<(), CacheError>;
    fn get(&self, key: &str) -> Option<Vec<u8>>;
    fn delete(&self, key: &str) -> Option<Vec<u8>>;
    fn purge(&self);
}
異なるワーカーが同時にキャッシュに書き込むため、キャッシュを保存するときに上書きされる値が、取得したときと同じであるという保証はありません。