Dockerビルドに隠された起動時間トリック ノート

Dockerビルドに隠された起動時間トリック

Kubernetes上でサービスを実行しているすべてのJava開発者は、この光景を目にしたことがあるだろう。トラフィックが急増し、オートスケーラーがポッドを追加し、そして誰もが待つ。コンテナは2秒で起動する。アプリケーションはさらに12秒間準備ができていない。その10秒間、既存のポッドが追加の負荷を吸収し、レイテンシが上昇し、状況が悪化すると、オートスケーラーはパニックを起こし、準備ができていないポッドをさらに追加する。私は長年、Spring Bootの起動時間を、天候のように、避けられないものとして扱ってきた。しかし、JVMにはJava 12からその大部分を修正する機能があり、Docker内で見事に機能するにもかかわらず、ほとんど誰もそれをイメージに組み込んでいないことを知った。それはClass Data Sharing、略してCDSと呼ばれ、この記事ではDockerビルドでそれを実現する方法を示す。