一次集群架构的讨论所引发的思考---榜样啊榜样。
程序猿的起点
回头一看,已然做了程序猿两年多了,这两年里,虽然不算风风雨雨,但也算坎坎坷坷吧。想当初,自己还是个毛头小子的时候,每天上班那叫一个干劲十足,每次接到任务都像去推对方高地似的,颇有一股坚持不懈的劲。
当时公司里人少,是一家小型的互联网公司,满打满算,我们JAVA组也就四个人,一个项目经理兼产品经理兼研发经理兼部门经理兼技术经理兼技术总监的头,另外就是我们三个臭皮匠。这三个臭皮匠也分工的刚刚好,LZ负责后台开发兼测试兼运维兼DBA,另外两个人全权负责前台。我们的项目也是采取的当时最高大上的三大框架---SSH,以及当时全球著名的JS框架jquery和风靡全球的数据库mysql。
我们的项目当时部署在一个非常高端的大厦的...地下室,不过这对于当时的LZ来说,已然是小流氓看到了花姑娘一样,甭提多兴奋了。地下室里服务器嗡嗡的轰鸣声,激起了LZ的肾上腺激素,瞬间就像打了鸡血似的,投入到了当时的工作当中。
说了这么多,其实也就是一番感概吧,两年前,LZ还是一个只会写写Action,连java当中如何将整数转换为字符串这种小问题都需要百度的菜鸟,如今终于成为了依然只会百度的菜鸟。人生在世,果然恍若瞬间啊。
一次小讨论
说了这么多闲话,也该扯扯正题了。本篇文章的起因来自于之前的一次关于集群的小讨论,这次讨论的起因要从去年的11月份说起。当时公司的业务模式发生变化,导致LZ的系统用户数骤然增加,再加上系统本身就年代久远,各种垃圾代码如蚁虫般攀附在系统当中,最终的结果是,系统频繁宕机,尽管最终找到了问题的关键点,是由于一个异常的SQL查询导致的问题,但为了安全起见,还是将集群的部署提上了议程。
不提还好,这一提可出了事了。LZ与部门的测试经理经过一番讨论,最终制定了一个集群方案,由硬件负载均衡器将流量分发到DMZ区的web服务器,再由web服务器转发到后端的应用服务器,由硬件负载均衡器负责心跳检测。这个方案其实是比较完美的,从安全性、稳定性、伸缩性角度上来讲,还是十分可行的。
经过我们近一个月的测试,集群最终测试完毕,bingo,合并代码准备上线。结果,噩耗来了,CTO助理忽然来电一封,表示“你们的集群,必须要经过我手下人的测试才能上线”。这下LZ愁了,代码都合了,退也不是不能退,但比较麻烦,而且上线的安排都是非常紧凑的,这一拖难免要影响后续的计划。不过没办法,谁让LZ这小小程序猿没有话语权呢。于是退代码,打包,准备给CTO助理手下的人再去测试一遍。
这一测不要紧,事又来了。LZ当时为了处理缓存的问题,并为了顾及系统的安全,也为了保证在原有系统的基础上进行无伤的集群扩展,设计了一个简单的集群MQ消息传送,道理很简单,就是利用fanout交换器进行集群刷新。这一下被CTO助理手下一帮子人盯上了,说这个不行,那个不行,非要LZ撤掉重写,改用memcached。事实上,LZ实话实说,memcached当然可行,而且当时ORM框架的二级缓存已经被换成了memcached,这也是大部分情况下的分布式缓存解决方案。但问题是,一则是LZ的集群MQ刷新已经写好了,再改自然是额外的工作量,另外更重要的一点就是集群MQ的刷新是完全不需要动原来代码的,而如果把原来位于常量池的缓存拉到memcached,就需要改动大量的代码,很有危险性。没办法,谁让这系统当时没及时重构呢。最终结果还好,LZ还说歹说,各种理由一起上,还是留下了这个解决方案。
事情到这里,原本就可以结束了,但还远远没有结束。后来CTO助理的一帮手下又提出了一个新的集群方案,并一再表示这个更好,而且言语中的意思就是,你不用这个方案也行,出了问题你自己负责就好。
各位猿友,这你能忍吗?
什么?你能?反正LZ不能!
于是LZ翻各种英文文档,寻找更好的解决方案,因为他提的方案当中,有很明显的缺陷,针对这个缺陷,LZ终于找到了更好的方案。最重要的问题在于,我们原本的方案被否定的原因是,某人曰:“我们以前没这么用过”,擦!
LZ所提的这个方案,相对来说是最复杂的,因为需要解决很多问题,比如负载是否均衡,能否保持高可用。开始大家都觉得这个方案太复杂了,风险比较大。不过LZ此时倒不着急上线了,风险大?测试呗。
于是紧张的测试又开始了!
榜样的力量是无穷的
事情到这里,原本可以结束了,就等着测试上线了,但是还远远没有结束。14年回来,大概是3月份左右,LZ收到一封CTO助理来电。LZ心想,难道是集群测试结束了?
不,你错了!
我们的方案还是要变!
CTO助理将我们一帮子人叫到一个会议室,开始了最后一次的讨论。我们都是各抒己见,各自诉说着各个方案的好处与坏处。最终CTO助理提了一个方案,这个方案与我们刚开始提的如出一辙,不过去掉了心跳检测,采取运维组的监控系统进行可用性检测。
LZ刚开始还是比较抗拒的,因为年前就开始测试LZ的方案了,到当时已经大概测试了一个半月,这突然又要改方案,LZ顿时有点hold不住了。不过CTO助理的一句话完败了LZ,这句话让LZ彻底的决定采取这个方案,哪怕重新测试也在所不惜。
他说的话是,“工商银行就是这么做的!”
高潮来了,榜样的力量绝对是无穷的。好吧,都说到这份上了,LZ还能说什么呢。难道LZ比工商银行的架构师还牛B?扯淡吧,还是闭嘴吧。
榜样高于一切
其实仔细想想这个问题,很多时候都是这样,很多人在公司都会发生激烈的讨论,你说这个甜,我说那个香。最终争的你死我活,还是讨论不出来个结果。不过如果有人说这么一句话的话,那么基本上这场讨论就到此结束了。这句话就是,“XXX就是这么做的”。(请将XXX意淫为阿里、百度等等)
这就是为何中国缺少创新,因为人都怕担责任,都喜欢稳妥的路线。而且最主要的是,一旦有人说了这句话,那么接下来,如果你再想让别人认可你的方案的话,除非你能拿出特别能让人信服的理由,否则的话,还是乖乖闭嘴吧。没人会喜欢你的创新的,大家喜欢的都是你开心我快乐,系统不挂就万事大吉。
这就是榜样的力量,也是为何从BAT等公司出来的人都如此牛B,因为在讨论的时候,他们总能以一句“我们以前就是这么做的”一招秒杀你!(请将这里的“我们”依旧意淫为阿里、百度等等)
LZ想说的
这样的人是不是太高傲了?太没节操了?LZ真心的鄙视这种人。所以,如果你认识这种人,请务必让LZ来好好教育一番,LZ只想对他们说:“大牛,做个朋友吧!”
-----------------------------------------------------------
创新需要勇气和实力,猿友们,坚持吧,至少LZ在尽全力坚持!