知乎日报

每日提供高质量新闻资讯

头图

京东十周年了,为什么还在用 .NET 这么土的架构?

CFP

京东今天还在用 .NET 架构的原因是什么?

陈皓,酷壳:http://coolshell.cn/ (芝兰生于深谷,不以无人而不芳;君子修道立德,不为困穷而改节。)
被人邀请来回答这个问题,我觉得这个问题有三个部分:
1)为什么京东选Win/.NET平台
2)选Win/.NET平台行不行?
3)京东的系统的问题是什么?

1)为什么京东选Win/.NET平台?
————————————————

我觉得京东用.NET的原因应该很简单:一开始他就用.NET/Windows了,所以长期就这样了

那么,为什么他会一开始用.NET呢?这个东西就只能我就只能推理了。Windows的东西门槛低,而且有很多媒体为Windows做宣传,所以,在这个大多数人是井底之蛙的国度里,大多数人都会用Windows平台的。(10年前,这个社会上非Windows的工作很难找,几乎全是Win的天下,我在CSDN上写了一些文章来告诉大家其实Unix/Linux比Windows要好得多。当时没人理解,现在大家可能能够理解了)

所以,我估计京东的选型用.NET的最一开始是报着这样的心态:
1)随便找几个程序员帮写一下,越快越好,所以可能是那几个程序员觉得熟悉Win/.NET,可以快速搞起来
2)觉得业务比技术重要,技术无所谓,做出来了就好了。

这是我觉得最有可能选择Win/.NET的原因,是无心去选择的

2)选Win/.NET平台行不行?
————————————————

接下来的问题是选 Windows和选Linux有没有哪个更好,我想说的是,都还不错,不要以为选Windows就不好。但选 Windows 的好处并不一定在技术方面,而是在服务方面。

很多金融机构都是用Windows的平台(你可能会和我争吵国内的银行都不是Windows的平台,都是Unix的平台,是的,我也是在银行里做过的,中国的银行几乎都是IBM/SUN/ORACLE的领地,所以,那里都是AIX、RISC600,Solaris,Java,C/C++的地方),但是国外很多金融机构却更多用的是Windows。为什么呢?

金融机构并不在乎钱,他们有的是钱,他要的是稳定,不出错,出了问题能得到最好的售后服务,以及赔偿。这里我说一个我的亲身经历,我的上一家公司是做金融的,他们用的是Windows,有一天在生产线上,因为升级McAfee把Windows搞蓝屏了,dump了一个16GB的dmp文件(内存16GB)。打电话找微软,开了一个0级的ticket,于是,微软的工程师每一个小时都给我打一个电话,告诉我他们的进度,并让我帮他们收集信息,相当的专业,直到很晚很晚,我问他们什么时候下班?他们说,0级的问题他们无法下班,7x24小时,每一个小时要做出响应,不能睡觉,直到问题解决。这是我第一次享受微软的技术支持,我觉得相当地满意。

另外,关于Windows的性能,我在上一个公司用Windows 2008 R1,发现UDP的I/O性能相当差,我们10GB的光纤带宽用了不到1GB,CPU 0的利用率就顶到天了,还是内核级的,我们怎么优化我们的程序都不行,发现这是Windows的问题,UDP的驱动性能太差,而且操作系统总是会把内核级的程序绑死在CPU0上,我们知道,对于多核的CPU,CPU0有调度的作用,如果CPU 0性能被占满了,这意味着这个CPU上的其它核的性能也不行了。后来,问题报给了微软,Windows 2008 R2解决了这个问题,解决地非常好。

从上面的我的经历,我想说:
  • Windows的服务是很不错的,只要你愿意花钱。
  • Windows平台的性能有很多问题,但是可以看到MS在很努力很努力地解决。
当然,我个人是相当不待见Windows的。不过,这只是我的个人喜好。并不能说Windows不是一个成功的操作系统或是服务器。我觉得比Unix成功多了(这里的Unix是各种公司的Unix,比如:HP-UX, AIX, Solaris, IRIX ...,比Unix成功是在他的服务和PC的价格上)。

这是我想回答的第二个问题,京东的问题和用Windows没有关系。但是作为超低利润的零售业来说,能用Windows这个平台真是大手笔啊

3)京东的系统的问题是什么?
——————————————

京东的系统的问题,明显是自己架构和管理的问题。这个东西不能说得太细,不然就泄露机密了。 呵呵。

1)首当其冲是管理者的问题。不觉得技术重要,不听技术人员的建议,急功近糙,超,快,猛。
2)其次是开发团队的人的问题,乱来。当然,有客观条件和上级逼着他们不得不乱来。

总之,我并不觉得这是技术问题,这分明就是管理问题,管理上的问题则暴露的是人的问题

下面有些个人观点:

1)有些人说有问题就有机遇,还有些人说花高薪招人吧。我觉得这还得要看是什么情况,如果公司注重技术,那么就会有机遇。但是重视技术绝不仅仅是用高薪请人,向技术部多投钱,这是肤浅的认识。所谓重视技术,就一定要能让技术部门有话语权,没有话语权的技术部门,是不可能有机遇一说的。(京东已经在花高薪挖人了,花相当的高的钱,但是如果不注重技术,一切都是白搭)对此,我觉得不换高管,别无他法。

