我有一个.NET应用程序运行在专用Windows服务器上。 它不需要很多资源,服务器花费我们很多钱。 所以我们决定把这个应用程序移到我们主要的Linux服务器上。
我知道在Linux上运行windows程序有很多种方法 – 酒,单声道,Xen和Virtual Box等许多虚拟化技术。 我想知道哪些是最适合这种情况的,当我需要在Linux机器上运行一个lightweights的Windows应用程序时,它已经拥有了自己的东西。
那么,单声道可能是最轻的select,与最好的系统集成。 它也有兼容性问题的风险最高。
我的build议:
先尝试单声道。 如果无法正常工作,则可能需要使用虚拟化。 我听说过关于Xen的好东西,但其他人也很好。 如果有的话,尝试使用已经使用的虚拟化解决scheme可能是有意义的。
对于服务器应用来说,葡萄酒不是一个好的select。
单声道可能是最好的select,如果应用程序目前可以运行单声道目前提供的.Net框架的子集。 如果应用程序不是你的,那么这将不是一个好的方法,因为你不可能得到你的供应商的支持,除非他们正式支持单声道。 尽pipe如此,这将是一个比虚拟化更轻的select。
我的直觉反应是使用虚拟机解决scheme,尽pipe这可能需要额外的系统资源。 VMWare有一个工具可以将物理Windows机器迁移到我以前成功使用的虚拟机(我们遇到的唯一问题是迁移大型机器所需的时间,之后必须重新激活Windows),所以这可能是您的阻力最小的path。
最好的方法来攻击它可能会被扣除,所以这里是我将采取的单音步骤:
我用Mono取得了一些成功(还有一些失败)。
作为开始Mono有MoMA :
Mono Migration Analyzer(MoMA)工具可帮助您识别将.Net应用程序移植到Mono时可能遇到的问题。 它有助于查明特定于平台的调用(P / Invoke)以及Mono项目尚不支持的区域。
至less,这将告诉你,它不会在没有变化的单声道工作。 如果您有权访问源代码,或者您可能能够更改它以使其可以正常工作,尽pipe这会导致更大的testing处罚。
如果你不能使用单声道,你应该使用虚拟化。
我3年以来一直使用xen – 效果很好。
但是使用libvirt和virt-manager的kvm很容易安装 – 试试看。