企业架构系列(一)技术架构师的优秀品格

149 阅读34分钟

IT项目中,我们经常会遇到技术负责人或技术骨干兼任架构师的情况。大家普遍的观点是,技术架构师与技术Leader没有本质区别。今天我们就来探讨一下,一个合格的技术架构师应具备的能力。

一、技术骨干的职责与技能

技术骨干作为团队的高级开发人员,主要的职责是负责实现关键功能和模块、解决复杂的技术难题和性能瓶颈、指导团队成员的日常开发工作,帮助团队成员解决遇到的技术问题。技术骨干与其他的开发人员有什么区别呢,在此,我们借用宋代禅宗大师青原行思提出参禅的三重境界,来阐述开发人员的三个Level。

1) Level 1:参禅之初,看山是山,看水是水

Level 1是初级开发人员的阶段。在这个阶段,开发人员的职责主要专注在按时完成开发任务,而不会深入考虑代码的质量和优化。具体来说初级开发人员能够使用Java、Golang、C#等高级语言的语法糖和开源组件,利用百度、Google、GitHub等工具,编写业务代码,实现基本的功能需求。 在这个阶段,初级开发人员通常不会太关注以下方面:

  • 代码底层执行逻辑:对代码的底层执行机制和工作原理了解较少。
  • 代码执行效率:缺乏对代码性能的优化意识,通常不考虑如何提高代码的执行效率。
  • 代码安全:对代码安全性关注不多,可能会忽略潜在的安全漏洞。
  • 代码可读性:编写的代码可能缺乏良好的结构和注释,不易于他人理解和维护。
  • 代码可扩展性:设计的代码架构通常缺乏扩展性,难以应对未来的功能扩展需求。

2) Level 2:禅有悟时,看山不是山,看水不是水

Level 2 是中级开发人员的阶段。在这个阶段,开发人员已拥有丰富的编程经验,并且能熟练掌握常见的开发语言和框架。与初级开发人员不同的是,他们开始关注代码的执行效率和性能,对底层源代码产生兴趣。他们开始了解操作系统、网络通信、CPU和内存机制,通过书籍、技术博客、视频教学以及研究源代码来加深对底层原理的理解。 在开发团队内部,中级开发人员往往作为经验丰富的“老师傅”,在完成分配的编码任务的同时,开始带新人。此时,他们在编写代码时会考虑代码编译成机器指令后的执行过程。在他们眼中,代码已经超越了字面意义,变成了由CPU执行的一条条机器指令。

3) Level 3 :禅中彻悟,看山仍然是山,看水仍然是水

Level 3是高级开发人员的阶段。在经历了Level 2阶段的洗炼后,高级开发人员对底层实现逻辑和执行原理有了更深的理解,他们借助于自己构建起来的深厚的理论知识体系和丰富的实践经验,使自己的编程思维得到了进一步提升。这种编程思维无法直接量化,但是他们在编写代码的时候,已无需再刻意地从代码层面去做优化和重构,因为他们脑海中构建起来的逻辑思路和伪代码已经自然而然地考虑到了代码底层的执行原理,从而就保障了他们写出的代码自然而然的已考虑到了性能、安全性和执行效率,他们的代码不仅完成了功能需求,还在满足性能和安全性的同时,达到了高效的执行效率。

在团队内部,高级开发人员往往已经变成团队的技术骨干或者技术Leader,他们不再负责功能模块的代码编写,而是转向开发团队的管理以及技术指导。在开发团队内部,他们的工作重心已经转移到如何指导和管控开发团队高质量交付,例如负责系统基础框架的搭建、技术规范的制定、代码评审、数据库设计、API设计、核心模块的开发、DevOps pipeline设计等。

