在互联网圈里架构师这个名号的火热程度堪比产品经理,在产品经理没火之前就已经风生水起。乔布斯是苹果的产品架构师,比尔盖茨是微软的首席架构师,马化腾也号称腾讯的首席架构师。
有些人会觉得架构师很神秘,不知道整天脑袋里在想什么。
那么架构师到底是什么样的人?
聚焦到IT技术领域,基本可以还原,架构师的本质就是更高级更资深的程序员,架构师的能力要求在程序员或者说工程师之上,是一脉相承,有延续性的。
有些大厂因为层级较多(当然也是有更顶尖的人才),高级工程师跳到小厂做个架构师游刃有余。
所以我们并不纠结于工程师进阶架构师的边界到底在哪里,实际上有的公司架构师是正式职位,有的只是项目的临时职务。
架构师是足够复杂、规模较大的系统才需要的角色,当系统架构不那么一目了然,才需要有人在更高的视角上去关注整体性的东西。
架构师是高阶职位,难以通过培训批量生产,严重依赖于个人的工作经验和成长,而且各方面都要求更高。
架构师的经验体现在什么地方呢?举一个例子:
比如一个复杂的分布式系统,时时刻刻处理业务请求,要设计一套机制,保证所有的业务都能处理完成,无论成功失败。
简单的开发思维会考虑,尽可能的捕获异常,给每一种错误类型编号,中途失败的流程要进行回退,相信设计能否覆盖所有情况。
有经验的架构师则会清醒的认识到,这样的系统随着不断升级和持续运行,一定会出现各种各样的问题,不出问题是不可能的。
应用的潜在bug、业务逻辑漏洞、数据异常、网络抖动、硬件故障、人工误操作,甚至还有莫名其妙未能找到原因只能归结为灵异事件的问题,会层出不穷,等你解决。
我们需要做的是尽可能监控、捕获到异常情况,通过技术手段修复多数的问题,少数不常见的或者难以自动解决的问题最终还是要考虑通过人工方式处理。
我们的目标是解决问题,通过分析,调整架构,优化逻辑,旧的问题解决后,还会有新的问题。
只要系统运行,就需要维护,软件工程理论中系统上线后期维护都是一个重要的阶段,此时系统是动态的,业务是连续的。
用近几年很多人用过的比喻,开着飞机修飞机,开着火车修火车,在原有的系统上做修改,并不比从头做一个系统轻松。
就像是CAP理论下,多数的选择是最终一致性,即通过努力,无限趋近于问题最小化,时刻准备着迎接新问题,动态平衡才是系统运行的常态。
用七句话总结我对架构师的定义:
1.以工程思维全面理解业务需求
2.基于模型和基础模式抽象简化
3.提出恰当可行的整体解决方案
4.在限定资源范围完成明确目标
5.满足业务需求且保证系统质量
6.在可预见的周期内具备扩展性
7.并在系统生命周期内持续演进
以上只是描述了架构师本身,实际工作中还有许多干系人,包括了项目经理、业务需求提出方、产品经理、研发工程师、测试工程师、运维工程师、DBA及各部门各层级的管理者,在一些外部合作的项目中还包括其他公司的各类人员。
项目由相关干系人组成的团队完成,架构师必须与其中各类角色协作,以达成项目目标,因此要有很好的综合素养,对于相关干系人的职责必须有深入理解,熟悉项目操作流程,能够与各方做好沟通。
比如现在都推行敏捷开发,快速迭代,一般的需求,小的敏捷团队就可以实现,架构师可能不会参与,怎样保证设计开发的质量?
更远一点,怎么保证在诸多小团队各行其是的情况下,整体架构的合理性、先进性,甚至推进架构演化?
这其中会有很多流程外的沟通交流,架构,不是编码规范、设计原则、技术框架,更多的时候是通过各种沟通,尤其是非正式沟通,所达成的共识。
这个共识越清晰,沟通成本就越低,工作就越高效,产品质量就越有保证。
如今是一个互联网+的时代,系统架构有哪些特征?对架构师有怎样的要求呢?
第一,技术开源化
开源已经成为互联网技术的主流,多数公司使用开源技术,自行选型维护,出了问题自己解决,而且技术更新很快,需要能够高效学习快速上手。
开源的技术流,与大众创业、万众创新一样,充分发挥创造力,各种风险和坑也都由使用者来买单。
第二,产品敏捷化
业务调整快,小步快跑,快速试错,必然弱化长期规划,创业公司可以先上MVP,已经上规模的公司怎么保持活力?
可以将新的业务做成独立的模块,解耦,降低依赖,更重要的是时刻关注架构的灵活性,有备无患。
第三,服务全网化
面向全网用户,随时提供服务,系统规模大,停止服务就会损失收入,要求尽可能无缝升级。
业务不可控性较大,业务量可能很大波动,一旦业务爆发,要有快速的弹性部署方案。
第四,系统复杂化
难免有很多的临时方案,以及有用没用的功能堆积,会使系统的可维护性,架构合理性越来越差。
系统的交互越来越多,关联性强,需要工具结合系统机制进行管理,否则就会失控。
第五,人力高效化
根据摩尔定律,基础设施成本日趋廉价,而人工成本则持续走高,这是两个必然方向。
那么就需要提供更好的技术平台,好钢用在刀刃上,技术人员的能力要求越来越高,高效做有意义的事,简单重复的东西让机器去做。
在互联网+的时代背景下,架构师的核心价值是什么?
软件架构师的最大价值不在于掌握多少先进的技术,而在于具有将一个大系统切分成N个低耦合的子模块的能力,这些子模块包含横向的业务模块,也包含纵向的基础技术模块。这种能力一部分源自专业的技术和经验,还有一部分源自于架构师对业务场景的理解、对人性的把握、甚至对世界的认知。
(1)常用源码框架
(2)互联网分布式架构
(3)团队协作开发
(4)架构基础
(4)架构基础
(6)性能调优专题
(7)并发编程
(8)设计模式
以上技术方向我们有自己的高清思维方向导图以及架构师有自己讲解的架构视频分享(包括高可用,高并发,spring源码,mybatis源码,JVM,大数据,Netty等多个技术知识的架构视频资料)
喜欢的话请帮忙转发一下能让更多有需要的人看到吧。有些技术上的问题大家可以多探讨一下,谢谢!
更多问题平时可以在QQ群里交流:909723834。有加群的朋友请记得备注上CSDN,谢谢。