架构师进阶之路 - 架构优化为什么难

news2024/9/28 13:26:36
       

目录

业务迭代和技术优化难以兼顾

缺少“上帝”视角思维

系统架构腐化

缺少架构师视角

系统迭代机制

设计规范把控


最近在组织团队内的系统架构优化,总而言之就是难,至于为什么难我这边总结了以下六个方面,记录一下自己的架构师进阶之路吧。😁

业务迭代和技术优化难以兼顾

重要的事:架构设计优化,让系统具有足够的“弹”性

紧急的事:业务迭代支持,让系统支撑业务持续发展

我们将日常中的事情分为重要、紧急四个象限,然后对系统架构优化和业务迭代填空在四个象限内。

1)重要且紧急

2)重要不紧急

3)不重要但紧急

4)不重要且不紧急

系统架构设计优化:重要(占据第 1、2 位)

业务迭代支持:紧急(占据第 1、3 位)

但是我们日常工作中,业务、产品与研发部门经常犯的错误就是将第三优先级的事情提到了第二优先级去做。显而易见重要的系统技术优化事项被业务迭代所排挤。为此我们研发人员经常会抱怨,没有时间来做技术优化,自我调侃为:“又在搬砖...”、“又在加班写 BUG ...”

似乎我们忘记了:业务部门就是只盯着业务的,对于系统架构的评估和优化,本来就是研发人员的工作职责!如何平衡好这两者的工作,是研发人员的晋级修养之路。

不要忽略系统架构的价值,假如有一天系统难以维护到只能推翻重来的地步,可以说是系统技术优化跟不上业务的快速迭代,同时侧面说明了研发同学的本职工作做得不够格!

缺少“上帝”视角思维

我们在以往的需求迭代中更多的是掉入到“需求陷阱”里,只关注自己负责的业务部分,而忽视“全局”。紧密的需求迭代节奏也是我们忙于堆砌代码,从而忘记停下脚步来回头看看是否走在了岔路上。我们都知道最终都会达到罗马,但是有的人走的是“直道”,有的人走得是“弯道”。我们要时不时跳脱出来,回过头来重新审视一下全局的业务、产品、系统设计是否合理。

系统架构腐化

多人协作问题:如果系统的开发人员没有严格遵循一致的开发规范,或者没有建立好有效的代码管理机制,可能会导致代码结构上的混乱,从而增加系统的开发复杂度和维护成本。

无规划性的技术栈升级:开发人员过于频繁地尝试新技术,不仅会使技术栈变得复杂,也可能会影响系统的稳定性和安全性。

缺乏良好的测试机制:系统的测试机制如果缺乏,可能会严重影响代码质量,就像没有人为项目提供反馈似的,从而使代码中的错误不被及时发现,令错误在系统中逐渐积累。

研发人员变动:如果组织的团队成员经常性更换,新旧人员之间没能形成有效的衔接和匹配,可能会导致系统的连续性和稳定性受到影响,乃至出现系统架构腐化的问题。

系统逐渐复杂化:在系统的长周期的演化过程中,难免会增加新需求、新功能模块和服务组合, 由此引进新框架、新模型。然而在此过程中,如果没有及时做好架构积累和提前预估架构变动的影响,可能会导致系统逐渐变得复杂,就像人体长期积累毒素一样,最终带来严重的后果。

总之,系统的架构腐化可能源自于开发人员、组织和系统本身等多方面原因,需要我们在系统的开发、测试、运维和补救中,有针对性地逐一落实。「预防胜于治疗」,预防性战略是减少系统架构腐化的关键环节。

缺少架构师视角

产品需求把控:我们平时的研发工作中缺少架构师思维,缺少结合产品、技术层面的全局把控,没有在产品需求阶段指出合理的需求方案,导致在开发阶段出现需求不通临时需求变更。

缺少系统分解思维:系统分解一般分为纵向分解和横向分解,纵向分解是将整个系统拆分,从而将整体系统分解成下一级的子系统与组件。横向分解是在系统分解成不同的逻辑层或服务后,对逻辑层进行分块,确定层与层之间的关系。由于在系统设计的时候缺少分解思维,导致实现的系统“大而边界不清晰”。

通常架构师也不太会跟每一个需求,这就需要我们团队中的高阶同学,负起必要的责任,尤其要基于技术细节尽量站在全局视角最好技术把关。

系统迭代机制

做项目而非做产品:软件系统的开发和演进有很多驱动因素,导致系统更加复杂的是按照特定需求开发特定功能,也就是做项目的方式。每次都有明确的目标,而且这个目标的方案多数也是设计好的。

做项目的方式对系统最直接的影响就是需求的一致性或几次迭代,多个不同的项目作用在同一个系统上,为了解决不同的问题,单纯的叠加功能,缺少对这个软件系统的整体认知和规划。而不像做产品,每一款产品都有一个愿景和核心要解决的问题,任何不符合愿景或者无法帮助解决核心问题的需求都是伪需求,不应该被添加到这个系统中。

