Kawababa

始まり

5/6と5/7をまとめて書きます。

この二日でやったことは、以下の通りです。

LRUCacheの作り直しについて

LRUCacheの効率が悪すぎるので、作り直しました。 追加、追い出し、検索の全てがO(1)で行えるようになりました。

ただ、TTLの実装をしないといけないのと、
実際はコンテンツそのもののサイズにも注意しないといけないと思うので、
そこもリバースプロキシを使うようになってから実装していきたい。

ベンチマークで見てみる

古い方のLRUCache実装のベンチマーク

新しい方のLRUCache実装のベンチマーク

実行時間が大きく変わっているのがわかる。(それよりも、ヒット率が終わっていることの方が気になる。なんで???)

benchstatの結果

100倍ぐらい効率が良くなっていることがわかる。

Docker+Goで簡単なリバースプロキシを実装&テスト

オリジンサーバコンテナとリバースプロキシコンテナを立てて、とりあえず通信できることを確認した。

難しいところは色々あったが、とりあえずDockerfileとcompose.ymlをなんとなく理解して、使えるようになった。
明日からは、実際にX-Forwarded-Forなどのプロキシならではのヘッダフィールドをいじる

オリジンサーバ:9000とリバースプロキシサーバ1:5001とリバースプロキシサーバ2:5002を用意した。

リバースプロキシサーバ1:5001 -> オリジンサーバ:9000

リバースプロキシサーバ2:5002 -> オリジンサーバ:9000
で通信ができるようになった。

Googleのロードバランサーの実装論文を読む

平易な英語ではあるので、読みやすい。英語を勉強してよかったと心から思っている。 現在3章の途中まで読んでいるが、複雑なシステムなんだなってことしかわからない。 3.4でConsistent Hashingの章があるので、そこだけ読んでしまって、別の論文に一回手を出そうかなと思う。

セキュリティ関係のリバースプロキシの知識がないので、そこを補強できるものが読めると一番嬉しい。 とはいえ、あと一週間ほどで実装しなければいけないものも多いので、ここにあまり時間はかけてられないか。

終わり

やりたいことリスト

なんとか形になろうとしている感じはするので、諦めずに続ける。
あと、競技プログラミングをやってたのも結構よかった。(まだ茶色だけど)
多分Consistent HashingにはBinary Treeを使う必要があるんだけど、あーあれねってなる。