通常,我们会根据工作年限为开发人员定级,实际上这是不合理的。衡量开发人员等级的更准确的尺度应该是工作能力而非工作年限。实际上,从Level 2进阶到Level 3的过程非常困难,因为这需要投入更多的时间和精力去深入学习源代码和底层原理。更需要在大型的项目中不断地实践,不断的填坑,不断的积累,逐步磨炼自己成为技术专家。因为从Level 2向Level 3的转变,不仅仅是技术能力的提升,更是思维方式的转变。这需要开发人员有足够的耐心和决心,愿意投入时间和精力去挑战自我,不断学习和探索,以实现技术和思维的进一步提升。这个过程可能对许多人来说显得枯燥而无聊,因为在短时间内看不到明显的成果,因此有些人可能在工作了10年甚至15年后,其实仍然停留在Level 2阶段,无法实现更高层次的提升。

最后总结成一句话:一个优秀的工程师,必须在泪水与汗水的锻炼中坚韧不拔,在血与火的洗礼中磨练意志,敢于承担责任,敢于挑战传统的技术思维,敢于打破无法与时俱进的技术束缚,敢于创新。。。

二、 技术架构师的职责与技能

我先分享一个小故事。许多年前,当我还在咨询公司担任顾问时,有一次我作为技术架构师,协助公司销售部门竞标一个系统集成项目,我的老板对我说了一句话,至今让我记忆犹新。他说:“不要设计出一个完美的出局方案”。因为在招投标过程中,技术方案直接影响报价。作为架构师,我们首先考虑的是设计一个理想的方案,理想方案包括充分考虑架构的性能、安全性、高可用性、可维护性、可观测性和易扩展性。然而,这种架构设计往往会导致所需的交付成本和报价远超出客户的预算。实际上,客户的预算通常较为紧张,他们会优先保障业务功能,而对高可用性、可维护性、可观测性和易扩展性的要求会稍微降低。同时,其他供应商的报价也可能较低,这也会导致我们在竞标中失败。因此,我们在设计方案时,必须在追求理想和满足客户实际需求之间找到平衡,以确保竞争力。

我们回到技术架构师的本职工作上来。什么是技术架构?在TOGAF中,企业架构被分为4个领域(Domain),分别为业务架构(BA)、数据架构(DA)、应用架构(AA)、技术架构(TA),这也是我们通常听到的4A架构。

技术架构是指用于支撑应用系统按预期稳定运行的系统性设计方案,涵盖硬件、软件和网络的设计。技术架构的设计需要综合考虑性能、安全、可扩展性、高可用性、可运维性和可观测性等关键因素,以确保应用系统稳定运行并满足业务技术需求。承担技术架构职责的人即为技术架构师。

一个合格的技术架构师如同一个质地结实、颜色圆润的洋葱,由内至外依次剥开来,应具备以下六种能力。

1) 技术能力

技术架构师通常来自于Level 3的技术骨干,必须具备较强的技术能力。技术能力要从技术广度与技术深度两个维度来量化。以消息队列(MQ)为例,技术架构师要能够在不同场景中设计、实现、优化和维护高效稳定的异步消息传递系统。然而,如果技术架构师对当前主流的消息队列产品不熟悉,只在自己熟悉的产品(例如 RabbitMQ、Apache Kafka)中做出选择,就会导致技术方案的局限性。

关于消息队列的技术广度,技术架构师应该有一张清晰的竞品分析列表,了解每一个产品的优点、缺点、适配的业务场景。可以参考如下的样例:

截屏2024-06-25 20.49.44.png 关于消息队列的技术深度,为确保项目中消息队列的稳定性、高性能以及安全性,技术架构师需要深入理解每一种消息队列的底层原理,掌握其工作机制和最佳实践。只有掌握了其底层知识,才能有效地设计、优化、部署和维护消息队列中间件,保障系统的高稳定性运行。以Apache Kafka为例,其底层工作机制可从以下几个方面进行概括。

