在Linux上运行ASP.Net与标准的以Microsoft为中心的解决方案相比,有何不同?

9
我知道可以使用MonoApache在Linux上开发和托管ASP.Net网站,但我想知道它的工作效果如何,是否值得麻烦?我更喜欢开源,但对于这个项目,我希望有最快、最简单、最可靠的解决方案。
我将要建立的网站将是一个相当基本的ASP.Net网站,使用MySQL
我想知道是否有其他人在像我这样的情况下使用过Mono,并且该项目进展如何。与使用面向Microsoft的解决方案相比,它是如何的?
我知道Mono仍然有一些不完整之处,但我希望我不需要它缺少的功能。
这个问题可能有点“两极分化”。大多数类似的问题似乎都有来自非常支持Microsoft或Linux的人的回答。我希望得到一些没有偏见的回答,最好是那些有使用经验的人。

这真的取决于你所说的简单ASP.NET网站是什么意思。你是自己托管吗? - Daniel Casserly
为什么不使用更符合您要求的东西呢?例如Ruby/PHP?特别是如果它将成为一个相当基本的网站(正如您所说的那样)。 - volpav
这个网站是为一家屋顶公司设计的,用于帮助他们计算估价。我会尽力使其看起来相当吸引人,但功能性是首要目标。 - ks78
关于托管,我正在考虑使用Amazon EC2实例。由于每天的点击量可能非常低,我认为可以使用微型实例,但如果必要的话,它可以升级到小型实例。 - ks78
我已经使用Linux(主要是Ubuntu)几年了,但这主要是一种爱好。我的职业生涯中大部分开发都是以微软为中心的,所以我想坚持使用ASP.Net,因为这是我最熟悉的。我只是希望在这个项目中将两者结合起来。此外,Linux Amazon EC2实例更便宜。 - ks78
3个回答

10

我大约一年半前从以微软为中心的解决方案转换,现在将所有的网站和Web项目托管在基于Linux/Mono/Apache/MySQL的虚拟服务器上(最初我使用nginx而非apache,但是由于mono-fastcgi-server会随机引起抖动,所以我选择了Apache作为Web服务器)。我可以总结一下我这种配置的(主观)经验:

  • 要适应Linux和微软的环境差异可能需要一些时间(如果你之前没有使用过Linux),但我不后悔这个决定。对我帮助很大的事情是为特定技术创建安装和配置过程(例如Mono并行环境,Apache虚拟主机配置,处理某些问题),这些过程大多数是可重复的并且可以自动化。

  • 您仍然可以使用Visual Studio开发应用程序,然后将其部署到Linux机器上。如果您使用这种方法,最好经常在Mono上测试您的应用程序以检查可能的不兼容性。

  • 我通过FTP部署Web应用程序,这可能是最简单的方法(也许WinSCP更容易,因为您不必设置FTP服务器,但这取决于您的偏好)。

  • 到目前为止,我遇到了两种使用Mono/Apache的情况,其中内存泄漏导致网站无法访问。这可能是由于我在旧的Mono安装中使用的Boehm垃圾回收器所导致的。在最新版本的mono上,我还没有遇到类似的问题,因为它使用了新的sgen GC。

  • 我最喜欢的是运行在Linux环境下的Mono与微软的东西相比,您不必一直点击进行管理任务。对于我来说,Shell是统一的管理界面,可以加快速度(如果你有一些经验)。


我很好奇,当你从Microsoft切换到Linux时,是否注意到了网站响应速度上的差异?还是两者基本相同? - ks78
2
我想说它们是完全一样的,但我还没有机会用更大的流量测试它。然而,在需要扩展系统时,这是一个很大的区别,如果你使用的是微软的解决方案,它可能会严重损害你的财务状况。另外,我不喜欢受到来自微软操作系统许可类型所限制的CPU核心数或内存数量的约束,因此基于Linux(或开源)的系统在这个领域几乎是更优越的。 - yojimbo87
+1 jimbo - 财务限制可能是一个问题。但如果你的网站开始带来更多的收入,你可以在基本负载平衡设置(F5)中添加Win2008服务器到Web集群中,甚至包括MySql集群。我唯一的问题是RavenDB在Linux上的生产运行效果不佳 :( - bbqchickenrobot

4
从我的经验来看,使用Mono托管ASP.NET非常容易和快速。我已经使用Mono ASP.NET MVC 1/2和MySQL以及PostgreSQL托管了多个项目,并由Apache mod_mono提供服务。
与在Windows Server上部署相比,在现代Linux发行版上部署Mono ASP.NET时,它已经提供了所有软件包,因此范围相当窄。唯一的缺点是您必须确保您的Web应用程序足够便携,以便进行IO访问,并且只需要很短的学习曲线和经验即可调试和发布您的项目。
要在Linux中部署我们的项目,如果您完全控制服务器,则可以使用版本控制(VS)例如Mercurial或Git,这很容易。如果您有更多的经验,则使用连续集成更好。我主要使用Mercurial,所以下面是我通常执行的步骤,但我认为对于Git而言,它几乎相似:
- 安装Mercurial,并配置mod_wsgi、hgweb.wsgi和hgwerb.config - 初始化VS repo并发布到hgweb.config,并配置hook以在推送时自动更新和调用xbuild进行构建 - 在mod_mono.conf中将repo(web部分)发布为mono应用程序 - 因此,您只需要在Visual Studio中编写代码,使用tortoiseHg提交和推送更改,而无需登录服务器(在您的repo hgrc中设置repo url、user和password)

1
如果您使用Amazon EC2,我的建议是使用通过http://susestudio.com/轻松生成的openSuSe映像,因为在我看来,openSuSe对于mono的支持非常好。 - Anton Hasan
谢谢。我一直在考虑使用Susestudio,尽管我以前从未使用过openSuSe。 - ks78
我最初认为SuseStudio是免费的,但显然不是。出于好奇,它要多少钱? - ks78
据我所知,SUSE Studio服务是免费的[FAQ |http://en.opensuse.org/openSUSE:SUSE_Studio_Faq#How_much_does_it_cost.3F],您可以直接使用,无需创建新用户进行注册,只需使用您的OpenID提供者帐户,例如Gmail和Yahoo。 - Anton Hasan

-2
请注意,尽管您可以通过Mono等方式在Linux上部署ASP,但如果您使用Microsoft IDE(如Visual Studio、WebMatrix或Visual Web Developer),您的许可证仅允许您在Microsoft服务器上部署这些内容!

1
Microsoft EULA没有设置这样的限制。请再次仔细查看。 - Lex Li

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接