对于任何一个软件开发人员来说,架构师都是一个令人向往的角色。就连世界首富比尔盖茨在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不经过核心数据库,
而只是访问数据库的副本,但事实上,这种方式也只能维护规模不大的网站。对于大型的网站来说,
把业务分散到不同的数据库中,只共享必要的数据,才是合理的提高网站扩展性的解决方案。
其他知识
作为系统架构师,可能还需要对分布式系统,负载均衡,网络安全,数据监控等等各方面都有所了解。
不仅仅是了解理论知识,也要对相关的产品和业界进展有一定的认识。
比如说做负载均衡最好的产品是那种。目前最常用的备份策略是什么,有什么缺点。如何使用缓存,
如何做好日志分析等等。
刚刚谈到的是架构师需要掌握的知识,然而,冰冻三尺非一日之寒。这个过程需要我们慢慢的积累。
如果你已经进入到公司进行软件开发,请时刻关注你所开发软件的性能与可扩展性,
而不仅仅局限在功能上,时刻想着任何一个简单的问题:
我开发的模块如果放在多人并发的环境下会怎样,慢慢的就会有所心得。如果你还是一个在校学生,
不要想着自己离架构师这个职位还很遥远。要知道,成为架构师的修炼之路是很长的,
甚至可以说是终身的,因此早点进入学习状态,不断修炼自己。在学校期间学好离散数学,
数据结构,操作系统,编译原理,体系结构,数据库原理等关键课程,并积极寻找机会到外面实习,
增长自己的工作经验。如果有机会去到一些技术主导的公司中工作,就一定不要放弃这种机会,
慢慢就会成长起来。最重要的,你会养成关注技术,勤于思考的好习惯。
当有一天你发现自己对任何技术难题都可以一眼看到其本质,
并能够将其分解为一个个可轻松解决的模块,你会由衷的感觉到知识给你带来的快乐,
或许那一天,你已经是一个架构师了。
分享到:
相关推荐
软件架构师是IT行业中至关重要的角色,他们负责创建软件系统的整体结构和组织方式,确保软件项目的成功实施。作为软件架构师,需要具备广泛的知识体系,包括但不限于以下几点: 1. IT行业的人才结构与软件构架师的...
系统架构师是IT行业中的一个重要角色,其职责是设计和规划软件系统的整体结构,确保系统的稳定性、可扩展性和高效性。系统架构师需要具备多种技能,包括但不限于编码和算法、系统架构设计、网络知识、英语交流能力、...
Java架构师是软件开发领域中的高级角色,负责指导和规划软件系统的整体结构,确保其可扩展性、可维护性和性能。以下是一些基于提供的书籍资源的相关知识点: 1. **J2EE架构师手册**: - J2EE(Java 2 Platform, ...
网络协议和分布式系统知识也是架构师的必修课。TCP/IP、HTTP、HTTPS等基础协议的理解,以及对RESTful API设计、负载均衡、分布式缓存(如Redis)和消息队列(如RabbitMQ、Kafka)的运用,将帮助你构建高可用、高性能...
4. **软件架构**:架构师的角色不仅仅是编写代码,更重要的是设计和规划系统的整体结构。这涉及模块划分、接口定义、数据流分析、技术选型等。书中可能会涵盖常见的架构模式,如微服务、三层架构、MVC(模型-视图-...
在第190页,作者特别提到了一个架构师的案例,这表明书中不仅理论丰富,还注重实际应用。在这个部分,我们可以学习到如何面对复杂的技术挑战,以及如何设计出能够支撑高并发、高可用、可扩展的系统。 大型网站技术...
嵌入式系统设计是一门涉及多种技能和知识的综合性技术,其设计者必须具备软件编程、硬件知识、系统架构和实时操作系统等多方面的技能。在设计一个嵌入式系统时,设计师需要考虑从处理器选择、内存管理、存储设备、...
这包括理解市场需要、系统架构的总体要求、应用软件功能的实现以及系统性能的提升等方面。硬件工程师需要与软件设计师深入交流,以确定内存大小、系统内部结构、对外接口和调试接口的详细要求。此外,硬件工程师应...
2016年的考卷则更加注重软件系统的架构设计和项目管理。试题可能涉及UML建模语言,包括类图、序列图和状态图的绘制。同时,系统集成、数据库设计以及网络通信协议也是考察点。此外,敏捷开发方法如Scrum和Kanban的...
【软件设计师】这一职业在IT行业内占据着至关重要的位置,他们是构建高效、稳定、安全的软件系统的专家。2008年下半年的软件设计师考题,是对于这一领域专业知识的一次全面检验,旨在评估考生在软件设计、分析、编程...
大数据专业的毕业生可以从事多种职业,例如大数据系统架构师、大数据系统分析师、hadoop开发工程师、数据分析师、数据挖掘工程师等。这些职业都需要具备一定的数学知识和编程能力,例如线性代数、高等代数、凸优化、...
2. **系统(system)**:在计算机科学中,系统可以指操作系统,如Windows或Linux,也可以指数据库管理系统,甚至是整个网络架构,它们协同工作以实现特定功能。 3. **文凭(Diploma)**:在教育和IT行业交叉点,文凭是...
SAP BASIS(Business Add-In System)是SAP系统的核心技术之一,它为SAP应用提供了一个统一的基础架构和技术平台。SAP BASIS管理员负责确保SAP系统的高效稳定运行,涉及系统安装、配置、监控、备份恢复、性能调优等...
而高级资格则有系统分析师、系统架构设计师等。每一种职位都对应着不同的技术能力和职责范围。 #### 程序设计与编程过程 程序设计是指使用编程语言来解决问题的过程。这一过程包括了分析问题、设计算法、编写代码...
每个职位都有其特定的技能要求,例如大数据系统架构师需熟悉计算机体系结构和分布式并行处理,而数据挖掘工程师则需要掌握概率论和编程语言如Python或Java。 大数据可视化工程师的角色是根据产品业务功能设计可视化...
这门课程对于物联网系统设计架构师、系统管理员、网络应用系统管理员以及物联网设备技术支持与营销等职业岗位至关重要。课程内容包括Android的基础知识、用户界面(UI)设计、数据存储(如SQLite数据库)、四大组件...
* 大数据系统架构师:负责大数据系统的架构设计、平台搭建、系统设计和基础设施等。 * 大数据系统分析师:面向实际行业领域,利用大数据技术进行数据安全生命周期管理、分析和应用。 * Hadoop 开发工程师:解决...