序号关键技术点关键要素(做总结时须详细打开每一项)
1高可用性-分区和副本要点1: 每个Topic可以有多个分区(Partition),消息会均匀分布到各个分区,从而提高吞吐量;
要点2: 每个分区可以有多个副本(Replica),分布在不同的Broker上,以提高容错性;
要点3: 副本分为Leader和Follower,Leader负责处理读写请求,Follower则负责从Leader复制数据,实现消息投递可靠性;
要点4: Leader选举机制,确保在Broker故障时自动实现故障恢复。
2分布式协调要点1: Kafka 2.8版本之前,Kafka使用ZooKeeper进行分布式协调和元数据管理。ZooKeeper维护Kafka集群的状态,包括Broker信息、主题信息、分区和副本状态,同时ZooKeeper 负责协调选举新的Leader,须单独部署ZooKeeper集群,这带来了单点故障和额外运维复杂性;
要点2: Kafka 2.8版本之后,Kafka引入KRaft模式,Kafka Broker自身通过Raft共识算法来管理元数据,不再依赖Zookeeper。
3发布-订阅模型要点1: Kafka基于发布-订阅模型,生产者(Producer)发布消息到一个或多个主题(Topic),消费者(Consumer)订阅这些主题并处理消息。Kafka主题由多个分区(Partition)组成,每个分区是一个有序、不可变的消息队列;
要点2: Consumer Group 是一组消费者(Consumers),用于实现消息的并行消费和负载均衡。每个Consumer Group内的消费者分配不同的分区(Partitions),从而实现负载均衡。一个分区同一时间只能被一个消费者消费。不同的Consumer Group之间相互独立,可以同时消费同一个主题的消息而互不干扰。每个 Consumer Group都维护自己的消费偏移量(Offsets)。
4消息投递可靠性要点1: Kafka消息发送模式分为同步发送和异步发送。在同步发送过程中,生产者将消息发送到Kafka主题,并等待Kafka代理的确认后再继续。这确保消息已被成功接收并写入Kafka日志,如果在指定的超时时间内没有收到确认,生产者可以重试发送消息。在异步发送过程中,生产者将消息发送到Kafka主题,并在不等待确认的情况下继续发送下一条消息。这种方法通常性能更高,但需要额外的机制(回调机制、Buffer size和时间间隔参数配置)来确保数据完整性;
要点2: 生产者消息确认机制,通过request.required.acks参数(0,1,all)来设置数据可靠性的级别。
5消息消费幂等性要点1: Kafka提供了幂等生产者(Idempotent Producer)功能,使用PID和Sequence Number确保即使生产者由于重试等原因多次发送同一条消息,该消息也只会被写入一次;
要点2: Kafka支持事务性消息(Transactional Messaging),允许生产者在一个事务内发送多条消息,这些消息要么全部成功,要么全部失败;
要点3: Kafka提供了消费者消息确认机制(自动提交和手动提交),消费者手动提交消费位点(Offset),在确保消息处理完成后再提交位点,避免消息处理失败导致的重复消费;
要点4: 在应用层面实现幂等处理逻辑,例如利用数据库、Redis进行消息去重。
6消息存储要点1: 消息被持久化存储在磁盘上。每个Topic的每个分区都对应一个日志文件,这些日志文件被分成多个段(Log Segment)。消息在写入时带有偏移量(Offset),用来唯一标识消息在分区中的位置;
要点2: Kafka允许配置数据保留策略,基于时间或空间进行数据保留。例如,可以配置保留7天的数据,或者保留1GB的数据。一旦达到配置的限制,旧的数据会被删除。

2) 软件工程学以及架构设计方法论

我举一个将军例子,一个合格的将军必备三大要素:高超的武功、精通的兵法以及丰富的作战经验。在这个比喻中,架构师如同将军,技术能力如同将军需要具备卓越的武功,架构师必须拥有扎实的技术能力,才能够解决复杂的技术问题,并确保系统的稳定性和高性能;方法论则如同兵法可以提供作战策略,方法论为架构师提供了一整套系统化的方法和原则,指导他们如何设计、开发和优化系统;实践经验如同作战经验,丰富的实践经验可以帮助架构师在面对各种挑战时做出正确的决策,保证项目的成功。

