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 も不要に!!!