3

SO上有很多问题询问虚拟化在开发和测试方面的利弊。

我的问题略有不同——在虚拟化司空见惯的世界里,程序员在编写可部署到虚拟化环境中的软件时应该考虑哪些事情?我最初的一些想法是:

  1. 检测您的应用程序的另一个实例是否正在运行
  2. 与硬件通信(物理/虚拟)
  3. 资源节流(为在单 CPU VM 上运行的多核 CPU 编写的应用程序)

还要别的吗?

4

2 回答 2

3

您已经掌握了三大要点所涵盖的大部分基础知识。注意:

  • 硬件通信相关问题。磁盘访问速度有很大不同(并且可能具有异常高的极端值 - 想象一个在磁盘写入过程中关闭 3 天的虚拟机......)。网络访问可能会因异常响应而中断
  • 花式指针算术。尽量避免它
  • 严重依赖异常罕见的低级/汇编指令
  • 依赖机器时钟。请记住,在 VM 上运行时,您对时钟和时间间隔进行的任何调用都可能会定期返回异常值
  • 单 CPU 应用程序可能会发现自己在多个 CPU 机器上运行,这些机器会做一些时髦的事情,比如Work Stealing
  • 极端情况和不寻常的故障模式更为常见。您可能不必担心网卡会在您在真机上的通信过程中消失,就像在虚拟机上一样
  • 手动管理资源(内存、磁盘等)。工作自动化程度越高,虚拟环境处理它的能力就越好。例如,您最好使用内存管理类型的语言/环境,而不是用 C 编写应用程序。
于 2010-12-13T05:51:24.800 回答
1

根据我的经验,您实际上只需要关心几件事:

  • 您的应用程序不应因为 CPU 时间不足而失败(即使用超时太紧)

  • 不要使用低优先级始终运行的进程在后台执行任务

  • 时钟可能运行不均匀

  • 不要相信操作系统关于系统负载的说法

几乎所有其他问题都不应由应用程序处理,而应由虚拟器、主机操作系统或您首选的系统管理员处理 :-)

于 2010-12-13T11:59:22.607 回答