PR

コンテナに入れるコンポーネントやデータを徹底的に軽量化

 こうした利点があるとはいえ、全部入りコンテナを作るのは容易ではない。コンテナ1個のCPUやメモリーのサイズが大きくなるからだ。特に問題になるのはRDB。従来システムではMySQLを用いており、そのままAPサーバーやキャッシュなどと合わせて全部入りコンテナを作るのは現実的ではなかったという。

 そこで樽石氏は、コンテナに入れるコンポーネントの徹底的な軽量化を図った。RDBにはオープンソースソフト(OSS)のSQLiteを用いたうえで、冗長なデータを間引いたり圧縮したりしてデータサイズを減らした。さらに全文検索エンジンには軽量なHyper Estraierを用いた。なおWebサーバーのApache HTTP Server、PHPフレームワークのZend Framework、インメモリーキャッシュのRedisは従来システムと同じである。

 これらの軽量化により、1vCPC、0.5ギガバイトメモリーというAWSの最小サイズ(t2.nano)のインスタンス(コンテナ)に全てのコンポーネントを入れることに成功した(ディスク容量は8ギガバイト)。Amazon Linuxを搭載したt2.nanoの料金は、8GBのディスクを合わせても1カ月当たり700円ほど(AWS東京リージョン、オンデマンドインスタンス、1ドル106円換算、税込)。負荷に応じてCPU性能を時間無制限で高めるオプション(Unlimited)を有効にしており、別途その料金が発生するが、AWSの他のインスタンスタイプよりコストパフォーマンスが高い。

 現状では従来システムで大部分のリクエストを処理しており、新参照系に流しているリクエストは一部にすぎない。今後、新参照系で大部分のリクエストを処理するようになった場合、基盤コストは30分の1程度に下げられるという。

 全部入りコンテナにして、CPUやメモリーというリソースを無駄なく使えるようにしたこと。コンテナに入れるコンポーネントを大幅に軽量化したこと。コストパフォーマンスの高いt2.nanoという小さいインスタンスを使えるようにしたことが、コスト削減の主な要因だ。

 Rettyではこのほかにも、独自のキャッシュ機構で全部入りコンテナの性能を上げたり、運用保守作業を軽減したりするための工夫を講じている。それは改めて別の記事で紹介する予定だ。