开场白
前些天我写了篇博文累和加班多没时间都不是理由,再不挣钱就老啦,我的本意是谈谈感受,顺便介绍下我的书,java web轻量级开发面试教程(京东有售),出乎我的意料,这篇文章收到了很多回复,有同意的也有反对的。张泰峰朋友还写了篇文章【学习的艺术】钱会不会来?,其中引用到了我的文章。这篇文章旁征博引,让我很受教,文中的观点对我来说也很有启发。
不同的人由于处于不同的环境,分析考虑问题的出发点和方法未必相同,价值观也未必一致,当然更不能说谁的观点一定无谬论谁的观点一定是一无是处。所以,我在此一一感谢赞同我观点的朋友,更感谢张泰峰朋友引用我的文章,对于一些反对我观点的,只要看了我的文章,对我也是支持,我也得感谢。
开场白至此结束。
///////////////////////////////////////////////////////////////////////////////////////
1 架构师的基础
对程序员而言,相对高级开发,架构师是一个比较高级的职位,当然工资也更高。
在升级前,程序员至少需要具备如下的能力或经历。
1 至少完整地完成一个项目,具体来说,做过需求分析,把设计好的需求转换成文档,设计数据表结构,开发测试调优,尤其需要做过“在服务器上部署”以及“通过日志排查问题”的事情。
2 得具备分析和调优的能力,比如能通过执行计划看SQL语句的改进点并调优,能通过JVM日志看内存使用情况并提升内存使用性能,最好还能掌握一些优化的手段,比如能通过消息队列处理高并发的请求。
3 最关键一点,学习能力和动手能力强,比如遇到一个自己事先不懂的问题,能通过百度等手段找到解决方案,并能自己动手解决。又如,在事先不知道Linux LVS如何搭建的情况下,能在查资料后,动手搭建这个框架。
这些是架构师的基础,一般来说,工作4到5年,而且比较上心的话,这些应该都能具备。
2 架构师的高级开发的差别
需要解决的问题问题不同,高级开发的职责一般是能把需求点转成代码,并能把最终成果发布到服务器上。而架构师得考虑如下两方面的问题。
第一,在高并发情况下(比如双十一),如何保证系统能正常工作。
第二,需要确保这套系统能适应多次改动(即可维护性需要好)。
具体而言,高级开发一般只需要考虑“单机版”的情况,而架构师更得考虑“集群”,需要能在多台机器上构建项目体系。至于可维护性,设计模式能解决一些,架构师更需要降低模块间的耦合度。
3 我走过的路以及我的体会
其实本人目前最多也就是个初级架构,但看了不少架构相关的文章和视频,也切身参加了多次架构师的面试,所以这块自认为还有些发言权。
第一,在百度上搜索“高并发框架”,能搜索到很多关键信息,比如消息队列,RP,CDN,集群等,先大致了解这些关键的模块有什么作用,这个时间段大概可以持续7天。
第二,广看书,目前市面上有很多架构书,我买了4本,用过了2个星期全看了一遍,看完后就知道架构师手头可以利用的一些武器,比如Nginx,LVS,Hystix,SOA等。
第三,在这个基础上,思考这个问题:如果我是架构师,该怎么设计“秒杀”系统,或怎么设计一个“高并发的架构”。
具体包括:HTML静态化,Nginx如何配置,如何通过Redis+Lua等方式实现限流,如何通过Hystrix实现降级,如何实现数据库分层和分离,如何配置RabbitMQ消息队列。
其实在这些内容里,真正需要写代码的地方并不多,更多的是进行配置
目前我只能有这些体会,也请各位大神告诉我后面该怎么学,虽然我不知道后面的内容,但我感觉到后面应该靠实践了。
4 得靠实践来加深体会,但找到实践机会很难
这块其实是关键,但也是难点。一般来说,高级开发在公司里是没有机会实践架构师的工作,所以只能在跳槽成架构师后才会有实践机会,但如果没实践经验,一般是通不过架构师的面试的,难点就在这。
这里我的体会是,得自己先根据一些现有的资料,设计出一套面向高并发的架构,无需太细(因为面试时时间有限不会谈很深入),但需要具体说出采用的哪种组件,比如Hystrix,nginx,并能说出一些关键的配置信息。这样就能让面试官确信你具备这方面的能力。当然我也见过一些人修改简历,把之前做高级开发的经验改写成架构师的,而且也能面上,这个我就不说了,大家自己斟酌。
一般来说,参加过几次架构师的面试,就能知道会问什么问题,以及该什么说,我也见过一些高级开发在多次面试后能头头是道地“假装”成架构师(但能力一定不行)。
因为我的公司有机会让我实践架构知识点,所以我无需“假装”。目前的现实情况是,可能在一些互联网公司里,高级开发能有机会实践架构技能,在一些做业务的公司,或一些小公司,高级开发还真没机会实践架构知识点,这些人如何升级,我真不知道。
5 请大神帮忙
这里我问两个问题,请大神告诉我。
第一个问题,如果我想用Spring Boot开发企业级的微服务,我该看哪些资料?比如数据库该如何配置?消息中间件该怎么设置?等等。或者可以推荐给我几本这方面的书。
第二个问题,这个问题刚提过,如果我想开发一个高并发的架构,比如可以应付双11这样的并发量,我该考虑哪些问题?或者也可以推荐些资料。
最后是鸡汤文
我常听说有“中年危机”,不过我在电视上看到过如下的场景,看过后我不得不有危机感。(这些我只是从电视里看到的,无意映射到具体的人)
场景1,目前是冬天,东风萧瑟,某人在下班后,周末时,一个人待在北上广出租房里,市中心很喧闹,但兜里的钱不够,甚至在可以预见的将来,靠攒的钱一定无法买房。如果这个人已经是30+,还单身,似乎感觉更加...。
场景2,也是在北上广,到了谈婚论嫁的年龄,对方也比较合适,但目前只能租房,租的房还离公司很远。一定想买套房子,这样至少不算漂浮,但双方(甚至双方家庭)加起来的钱不够首付。
在上述场景里,至少当事人还年轻,还有机会发奋挣钱,还有希望。大家可以想象些已经“绝望”的场景,比如某人40+,一直在小公司里干,也就是一般的高级开发,已经没什么机会可以升级到架构师或开发经理了,而且公司也不算稳定,指不定就哪天裁员了。
更凄惨的场景就不讲了,大家可以脑补,这些场景里,他们已经无法靠基本的努力来改变自身,甚至是维持生计。
我不想到等到绝望之时才后悔,这即是我有挣钱紧迫感的原因。自然,这个优先级绝对是要排在亲情身体等因素之后的。
有危机感之后就会有行动,比如学习,努力工作,跳槽甚至打零工,这样或许还是无法有大改变,但做了之后至少有希望。最后我也附庸风雅一下,借用诸葛武侯的后出师表里的句子来表述目前我的想法。