Java学习者论坛

 找回密码
 立即注册

QQ登录

只需一步,快速开始

手机号码,快捷登录

恭喜Java学习者论坛(https://www.javaxxz.com)已经为数万Java学习者服务超过8年了!积累会员资料超过10000G+
成为本站VIP会员,下载本站10000G+会员资源,购买链接:点击进入购买VIP会员
JAVA高级面试进阶视频教程Java架构师系统进阶VIP课程

分布式高可用全栈开发微服务教程

Go语言视频零基础入门到精通

Java架构师3期(课件+源码)

Java开发全终端实战租房项目视频教程

SpringBoot2.X入门到高级使用教程

大数据培训第六期全套视频教程

深度学习(CNN RNN GAN)算法原理

Java亿级流量电商系统视频教程

互联网架构师视频教程

年薪50万Spark2.0从入门到精通

年薪50万!人工智能学习路线教程

年薪50万!大数据从入门到精通学习路线年薪50万!机器学习入门到精通视频教程
仿小米商城类app和小程序视频教程深度学习数据分析基础到实战最新黑马javaEE2.1就业课程从 0到JVM实战高手教程 MySQL入门到精通教程
查看: 788|回复: 0

对于大型公司项目平台选择J2EE的几层认识

[复制链接]

该用户从未签到

发表于 2012-3-8 15:16:08 | 显示全部楼层 |阅读模式

好久不在这里写文章了。
  我是一个从野路子上一路走来的程序员,现在主要用.net做方案。选.net不选java并没有什么特别的原因,只不过是因为我自己从C开始学起,一直学到C#, 很熟悉这个平台罢了,从业15年了,C#是最方便的一个语言,而VS是最方便的一个工具,因此就很自然地用C#来解决我的一切问题,而这个工具也没有让我失望过,基本上还没有遇上过解决不了的问题。
     但是在现在的这家公司里,我却发现了一个很明显的选择倾向,就是90%的项目,都会选择J2EE的平台,.net平台基本上没有什么机会被引入。更有一段时间,公司里甚至规定了:禁止使用.net技术!
  这是一家金融公司,一直以来都是以甲方的身份出现的,不知道为什么居然会出现这样的规定,甲方应该关心需求,不知道为什么还会做技术平台的这种要求,而且用上了“禁止使用”这样的字眼,无论如何,都是一种很不客观的做法。
  前几年我还有些单纯,看问题总是从技术角度出发。这个规定让我相当不满,于是我做了一些测试和调查,证明了几件事情:
  1. 无论在小负载和大负载的情况下,.net都比j2ee的效率要高。
  2. 由于第一条,对于相同的应用程序 .net比j2ee的所需要的硬件投入小得多。
  3. .net与j2ee相比,前者学习的成本低得多,开发用的人力成本也更低。开发周期也短得多。
  4. 收费的.net与“免费的”j2ee相比,产品许可证成本要低廉得多。这是花了我最多时间来扭转人们看法的一条。
  5. 以公司里的大多数项目的规模来看,.net比j2ee更合适于我们公司的情况——你真得不必为每一个项目都购买oracle和weblogic,大多数系统每天只有几个用户,登录不到1个小时。
  我拿着这些得到的事实,去找一些参与了此规定制定工作的人理论,在讨论过程中,我又发现了以下几个事实:
  1. 这些人没有一个人熟悉.net平台。
  2. 这些人中,绝大多数人也不熟悉j2ee平台。
  3. 这些人懂具体技术的人也不多,但有一些高层,是IBM的忠实信仰者。
  大型企业的决策者们的心理是这样的——我们金融公司基本上资金充足,明白吗?我们不需要节省费用,上市之后,有几十亿的定向募集的资金要用于IT建设,这笔钱必要花出去的。如果不花干花净,投资人是不答应的。因此最小的项目,也常有几百万的预算,这其中一半是开发费用和数据库、中间件等服务器产品费用,另一半是几台IBM的小型机硬件(这也是被认死了的东西),用于支持每天个位数的访问量。
  如果项目太省钱,是没有办法操作的。
  既然钱不是问题,那么我们公司在项目投入方面的心理诉求是什么?是做一个“高档的”项目,一个标杆项目!谁能抓到这个点,谁就能得到项目。
  IBM的营销人员非常强大。他们向人们暗示:只有j2ee才是“高档”的,而微软的平台是“小孩子玩的”东西。后来,我有机会参加一些项目的工作,于是亲眼看到IBM的营销能力在公司里造成的影响:如果在项目规划的会议上有人提出是否考虑一下MS的平台,他们会通过轻蔑的笑容让提议者无地自容。请注意,技术决策者基本上都是一些对技术一知半解,或是完全不了解的人,人都有下意识,都有虚荣心,不愿意让人认为自己在技术上很低档,没有见识,于是一个个就很羞愧地住了口。有些情况下,即使一个心存怀疑的人,也会自动加入俾视MS的行列,与之划清界限。
  另一方面,MS却一直不知道为什么自己总是在营销上失败,他们的营销人员很单纯地向我们说明,.net平台的优越的性能、便宜的开发成本、低廉的产品费用……,但是他们不知道我们的心理诉求,他们所讲的一切,都是在证明MS的东西是个“玩具”,“低档平台”,他们在背道而驰,最后的失败也是当然的了。
  这是就是我的第一层认识。




  本节原文链接对于大型公司项目平台选择j2ee的几层认识(二)
  如前面所述的,由于很多人已经被洗过脑,还有其他很多操作上的考虑,大家都会很自觉地配合IBM的营销攻势,而且我们也相信:在IBM等软件和硬件的支持下,我们的一个个系统步入了“高档系统”的行列。把.net平台留给了孩子们玩去吧。
  其实,IBM,以及其他一些高端厂商(Oracle, BEA等)做承接的项目,大部分的活计是直接再转包给其他国内的小厂商的,他们自己所需要做的,基本只限于“规划、咨询、建议、项目管理方法论”等一些又高端又阳春白雪的工作。
  不过说实话,这些大厂商的总结能力真不是盖的,你听了他们的咨询师的课之后,大部分会感觉自己醍醐灌顶,狠不得把自己的所有的系统都推倒了重来!甚至狠不得把自己的业务方式都来个大变革。不过另一方面,这些高瞻远瞩的规划,一般也会与现实社会有很大的距离,要么是客户不接受,要么是监管不接受,要么是现实不接受。无论如何,听听绝对有好处,就当开阔了思路了。
  既然远景做不到,那么近景能做一些就做一些也是好的。首先就要听这些大厂的话,选择SOA,或是SAAS,或是别的什么概念来做这些项目。当然,听IBM他们说,这些项目的都需要J2EE来支持,而最好的J2EE应用中间件,当然是IBM自己的WebSphere什么的。其实都没所谓.net好还是Java好,无关乎技术。对于厂商来说,这都无非是一件武器,用来对抗微软的武器罢了,因为MS真得太令人害怕了,需要这么多厂商来一起对抗它。
  为什么MS令人害怕?因为以下的几个原因:
  1. MS是一个程序员的公司,而IBM是一个营销员的公司。MS有实实在在的技术,但是明显在市场头脑方面差人一等,因此总是在战略上慢几拍,但是后发的产品很强大。
  2. MS一直不停地研发。相信学MS技术的人都有感觉,就是他的主导技术基本上不到三年就要整个推掉重来一次,比如从ado到linq,再到现在的那个什么Ado.net entity framework的东西。每一代技术都更强大,但是翻新得让人追不上。这种技术创新的能力,是十年不变的java阵营很害怕的。而且下一代的WPF、WCF等平台的高度和技术能力是其他厂商难以达到的。
  3. MS有着令人难以置信的软件产品线,从操作系统到游戏,甚至是机器人仿真和开发包!在每一个战线上,他都有产品(可能是原型级的)可以用来对抗全世界厂商。
  4. MS正在蚕食下一代程序员。
  因此,java联盟必须努力抗击MS, 他们其实对java的低效率心知肚明,但是他们已经选择了这个武器和这个招牌,因此只好做足文章,把数据库、应用服务器全部用java写成——当然可以用。这就够了。
  但是效率太低,无论懂不懂技术都能看出来系统慢。那么也没问题的,只要几台P590上线,也就快多了。
  技术上也对此准备了解释:是的,j2ee是用于对付大批量用户的应用平台,在少用户的情况下,效率上不明显。但是当用户量上升到海量级别时,这个系统的响应曲线一定是平缓的。而“.net一类”的响应曲线必然是陡峭的。这叫做“吞吐量”。
  我们得到了安慰,为我们的预算支出找到了解释。每个人都满意了。至于什么时候我们会用上百万并发的吞吐量?也许永远也不会,不过备着这个能力也好。
  一度我也很相信这个含义不明的“吞吐量”指标,实际上的情况如何?有个例子可以参考:公司里有一个系统很关键,用户并不是很多,这个系统由IBM规划,oracle实施,运行在一个oracle cluster上,数据库的存储用的是HP的11000,应用服务器用两台单独的590,全部资源都划为一个分区来跑。在每个月初会有几百人在里面干活,系统要把上千万条数据做转换、抽取和导入(ETL),每到这个时候,系统就会慢得几乎不能干活,登录页都需要十几秒才会响应。听说硬件组的人为了加快效率,都把这个数据库的存储移到最快的硬盘条带上了,还是很慢。每次登录这个系统,我都能感觉到IBM和Oracle的庞大重量全部压在我的鼠标上。
  这个例子并不是为了证明j2ee很慢。相反,我认为这个系统的慢一定出现在软件的设计上,那种级别的慢法,一定是要有数量级上的性能提升才会有用,java与C++相比,也不过是10倍以内的效率之差,不会慢到二十秒出现登录页,再过二十秒才能登录进去。因此,一定是与软件、数据库的设计很有关系,也就是与开发者的水平有关系,只有那样才会导致几百上千倍的效率区别。
  因此,用什么技术效率高什么的,只是一个说法。就是严格证明过的数据说什么技术比另一个什么技术快,也不能保证“这个项目”就一定会“吞吐量大”。这就是一个营销手法,它在我们面对问题时,提供心理安慰。
  说到了这个项目,我就用这个项目做例子,继续说我的第二层认识。




  本节原文链接对于大型公司项目平台选择j2ee的几层认识(三)
  公平地讲,这个项目有很大的技术风险,开发的难度也很大。一开始是个烫手项目,倒不是因为有政治方面的问题,高层都肯定是下了决心来做的,但大家都已经算计过了,这个项目的技术难度这么大,有50%的可能性是会做烂掉的,公司里没有多少人敢接手负责。但是这个项目又必须做,最后就会指定一个项目负责人来强迫他来做这个项目。
  其实这个项目虽然难,但都是技术方面的难度,最少50%可能性是会很成功的。于是负责人就会硬着头皮上马,开始招标什么的。然后,各种厂商也都立即拥过来,各种营销手法来来往往的,也不用多说了,只说这个负责人在最后定标时的心理。
  前面说了,这个项目有一定的风险的,虽然只有50%,但这50%对于项目责任人来说就是100%的风险。因为这样重要的项目,负责人也都会是很高层的领导,他们对政治方面非常敏感,一般情况下是会给自己留足后路的。资金不成问题,请厂商不要节省,节省你就输了。在这个投资的范围之内,如何保证自己的政治风险最小?
  很明显,就一定是要选择一个最大牌的厂商,选择最高档的技术。最好为了分散政治风险,把几个大厂商都拉进来一起做才好,比如我说的这个项目,数据库用最贵的Oracle, 一个CPU的授权都在30万,打折?不用了,你要给我最好的服务!软件的实施请BEA来做,BEA连应用服务器都能做,做这个不是小菜?IBM做咨询与规划,还有硬件当然也是IBM,最好的机器给我来两台做热备!
  有懂技术的说了,慢着,这不是加大了风险么?这么多大厂商来一起做,不是增加了沟通的难度吗?最少也增加了集成的难度呀!从技术角度上来看,是这样的,这样一来,技术风险从50%成了75%,做烂掉的风险加大了!
  你说的没错。但是我一直说的是政治风险,没说技术风险的事情。这个项目的政治风险是对项目负责人能力评价的影响。如果做成了当然最好,但是还有一半情况下做不成,那影响就很负面了。
  对于一个项目负责人,他的决策思想一定是这样的:如果选择了一个小厂商,项目做坏了时,他就有决策方面的失误的嫌疑了。因此一定要选择最好最贵的厂商,这样的话,就是做烂了项目,他也可以向领导汇报:您看,我们选择了最好的产品,最好的硬件最好的服务,最好的软件开发者,这都是业界一级棒的乙方,他们联手都做这事情做成这个样子。言下之意就是:这不是我的决策问题,是这个项目真得真得太难了。
  当然,最后项目也不会一无是处,对付着还是能用的,这就叫成功了。但项目做得很差是人人都看得出来的,于是这个后者就用上了,政治责任就推走了。
  这就是我对这个选择的第二层认识:从政治上讲,选择最大牌的厂商是最安全的。
  IBM这些厂商深知这个秘诀,于是他们把自己包装成很高明、很抽象、很High Level的样子,这就与很多大项目的责任人的心理就切合上了。而MS因为后起,就有心理定势,以为自己的技术比别人来得晚,生怕甲方对他们的技术能力有怀疑,于是总是在技术上努力。
   这就叫“市场定位”。




  本节原文链接对于大型公司项目平台选择j2ee的几层认识(四)
  最后,我再聊聊我新近观察的一个项目的运行,来分享一下我的第三层认识。
  在达到了第二层关于政治风险的认识水平之后,我保持了这个认识水平有一段时间。当然我也无法左右公司高层的选择,反正有钱就花吧!只是有些系统自己要用的,难用成那样实在不爽,有时候也不免发发牢骚。
  我有一个哥儿们混得挺好,他新近做着一个项目,当然项目也是由一IBM指导实施的,听说最初决定这个项目由谁来做时,也是某个领导一番沉思之后决定的,但那位领导不说什么理由, 只是思考之后做了这个决定而已。
  这个项目没有什么大的技术难题,技术实施的成功率是很高的,按道理不需要什么政治保险。一开始我那哥儿们在做方案时,也的确没有选择IBM,而是以他们的评估,选择了资质不错,但是价格是IBM五分之一的一个厂商做为给领导决策的推荐。
  有一点我们都没有多想,就是这个项目虽然没有技术风险,但整体上有一个政治风险。这个系统所要支持的一个业务模式很创新,公司里有很多人出于各种原因,对这个项目比较抵触。在项目立项时,这种反弹还没有表现出来,大家估计也都没有反应过来这个项目是在做什么。等做到一半时,很多人开始明白过来了,回过味来了,发现这个项目再做下去,可能会出一些对自己“不利”的情况。
  这个说是“不利”,其实也没有什么“不利”,无非是高层的注意力会有一些转移、政策优惠会有一些转移、资源的倾斜会有一些转移什么的,业务上的竞争与冲击还远远说不上,其实对于很多中国人来讲,只要自己不得益就算是吃了亏了。
  于是这个项目就受到了冲击,一会儿停下了,一会儿继续了,一会儿又被人重新设计目标了,反正摇摇欲坠,挺危险的。
  最后,这个项目还是挺住了,继续!为什么?因为有IBM在!
  当项目因为上述问题出现方向争论、资源争抢时,这个项目自然就延期了。项目一延期,而且看劲头甲方一帮人还要继续这么乱下去,IBM不干了,第一、他们的工程师、咨询师天天白瞎在这里,那工钱是按小时出的,流水一样。第二、IBM做的项目,怎么能做烂掉?以后让业界说起来,“某某某公司的某某平台是IBM做的,做烂了!”这IBM的脸往哪里放?IBM也是个官老爷公司,能力固然是很强的,但是内部政治也很复杂,说不定比我们更复杂,他们可丢不起这人。第三,IBM已经在财务计划里把每期工钱的应收预算做好了,你又延误了,不交支票了,这可不行!
  于是,IBM通过自己长期已经建立的人脉对甲方开展了攻势,上上下下都有IBM的营销团队在活动,这个项目的那位责任人正好得到助力,项目目标很快确定,争论平息,项目继续。
  后来我们聊天时,对这位项目负责人的高明手法佩服无比,他早看到这个项目未来的风险所在,于是就采用了与大厂商绑在一条船上的策略,在危机出现时,借力向公司的决策层加压,最后险胜。如果一开始就决定另一个较小的公司来做,出现这种事情时,小乙方只能闭嘴苦等,听人发配的份儿。多支付的那部分项目费用,就算是“管理成本”好了。
  最后总结第三层认识:
  * 如果一个项目有技术风险而无政治风险,那么从领导角度上出发,一定要用看起来最HIGH的配置,因为技术困难导致的政治风险,可以通过不等式的传递性而推脱:“乙方如此强大,还没有办法, 因此此项目确实超出我们的,以及现在业界的技术能力”。
  * 如果一个项目有政治风险而无技术风险,而自己又没有信心独自搞定这些问题的话,不妨拉上大厂商,借用他们的力量来在关键时候做推动。
  * 只在有项目即没有技术风险,又没有政治风险的情况下,才可以考虑采用一家务实进取的小公司来做,快速低成本地搞定。
  说到最后,大家应该明白我说的意思了:在很多大型的企业里,项目技术的选择已经基本上与J2EE和.net技术本身没有什么关系了。这两个技术是两大阵营碰巧选择的武器而已,可能有一些小小的优劣差异,但是根本不重要。这两大阵营由于定位的不同,各自占据市场的两端,谁是高端谁是低端,并不能说明这两种技术哪种就是“高级”的技术,而哪种就是“低端”技术。
  客观上,为了迎合两端不同客户的需要,这两类平台都发明了相应的附加品。比如Java,就发明了J2EE这种阳春白雪的东西,还有很多无比抽象复杂的实现模式,而.net则发明服务器控件、viewstat和数据绑定这类速成工具。
  这篇的目的,一方面是为了把自己的想法和大家交流,另一方面,也是想劝劝大家,不必太介意技术那点小小的差异,目前大家遇上的项目,大多都没有什么技术限制,迫使得你必须选用什么平台,或是不能选择什么平台。因此,技术平台的选择往严重了说是一个政治问题,往说得好听一些讲,是策略问题。选择的原则,我也在“第三层认识”里总结过了,只要选择得当,就可以使项目更容易成功——那才是我们这些人的目标。
  -- the end --
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|手机版|Java学习者论坛 ( 声明:本站资料整理自互联网,用于Java学习者交流学习使用,对资料版权不负任何法律责任,若有侵权请及时联系客服屏蔽删除 )

GMT+8, 2024-12-22 20:10 , Processed in 0.393332 second(s), 48 queries .

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表