Why not login to Qiita and try out its useful features?

We'll deliver articles that match you.

You can read useful information later.

0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

SpyMemcachedのバックオフ戦略 (Backoff Strategy)について

Posted at

SpyMemcachedが指数バックオフ戦略を採用しているかの調査

はじめに

Memcachedは、高速なキャッシュ機能を提供するために広く利用されています。そのクライアントライブラリとして人気のあるSpyMemcachedも、効率的な接続管理が重要です。本記事では、SpyMemcachedが再接続時に指数バックオフ(Exponential Backoff)戦略を採用しているかどうかを、最新のソースコードを基に調査しました。

ソースコードの確認

SpyMemcachedの最新ソースコードは、GitHubリポジトリで公開されています。以下に、再接続戦略に関連する主要な部分を抜粋し、分析を行いました。

  1. 接続最大遅延時間の設定
    再接続試行時の最大遅延時間を設定する部分。
public class ConnectionFactoryBuilder {
    // 省略

    /**
     * Set the maximum reconnect delay.
     */
    public ConnectionFactoryBuilder setMaxReconnectDelay(long to) {
        assert to > 0 : "Reconnect delay must be a positive number";
        maxReconnectDelay = to;
        return this;
    }

    // 省略
}

2.最大遅延時間の単位
maxReconnectDelayは秒単位で設定され、ミリ秒に変換されています。

public class MemcachedConnection extends SpyThread {
    // 省略

    maxDelay = TimeUnit.SECONDS.toMillis(f.getMaxReconnectDelay());

    // 省略
}

3 .再接続試行間隔の計算式
再接続試行間隔は、ノードに対する再接続試行の回数を取得した後、2の再接続試行回数乗を計算し、ミリ秒に変換して最小値を取ることで決定されます。

public class MemcachedConnection extends SpyThread {
    // 省略

    protected void queueReconnect(final MemcachedNode node) {
        // 省略
        long delay = (long) Math.min(maxDelay, Math.pow(2, node.getReconnectCount()) * 1000);
        // 省略
    }

    // 省略
}

調査結果

上記のソースコードから、SpyMemcachedが指数バックオフ戦略を採用していることが確認できました。具体的には、再接続試行間隔が以下のように計算されています:

再接続試行回数が0回目の場合:

delay = min(maxDelay, 2^0 * 1000) = min(maxDelay, 1000ms)
初回の再接続試行間隔は1秒です。
再接続試行回数が1回目の場合:

delay = min(maxDelay, 2^1 * 1000) = min(maxDelay, 2000ms)
2回目の再接続試行間隔は2秒です。
再接続試行回数が2回目以降の場合:

delay = min(maxDelay, 2^2 * 1000) = min(maxDelay, 4000ms)
しかし、maxReconnectDelayが2秒(2000ms)に設定されているため、3回目以降の再接続試行間隔も2秒に固定されます。

結論

SpyMemcachedは、再接続試行時に指数バックオフ戦略を採用しています。ただし、maxReconnectDelayが2秒に設定されているため、再接続試行間隔は初回が1秒、2回目以降は2秒に固定されます。この設定により、再接続試行が過度に頻繁に行われることを防ぎ、システムへの負荷を軽減しています。

参考資料

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up

Qiita Advent Calendar is held!

Qiita Advent Calendar is an article posting event where you post articles by filling a calendar 🎅

Some calendars come with gifts and some gifts are drawn from all calendars 👀

Please tie the article to your calendar and let's enjoy Christmas together!

0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?