目前互联网飞速发展,各种编程语言不断出现,越来越多的互联网创业团队选择这些具有高效开发效率语言,如Ruby、PHP、.Net等,而Java这种看起来比较笨重的语言似乎在互联网领域越来越落寞。
然而随着公司的发展,特别是开发人员几十人、几百人甚至上千人的时候,这么多人维护一个项目将是一个噩梦,拆分在所难免。这个时候就要回过头来重新审视初始选择的语言及系统架构了,看这种语言能否应付大团队系统作战,是否有成熟的大型分布式解决方案,甚至是否会影响公司上市后的股价,于是架构升级开始进行。
架构升级有三种,一种是在原有语言上进行升级,一种是前台继续沿用老的语言,后台转向更规范的,更能适应大团队作战的,有更多成熟解决方案案例的的语言,比如Java,还有一种是彻底的所有系统都转向某种语言。至于采用哪种策略,各个公司会根据投入和产出作出取舍,这里不是讨论哪种方案是最好的,没有最好的,只有最适合的。但不管采用哪种语言,业务拆分是在所难免的。
先从编程语言方面来讨论一下架构升级,由于这里Java的社区,就将被转向的新语言定为Java,实际上有不少公司也确实是转向了Java。目前使用Ruby开发遇到瓶颈的公司应该不太多,但使用PHP和.Net做前期开发语言,中期遇到瓶颈正寻求突破的中型公司应该有一些。这些公司中有的进一步和相对封闭一点的语言(如.net)捆绑在一起,在老语言的基础上实现分布式架构;有的前端Web部分仍用老语言,后端核心业务被抽出用Java语言实现,同时引入Java基础框架和中间件来做底层支撑技术;而另一部分则彻底的完全倒向了Java系统。
这三种方式有各自的好处和不足,大中型系统转向Java系统技术上不存在什么问题,毕竟已经有很多成熟的方案在大公司已经被多次证明是可行的,而且还有大量的开源组件来支持。语言的转变最大的问题来自于人,一批辛辛苦苦把网站一点一点做起来的、眼看着自己的劳动成果已经获得了用户的认可的、公司快要上市自己也将要收获果实的老开发人员,他们对这套系统有很深的感情,也有很大的利益,抛弃了老的语言,也就是抛弃了他们的劳动成果,也阻断了他们在这个公司的前途,甚至影响了他们即得的利益。这个时候他们面前只有两条道路可走,一条是离开,但辛辛苦苦熬了那么多年,眼看就快要上市了,此时离开肯定心有不甘;另一条就是向Java转变,但面对大批的空降而来的Java方面的高端人才,他们的优势是什么?也许你会说是业务,是的,是业务,他们本该拥有技术和业务两种优势的,现在就变成了一种,而这种优势又成了博弈的砝码,向左转可以结合Java的技术的优势使公司更上一层楼,但向右转就可以阻止Java技术来实现本公司的业务,使业务迁移失败,使公司被迫再次走上老语言开发之路,使自己重新获得技术和业务上的双重优势。
实际上大部分转型公司的大部分人都会走上抵制新语言之路,这不是这些人有多么恶劣,这是人之常情,是利益所在。用Java每迁移成功一个项目,就等于埋葬了别人的一个成果,就阻断了别人的一块利益,是人都会有抵触情绪的。这时就要看公司对这些人做出怎样的补偿了,或升职加薪给期权,或使公司业务更快发展,新的业务的开拓可以减轻老员工的失落感。
这时候公司通常会采取上面的三种策略方式,如果公司在原来已经有了大量技术上和高端人才上的积累,而且对在老语言上进行架构升级也比较有信心,那么公司一般会采取这种最稳妥的方式--在老语言的基础上进行架构改造。如果对老的语言进行大型分布式架构升级没有太大的自信,但又怕老开发人员产生大的阻力,同时对Java语言也没太大信心的话,就会对前端业务不动,先从后端改造开始,比如引入一些Java中间件产品,抽出一些稳定的核心应用用Java实现,后期再看是将所有系统都改成Java语言还是前后端采用两种语言。最后一种是由于本公司本来就没有什么基础技术的积累,对老语言的将来没多大信心或者觉得会影响公司将来的发展,那么公司将会下大决心将语言转变进行到底,为公司后期告诉发展打下良好的基础。