在上篇文章里(http://www.cnblogs.com/ms0017/archive/2011/07/26/2117676.html),列举了国内外用ASP.NET开发的大型网站有哪些。最后提到了用.NET开发的大型网站和LAMP/JAVA平台的成本比较。其实在很多时候,收费的不一定就比免费的成本更高。因为开发一个网站要使用哪个平台的技术更合适,需要考虑很多种情况(除了开发技术本身,还要考虑人工,开发效率,时间,后续的支持,维护等等),要综合计算成本才行。微软平台本身虽然是收费的,但总体的成本并非一定比LAMP/JAVA高,上篇文章列举的国内外的那么多基于ASP.NET开发的大型网站就是例证。尤其是在开发效率上,无论是C#开发语言,还是免费的开发工具(Visual Studio Express,或者MonoDevelop/SharpDevelop),.NET明显比其他两个平台更胜一筹。而这一点正是互联网企业所需要的。效率就是生产力。并且,由于有Mono(http://mono-project.org/)这个开源平台的存在,.NET技术也可以在linux/BSD等开源服务器上使用。使.NET完全可以实现跨平台应用。据此,我们可以分windows/linux两种方式来架构我们的ASP.NET网站:
一、Windows平台
在Windows平台下开发大型网站,很多人首先想到的是Microsoft软件高昂的许可费,觉得成本一定很高。其实,这里有个误区。我们开发ASP.NET网站,web服务器完全可以用Windows server的WEB版本windows web server 2003/2008,它们并不贵(参考http://hi.baidu.com/slmt/blog/item/d1533a12a6cc335af919b863.html,才3k多rmb。并且注意了,一个系统是一次性买,买了可以用N年,现在还有很多大型网站在用win2003,想想已经用了多少年?而人员工资则是月付,几年下来成本也很高)。贵的地方,应该是SQLServer数据库和支持它的windows server企业版。它们确实很贵。但我们开发网站不一定非要用SQLServer啊。数据库可以使用在linux下部署mysql,postgresql等开源数据库,并且也可以考虑用mongodb等开源NOSQL数据库。一般的中大型网站有十几台web服务器就足够了(这里有2013年底的Stack Overflow服务器数据可参考),也就是3w多人民币而已啊!对于Stack Overflow这种规模的网站,这点钱应该也不算什么了吧。当然,如果你真能做到像myspace那种超大型的.NET网站,你应该可以直接找微软要优惠价来批量购买了。呵呵。
二、Linux平台
如果真的不肯在服务器上花一分钱,就要用完全免费的。我劝你根本不必因此而放弃.NET强大的生产力,而选择其他平台,因为还有Mono。Mono现在已是suse,ubuntu,debian等linux发行版中的默认安装包(apt-get install mono-complete),并且ubuntu本身就有很多代码是用c#写的。你可以通过类似Linux+Apache/Nginx+Mono的组合(或者用Jexus web server)来代替Windows+IIS来架构完全免费的ASP.NET WEB SERVER。目前国内外也有了很多基于mono开发的网站案例,如:
http://www.stockren.com/http://www.msannu.cn/(此外,还有像Unity3D,Xamarin等更多国外知名公司在基于mono开发应用)
在linux上架设mono的方法有很多,可以参考如下博文:
配置linux(apache) + mono 下运行 asp.net
http://www.cnblogs.com/hcl0208/archive/2010/10/25/1860173.html
Ubuntu10.10下Mono2.10+Nginx+fastcgi 部署asp.net网站
http://www.cnblogs.com/xiaogangqq123/archive/2011/02/28/1967345.html
三、补充:
见不少同学反映本文不够给力,没有真正的提到实际的架构,而只是泛泛而谈windows和linux。其实关于大型网站架构的文章网上有太多太多了。如下图,是国内某基于asp.net的大型网站的架构设计图,其实不管是.net还是java/LAMP,不管什么平台,道理都一样。(大图)
在本架构图中,如果把iis替换成apache,SqlServer替换成mysql,也一样成立。合理的架构是跟平台无关的。最看不惯的是某些业内所谓的高手,说大型网站用asp.net不行,没有java/LAMP好。相信看了这个架构图,再想想bing,hotmail,myspace,match,qidian,dangdang,m18,vancl等等基于.net开发的大型网站案例,就应该闭上他们的嘴!大型网站的开发,人的能力和合理的架构才是关键所在!(最近一个反例很能说明问题:用java开发的www.12306.cn相信大家都有目共睹。它是架构/人的能力的问题,还是语言/平台的问题?)