哪个家伙说“网站去.Net化”?

来源:互联网 发布:域名抢注上哪个平台好 编辑:程序博客网 时间:2024/05/15 16:55
上个月,JavaEye创始人范凯robbin的一篇博客《对.NET系统架构改造的一点经验和教训》引起了大讨论,里面提到了京东“去.Net化”、“CSDN去.Net化”之类的词刺激到了一些人的神经,有的人在评论中破口大骂“.Net最牛逼,.Net搞不好是你技术不行”,有的人则骂“.Net就是垃圾,上不了大台面”。有些朋友还在微博上at我,问我“杨老师,.net是不是不行了,听说大网站都‘去.Net化’了”、“杨老师,关于‘去.Net化’你怎么看?”,所以我还是来谈谈所谓的“去.Net化”吧。
         其实只要认真看robbin的文章,就会知道他并不是在说“去.Net化”而是在说“怎样搭建合适的网站框架”。注意看这段话:
  • 数据层放弃SQL Server数据库和存储过程,全部迁移到Linux平台上的MySQL数据库上;
  • 缓存不再依赖.net自身提供的缓存机制,迁移到部署在Linux平台上的分布式的Redis上;
  • 服务之间的调用,避免使用.net自身专有协议,改成Restful的HTTP Web API调用;
  • 静态资源请求,不再让IIS自己处理,分离到Linux平台上的nginx去处理;
  • 需要读取的文件系统,也改成访问Linux平台上的分布式文件系统;
  • 部署.net代码的Windows服务器放在LVS后面,用LVS做负载均衡和故障切换;
  
    简单说来,就是单纯让.net做应用层的编程语言和框架,其他都交给Linux平台的开源解决方案。而.net框架单纯做应用层,无论ASP.net MVC的开发效率,还是.net CLR虚拟机的运行效率都非常好,目前我们单台Windows服务器上跑几百万的动态请求毫无压力,而且应用层架构是可以横向扩展的:如果请求负载非常高,只需要添加更多Windows服务器即可。总之,做到了扬长避短。

  熟悉大型互联网技术架构的人应该很容易的发现,这个重构过程其实就是一个“让合适的东西干合适的事情”这样一项工作:
  • 把过多业务逻辑写到存储过程中必然导致数据库服务器压力的增大,而且不利于负载均衡,因此去“存储过程”是必要的;
  • SQLServer实现集群的能力很差,用MYSQL之类的数据库是一个不错的选择;
  • 缓存还是用.Net内置的InProc缓存机制对于高并发的网站来讲是一个灾难,用Redis之类分布式缓存来代替是必然的过程;
  • 使用.Net Remoting之类的私有协议不利于异构系统集成,改成webservice、REST也是必须的;
  • 静态文件的请求也经过IIS有点太劳烦IIS了,扔给nginx才更合适;
  • Windows服务器的文件系统很不灵活,换成更加灵活的Linux下的分布式文件系统是聪明的;
  • 采用LVS、nginx之类做负载均衡也是最合适的。


          其实任何一个大型互联网基本都是这样一个架构:前端使用nginx等做负载均衡,使用Redis、memcached等做分布式缓存,使用数据库集群进行读写分离之类的优化,使用分布式文件系统处理图片等静态文件。         请问,使用PHP、Java等做web服务器开发的大型互联网,哪个使用JSP内置的Session对象做Session的,不都要换用redis吗?哪个把图片和php放到一个服务器的,不都放到文件服务器中吗?哪个一个apache服务器就可以扛起来的,不都是nginx之类的挡在前面做负载均衡的吗?  怎么不说“去php化”、“去java化”呢?要知道redis、memcached、ngix之类的可都不是java、php写的呀,一个java项目竟然用其他语言写的东西,难道不丢面子?
             其实一个大型的系统中,根据项目的不同特点来组合搭配不同的产品、组件是一个必然的过程,去了解一下这些系统中“混搭”是常见的现象。单一产品中提供能的功能只能满足普通项目的需求,要想满足复杂的项目,必须把这些产品中提供的一些傻瓜化的简单组件用更专业的组件来替换,就像做小项目php中的Session足够了,但是大项目必须用c/c++开发的memcached来替换。

         我前阵子我发了一个帖子《【分享】.Net有哪些大型项目、大型网站的案例?》 ,这个帖子中提到的.Net技术的大型网站绝大部分都是“混搭结构”的(这些网站中至少有10个有传智播客.Net培训班的学生,我都跟他们交流过他们的技术架构)。很奇怪的一件事情是,在Java、PHP社区中经常可以看到讨论这些“架构”的文章,但是在.Net社区中则很少见到有人分享这些东西。希望.Net社区中的技术大牛们以后能把这些经验多多分享,让更多的人能够了解这些技术并且在项目中应用这些技术,提升.Net社区讨论技术的层次,不要让.Net社区的人总是在讨论一些很初级的问题,最起码不要只是为了不同网页头尾统一就使用又笨又重的MasterPage(其实用一下shtml就可以了)、不要讨论个三层架构就认为是架构师了、不要弄个代码生成器就是高科技了……咱们也要真正的拥抱Best Practice、拥抱混搭。

         不希望这个博文又成为不同语言相互攻击的月经贴,希望大家讨论一些真正有用的东西。

 

