ArchSummit 全球架构师峰会是 InfoQ 中国团队推出的面向高端技术管理者、架构师的技术大会,参会者中超过 50% 拥有 8 年以上的工作经验。这是一场职场新人可能不适合参加的活动,但是 5 年以上的程序员必须要关注的。
那先来说说什么是架构师?程序员是不是混了 8 年就能成为架构师?
曾经有人从一些 IT 社群成员的会话记录分析得到这样的结果:0-1 年的程序员什么都不知道,他们正在熟悉职场和他们要实现的功能;1-2 年的程序员可以独立实现产品某些功能;2-3 年的程序员可以独立完成一个模块;3-5 年的程序员可以带人完成一个项目;5-10 年的程序员关心管理、资源协调、成本控制、项目管控、平衡利益。而架构师就是活跃在最后的这一类社群里,他们带领团队,输出技术,调配项目资源,推动产品研发,控制软硬件成本等等。
举一个具体架构师的 JD 为例来讨论:
- 精通分布式系统的设计及应用;精通多线程及高性能的设计与编码;熟悉 Unix/Linux 操作系统的使用和某种脚本语言编程(如 Shell 编程等)和大型数据库;
- 3 年以上大型互联网电子商务系统或者其他大型企业应用系统开发相关经验精通 JavaEE 技术和框架(包括 Java 语言基础 / 多线程 /Spring/Remoting/iBatis/Cache/Messaging/Workflow 等);
- 熟悉 DB2、MySOL、Oracle 等主流数据库系统的设计原理、相关技术及工具;
- 精通面向对象分析设计方法,逻辑能力佳,具有丰富的 OOA、OOD、OOP 以及 UML 建模经验, 熟悉软件工程、编程规范、有过程控制意识;
- 对技术发展趋势有非常高的敏感性和预测能力,并能制定技术创新方向, 专注于技术,精益求精;
- 符合如下条件者优先:具有交易系统或风控系统开发经验
以这个 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))。
评论