2)有些人让京东换架构。是的,很明显这个架构太差了。但是你真的无法对一辆正在高速行进的车更换(核心)零部件。你必需得让车停下来!而且,还得需要像F1那样的设计,那才能很快地更换部件。从这点来说,我觉得京东除了重新开发一套,别无他法。

以上回复,不见得对,仅供参考。(谢谢)
廖雪峰,业余IT架构师兼业余产品经理,著有《Spring 2.0核心技术和最佳实践》
用.Net,意外着你被捆绑在Windows平台上。不是.Net效率本身比Java,PHP差,语言其实差别很小,差距在于:

1. Windows Server授权费太贵,Linux免费,如果你有上千台服务器需要买上千台Windows授权......

2. Windows不但贵,性能还远远不如Linux,注意这里说的是服务器端性能,跟桌面一点关系都没有

3. 许许多多无数的开源、高端服务器组件只有Linux/Unix版本,移植到Windows上的基本是半残品

4. 许许多多优化技术、高性能分布式缓存、数据库、NoSQL解决方案等等,仅针对Linux

5. 你需要的一切组件和技术几乎都可以在Linux平台上找到免费、稳定而且高性能的东东,如果是Windows平台,你需要祈祷微软赶快开发出来

6. 在虚拟化的今天,一台高性能服务器可以跑十几台虚拟机,用Linux,你得到的是免费、稳定的虚拟机,用Windows,你一台服务器的授权费将 x N。

总之,立志做大型互联网应用的企业,绝对绝对绝对不可以用Windows Server做平台。

京东一开始估计招了会.Net的人,开发效率高不意味运营效率高,一开始大方向错了,越往后越难改。

== 补充一点 ==

不是不看好.Net语言本身,而是这是Windows Server和Linux平台的对决,要先选对平台,再考虑具体用什么语言开发。平台选错了,无论你怎么努力,都不可能最终成功,因为Windows不是你控制的,你也无法修改Windows,而全世界最优秀的开发人员每天都在为Linux添砖加瓦。

做互联网要抛弃大企业那种IT外包/“给微软OracleIBM付费即可做好IT服务”的思想,一切均要靠自己!
大熊,火力全开
说实话容易得罪人,但就这个问题我还是想说一下:

京东用.net是因为京东一开始的后端进销存体系就是.net基础的,当然这里话说回来,国内大多数进销存以及ERP也都是.net基础下的。所以京东从一开始就是一个偏后端的厚重公司,在web端的技术以及应用开发上只是凑合能用即可,所以就一直用.net到现在(能用.net支撑WEB应用到现在实属不易了)。顺便说一下,我居然看到评论里有人说myspace在使用.net以佐证XXXXX问题,可是你知道myspace已经日薄西山了吗?另外,myspace正是用了MS这种土鳖外加不开源架构,错失了一轮又一轮的产品技术上的发展,还给自己带来了不必要的成本上的压力。当myspace到了海量用户的时候,MS要派出专门的小组常驻myspace,帮他们解决问题,这是一件惨绝人寰的事情。

老刘说自己技术出身,但其实我翻了一下老刘自己的履历大概只是10年前做过一些财务系统和小的企业级应用系统,对之后的互联网技术以及高并发大流量下的应用环境,我相信老刘已经非常陌生了。他自己认为的“懂技术”,我想恰恰是京东技术研发一直没有长足进展的最大阻碍。也是导致,京东一有融资就投物流的主要原因吧。在online技术能力以及网站支撑架构上,京东要补的功课还太多。

最新消息是,京东最近在猛招技术研发的大牛,大概要切换成Java架构了。在如此大访问量的情况下,这事应该在2010年之前就做掉,现在做已经算挺晚的了。电子商务公司的木桶,有很多块板组成,电子能力也还是很重要的。希望京东能解决掉现在的问题,跑的更快,发展的更好 :)

PS:这个问题,最应该邀请伟大的@fenng 出来回答。顺便推荐看一下答案里面@廖雪峰 同学的回答
Fenng,Work@丁香园( DXY.cn ).
登录知乎发现一大堆人邀请我回答这个问题,吓一跳。

毕竟我不是京东内部的技术人员,回答肯定是盲人摸象,希望能多摸一点吧。

首先语言不是最关键的,我相信用 .NET 也好,用 PHP /Java 也好,都能开发出来很牛的网站来。但是使用语言的人和由人构成的技术团队的差异那就太大了。

据说京东老刘最早也写代码的,估计就是用微软的技术写东西的。最早的工程师估计也都是用微软的技术干活儿的,而这些人随着公司的壮大,逐渐就有人掌权了,这就形成一个什么局面?话语权是属于微软体系的人。即使有人想用其他技术体系来做点东西,那要面对很大的阻力才成。「习惯」是一个团队很难改变的,除非从上往下推动,但是这样又风险太大。加上还要跟上高速发展的节奏,那就继续跑吧。看到路边的电动自行车了没?非常灵活,快的时候能跑到40迈,但是真的危险。

话说回来,京东做活动搞得挺狼狈,是运维的能力、架构设计、底层数据支撑的水平还不够。其实算下来,交易量并没有多少笔,相比一些纯交易型的网站差太多了。几年前和京东的相关人员交流过一次,发现意识和技术储备实在是和他们的名气不匹配。说这话又得罪人了。

另外,提个建议,京东前端也太弱了。

另外参考:

编程语言的选择并非无关紧要(还是我1月份时候写过的)
http://www.dbanotes.net/review/choose_programming_languages_important.html