始まり
今日は以下のことをやりました。
- TTLでキャッシュが削除
- Maglev Hashingの実装
- Forwarderの実装
TTLでキャッシュを削除
自分で作っていたlrucacheだとttlの実装が難しそうで、しかもmuxなどの実装をしなくてはならず、それは難しそうだったので、golang-lruを使用することにしました。
このlrucacheだと、Genericsで実装されていて、すごく使いやすくて、すぐに移行することができました。
Maglev Hashingの実装
実際にMaglev Hashingを実装しました。
工夫した点としては、参考にしたMaglev Hashingでは、配列でしかも昇順であることが必須だった部分をmapで実装することにより、
O(1)の計算量で、特定のバックエンドがダウンしているかどうかわかるようにしたところです。
Forwarderの実装
Maglev Hashingが実装できたので、Forwarderの実装にも着手しました。
すごくシンプルな実装なので、飛んできたURLを見て、Maglev Hashingを使ってバックエンドを求めて、そこに対してリバースプロキシするだけです。もしかしたら、ここでもキャッシュを行ったりすると、階層構造になって良かったりするのかな?わからない。
終わり
やりたいことリスト
- リバースプロキシとは何かを理解する
- Dockerコンテナで開発環境を作る
- LRUキャッシュ
- リバースプロキシにキャッシュキー生成関数を実装
- リバースプロキシがコンテンツをキャッシュしてキャッシュを返却するようにする。
- TTLをつける
- CacheNodeの上位層を作成する
- Consistent Hashing (Maglev Hashing)
- Cache Control Headerを解釈できるようにする