因此,以做项目的方式推进的软件系统,随着项目不断的推进,多个不相关或没有经过深思熟虑的需求叠加到系统中,也会不断加剧软件系统的复杂度。而事实就是我们的现状就是按照项目制去进行软件开发,这种问题在所难免但是我们可以在同一个系统中做好业务分层,不同的业务尽量隔离。

设计规范把控

TechnicalDebtQuadrant上图来自大名鼎鼎的“MartinFowler”,MartinFowler将技术债按照 鲁莽的(Reckless)/谨慎的(Prudent) 以及 故意的(Deliberate)/无心的(Inadvertent) 划分到4个不同的象限中。

谨慎的 且 故意的:这种场景很常见,是已知技术债的一种主要来源。为了让产品快速投入市场,获得更大的收益,通常团队会选择更快速的方案,开发成本低,时长短,但解决方案并不是最优,且可能只是临时方案。然而,团队对技术选择做了详尽的评估,了解技术债产生后给产品和架构会带来什么影响,后果是可估量的,甚至已经安排好了未来的改进计划。

鲁莽的 且 故意的:相比上一个分类而言,团队知道当前的方案不是最优选择,但通常由于时间紧迫,实现当前的业务需求是第一优先级的,未对当前的方案做细致的分析,因此对遗留技术债可能产生的影响是未知的,甚至具体产生了哪些问题也可能是未知的。

鲁莽的 且 无心的:不计后果而又是无心之举,这往往是因为团队成员的认知还不足以判断当前的选择是不是会带来不良影响。这种技术债在技术债总体的占比很高,甚至可能比上面提到的第一种技术债更多。因为不管怎样的团队,人员的更替都是避免不了的,个人的经验不同,认知不同,在实现相同的功能时选择的方案也是不同的,虽然可以通过一些社交活动来减少不同团队成员的认知差异,如代码评审,但想通过这种方式来避免技术债的产生,效果往往并不是很好。

谨慎的 且 无心的:这种技术债看上去让人难以理解,既然每次都是深思熟虑,为什么还会有无心之失。然而,这种技术债确实也是无法避免的,甚至会经常遇到,最简单的莫过于当下基于当下的经验甚至业界最优的一些实践选择的技术方案或者技术框架,而随着技术的进步和发展,它们的弊端和问题也会逐渐显现出来,这些过时的技术方案设计和框架也就成了技术债。

解决

技术债解决日常化:研发团队要有守护架构的意识,在项目日常开发中,除了产品的业务需求外,应该规划一部分工作用于架构的优化,修复那些已知且有解决方案的技术债,这样才能持续保证软件系统的响应能力和产品质量。

明确研发规范,加强管理:对于已知且无解决方案的问题,只是没有深入思考对系统的影响,对于这部分技术债,为了让这些技术债在产生前就避免,或者引导到可以快速解决的方向,首先,需要建立团队的技术规范和标准,让每个决策都有依据。其次,加强流程上的管理,建立架构评审委员会,对架构的修改进行评审,一方面规避问题,另一方面根据问题完善规范和标准。

持续关注技术发展趋势,提前规划:随着技术的不断发展,很多几年前被认为非常先进的技术表现出了一些弊端,也逐渐在被新的技术替代。研发团队需要持续保持对技术发展趋势的关注,探索是否有更优的解决方案

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/688182.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

css基础知识九:说说flexbox(弹性盒布局模型),以及适用场景?

一、是什么 Flexible Box 简称 flex,意为”弹性布局”,可以简便、完整、响应式地实现各种页面布局 采用Flex布局的元素,称为flex容器container 它的所有子元素自动成为容器成员,称为flex项目item 容器中默认存在两条轴&#xf…

微服务04 分布式搜索引擎 elasticsearch DSL数据聚合 自动补全 数据同步 集群

微服务03 分布式搜索引擎 elasticsearch ELK kibana RestAPI 索引库 DSL查询 RestClient 黑马旅游 分布式搜索引擎03 1.数据聚合 聚合(aggregations)可以让我们极其方便的实现对数据的统计、分析、运算。例如: 什么品牌的手机最受欢迎&#x…

【Redis】Redis cluster 集群原理

前言 介绍优点: redis cluster集群模式,既拥有哨兵模式高可用、自动主从切换、高性能的特点,又解决了其只有单主结点承载数据量小的缺点。集群模式可以有多主结点,数据分散到多个主节点上,可以动态扩容。 槽分区的特点…

Rust in Action笔记 第七章 文件和存储

serde 库提供序列化(serialize)和反序列化(deserialize)的特征,通过derive生成,可以把rust的自定义类型(struct)转换成多种常用的兼容类型例如JSON、CBOR、bincode,用于在…

Hive函数(二)

