架构师的自我修养
互联网时代系统架构的5个特征
- 技术开源化:大多数公司使用开源技术,技术更新很快,开源技术里的各种风险和坑也有使用者来买单。
- 产品敏捷化:业务调整快,小步快跑、快速试错,缺少长期规划,要时刻关注架构的灵活性,有备无患。
- 服务全网化:面向全网用户,系统规模大,业务波动大,要有快速的弹性部署方案。
- 系统复杂化:系统交互多,关联性强,临时方案多,各种功能堆积,需要快速的弹性部署方案。
- 人力高效化:人力成本持续走高,基础实施日趋廉价,技术人员的能力要求越来越高,高效有意义的事,简单重复的东西让机器去做。
有经验的架构师则会清醒的认识到,这样的系统随着不断升级和持续运行,一定会出现各种各样的问题,不出问题是不可能的。
应用的潜在bug、业务逻辑漏洞、数据异常、网络抖动、硬件故障、人工误操作,甚至还有莫名其妙未能找到原因只能归结为灵异事件的问题,会层出不穷,等你解决。
我们需要做的是尽可能监控、捕获到异常情况,通过技术手段修复多数的问题,少数不常见的或者难以自动解决的问题最终还是要考虑通过人工方式处理。
我们的目标是解决问题,通过分析,调整架构,优化逻辑,旧的问题解决后,还会有新的问题。
只要系统运行,就需要维护,软件工程理论中系统上线后期维护都是一个重要的阶段,此时系统是动态的,业务是连续的。
用近几年很多人用过的比喻,开着飞机修飞机,开着火车修火车,在原有的系统上做修改,并不比从头做一个系统轻松。
就像是CAP理论下,多数的选择是最终一致性,即通过努力,无限趋近于问题最小化,时刻准备着迎接新问题,动态平衡才是系统运行的常态。
用七句话总结我对架构师的定义:
以工程思维全面理解业务需求
基于模型和基础模式抽象简化
提出恰当可行的整体解决方案
在限定资源范围完成明确目标满足业务需求且保证系统质量
在可预见的周期内具备扩展性
并在系统生命周期内持续演进
李智慧老师《大型网站技术架构 核心原理与案例分析》中的说法:
软件架构师的最大价值不在于掌握多少先进的技术,而在于具有将一个大系统切分成N个低耦合的子模块的能力,这些子模块包含横向的业务模块,也包含纵向的基础技术模块。这种能力一部分源自专业的技术和经验,还有一部分源自于架构师对业务场景的理解、对人性的把握、甚至对世界的认知。
多数情况下,架构是一种妥协,一种平衡的产物,掌握这个平衡度的,就是架构师。
我们都知道,理想的架构是什么样的,但又必须抱残守缺,面对现实,提出可行方案。
因此,架构师是胸怀理想的现实主义者,高度在理想,落地在现实,绝对是有挑战,有难度。
架构师必须要具备的四项能力:
1、自我驱动能力:有高度专注的精神,在没要求的情况下遇到问题也斗志昂扬,死磕到底、搞定为止。
2、高效学习能力:在同等的时间里高吞吐量的获取有价值的信息,并沉淀为自己的能力,找到适合自己的学习方法,不断发现自我,形成模式,目标导向,反复强化。
3、保持良好心态
4、善于沟通协作
前三种是内功,用汽车比喻的话,自我驱动能力相当于发动机,高效学习能力则是方向盘和变速箱,良好心态就是悬挂和制动系统。
沟通协作则是外功,最终的外在体现,内功与外功两者之间就如同内因和外因,起决定作用的是内部因素。
架构师的四门课
1、多打酱油:多和人沟通交流,消息灵通,覆盖全面,知己知彼,收集问题,尽可能了解全局。
2、能和稀泥:综合考虑,充分沟通,引导大家达成共识,平衡各方问题,实用导向,提出最终结局方案。
3、肯背锅:能力越大、责任越大,要有勇气担责任担风险。
4、不拉仇恨:胸怀坦荡、没有私心、正直诚实、打开天窗说亮话。