仮想化技術は便利だが、思わぬ落とし穴があることを実感したことについて書いてみます。今回のネタは最近開発しているシステムで発生した問題です。近年はコンピュータシステムを仮想化基盤上に実装することも増えています。仮想化技術自体は、それなりに歴史を積んできていて、いわゆる枯れてきた技術ですが、それでも思わぬ落とし穴に遭遇することを身をもって体験しました。仮想化技術は、コンピュータリソースが潤沢になってきたことに伴いそれらをうまい具合に分割して、一つのコンピュータ上に独立した複数のシステムを持たせることによりリソースの有効活用を意図しています。実際多くのコンピュータシステムで仮想化技術が用いられて、現在は運用されています。有名どころでいえば商用のレンタルサーバなどがそれにあたります。いった具合で一定の成功を収めているわけですが、やはりホストの上にゲストが存在するということでどこかしら完全に独立にできない部分は出るようです。今回直面した問題は、ホストとゲストの時刻同期です。結論から言うとCPUのクロックをホストとゲストで同期しているため、ホスト/ゲストの時刻修正が反対側に波及することが発生しました。この問題自体は、限られた条件でしか発生しないと考えています。時刻同期の方式自体は大きく分けて、一括同期させる微修正を積み重ねて同期させるかの方法に分かれます。一括同期というのは、文字通り配信サーバの時刻に自システムの時刻を一括で合わせる方法です。時刻ずれが大きい場合に実行されます。微修正を積み重ねて同期させる方法は、自システムの時刻を徐々に早めるor遅くすることで徐々に正規の時刻に合わせこみます。こちらは時刻の飛びがなく、ログなどの面で有効です。通常はシステムが時刻同期を常に行っているため大きな時刻ずれは発生しないことから、実行される方法は微修正の積み重ねとなります。問題が発生したのは、微修正の積み重ね方式を大きく時刻がずれているにも関わらず実行した時です。仮想化時に、ホストorゲストのどちらかが時刻が正確であり、もう片方がある程度ずれている場合に、上記の方法で時刻同期を実行するとどうなるか。時刻同期が実行されるため、徐々に時刻は修正されます。ホストとゲストはCPUのクロックを共有しているため、一方の修正は時刻が正常なもう片方へ影響を及ぼします。この修正は時刻のずれが大きいほど、積み上げが多くなるため元々正常であった側へ与える影響が大きくなります。そのため、正常であった方の時刻が今度は逆にずらされるという問題が発生します。これが今回は発生した問題の経緯です。一括同期を使うほうを推奨すべき?今回の問題は、一応ある程度の時刻ずれが発生していた場合、必ず一括同期を実行させるという方式を組み込むことで回避できました。この方法が最善かどうかは議論が必要ですが、今のところ際立った問題は発生していません。あとがき今回は仮想化技術という、ある程度成熟している技術において発生した問題について記載しました。ホストとゲストのリソースは独立していると思い込んでいましたが、ホストの上にゲストが立っているという前提は厳然としてあります。開発上は何らかの影響をお互いに受けるというは、あらためて認識しながら作りこみを行わないと思わぬバグを発生させる、ということを感じました。その2Docker環境構築に関するトラブル談のその2です。見てない方は前回をご覧ください。techDocker環境構築の雑記7月から会社の関連で急遽Dockerを利用することになった。はまったりしたので、あとで見返すためにもはまった内容と解決方法を記録したいと思います。年も変わったので、技術ネタを投稿します。管理人は、技術屋の端くれなので、新規の技術に興味があります。いうわけで、個人的に2023年の注目の技術を紹介します。追加編その1認証付きのページを突破できるように改造したのでシリーズに追加。企画が終了したので、後々の利便性も考えてまとめておきます。この投稿は、pythonで各新聞社の社説を楽して収集するために作成したプログラムの作成過程をまとめています。検索1勉強のために、各社の社説を収集してデータベース化する久々にプログラムネタで行きます。データベースを操作する練習と、時事の勉強を兼ねて新聞社の社説を毎日取得してデータベースに格納するプログラムを目指します。...2ソフトウェア開発の経験(仮想化時の時刻ずれ)技術ネタ。仮想化技術は便利だが、思わぬ落とし穴があることを実感したことについて書いてみます。今回のネタは最近開発しているシステムで発生した問題です。