虚拟化应用程序的编程注意事项

时间:2010-11-29 09:10:47

标签: virtualization design-consideration

有很多关于SO的问题,询问虚拟化在开发和测试方面的优缺点。

我的问题略有不同 - 在虚拟化普遍存在的世界中,程序员在编写可能部署到虚拟化环境中的软件时应该考虑哪些事项?我最初的一些想法是:

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

2 个答案:

答案 0 :(得分:3)

您的大部分基础都包含三个要点。注意:

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

答案 1 :(得分:1)

根据我的经验,你真的只需要关心几件事情:

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

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

  • 时钟可能不均匀地运行

  • 不要抨击操作系统对系统负载的说法

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