私がしたことはbcryptをいじっていただけだったのでチームメンバーの力が如何に素晴らしいかがわかります。改善について実は去年の本戦でもbcryptが出題されていました。その時はGoアプリのCPUはネックになっていないため、そこをどんなに改善してもスコアが上がらない、という構成でした。昨年はここを改善しようとして沼にハマって大敗しました。強めの主張をしてきました。処理が入るようになり、bcryptの処理が支配的かつCPUを大量に消費するようになります。これの直し方は以下の2つがあります。こちらが持っているハッシュ化済みのパスワードからもとのパスワードは推測できないので、ベンチマーカーからのログインを盗聴してハッシュアルゴリズムを変更し、徐々にコスト10のbcryptを取り除いていく。本質的に改善不可能な処理なので、ログイン専用サーバーを構築し、処理を分散させる。私は最初は1の方法を取ったのですが、実はログインはそんなに成功しないことが分かりました。そのため試算の結果では数十回ベンチを回す必要がありそうでした*1。加えてこの盗聴作業は楽しくなかったため、我々のチームはログイン専用サーバーを構築することにしました。17時前、複数台にした途端点数が跳ね上がりました。「Goのbcryptは遅い」という主張がたまに目につくようになります。そのためGoのbcryptとくらべて速いのでは、という主張です。一理あったのでGo/Python/Rubyの3バージョンで雑に計測してみます*2。コードはこちら結果、Go実装は15秒,Python実装は14秒,Ruby実装は13秒でした。Go実装はちょっとだけ遅いものの、そこまで差は無いように見えます*3*4。どの言語を選んでもbcryptと向き合う必要がありそうです。月別アーカイブはてなブログをはじめよう!CHY72さんは、はてなブログを使っています。ブログを報告するスターをつけました引用をストックしましたストック一覧を見る閉じる引用するにはまずログインしてくださいログイン閉じる引用をストックできませんでした。再度お試しください閉じる限定公開記事のため引用できません。