在上篇文章里(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相信大家都有目共睹。它是架构/人的能力的问题,还是语言/平台的问题?)

(转)谈谈用ASP.NET开发的大型网站有哪些架构方式(成本)的更多相关文章

  1. 谈谈用ASP.NET开发的大型网站有哪些架构方式(成本)

    在上篇文章里(http://www.cnblogs.com/ms0017/archive/2011/07/26/2117676.html),列举了国内外用ASP.NET开发的大型网站有哪些.最后提到了 ...

  2. ASP.NET开发的大型网站有哪些架构方式

    谈谈用ASP.NET开发的大型网站有哪些架构方式(成本) 在上篇文章里(http://www.cnblogs.com/ms0017/archive/2011/07/26/2117676.html),列 ...

  3. 基于微软平台IIS/ASP.NET开发的大型网站有哪些呢?

    首先说明一下,本文绝不是要说Microsoft平台多么好,多么牛.只是要提醒一些LAMP/JAVA平台下的同志们,微软平台不至于像你们说的,和想象的那么不堪!只是你们自己不知道而已.同时,也希望广大M ...

  4. 基于微软平台IIS/ASP.NET开发的大型网站有哪些?

    首先说明一下,本文绝不是要说Microsoft平台多么好,多么牛.只是要提醒一些LAMP/Java平台下的同志们,微软平台不至于像你们说的,和想象的那么不堪!只是你们自己不知道而已.同时,也希望广大M ...

  5. (转)基于微软平台IIS/ASP.NET开发的大型网站有哪些?

    首先说明一下,本文绝不是要说Microsoft平台多么好,多么牛.只是要提醒一些LAMP/JAVA平台下的同志们,微软平台不至于像你们说的,和想象的那么不堪!只是你们自己不知道而已.同时,也希望广大M ...

  6. .NET开发的大型网站列表、各大公司.NET职位精选,C#王者归来

    简洁.优雅.高效的C#语言,神一样的C#创始人Anders Hejlsberg,async/await编译器级异步语法,N年前就有的lambda表达式,.NET Native媲美C++的原生编译性能, ...

  7. 2018 dnc .NET Core、.NET开发的大型网站列表、各大公司.NET职位精选,C#王者归来

    简洁.优雅.高效的C#语言,神一样的C#创始人Anders Hejlsberg,async/await编译器级异步语法,N年前就有的lambda表达式,.NET Native媲美C++的原生编译性能, ...

  8. Mysql在大型网站的应用架构演变

    原创文章,转载请注明: 转载自http://www.cnblogs.com/Creator/本文链接地址: Mysql在大型网站的应用架构演变 本文已经被多处转载,包括CSDN推荐以及码农周刊等等,阅 ...

  9. 转:Mysql在大型网站的应用架构演变

    原文来自于:http://www.cnblogs.com/Creator/p/3776110.html 原创文章,转载请注明: 转载自http://www.cnblogs.com/Creator/本文 ...

随机推荐

  1. Python项目读取配置的几种方式

    1. 将配置写在Python文件中 配置文件(config.py 或 settings.py) 通常放置在程序源代码的目录,方便引用 配置文件 # settings.py class Config(o ...

  2. JavaScript Date日期对象以及日期格式化方法

    前言 Date对象是javascript语言中内置的数据类型,用于提供日期和时间的操作接口.Date对象是在早期java中的java.util.Date类基础上创建的,为此,Date类型使用自UTC1 ...

  3. 使用SIGALARM为connect设置超时

    static void connect_alarm(int); int connect_timeo(int sockfd, const SA *saptr, socklen_t salen, int ...

  4. JS实现定时任务,每隔N秒请求后台——setInterval定时和ajax请求

    DiGui = function (param) { $.ajax({ success: function (returnValue) { window.setInterval("fnSet ...

  5. Dijkstra算法的C++实现

    Dijkstra算法是在图中寻找两顶点最短路径的算法.   下面以下图有向图为例,说明其基本思想. 上图为转化为邻接矩阵存储:     现在我要寻找1点到其他点的最短距离以及路径: a)1点到各点的距 ...

  6. Educational Codeforces Round 55 (Rated for Div. 2)

    D. Maximum Diameter Graph 题意 给出每个点的最大度,构造直径尽可能长的树 思路 让度数大于$1$的点构成链,考虑是否能在链的两端加度为$1$的点 代码 #include &l ...

  7. Java并发之Thread类的使用

    一.线程的几种状态 线程从创建到最终的消亡,要经历若干个状态.一般来说,线程包括以下这几个状态:创建(new).就绪(runnable).运行(running).阻塞(blocked).time wa ...

  8. JQuery Advanced

    1.Jquery Utility <1> Type & Function & setTimeOut <!DOCTYPE html> <html lang= ...

  9. Python 概念小屋

     Python 中的 if __name__ == '__main__' 该如何理解 python多进程的理解 multiprocessing Process join run      

  10. 可持久化 trie 的简单入门

    可持久化 $trie$  ....又是一个表里不一的东西..... 可持久化 $trie$  的介绍: 和主席树类似的,其实可持久化就是体现在前缀信息的维护上(搞不懂这怎么就叫做可持久化了...) $ ...