ちゃんるいすのブログ

オタクエンジニアの雑記

Go で Elasticache の Auto Discovery に対応する


PHP や、.NET の memcached クライアントは、AWS 公式で Auto Discovery に対応したライブラリを出してるけど Go にはない。
ので Go で書いてみた。

configuration endpoint を叩いて、ノードのエンドポイントを取得するまで。

↑ のように configuration endpoint を叩いて、ノードのリストを in-memory な KVS に保存しといて、memcached にアクセスする際にはその KVS から持ってくる。
ノードリストの更新は go-scheduler とかで定期的に KVS を更新していったら良いと思う。

consistent hashing を実現するのに良いライブラリ
github.com

ノードの増減も対応している

memcacheServers := []string{"192.168.0.246:11212",
                            "192.168.0.247:11212",
                            "192.168.0.249:11212"}

ring := hashring.New(memcacheServers)
ring = ring.RemoveNode("192.168.0.246:11212")
ring = ring.AddNode("192.168.0.250:11212")
server, _ := ring.GetNode("my_key")

これを使えば、in-memory KVS も不要に!!!