那么,什么是方法论? 方法论(Methodology)是指在研究或解决问题的过程中所采用的一整套系统化的方法和原则。它提供了一套完整的框架,用于指导如何进行研究、分析和解决问题。方法论包括以下四个方面:

  • 理论基础:方法论是基于某种理论或过往最佳实践,抽象总结出来的行之有效的指导原则和做事方法。
  • 工具和技术:支撑理论基础落地的具体工具和技术,用于收集、分析和解决问题。
  • 程序和流程:详细的程序和流程用于确保按照正确的流程解决问题。
  • 评估和验证:用于评估、验证和优化解决方案的有效性。

一句话总结一下,方法论就是用理论知识武装我们的头脑,指导我们正确地做事。 我曾遇到过许多技术很好的大牛,他们更喜欢研究底层技术原理和源代码,但是对理论知识却看的不太重,他们不是不愿意学,而且觉得理论知识太虚,学习这些理论没有实际用处。然而,这种观点是错误的。方法论就像是一条路,当我们尚未成熟时,遵循前人披荆斩棘趟出来的路会更靠谱,可以避免走许多弯路。而当我们积累了足够的经验后,也可以另辟蹊径,开创新的路。

那么,应该学习哪些方法论呢?IT架构方面的方法论大体可分为两类:

  • 软件工程相关方法论:软件工程方法论涵盖了软件交付生命周期的各个方面,例如瀑布模型、敏捷交付模型、交付质量管理、风险管理、性能测试、DevSecOps和研发效能等。这些方法论已经相对成熟,并且在行业中得到了广泛的应用。市面上书籍、以及各类线上技术博客也都挺多,通过阅读相关书籍和参与实际项目,基本上可以深入学习并掌握这些方法论。
  • 架构设计方法论:架构设计方法论涵盖了软件架构设计的各个方面,包括微服务架构、领域驱动设计、事件驱动架构、云原生架构、API治理、云迁移等常用方法论。此外,还有如TOGAF、Zachman框架和CBA业务架构等企业架构方法论。虽然关于这些方法论的书籍和技术博客资料丰富,但能够深入讲解并具备实际操作性的资源却相对较少。大多数材料偏重理论,内容浮于表面,软件工程师在阅读后往往一头雾水,实际应用时可能面临诸多挑战,落地后一地鸡毛。而大型企业通常都有自己的企业架构方法论,有能力的选择自己构建方法论体系,没有这方面能力就请咨询公司帮助建设,这种可实操的方法论都是具备版权保护,所以很难在网上找到详细的资料。

    举一个微服务的例子。
    Martin Fowler先生可能也未曾预料到,他在2014年发表的一篇《微服务架构》文章会对IT界产生如此深远的影响(参见:martinfowler.com/articles/mi… 单体架构似乎一夜之间就被全盘否定,时至今日,无论是自主研发系统还是外购系统,系统设计几乎都遵循微服务架构,似乎不采用微服务架构就意味着技术路线存在问题。随后,领域驱动设计(DDD)方法论借助微服务架构的流行再次引起广泛关注,DDD逐渐成为微服务拆分的准则。许多所谓“有经验的DDD布道师”借用简单的案例,宣讲基于DDD进行领域划分的“成功案例”。许多软件工程师在不了解其本质的情况下,开始照猫画虎,将系统划分成几个甚至十几个微服务。接着,为了保障微服务间通信链路的稳定性,又引入微服务治理框架,使得系统表面上看起来高大上,实际上却非常脆弱,一触即溃。

    首先,事物存在两面性,作为架构师,我们要用辩证的眼光去看待单体架构和微服务架构。每一种架构都有其优点(可适配的业务场景需求),也有其弱点(无法满足技术需求和业务场景需求),做架构选型时要知其然,更要知其所以然。单体架构确实存在诸多的弊端,以Java为例,在微服务架构出现之前,Java宇宙主要以Spring和Struts2为主的Web框架和以EJB为主的分布式架构。Spring和Struts2开发的Web系统相对来说比较轻量级,可直接运行在Tomcat这种开源的Servlet容器中,也可以运行在商业组件例如IBM WebSphere、WebLogic中,但是Sun公司的EJB架构则较为笨重,需要运行在专有的EJB容器中,例如IBM WebSphere、WebLogic、Jboss等。这些EJB容器普遍较为庞大,启动一次比较耗时,无论是本地开发调试,还是生产部署,需人工参与部署,效率低,再加上所有的业务逻辑都集成在一个应用中,每次变更要做回归测试,要重新部署,会影响到所有的业务,因此这种传统的单体架构已无法适应互联网时代快速响应的要求。尤其是随着移动终端的普及和面向消费者(To-C)业务的高速发展,敏捷交付模型要求快速响应需求变化,并能应对高并发带来的极致性能要求。

    单体架构的这些劣势恰恰是微服务架构的强项。微服务架构原生适配敏捷交付模式,无状态化设计,并且借助于DevOps工具、容器化以及容器编排技术,可以实现持续集成和持续交付。但是微服务也不是银弹,微服务化会给业务和应用系统带来诸多好处,但同时也会带来稳定性、沟通成本、问题排查等方面的挑战,在单体架构时代,业务处理都是在系统内部(进程内通信),通过方法之间(Method)的调用就可以完成一次业务请求。在微服务时代,应用系统由多个单一职责的微服务组成,为了满足高可用和高性能,每一个微服务又有多个部署实例。一方面由于微服务的数量较多,微服务之间都是通过远程调用(进程间通信)进行协作,进程间通信会经由网络,网络的稳定性直接影响调用的成功率;另外一方面,微服务架构可能会降低应用的可用性,一个业务请求处理通常会由多个微服务来共同承担,在整个调用链路中当一个微服务不可用时,可能会引起级联反应,最终会造成应用的“雪崩效应”从而拖垮整个应用。所以微服务架构引入了多种技术,例如注册中心、配置中心、客户端负载均衡、熔断、限流、全链路监控、APM等技术来确保微服务架构的稳定性。单体应用和微服务并非是对立关系,相反,单体应用本身可以视为一种特殊的微服务。因此,作为架构师,在选择单体架构或微服务架构时,应从业务特征和技术特征两个维度进行决策。

3) 系统化思维能力

