架构师画像

ddatsh

dev #arch

架构师和总监之类的 title 一样,已经彻底被用烂了

具备什么素质的同学是贴合架构师形象的?

业务理解和抽象 代码 全面 全局观 权衡

业务理解和抽象能力

架构师第一职责是理解业务,转换为可被研发理解的实现方案

通常资深业务架构师对业务会有非常深的认识和积累,极好的业务架构师应该能大概预判业务未来的发展趋势,以便在系统的可扩展性上留好一定的空间,自然出现有些业务架构师做着做着就干脆转为 PD 类型的角色

抽象能力是通过对业务的理解转换为系统实现的模型,这显然也是重要的能力,抽象很多时候也承担了分解清楚多个团队的职责,分工清晰化

代码能力

很多架构师被认为是大忽悠,就是有一堆顶着架构师头衔,又不干活的人(甚至几乎不太懂技术),光说不干,再加上说的不靠谱的话自然很容易被认为是大忽悠

架构师非常重要的职责是编写整个系统中核心部分的代码,不一定是技术挑战最高的,但对整个系统的质量/成败与否是具备非常关键的控制作用,所以架构师必须是从写核心代码的人中诞生出来的

跨多领域的大型系统中,架构师不太可能什么都擅长,不可能写各个部分的核心代码,这种时候架构师一定要知道怎么判断非自己知识领域的部分实现是否 OK,以确保各部分组合在一起的时候是符合架构设计预期的,通常这种确保各部分组织在一起 work 的机制部分的代码应该由架构师自己操刀

全面

全面是一个架构师展现出来的最关键素质

  1. 面对业务问题上,脑海里是否会浮现出多种技术方案其实挺重要,明明有一个简单成熟的方案,但由于不知道而做了其他复杂不成熟的方案,所以广阔的技术视野是架构师的必备。另外在自己不擅长的点上,需要知道找哪个专业的人是靠谱的也非常重要

  2. 做系统设计时是否考虑到了足够多的方方面面: 例如很多系统设计容易遗漏上线环节的细节,导致在上线时发现漏掉了什么考虑,临时解决或只能重来。系统设计不仅仅指导研发同学怎么写代码,也包括指导其他所有相关技术同学的工作

  3. 做系统设计时是否考虑到了未来的一些发展,尽可能不要出现未来的一点变化就导致现在白干或要花大量力气来改造的现象,想当年做服务框架的时候,后来就发现由于当年做设计的时候没有考虑到将来服务调用 trace 的问题,导致了后来为了弥补这点花了巨大的力气(不是技术上,而是实施上)

全面需要架构师有足够广的技术领域知识和足够多的经验积累,从全面这点就可以看到架构师的工作绝不是画几个框,连几根线那么简单

对架构师全面这点的挑战,会随着系统的范围越大(一个系统的设计,和 100 个系统组成的大系统的设计挑战是完全不同的)而变得越难,无论是知识的广度、考虑的点的覆盖度、还是未来趋势,更复杂的情况甚至会出现架构的调整对应着组织结构的调整,这种也要考虑到,例如服务化这种大的架构改造,就意味着专职的专业领域服务团队的成立

全局观

系统设计时是否考虑到了对上下游的系统的影响,毕竟通常所设计的系统不是一个孤立的系统,没有足够好的全局观,可能导致自己系统上线后,其他上下游系统(尤其有些连上下游是谁,怎么用的都不知道的情况下)出现问题

权衡

或说决策能力,技术方案的拍板是架构师重要的职责

全面是架构师在思考时开的过程,而权衡就是收的过程

收的过程结束基本就意味着技术方案的确定,同时也确定了节奏,权衡在两点上会体现的特别突出:

通常一个问题都会有多种可解决的技术方案,怎么决策至关重要,而决策通常又和全面相关,大的来说通常决策的原则就是性价比和可持续发展

性价比简单来说是方案的实现成本,包括非常多方面,有些场景可能会是用硬件解决看起来是花钱,但最终折算成本是最划算的,很多系统设计在决策性价比时都过于随意,例如一个另外常见的场景就是建设一套新系统替代旧系统,这个时候可能完全没考虑旧系统的迁移代价甚至超过了改造旧系统的代价;

可持续发展简单来说就是所选择的技术方案在公司是否可持续,例如简单的案例是公司主体的研发人员都是 php,却搞一个其他语言,且只有极少人懂的(当然,这还是要看性价比,如果搞一个其他语言带来的效益超过了语言 / 人才体系的更换成本),又例如引入一个开源产品,有无专业团队维护这都是要考虑的关键因素

经常我会问做系统设计的同学一个问题:对于这个业务场景而言,在系统设计上最需要把握的一个点是什么;这是一个关键问题,全面意味着考虑到了很多地方的问题,但通常业务需求实现都是有很强的时间要求的,因此在这个时候必须考虑清楚不同点的优先级,同时也包括技术方案在决策时也要做出取舍,有可能选了一个不是那么好的技术方案,但通过留下一些可改造的空间,为以后的重构做好铺垫,那就是很不错的,尤其技术同学有些时候比较容易陷入解决技术问题的场景去,但那个问题其实有可能不是现阶段最重要的

优先级和节奏控制是NB架构师最佳体现

优先级 > 把握住了重点,可以确保在所设计的架构指导下业务实现不会出现大问题

节奏控制 > 全面,知道随着业务发展该在什么时间点做什么事,为将来做好铺垫