質問

多くの質問があるので、開発とテストの両方の仮想化の長所と短所について尋ねてください。

私の質問は微妙に異なります - 仮想化が一般的である世界では、仮想化された環境に展開される可能性のあるソフトウェアを作成する際にプログラマーが考慮すべき事柄は何ですか?私の最初の考えのいくつかは次のとおりです。

  1. アプリケーションの別のインスタンスが実行されているかどうかを検出します
  2. ハードウェアとの通信(物理/仮想)
  3. リソーススロットリング(シングルCPU VMで実行されているマルチコアCPU用のアプリ)

他に何か?

役に立ちましたか?

解決

基本のほとんどは、3つの広いポイントでカバーされています。気をつけて:

  • ハードウェア通信関連の問題。ディスクアクセス速度は大きく異なります(そして、異常に高い極端な場合があります - ディスク書き込みの途中で3日間シャットダウンされているVMを想像してください...)。ネットワークアクセスは、異常な応答で中断する場合があります
  • 派手なポインター算術。それを避けるようにしてください
  • 異常に珍しい低レベル/アセンブリの指示に大きく依存している
  • 機械時計への依存。あなたが時計に送っている通話、および時間間隔は、VMで実行するときに定期的に異常な値を返すことができることを忘れないでください
  • 単一のCPUアプリは、複数のCPUマシンで実行されていることに気付くかもしれません。 盗む作業
  • コーナーケースと異常な障害モードがはるかに一般的です。仮想マシンのように、実際のマシンでの通信の途中でネットワークカードが消えることを心配する必要はないかもしれません
  • リソースの手動管理(メモリ、ディスクなど...)。作業が自動化すればするほど、仮想環境はそれを処理することになる可能性が高くなります。たとえば、Cでアプリケーションを書く代わりに、メモリ管理されたタイプの言語/環境を使用する方が良いかもしれません。

他のヒント

私の経験には、本当に気にしなければならないことがいくつかあります。

  • CPU時間不足のためにアプリケーションが失敗しないでください(つまり、タイムアウトをタイトすぎます)

  • 背景でタスクを実行するために常に優先度の高いプロセスを使用しないでください

  • 時計は不均一に実行される場合があります

  • OSがシステムの負荷について言っていることをトラスしないでください

他のほぼすべての問題は、アプリケーションによってはなく、Virtualizer、ホストOS、またはお好みのSYS-ADMIN :-)によって処理されるべきではありません。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top