公开课简介:
----------------------------------------------------------------------------------------------

公开课主题:      .Net大型网站开发:memcached    开课时间(6月17日晚上19:30至21:30
+ 公开课YY频道:   10150            
+ 讲 师:      马伦 (高级讲师) 讲师介绍

公开课软件环境:    1)Visual Studio 2010及以上版本   
                                   2)Memcached for windows 下载地址:点击下载  
百度网盘下载
+ 公开课听课密码:    见报名方式 ↓
请收听公开课的同学先安装YY!步骤请猛戳:YY听课教程

福利来喽~~!!!图片
      很多人在谈到.Net的时候都会说“.Net不能做大型网站的开发”,其实这是一个非常大的误解,很多人只会使用.Net中提供的内置的组件,这些组件是为了普通网站的开发而设置的,但并不适合于大型的网站的架构。

      大型系统不可能一切都是使用内置的简单架构能够完成的,大型的系统都需要根据不同项目的不同需求来科学的搭配不同的产品、组件形成项目的基础架构,这就是技术架构师要完成的工作,以Java为例,JSP中内置的Session也不适合于大型网站架构,因此很多大型网站都采用Memcached等来实现Session。

      而很多做.Net开发的人发现ASP.Net内置的Session不适合大型网站的时候,则只会抱怨“微软的东西不适合于大型网站呀!垃圾呀!”,对于这种“拉不出屎怪地球没引力”的人我们只能说:看我的!

      Memcached 是一个开源的高性能分布式缓存系统,百度、淘宝、天涯、迅雷等大型的网站架构中都有使用Memcached,本次公开课中,传智播客的马老师将会带领大家学习如何在ASP.Net中使用Memcached。

.Net有哪些大型项目、大型网站的案例?
http://net.itcast.cn/news/20130519/17431332055.shtml


报名方式: ----------------------------------------------------------------------------------------------

1、 分享此贴给自己的好友或群组
并回帖截图。 点击分享
2、 订阅QQ邮箱(成功订阅后会公布交流QQ群以及公开课听课密码)。 
3、 加入公开课群可以第一时间获得笔记代码等相关资料,并可以和我们的讲师亲密沟通。
尽管传智播客公开课对您来说是免费的,但是需要您付出时间,我们尊重每一个学习者,给您上公开课的老师都拥有四到五年以上开发经验,两年以上实际讲课  经验。我们郑重承诺:绝不把您当小白,让没有开发经历和授课经验的老师给您授课。



往期回顾: ----------------------------------------------------------------------------------------------
       大型互联网的服务器一般都是Linux等操作系统,借助于Mono技术可以让ASP.Net开发的网站脱离Windows运行在Linux平台下。5月19日,传智播客广州中心的邹老师带着大家学习了Mono技术,点击此处查看公开课视频教程下载


讲师风采: 

               马伦老师,资深软件工程师,曾任职于金和软件等知名公司。曾参与:电商后台项目、青海省公安厅电话值班系统、四川省公安厅数据联网             汇聚系统、四川省公安厅手机定位系统、南京市应急联动系统、丽水市三台合一警综综合处理系统、辽宁省短信报警系统、华科资金监管系 统、凌源市房管处网上售房系统等。对Spring.Net、NHibernate、Entity Framework、ASP.Net MVC、HTML5、WCF、数据库集群、分 布式应用集群、高性能读写NoSql等有深入研究。曾参与大型分布式高并发互联网项目设计开发、优化等工作,对于分布式应用架构设计、系统优化、分布式事务处理、操作系统配置等都有丰富的经验。教学注重学生思维锻炼、学习能力培养,上课风趣幽默,极富有热情。 主讲课程:ASP.Net MVC、ASP.Net项目