我举一个高中物理的例子。假设将架构师比作高中学生,智商则代表技术能力,物理定理则相当于方法论,刷物理题则相当于开发经验,那么解物理题的过程就是系统化思维能力的具体体现。利用系统化思维能力,学生能够依据题目给出的场景,逐步分析问题,运用逻辑推理和理论知识,一步一步推导,最终计算出正确地结果。 那么我们先来定义一下什么是系统化思维能力。系统化思维能力是指以整体性和结构化的方式来分析、理解和解决复杂问题的思维方式。系统化思维能力强调从全局的角度出发,从多个维度充分考虑问题的各个组成部分及其相互关系,权衡优劣势,最终决策出最优方案。最优方案不一定是理想方案,而是在权衡各方利益后决策出的最合适的方案。系统化思维能力有几个关键要素:

  • 全局视角:能够从宏观层面看待问题,理解问题的全貌及其背景。
  • 多维度分析:从不同角度和维度分析问题,综合考虑技术风险、业务、成本、交付周期、投入产出比等多方面的因素,形成全面的认识。
  • 关联关系分析:识别和理解内部各个组成部分之间的相互关系和相互影响,避免孤立地看待问题。
  • 结构化思路:能够分层次地分析问题,识别不同层级的问题和解决方案,从整体到部分,逐步细化。
  • 风险管控:识别出最优方案的关键假设以及风险点,在交付过程中通过风险管控确保方案安全着陆。 我们再举一个例子。东汉末年,曹操率领大军南下,意图统一全国。孙权和刘备联军在长江赤壁一带与曹军展开决战。面对曹操强大的兵力,孙刘联军采取了一系列策略,最终取得胜利。赤壁之战是中国历史上著名的以少胜多的战役,我们以赤壁之战为例简单梳理一下系统化思维能力。

我们再举一个例子。东汉末年,曹操率领大军南下,意图统一全国。孙权和刘备联军在长江赤壁一带与曹军展开决战。面对曹操强大的兵力,孙刘联军采取了一系列策略,最终取得胜利。赤壁之战是中国历史上著名的以少胜多的战役,我们以赤壁之战为例简单梳理一下系统化思维能力。

截屏2024-06-25 21.29.16.png

作为架构师,我们该如何掌握系统化思维能力?
系统化思维能力的“培养”不同于技术原理的“学习”,注意我在此用了两个不同的动词,培养和学习。技术原理学习通常涉及具体的底层网络通信原理、机器指令、内存管理、CPU 原理、数据结构等技巧,这些原理都是客观存在的,有清晰的知识边界,学习者可以通过理解公式、定律或者算法来掌握,一旦掌握了技术原理,不管是 Java、.Net 还是 Golang 等高级语言,底层技术不会有太大的区别,万变皆不离其宗。

系统化思维能力不是靠学习就能学会,而是要靠培养。系统化思维能力比较抽象和广泛,它涉及到整合和分析多种不同信息来源的能力,以及在复杂、不确定或新颖情境下的应对能力。这种能力的培养不仅需要理解技术原理,还需要在不同的实际问题中进行反复实践和调整,从而建立更加深入的洞察和解决问题的能力。系统化思维能力的培养需要通过实战来实现,这是一个持续学习与提升的过程,通过反复实践和总结,逐步提升自己的系统化思维的深度和广度。这是一个脑力和耐力双重消耗的过程,也是一个让人兴奋上瘾的架构师蜕变之旅。

4) 解决方案设计能力

当我们具备了前三项能力,我们自然而然就具备了解决方案设计能力。技术架构师具备的解决方案能力是指能够正确地分析复杂的技术需求和问题,并提出全面的、可行的解决方案的能力。

通常,解决方案应该具备以下几个关键要素:

  • 分析与理解需求:深入理解业务需求,从业务需求中识别技术需求以及技术痛点。技术架构师更关注技术需求,也称为非功能性需求。
  • 抽象技术能力:技术能力是指用于描述实现技术需求所需的能力,技术能力属于抽象的逻辑模型。技术能力不同于技术实现,技术实现偏重于落地,技术能力则偏重于抽象。抽象技术能力的价值在于将技术架构中的技术需求与实现相分离,以保证架构设计的稳定性和实施上的灵活性,通常来说,如果技术需求不变,那么技术能力就不变,但是技术实现可以根据技术的迭代更新进行变化。例如微服务治理是一种技术能力,在微服务治理能力中主要包括微服务注册与发现、API统一管理、客户端负载均衡、熔断与降级、全链路监控等相关的子能力,在技术能力层面我们只做能力的具体描述,不展开具体实现方案的讨论。针对微服务治理能力的技术实现,我们可以选择使用Nacos或者Consul作为服务注册与发现的组件,可以选择使用Spring Cloud、Istio或者Dubbo作为客户端负载均衡、熔断、限流、降级的组件,可以选择Apache Skywalking或者Pinpoint作为APM工具等等。
  • 设计技术组件:技术组件是技术能力的落地实现,技术组件包括技术方案以及对应的技术栈。技术组件不是简单的画几张系统架构图、或者集成架构图就能搞定的,例如一个高性能架构的设计,不是简单的加个缓存、集群设计、数据库分库分表就ok的,而是要有系统性的设计,包括前端高性能设计、网络传输性能优化、服务端无状态化设计、水平扩张设计、异步设计、缓存设计、数据库高性能查询设计、性能测试、性能监控设计等等。技术架构不是一个点,而是多个点连起来的一个面。
  • 梳理技术栈:支撑技术组件的开发语言和技术中间件,必须包括详细的版本、商业或开源协议、以及其他依赖的第三方组件版本和协议管理。此处也是个争议很大的地方,我自己在评审项目架构的时候,也经常会看到有的项目组会把一张技术栈的PPT当成了技术架构,这是不正确的。
  • 梳理与监控技术风险:对于某些技术点我们不能完全确定的情况,应当详细记录下来。可以通过实证概念(POC)、最小可行产品(MVP)等方法,采取小步快走的方式逐步推进。 上述几个关键要素同时也是我们在进行技术架构设计时需要提交的交付成果。然而,在评审项目组提交的架构交付成果时,我经常会发现很多资料存在问题。有些项目组只提供了系统架构图、部署架构图、集成架构图以及技术栈清单等PPT内容,这些资料明显不足以完整呈现一个全面的技术架构设计。关于技术架构设计,我在后续会专门写一篇技术架构设计的资料,在此就不详细展开了。

5) 创新能力

在当前IT技术领域日新月异,新技术和新工具层出不穷的时代,新技术和新理念不仅在重塑我们的生活模式和工作模式,也对各行各业产生了革命性的影响,像互联网+、大数据+、区块链+、AI+、数字化转型等已经渗透到各行各业。作为技术架构师,我们更应当拥抱新技术、拥抱变化、拥抱挑战,更要具备前瞻性视野,能够洞察技术趋势并结合业务策略做出决策。

在上面方法论章节,我们曾经讲过:当我们尚未成熟时,遵循前人披荆斩棘趟出来的路会更靠谱,可以少走许多弯路。当我们积累了足够的经验后,就可以借助于新技术、新工具和新理念,不断优化甚至重塑过往的方案,创造新的方案。在本文中,我们对技术架构师的定位是面向信息化部应用系统开发,而非研究院的产品研发,所以我们讲的技术创新,是指使用新的技术、新的工具、新的理念对IT 架构、业务场景原有的痛点和问题进行改进和重构,而不是去创造新技术。

接下来,我从以下几个方面来讲解技术架构师应该具备的创新能力。

  • 新技术推动IT架构创新:新技术和新工具不断涌现,技术架构师应当保持对这些新技术的敏锐度和深刻的理解,我们应能够评估新技术对现有架构可能产生的影响,并思考如何有效地整合和应用这些新技术,以提升系统性能和稳定性,持续地改进和优化IT架构。举例来说,从单体架构向微服务架构的转变、从虚拟机部署到容器化时代、以及从Ant + Shell脚本到DevOps流水线的变革,每一项新技术的出现都促使我们重新审视IT架构。那么在当前AIGC技术的热潮中,近水楼台先得月,你是否已经开始尝试自动编程和自动化测试了呢?
  • 解决复杂的问题:企业面临的技术问题往往是复杂而多样的,技术架构师需要能够跳出传统思维模式,探索新的设计和实现方式,以有效解决复杂问题并优化系统架构。例如,许多企业的IT系统的各种技术中间件(数据库、缓存、消息队列等)的访问凭证通常都是配置在yml文件或者硬编码在代码中,这种方式存在访问凭证泄露的风险,作为技术架构师,你会如何解决这一类的问题呢?
  • 新技术催生新的业务形态和重塑业务流程:新的业务形态和业务流程是由业务架构师或者业务专家来驱动,技术架构师要从技术创新的角度为企业提供支持业务增长和创新的技术解决方案。例如,个性化推荐系统可以运用机器学习算法,分析用户的购物历史、搜索行为、点击率等数据,生成个性化的商品推荐。这不仅增加了用户粘性,还显著提升了转化率,创造了巨大的附加销售额。
  • 应对变化和不确定性:技术环境和业务需求的变化是常态,技术架构师需要具备灵活应变和创新的能力,能够快速调整和适应变化,保持系统的稳定性和可扩展性。例如,一个物联网系统,根据业务预测,未来设备数在10万左右,日数据量在 100G,但是随着业务的快速发展,设备数快速扩展到100万,日数据量增长到1T,原来的技术架构(包括带宽、设备连接数、数据存储和高性能查询)可能已无法满足需求,技术架构师要快速应对业务的突增,保障业务增长。

