background image

对于任何一个软件开发人员来说,架构师都是一个令人向往的角色。就连世界首富比尔盖茨在

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 不经过核心数据库,而只是访问数据库的副本,但事实上,这种方式也只能维护规模不大的网站。对于大型

 

的网站来说,把业务分散到不同的数据库中,只共享必要的数据,才是合理的提高网站扩展性的解决方案。

 

其他知识。