Skip to content

Instantly share code, notes, and snippets.

@mumumu
Last active December 25, 2015 16:17
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save mumumu/26bedb23b6271a6d679d to your computer and use it in GitHub Desktop.
Save mumumu/26bedb23b6271a6d679d to your computer and use it in GitHub Desktop.
redis-py-cluster READONLY mode implementation considerations.

redis-py-cluster READONLY モード 対応

  • Redis Cluster の Python クライアントに READONLY モードを実装する
  • http://redis.io/topics/cluster-spec#scaling-reads-using-slave-nodes
  • デフォルトでは、Redis Cluster の Slave には直接アクセスできない
  • リダイレクトされるだけ
  • それを、READONLY な接続であると宣言することで、アクセスできるようにする

考慮しなければならないこと

  • READONLY mode で MOVE となるコマンドとそうでないコマンドを区別する必要があるか?
  • どういうコマンドを送ろうと、リダイレクトするなり応答を返すかについてはサーバが適切な振る舞いをしてくれると考えられる
  • READONLY モードでは Read系のコマンドでない場合はリダイレクトの対象
  • https://github.com/antirez/redis/blob/01888d1e587c681e80117d7457b0c643a0719a21/src/cluster.c#L4925
  • 区別する必要があるとすると、その区別は Redis のソースコードを読んだ方が早い
  • https://github.com/antirez/redis/blob/01888d1e587c681e80117d7457b0c643a0719a21/src/redis.c#L123
  • READONLY mode のとき、redis-py-cluster 自体はどう振る舞うべきか?
  • GET 系であろうとSET系であろうと、選ばれたnodeで既存のimplを実行するだけ。
  • なので、node をどう選ぶかだけに集中すればよいと思われる
  • READONLY mode の時、ノードをどう選べばよいか?
  • 該当する master と slave をランダムに選べばよい
  • できれば同確率で

READONLY モード対応に当たっての変更箇所

@mumumu
Copy link
Author

mumumu commented Dec 25, 2015

Grokzen/redis-py-cluster#76

この gist の内容は上のPRとして結実し、取り込まれました(*´~`)

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment