【网站架构】项目越迭代越难、严重延期?那是没处理好变化

news2024/11/26 14:43:41

大家好,欢迎来到停止重构的频道。 

本期,我们讨论网站系统的扩展性。

扩展性指的是网站系统应该如何更好地处理需求变化、版本迭代。

对于有几个项目经验的人来说,可能对这样的问题不以为然,毕竟devops、CI/CD、git、敏捷开发、版本计划这些是耳濡目染的。

但是,很多项目还是会不断发生功能回退、每次版本发布几乎都要通宵、每次追加功能都需要花很长时间重新捋逻辑且bug频出。

这就是扩展性不好的表现,即使用上了与大公司一样的工具,效果也终将还是一塌糊涂。

其实,这是一个误区,扩展性并不单单是如何做好版本流程。

而是应该思考如何处理需求的变化,提升扩展性的关键是处理好需求的变化。

我们按这样的顺序讨论

  1. 迭代计划

  2. 代码规整

  3. 发布流程

迭代计划

迭代计划是非常重要的,很多项目的做法是,先明确上线日期,然后倒推每个功能点的完成时间

这样确实能做出一份看起来很漂亮的计划,但这样的计划是没有现实意义的,往往也只会延期再延期。

关于迭代计划详细的介绍可以参考我们往期的《项目过程》。

我们推荐的做法是 :根据业务架构把整个项目分为多个独立的子项目

然后把当前需要进行的子项目分为三个阶段:主功能阶段、次要功能阶段、优化阶段

之后,可按实际情况在每个阶段再细分迭代周期

这样的好处是能很好地适配需求变化主功能是不会变化的,也是优先保证的,不可能一开始要做一个直播平台,后来改做商城。 

次要功能一开始是需求模糊的,也是需求变化的主要部分,但主体功能做完后,次要功能也是会逐渐清晰,基本能判断次要功能的合理性。

优化需求是最无法预测的,甚至很多都是突发的灵感,这些需求建议是集中在优化阶段处理。一是可以等项目大体成型后再判断功能的合理性;二是冷却灵感冲动,能更加理性地判断功能的必要性,不然,这些小功能看似体量都不大,但回顾一些严重延期的项目,往往就是胡乱追加这些不起眼的小功能造成的。

代码规整

在往期视频中不断强调编码规则,因为网站项目的需求是会变化的,而且一般会一期二期三期地持续建设

很多项目的做法是,想适配未来的变化,把一些可能可以复用的代码抽离出来以减少后续的工作量。但是其实这样的做法不一定是好的。

抽离过多的通用代码会让代码结构十分臃肿,然感觉效率很高,但是一旦大版本迭代、团队人员流动的话,那代码就会变成一团乱麻

在前面《代码少并不代表效率》中已经讨论过,做项目是需要考虑到需求可能会变更,且以后需要持续迭代的

如果每次追加修改功能、排查BUG都需要长时间捋逻辑、定位修改点的话,那么项目只会越做越难

当然,代码规整并不等于采用哪一套编码规范、符合什么国际标准,而是让团队近似千人一面地完成编码任务,无论规则看起来多简单或笨拙。

这样无论谁接手或离开,都不会存在代码黑洞,因为大家写的代码基本逻辑是相似的。

这样做的话,还能让迭代计划更顺利的完成,这其实在缓解软件项目的一大难题,量化,能相对准确地量化工作量,就不会出现严重延期的情况。

关于代码规整化更详细的讨论,可以参考往期《前端规整化》、《后端规整化》 。

发布流程

发布流程最好是先发布到测试环境通过测试后再发布到生产环境,且测试期间不随意追加功能。当然为了节省发布成本,也可以只对大版本执行这样的流程。

为了防止人为问题,最好搭建CI/CD自动发布流程

由于不可能每次发布都对全功能进行测试,所以很难避免新版本不会对旧功能产生影响,最好的做法是灰度发布,但是全部功能都实现灰度发布是不现实的。

我们推荐的做法是(也是很多项目的做法),整理网站系统的主要功能,在每次发布完成后,都进行最小集测试(1小时内可测试完),以保证主体功能不会出现问题。

另外,除非紧急漏洞,发布周期最好限制在一周一次,且最好不要在周五发布(周末很难第一时间响应),频繁且随意地发布可能会出现一些意想不到的突发问题,这些问题会无形中不断打乱计划

根据项目规模,最好保留2次以上的历史版本备份,以便快速恢复,版本备份让团队有了暂时不修改问题的选择

因为一些时候,新版本其实无关紧要,而正在进行的迭代可能十分重要,需要保证工期。

总结

以上是扩展性需要思考的几个关键问题,这些问题与我们使用什么工具无关。

但如果处理好这些问题,那么项目就会变得顺畅。

把变化考虑进来,会让架构、管理更加有用可行。

​我们应该更加理性地接受和处理变化,而不是永远想着,顶一顶,就扛过去了。

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

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

相关文章

Pytest测试框架(一):Pytest介绍与安装,Pytest编写规则及pytest.main()的参数

Pytest测试框架(1):Pytest介绍与安装 pytest简介: pytest是python的第三方单元测试框架,比自带的unittest更简洁和高效,同时兼容unittest框架。 它还有如下优点: 1、简单灵活,容易上手,文档丰…

计算机毕业设计django基于python精品课程在线学习系统

项目介绍 在各学校的教学过程中,租房系统是一项非常重要的事情。随着计算机多媒体技术的发展和网络的普及。采用当前流行的B/S模式以及3层架构的设计思想通过Python技术来开发此系统的目的是建立一个配合网络环境的精品课程系统的平台,这样可以有效地解决课程学习系统混乱的局…

线上卡顿监控

文章目录1. 卡顿与ANR的关系2. 卡顿原理3. 卡顿监控3.1 WatchDog3.2 Looper Printer3.2.1 监控TouchEvent卡顿3.2.2 监控IdleHandler卡顿3.2.3 监控SyncBarrier泄漏4. 小结平时看博客或者学知识,学到的东西比较零散,没有独立的知识模块概念,而…

世界杯期间,抖音的涨粉秘诀是什么?

纵览11月抖音涨粉趋势,生活、体育、美食等领域有不少账号迅速圈粉。据新抖『粉丝飙升榜』TOP30显示,11月上榜达人的更替率高达83.3%,其中,有达人凭3条人物随拍视频涨粉千万;有达人凭硬核美食教程,被网友戏称…

网络工程毕业设计 SSM音乐管理系统(源码+论文)

文章目录1 项目简介2 实现效果2.1 界面展示3 设计方案3.1 概述3.2 系统流程3.2.1 系统开发流程3.3 系统结构设计4 项目获取1 项目简介 Hi,各位同学好呀,这里是M学姐! 今天向大家分享一个今年(2022)最新完成的毕业设计项目作品,【…

【Python】基础语法 5(字典和文件)

1. 字典 1.1 字典是什么 字典是一种存储键值对的结构。 键值对是计算机/生活中一个非常广泛使用的概念。 把 键(key) 和 值(value) 进行一个一对一的映射, 然后就可以根据键, 快速找到值。 1.2 创建字典 创建一个空的字典,使用 { } 表示字典 a { } b dict() prin…

RabbitMQ之交换机

Exchanges概念 RabbitMQ消息传递模型的核心思想是:生产者生产的消息从不会直接发送到队列。实际上,通常生产者甚至都不知道这些消息传递到了哪些队列中。 相反,生产者只能将消息发送到交换机,交换机工作的内容很简单,…

【数据结构】详解七大排序算法(有源码)

目录☀️直接插入排序☀️希尔排序☀️直接选择排序☀️堆排序☀️冒泡排序☀️快速排序☀️归并排序☀️排序算法复杂度及稳定性分析☀️直接插入排序 1、基本思想 把待排序的数按其关键码值的大小逐个插入到一个已经排好序的有序序列中,直到所以的记录插入完为止…

【设计模式】装饰者模式Decorator(Java)

文章目录1. 装饰者模式定义2. 类图3.Java实现3.1 饮料Beverage3.2 小料CondimentDecorator3.3 椰果Coconut3.4 红豆RedBean3.5 奶茶MikeTea3.6 果茶JuiceTea3.7 商店主方法StoreMain1. 装饰者模式定义 装饰者模式动态地将责任附加到对象上。若要扩展功能,装饰者提供…

享元模式

文章目录享元模式1.享元模式的本质2.何时选用享元模式3.优缺点4.享元模式的结构5.实现最初实现享元模式初步改造享元模式再改进享元模式再优化享元模式 享元模式最开始看就是类似缓存,缓存一些信息,节约查询时间,以空间换时间 但是再理解后才…

一行代码就能完成的事情,为什么要写两行

今天休息休息&#xff0c;复习一下使用的简洁运算方式以及常用的单行代码 三元运算符 用三元运算符代替简单的if else if (age < 18) {me 小姐姐; } else {me 老阿姨; } 改用三元运算符,一行就能搞定 me age < 18 ? 小姐姐 : 老阿姨; 复杂的判断三元运算符就有点…

这才是最适合新手的python教程(最新版python3.10)

前言 这几年&#xff0c;Python 凭借着语法简洁、跨平台、类库丰富、可扩展、开放源码等特点&#xff0c;成为了 AI 和机器学习时代的第一编程语言。甚至击破铁三角&#xff08; Java、C、C&#xff09;的架构&#xff0c;荣登 TIOBE 榜单的榜首。 身边有不少程序员都选择 Pyt…

LEADTOOLS 入门教程: 检测和提取条形码 - .NET Core

LEADTOOLS是一个综合工具包的集合&#xff0c;用于将识别、文档、医疗、成像和多媒体技术整合到桌面、服务器、平板电脑、网络和移动解决方案中&#xff0c;是一项企业级文档自动化解决方案&#xff0c;有捕捉&#xff0c;OCR&#xff0c;OMR&#xff0c;表单识别和处理&#x…

漏洞丨PDF Explorer 1.5.66.2 - Buffer Overflow

作者&#xff1a;黑蛋 一、漏洞简介 这是一个栈溢出漏洞&#xff0c;一个叫PDF Explorer的软件&#xff08;干嘛的咱没必要知道&#xff09;&#xff0c;他对于用户输入内容长度没有限制造成栈溢出漏洞。 二、漏洞环境 虚拟机 目标程序 调试器 win7x86 PDF Explorer x32…

NeurIPS 2022 | MoVQ: 基于Modulating Quantized Vectors的高保真图像生成

原文标题&#xff1a;MoVQ: Modulating Quantized Vectors for High-Fidelity Image Generation 一、问题提出 虽然两级Vector Quantized (VQ)【指VQVAE-2】生成模型允许合成高保真和高分辨率图像&#xff0c;但它们的量化操作符将图像中的相似patch编码到相同的索引中&#…

2023年MBA联考英语(二)大作文:关于某高校大学生的十大主题

2023年管理类联考倒计时9天&#xff01;在历年的联考英语二作文主题中&#xff0c;大学生群体是时长会出现一期的&#xff0c;这既是对联考中部分专业涉及大学生群体的一种反映&#xff0c;也是因为这个群体的话题对大多数考生来讲都相对熟悉&#xff0c;毕竟都是从这个阶段经历…

世界杯竞猜项目Dapp-第四章(subgraph)

subgraph 是什么 subgraph 索引协议作为 Dapp 领域最重要的基建之一&#xff08;如 uniswap、wave 等都在使用&#xff09;&#xff0c;主要用来做链上数据索引&#xff0c;即在链下对链上事件进行捕捉&#xff08;扫链、计算、存储&#xff09;&#xff0c;然后可对存储下来的…

CAN总线学习笔记 | CAN盒测试STM32的CAN中断接收

CAN基础知识介绍文中介绍了CAN协议的基础知识&#xff0c;以及STM32F4芯片的CAN控制器相关知识&#xff0c;下面将通过实例&#xff0c;利用STM32CubeMX图形化配置工具&#xff0c;并配合CAN盒&#xff0c;来实现CAN通讯的中断收发测试 一、STM32CubeMX配置 CAN是挂载在APB1总…

《钱进球场》:球场争锋·棒球1号位

动画《钱进球场》改编自森高夕次原作、足立刑事著同名体育漫画&#xff0c;于2017年3月宣布动画化 &#xff0c;由STUDIO DEEN负责动画制作&#xff0c;于2018年4月6日起播出。动画第二期于2018年10月5日开始播出。全24话。 中文名 钱进球场 原版名称 グラゼニ 动画制作 Stud…

pytorch 生成手写数字图像

生成对抗网络的概念 最基本的GAN模型由一个生成器 G 和判别器 D 组成。生成器用于生成假样本&#xff0c;判别器用于判断样本是真实的还是假的。 生成器(Generator)&#xff1a;通过机器生成数据&#xff08;大部分情况下是图像&#xff09;&#xff0c;目的是“骗过”判别器…