ArchSummit全球架构师峰会是InfoQ中国团队推出的面向高端技术管理者、架构师的技术大会,参会者中超过50%拥有8年以上的工作经验。这是一场职场新人可能不适合参加的活动,但是5年以上的程序员必须要关注的。
那先来说说什么是架构师?程序员是不是混了8年就能成为架构师?
曾经有人从一些IT社群成员的会话记录分析得到这样的结果:0-1年的程序员什么都不知道,他们正在熟悉职场和他们要实现的功能;1-2年的程序员可以独立实现产品某些功能;2-3年的程序员可以独立完成一个模块;3-5年的程序员可以带人完成一个项目;5-10年的程序员关心管理、资源协调、成本控制、项目管控、平衡利益。而架构师就是活跃在最后的这一类社群里,他们带领团队,输出技术,调配项目资源,推动产品研发,控制软硬件成本等等。
举一个具体架构师的JD为例来讨论:
以这个JD为例,再结合知乎用户 @哈哈 关于Java架构师的描述,我们可以比较清楚地勾勒出架构师的成长路径。
首先你要是一个高级Java工程师,熟练使用各种框架,并知道它们实现的原理,了解他们的使用场景和性能问题。不弄清楚这些原理,就写不出高效的代码,还会认为自己做的很对;总之一句话越基础的东西越重要,很多人认为自己会用它们写代码了,其实仅仅是知道如何调用API而已,离会用还差的远,就更别提听明白 《Dubbo在SOA上的应用》 了。
熟练使用各种数据结构和算法,数组、哈希、链表、排序等等,需要有一定的应用经验,用于解决各种性能或业务上的问题;熟练使用Linux操作系统,熟悉TCP协议,创建连接三次握手和断开连接四次握手的整个过程,不了解的话,无法对高并发网络应用做优化; 熟悉HTTP协议,尤其是HTTP头;session和cookie的生命周期以及它们之间的关联。不然这个《 手机淘宝H5容器的架构演进 》的演讲该完全不知所以然了吧?还有系统集群、负载均衡、反向代理、动静分离,网站静态化。分布式存储系统NFS,FastDFS,TFS,Hadoop了解他们的优缺点,适用场景。然后才能和360、腾讯的架构师探讨关于《 大规模集群上的多业务线环境部署 》 、《 万级逻辑服务器的高效技术运营 》这些问题吧。
还要会分布式缓存技术Memcached,Redis,提高系统性能必备,一句话,把硬盘上的内容放到内存里来提速,顺便提个算法一致性hash 。工具nginx必备技能超级好用,高性能,基本不会挂掉的服务器,功能多多,解决各种问题。再往高提升就可以关心百度《 如何实现超大规模分布式安全系统 》。
接着还有数据库的设计能力,MySQL必备,最基础的数据库工具,对它基本的参数优化,慢查询日志分析,主从复制的配置,至少要成为半个MySQL DBA。其他NoSQL数据库如MongoDB,还有队列中间件。 这些是常用的技术,还有很多东西要了解都要靠自学,比如,《 Scala的应用实践 》,《 SQL-on-Hadoop方案在FreeWheel的实践 》。
最后,必须要提的是业务能力,业务能力,业务能力!技术是为业务服务的,技术提升还可以推进业务的发展。架构师还要针对业务特点、系统的性能要求提出能解决问题成本最低的设计方案才合格。Uber的袁泳从在Netflix构建云平台的时候就在研究分布式跟踪系统,现在加入Uber构建实时物流平台为司机分配任务,他对物流平台的业务实现有很深的研究和心得体会(《 Uber的流处理系统及实践 》)。就如果一个几百名用户的系统,访问量不大,数据量小,就上集群、上分布式存储、上高端服务器,为了架构而架构,或者一开始把系统架在node上,这都是最不切实际的。架构师的作用就是第一满足业务需求,第二控制硬件网络成本和技术维护成本。(关于成本控制可看研发体系构建这类文章,如《 如何通过高效能来克服高成本 》,《 快速发展转型期的研发体系构建 》)。
你看本软文最开头的架构师JD第5点就提到了架构师要预见技术发展趋势,架构师还要根据业务发展阶段,提前预见发展到下一个阶段系统架构的解决方案,Docker热吧,要不要了解下《 容器时代的云计算 》?并且设计当前架构时将架构的升级扩展考虑进去,做到易于升级;否则等系统瓶颈来了,出问题了再去出方案,或现有架构无法扩展直接扔掉重做,或扩展麻烦问题一大堆,这会对企业造成损失。
刚入职场的程序员,如果要缩短这样的程序员职业发展时间,还要好好喝下这些鸡汤,比如《为什么别人一年能有你三年工作经验》、《比你厉害的人都在奔跑,你活着还有什么意义》这些。必要的成长时间还是需要的,要花时间coding,要花时间了解并参与业务领域的发展,踏踏实实,勿在浮沙筑高台。用时间用经验用见识培养见危于无形、见祸于未萌、建高楼于平地的能力,这也许就是对架构师的一部分要求。
感谢龙永昕对本文的审校。
给InfoQ中文站投稿或者参与内容翻译工作,请邮件至editors@cn.infoq.com。也欢迎大家通过新浪微博(@InfoQ,@丁晓昀),微信(微信号: InfoQChina )关注我们,并与我们的编辑和其他读者朋友交流(欢迎加入InfoQ读者交流群 (已满),InfoQ读者交流群(#2) )。