Twemproxyは、プロキシ・サーバーで、あなたのMemcachedあるいはRedisサーバーへのオープン接続数を減らすことができる。
wemproxyが何の役に立つかといえば、以下ができることである。
- プロキシとして機能し、キャッシュサーバーへの接続数を減らせる
- データを自動的に複数のキャッシュサーバー間に分散する
- 異なる戦略よる一貫したハッシュとハッシュ機能をサポートする
- 障害時にノードを停止できるように設定できる
- 複数のインスタンスで走り、クライアントが最初に利用できるプロキシサーバーに接続できる
- リクエストのパイプラインとバッチ化ができるのでラウンドトリップを減らせる
RedisのクリエータであるSalvatore Sanfilippo(@antirez)氏は、記事を書いており 、その中でいかにこれによってRedisクラスタがRedis-clusterフィーチャが利用できる前でも、ほとんど場合に大きなパフォーマンスを失わずに機能できるかを説明している。
Twemproxy で素晴らしいのは、障害時にノードを停止でき、しばらくしてからリトライすることもできる、あるいは特定のキー→サーバーのマップに固執するように、設定できることです。すなわち、 Redisが、データストア(ノード排出を無効にして)として使っている時にはRedisデータセットを分散するのにも、キャッシュとしてRedisを使っている時に安価な(単純な)高可用性のためにノード排出を可能にするにも、両方に適していることを意味しています。
これは非常に速いです。本当に速いです。ほとんどRedisに直接通信するぐらいに速いです。最悪でも20%パフォーマンスが失う程度だと言えます。
言わせてもらえば、 パフォーマンスに関する唯一の課題は、コマンドがインスタンス間で分散されている時に、MGETに多少改善する程度なことです。
TwemproxyはMemcached をサポートして、Twitter により今年の早い時期にオープンソース化された。最近 Redisのサポートが追加された。Twitter はキャッシュサーバーを大規模に使って、1秒に30万ツイートを配信している。もっと知りたければ、 Twitterにおけるリアルタイム配信アーキテクチャ を見ると良い。