对于任何一个软件开发人员来说,架构师都是一个令人向往的角色。就连世界首富比尔盖茨在2000年卸任公司CEO的同时,也担任了微软公司的荣誉角色“首 席软件架构师”,可见“架构师”这一称谓的吸引力。架构师是公司的“金领”,有着非常高的收入,很少需要考虑生存的问题,从而有更多的精力思考关键技术问 题,形成“强者愈强”的良性循环。部分优秀的开发人员在工作了一定时间后,就要开始考虑自己的未来到底向哪个方向发展。如果开发人员的沟通能力强过技术能 力,在补充一定的项目管理知识后,可以向技术管理的方向转型。如果其对技术一直很感兴趣,而沟通能力也不弱,则可以试着进一步加强技术修养,以期向架构师 的方向发展,最终“修成正果”。
那么,到底什么是架构师呢?所谓的架构师,应该是一个技术企业的最高技术决策者。他主要负责公司软件产品或软件项目的技术路线与技术框架的制订。好的架构 师都是善良的独裁者,具有很强的技术、良好的写作能力、良好的口头表达能力,能够在各个层次进行沟通。从开发人员到架构师的成长应该是阶梯式的,一般来讲 开发人员在刚刚开始工作时只能开发简单的独立软件模块,慢慢的随着经验的增长,他开始接触一些相互之间有信息传递的模块,而后来,他会发现自己接到的开发 任务已经不是一个独立的单体,这些任务由一些专门的软件部分组成,可能包含数据库,工作流引擎,消息服务等等各种功能模块,可能分布在不同的服务器上,所 有的部分协同起来,完成软件功能。而这时候,体系结构的好坏将直接决定了系统的性能和可扩展性,而就在这时候,这名优秀的开发人员也开始思考架构师应该思 考的问题了,或者说,他向成长为架构师的道路迈出了一大步。
什么是架构师最具价值的技能呢?就是要了解不同的知识,做一个“杂家”或者说“博学家”。当然,如果你的数据库技术非常棒,或者你在工作流引擎方面具有不 可超越的专家知识,那也是很不错的。好的架构师有好多都是从专家成长过来的。但是,这不是架构师应该做的事情,架构师应该做的是了解所有的东西,既了解技 术的宏观面,又了解技术的细节。真正的架构师不仅仅要了解软件,也要了解硬件,在关键的部位使用合适的硬件来取代软件,可以成倍甚至成百倍的提高整个系统 的效率。下面我将会以互联网行业对的架构师的要求为例,向大家讲解作为架构师应该具备的知识。
互联网行业是当前最激动人心的行业之一,很多的创新都来自于这个行业,而每一个大型的网站如Google,Yahoo,Myspace等都需要解决一个非 常复杂的问题,就是网站的分布式向外扩展(Scale Out)的问题。解决这个问题,需要最优秀的架构师对业务进行剖析,利用软硬件将网站进行重构,甚至根据业务研发相应的分布式技术,解决网站复杂的分布式 计算的问题。如果你想在这个行业中成为一名架构师的话,需要至少掌握网络知识,硬件,软件,网站优化等方方面面的知识:
网络知识。
当前的软件已经绝对不是那种仅仅跑在一台单机上的孤立应用了。不仅仅是在互联网行业,任何一个行业的软件,都要求其具有网络功能。因此,网络知识是架构师 必备的知识。我们所说的网络知识,不仅仅包括TCP/IP,http等互联网行业常用的软件协议,也包括网络规划,甚至更具体的说,根据网站应用所处的地 理环境进行网络规划。比如人们常说:“这世界上最远的距离不是生与死的距离,而是电信到网通的距离”(笑)如果应用是建立在中国的,就要考虑电信用户和网 通用户访问网站的速度应该都比较快才可以。这时候的解决方案可能有多种,比如采用CDN(Content Delivery Network内容分发网络)使得网站的内容发布到离用户最近的服务器,又可以采用把服务器放在一些所谓的双线机房中,甚至将几种方案结合起来使用。这些 都统统归到网络知识中。做为公司的架构师,要对这些知识都有所了解,才有助于在遇到问题时找到最佳答案。
硬件知识。
了解硬件的极限,是架构师的基本功。我见过一些人,他们的眼中软件硬件都是没有极限的,需要资源就申请,系统性能下降了就买更高级的设备。然而,硬件的性 能有很大一部分取决于I/O设备。而这些I/O设备依靠的都是机械物理运动,这种运动是有极限的。因此当资源访问量增大到一定的程度时,这种物理运动将成 为瓶颈。比如说,在开发网站的过程中,记录访客的状态是一件很重要的事情,一般来说可以使用HttpSession来记录。而 HttpSession的存储问题将是一个很大的挑战,尤其是多机共享Session时,将HttpSession存成文件并通过多机共享或网络备份的方 式来解决分布式的问题是常用的方案,然而,架构师必须考虑到这种方案是有I/O极限限制的,很难扩展到超过一定规模的大型网络。同时,架构师应该了解目前 最近的硬件发展是否对软件系统会造成一定的影响,比如在多核的条件下是否对软件编程有新的要求,是否会对运行在虚拟机和非虚拟机上的程序有影响等等。
软件知识。
软件知识所包含的范围就更加广泛了。对于互联网行业来讲,架构师要了解操作系统,数据库,应用服务器等各方面的知识。比如说,如果网站使用的操作系统是 Linux,就要了解这个Linux版本的性能与局限性,比如说最多可以存放的单个文件为多大。有的数据库的数据是以单个文件来存放的,虽然我们很少见到 数据库中的数据多到不能再放入一条记录的情况,但是作为架构师,请时刻注意,这种可能性是有的。而且如果你有幸在一家高速成长的互联网企业中,而你所负责 的应用又没有经过优化的话,可能你会很快见到这种现象。这种现象的发生可能是由于操作系统不支持大文件的原因,也可能是数据库不支持大文件。不论如何,架 构师应该在这种现象发生之前就把一切都准备好。对数据库中表的拆分是架构师应该遇到的另外一个困难。一般来说增加应用服务器比较简单而增加数据库服务器则 是比较复杂的问题,如果一个站点由多个数据库支持,架构师需要考虑如何在保证数据一致的情况下,让多个数据库分担压力。有些解决方案是将数据库的读写分 开,使得大多数的查询sql不经过核心数据库,而只是访问数据库的副本,但事实上,这种方式也只能维护规模不大的网站。对于大型的网站来说,把业务分散到 不同的数据库中,只共享必要的数据,才是合理的提高网站扩展性的解决方案。
其他知识。
作为系统架构师,可能还需要对分布式系统,负载均衡,网络安全,数据监控等等各方面都有所了解。不仅仅是了解理论知识,也要对相关的产品和业界进展有一定 的认识。比如说做负载均衡最好的产品是那种。目前最常用的备份策略是什么,有什么缺点。如何使用缓存,如何做好日志分析等等。
刚刚谈到的是架构师需要掌握的知识,然而,冰冻三尺非一日之寒。这个过程需要我们慢慢的积累。如果你已经进入到公司进行软件开发,请时刻关注你所开发软件 的性能与可扩展性,而不仅仅局限在功能上,时刻想着任何一个简单的问题:我开发的模块如果放在多人并发的环境下会怎样,慢慢的就会有所心得。如果你还是一 个在校学生,不要想着自己离架构师这个职位还很遥远。要知道,成为架构师的修炼之路是很长的,甚至可以说是终身的,因此早点进入学习状态,不断修炼自己。 在学校期间学好离散数学,数据结构,操作系统,编译原理,体系结构,数据库原理等关键课程,并积极寻找机会到外面实习,增长自己的工作经验。如果有机会去 到一些技术主导的公司中工作,就一定不要放弃这种机会,慢慢就会成长起来。最重要的,你会养成关注技术,勤于思考的好习惯。当有一天你发现自己对任何技术 难题都可以一眼看到其本质,并能够将其分解为一个个可轻松解决的模块,你会由衷的感觉到知识给你带来的快乐,或许那一天,你已经是一个架构师了。
作者:万欣
原IBM CRL (China Research Lab,IBM中国研究中心) 资深软件工程师,光线传媒系统架构师。企业级应用方案设计解决专家。曾负责众多大型项目,包括:光线传媒E网、中国联通"联互通"信息管理系统、国家 863项目基于角色的通用权限控制系统、国家863项目Thsswf工作流引擎、清华大学博学网投票系统(轻量级J2EE)、IBM Web sphere下Strategy Map 插件的开发 (Eclipse, GEF, EMF, Hibernata) 及斯伦贝谢(Horizon Viewer) 全球联合开发项目和斯伦贝谢产品使用记录组件。清华大学信息学院硕士。 东方标准国际java软件软件工程师讲师。
- 浏览: 325196 次
- 性别:
- 来自: 北京
文章分类
最新评论
-
钱小白:
很棒,解决了我的问题
jackson把null替换为" "的2种方式 -
jee322:
给你推荐一个分布式:http://blog.sina.com. ...
【dubbo】分布式服务框架の简单认识 -
zhangliguoaccp:
thanks
jackson把null替换为" "的2种方式 -
corelengine:
这个比较常用,支持你
jackson把null替换为" "的2种方式 -
java-lxm:
清晰
Spring初始化Bean状态
发表评论
-
springMVC 与 struts+hibernate+spring优缺点
2016-04-13 17:28 1891springMVC: Spring 框架是 ... -
spring组件扫描<context:component-scan/>详解
2015-12-15 13:01 7506我们通过spring的以下方式去扫描com.test.sca ... -
改变体质,预防癌症第一步
2015-12-09 10:37 952有关癌症--看完再寄给 ... -
java动态代理
2015-11-25 17:07 1682静态代理: http://zliguo.iteye.com ... -
话说java单例模式的饿汉式,懒汉式
2015-11-24 16:54 2292饿汉式: //饿汉式是线 ... -
HTTP客户端服务端TCP连接内幕
2015-11-20 15:17 3285DNS(Domain Name System,域名系统), ... -
HTTP请求报文与响应报文介绍
2015-11-20 13:37 1969概述: HTTP报文是文 ... -
J2EE一个架构设计图
2015-11-16 16:52 769第一次图形是这样: 第二次图形是这样: -
数据库设计の表分区
2015-11-13 10:45 1680前言:一个好的系统, ... -
数据库设计の读写分离(概念篇)
2015-11-11 14:28 2939在读这篇文章前需了解 ... -
SpringMVC+Mybatis构架整合
2015-11-09 15:12 2646第一步,添加所依赖jar <project ... -
java多线程 -- 线程的构架(线程池)
2015-10-15 16:13 1426import java.util.concurre ... -
java多线程 -- Lock应用,内部静态类,线程池(经典)
2015-10-15 15:19 898import java.util.concurre ... -
java多线程 -- 初学者指南(二):为什么要进行数据同步
2015-10-15 09:36 735Java中的变量分为两类:局部变量和类变量。局部变量是指在 ... -
java多线程 -- 初学者指南(一):线程简介
2015-10-15 09:36 565一、线程概述 线程是程序运行的基本执行单元。当操作系 ... -
真的假的,关于癌症
2015-10-14 16:49 553如果你看到请马上转发 ... -
java GUI ; AWT SWT SWING 比较
2015-10-14 15:51 2962AWT AWT是Sun不推荐使用的工具集。然而它在许 ... -
EhCache Redis Memcache 比较
2015-10-14 10:36 4479如有写的不周到不正 ... -
TCP/IP协议,你了解多少?(一)
2015-10-12 17:08 862一 :传输层的主要功能是什么? 分割并重新组装上层提供的数据 ... -
Maven约定大于配置(遵循Maven约定)
2015-10-08 16:06 2368Q群,426554356 java技术,美女HR欢迎你的加入 ...
相关推荐
#### 一、程序员阶段:构架师胚胎期 在这个阶段,未来的架构师们主要是作为程序员参与项目。他们需要具备扎实的基础编程技能,包括但不限于: - **语言基础**:掌握一门或多门主流编程语言,如Java、C#、Python等...
### 构架师(一)-InfoQ中文站的电子杂志 #### 细节决定成败——InfoQ中文站的电子杂志《架构师》 在IT领域内,特别是针对软件开发和系统架构方面,《架构师》这本由InfoQ中文站出版的电子杂志,承载着非常重要的...
能够与系统分析师、项目管理师相互协作、配合工作;具有高级工程师的实际工作能力和业务水平。 2.考试要求 (1)掌握计算机硬软件与网络的基础知识; (2)熟悉信息系统开发过程; (3)理解信息系统开发标准、...
在"软件架构与构架师.pdf"这个文档中,读者可能会找到关于这些主题的详细讨论,包括案例研究、最佳实践和架构设计的决策过程。通过阅读和学习,你可以进一步提升自己的架构思维,理解如何在实际项目中应用这些理论...
《Android构架师手册》是一本专为Android开发者进阶为构架师量身打造的指导书籍。书中全面深入地探讨了Android应用开发中的架构设计、优化与实践,旨在提升开发者的系统思维和架构能力,使其能够构建出高效、可维护...
【系统架构设计师教程】 系统架构设计师是信息技术领域中的高级角色,负责理解和管理非功能性系统需求,制定开发规范,设计核心架构,并澄清关键技术细节。架构师不仅要关注技术实现,还需要协调团队,确保功能需求...
《系统构架师 电子书1》是一部专为有志于成为系统构架师的读者量身打造的专业读物。本书深入浅出地探讨了系统架构设计的核心概念、原则和最佳实践,旨在帮助读者掌握构建高效、可扩展、易于维护的软件系统的关键技能...
《项目系统构架师——完全攻略》是一份深入探讨构架设计与实施的资源,旨在帮助有志于成为系统构架师的专业人士提升技能。构架师的角色在IT行业中至关重要,他们负责规划、设计和指导软件项目的整体结构,确保系统的...
《J2EE构架师手册》是一本专为那些希望深入理解并掌握J2EE(Java 2 Platform, Enterprise Edition)架构技术的专业人士所编写的指南。这本书详细阐述了J2EE平台的核心概念、设计原则以及最佳实践,帮助读者从整体上...
这个压缩包“微信小程序开发-构架师技能图谱案例源码.zip”显然是为那些想要深入学习和掌握微信小程序开发的构架师或者开发者准备的。它包含了构架师在开发过程中所需的关键技能和案例源码,帮助学习者理解并实践...
构架师培训资料,给兄弟一些增长的空间,希望对大家有所帮助
【小程序源码与构架师技能图谱】 在IT行业中,小程序作为一种轻量级的应用形式,因其无需安装、即扫即用的特点,深受用户和开发者喜爱。本资源提供的是一个不包含后台服务的小程序源码,这对于学习小程序开发或者想...
在IT行业中,构架师是负责构建和设计软件系统架构的关键角色。对于微信小程序的开发,构架师的技能图谱通常涵盖了多个方面,包括前端技术、后端服务、数据库设计、性能优化以及项目管理。这个名为"构架师技能图谱_...
"微信小程序源码_构架师技能图谱.zip"这个压缩包文件包含了关于微信小程序开发的重要资源,特别是对于想要深入理解小程序架构和提升技能的开发者或构架师来说,其价值不容忽视。 构架师技能图谱是指导开发者全面...
【标题】"构架师技能图谱.zip"指的是一个压缩包文件,其中包含了关于软件架构师所需技能的详细图谱。构架师是IT行业中关键的角色,他们负责设计和规划软件系统的整体结构,确保系统在可扩展性、性能、安全性和可维护...