技术是不断地推陈出新,技术架构师要不停的学习,与时代俱进,如果我们还用10年前的技术思维来应对当前的业务需求,会被贻笑大方。

6) 沟 通 能 力

如果把前面的五项能力统称为硬能力,那么沟通能力这项能力就算为软能力。硬能力是指具体的、可量化的技术或专业知识与技能,通常可以通过学习和实践来获取和提升,这些能力通常是直接应用于特定领域或工作任务的技术技能和知识。软能力是指与人际交往和情商相关的技能,通常涉及到个人的态度、行为和社交能力,这些能力不容易量化,但对于成功的职业发展和团队合作至关重要。

技术架构师在团队中不是独立的工作,技术架构师的沟通对象要远多于技术骨干。一个技术骨干的沟通对象主要是项目内(与BA、前后端工程师、测试人员之间的方案沟通)以及第三方系统(集成规范和接口契约的沟通)。但是对于架构师,沟通对象有以下几种角色:

  • 业务部门:在传统的IT项目建设中,业务部门完成业务流程后交给IT部门交付,这实际上是不正确的。业务架构中业务能力、业务流程、业务活动这三项核心的交付件,IT架构师是要参与进去一起讨论的,要从IT的角度给出可落地的建议。另外,技术架构的输入是技术需求,通常业务部门不会单独给出详细的技术需求,技术需求都是与业务需求揉在一起,所以技术架构师要通过与业务架构师沟通、充分理解和分析业务架构后,才能整理出完整的技术需求列表。
  • 企业级IT架构组:大型企业的信息化部门通常会设立企业级IT架构治理小组,用于监控和管理IT项目交付的质量。治理小组通常会在技术蓝图设计阶段和上线前两个关键节点对项目进行评审。技术蓝图设计评审旨在评估IT架构设计的合理性,而上线前评审则用于检查实际交付的系统架构是否与技术蓝图设计一致。作为技术架构师,需要准备评审材料并参与架构评审会议。
  • 项目组相关利益干系人:作为技术架构师,经常面临决策的困扰。不清楚别的架构师是不是这样,但是我的工作常态是这样。在设计中大型项目的架构时,除了满足技术需求外,技术架构师还需要考虑交付周期、交付成本、运维复杂度以及未来的迭代升级等因素。在这个过程中,架构师不得不在理想的架构设计方案与实际的交付时间和成本之间进行权衡,以找到最优的解决方案。在这个过程中,技术架构师需要经常与相关利益相关者(如业务方、基础架构团队、安全团队、项目指导委员会等)进行沟通与协调。技术架构师需要收集各方的需求和期望,并在架构设计中全面考虑这些因素。这是一个相互协商的过程,技术架构师需要具备优秀的沟通技巧。在面对不合理的需求时,技术架构师能够提出合理的拒绝理由,并向相关方解释其影响和风险。对于那些在短期内无法实现的合理需求,架构师要确定优先级,并制定后续交付的计划,这样才可以确保项目能够按时、高质量地完成上线。
  • 项目组内:技术架构师做完架构设计后,要与技术团队进行KT(知识转移),确保技术团队充分理解方案,并清晰地了解方案的难点和风险点。好的沟通技巧可以使架构师融入到技术团队,从而不会让架构设计变成两张皮。

总体来说,硬能力和软能力相辅相成,共同构建了技术架构师的完整的能力。

最后用一句话总结一下,一个优秀的技术架构师不仅具备扎实的技术基础和系统思维能力,还需具备良好的沟通协调能力和创新精神,以及对业务需求和质量管理的敏感度,从而为企业的技术发展和项目成功做出重要贡献。