1、炸裂函数 1.1、UDTF概述 定义: UDTF(Table-Generating Functions),接收一行数据,输出一行或多行数据。 1.1.1、explode(ARRAY a) 功能: 语法: select explode(array("a","b",&q…

多商户商城系统源码-加速度jsudo

为了能顺应时代的改变,很多企业都想要搭建一个类似天猫京东类型的b2b2c商城平台,但苦于没有专业的技术,所以他们都会选择成熟的b2b2c商城系统,但市面上的商城系统如此的多,如何选择呢?下面jsudo小编就来教…

函数式编程相关概念介绍

什么是函数式编程 函数式编程(Functional Programming)也称函数程序设计是一种编程范式,它将电脑运算视为函数运算,并且避免使用程序状态以及可变物件。 在js中,函数是一等公民,函数本身既可以作为其他函数…

spark12-13-14

12. Task线程安全问题 12.1 现象和原理 在一个Executor可以同时运行多个Task,如果多个Task使用同一个共享的单例对象,如果对共享的数据同时进行读写操作,会导致线程不安全的问题,为了避免这个问题,可以加锁&#xff…

操作系统—中断和异常、磁盘调度算法、操作系统其他内容

异常 时常由CPU*执行指令的内部事件引起,比如非法操作码、地址越界、算术溢出等,还有缺页异常、除0异常。同时,他会发送给内核,要求内核处理这些异常。 外中断 狭义上的中断指的就是外中断。由CPU执行指令以外的事件引起&#…

linux高并发网络编程开发(广播-组播-本地套接字)14_tcp udp使用场景,广播通信流程,组播通信流程,本地套接字通信流程,epoll反应堆模型

01 tcp udp使用场景 1.tcp使用场景 对数据安全性要求高的时候  登录数据的传输  文件传输http协议  传输层协议-tcp 2.udp使用场景 效率高-实时性要求比较高  视频聊天  通话有实力的大公司  使用upd  在应用层自定义协议,做数据校验 02 广播通信流程 广播…

LLM 开发实战系列 | 01:API进行在线访问和部署

在本文中,我们将使用Python编程语言来展示如何调用OpenAI的GPT-3.5模型。在开始之前,请确保您已经注册了OpenAI API并获得了访问凭证。 环境准备 下载python 方法1:官网 www.python.org 从最开始的开始,先到Python官网下载一个…

零基础自学:2023年的今天,请谨慎进入网络安全行业

前言 2023年的今天,慎重进入网安行业吧,目前来说信息安全方向的就业对于学历的容忍度比软件开发要大得多,还有很多高中被挖过来的大佬。 理由很简单,目前来说,信息安全的圈子人少,985、211院校很多都才建…

Linux中安装部署docker

目录 什么是docker系统环境要求安装和使用docker 什么是docker Docker是一个开源的容器化平台,用于帮助开发者更轻松地构建、打包、分发和运行应用程序。它基于容器化技术,利用操作系统层级的虚拟化来隔离应用程序和其依赖的环境。通过使用Docker&#…

javaEE进阶 -初识框架

目录 1.为什么要学框架? 框架的优点展示 2、项目的开发 2.1 Servlet 项目的开发 2.2 Spring Boot 项目开发 3 、Spring Boot编写代码 4、 Spring Boot 运行项目 5、验证程序 6、发布项目 主要讲解 四个框架。 1、Spring 2、Spring Boot 3、Spring NVC 4、…

别只盯着Docker了,这十大容器运行时错过后悔

文章目录 一、Docker二、Containerd三、CRI-O四、Firecracker五、gVisor六、Kata七、Lima八、Lxd九、rkt十、runC如何选择适合自己的容器运行时? MCNU云原生,文章首发地,欢迎微信搜索关注,更多干货,第一时间掌握&#…

Apikit 自学日记:数据结构

您可以将API文档中的重复部分提取出来成为数据结构,方便其他文档中复用。当数据结构发生改变时,所有引用了该数据结构的API文档会同步发生改变。 创建数据结构 进入数据结构管理页面,点击 添加数据结构 按钮,输入相关内容并保存…

XXL-JOB任务调度

简介: XXL-JOB 是一个分布式任务调度平台,其核心设计目标是开发迅速、学习简单、轻量级、易扩展。 官网:https://www.xuxueli.com/xxl-job/ 以下业务场景可用任务解决 某电商平台需要每天上午10点,下午3点,晚上8点发…

2023 高质量 Java 面试题集锦:高级 Java 工程师面试八股汇总

人人都想进大厂,当然我也不例外。早在春招的时候我就有向某某某大厂投岗了不少简历,可惜了,疫情期间都是远程面试,加上那时自身也有问题,导致屡投屡败。突然也意识到自己肚子里没啥货,问个啥都是卡卡卡卡&a…

炫技亮点 Websocket集群解决方案汇总

文章目录 问题方案方案一:~~Session共享~~(不可行)方案二:负载均衡器(状态路由)方案三:广播机制(异步方式 - 建议)方案四:路由转发(同步方式&…

【JS经验分享】你真的会写JS吗?满满干货,建议读三遍(2)

大家好,最近准备总结一下JS的经验,分享分享,有不对的欢迎讨论哈~ JS作为前端的基础技能,每一位前端开发都要运用熟练,但你真的会写JS吗?js全称JavaScript,是运行在浏览器上的脚本语言&#xff0…