当前位置: 首页 > news >正文

设计心得——平衡和冗余

一、平衡

在前面分析了一些软件设计的基础和原则后,今天分析一下整体设计上的一些实践问题。首先分析一下设计上的平衡问题。平衡非常好理解,看到过天平或者标称的同学们应该都知道什么平衡。无论在哪个环境里,平衡都是稳定的基础。
既然说到了稳定,大家应该明白了平衡在软件设计中的重要性了吧。再抽象一下,秩序的稳定就是各方势力平衡的结果,也就是常说的“斗而不破”。到此大家应该明白了平衡在软件设计中的意思,就是在当前环境下对各种需求的一种适当的资源的分配。它既考虑了现在的实际需求,也适当展望了一下未来的发展;既兼顾了经济投入,又考虑了实际产出;既追求了一定的软件运行效率,又考虑了资源占有数量;既考虑了用户的实际体验,又适当照顾了开发者的技术实现,如此等等。
平衡不是说某一方一拍脑袋就决定的,它通常是一种“软博弈”的结果。所谓软博弈,就是用户、对接人、市场、架构设计和开发等人的互相妥协的结果。如果开发者有机会做到软件负责人或者首席架构师的角色,就会深深的体会上面的意思。
它的主要体现是什么?对开发人员来说,就是不断改变的需求的细节的变化。也是网上那个漫画,开发者声嘶力竭的喊“不许再更改需求了!”
需要提醒大家的是,平衡不是一成不变的,它是一个动态的过程,是一个不断演进和变化的过程,直到软件生命周期的结束。

二、冗余

如果说平衡是一个综合的整体上的问题,那么冗余就比较偏向于软件设计开发团队这一方了。冗余是什么意思?就是闲事儿管得太多。体现到软件设计和开发上,就是为实现一个功能用了一个以上的方法。或者这么说可能更好理解,一个功能实现了至少两次及以上,其使用的方法有可能相似甚至相同。那么冗余是完全和设计原则中的某些原则是完全相悖的,可它为什么还存在呢?只有一个原因,就是为了安全和稳定,或者说冗余其实就是一种灾备技术。
冗余有很多种:
1、功能冗余:就如上面提到的,一个功能模块被开发了两次以上。
2、任务冗余:实现一个任务使用了多个软件进程处理,然后利用算法来处理结果得到正确的选项,最典型的就是分布式算法中的选举。
3、开发冗余:就是为保证任务的安全性,利用多种技术架构方法甚至多个团队来实现同一个功能,然后通过某种机制来保证结果的安全性。注意和任务冗余的区别,前者是同一个软件实现的多个副本运行;而开发冗余是多个软件实现(同一功能)。
4、时间冗余:这个比较好理解,不断的在不同的时间点采样,验证结果的准确性和安全性。
5、指令冗余:这个属于一种底层的安全处理,保证程序在异常的情况下帮助程序恢复正常运行。

三、设计应用

在软件设计和实际应用中,人们发现,科学研究和工程实践有一个明显的不同在于,科学研究讲究的是严谨的推导。而工程实践讲究的是最终结果。什么意思呢?比如证明一个问题,科学证明它是不能完全成立的,但工程实践发现如果多试几次它就一定能成功。所以这个问题在工程上就是可行的,而在科学研究上是不成立的。
所以在实际的工程实践特别是在互联大规模应用的今天,平衡和冗余早就渗透到了软件应用的各个方面。
平衡的设计有很多种,比如常见的以时间换空间或以空间换时间,开发效率与开发速度,算法选择与程序性能等等。在实际的开发中,最典型的往往是牺牲一定的功能和性能,尽快的把程序开发出来并上线应用。互联网效率是第一位的,先机一旦失去,往往意味着再好的项目也极大可能就砍掉了。这样的例子现在回头看,可比比皆是,最典型的就是常用的微信,大家可以看看其如何研发出来的过程。
而冗余就重要了,在软件开发中,冗余往往无法具象化,往往让人觉得有设计或者开发者“抽抽”的印象。但在运维中却可以非常明显的体现出来,比如实际的网络事故中,某公司使用某云,结果挂了,损失了不少钱。同样,做过数据存储的开发者知道,数据往往不能完全存储到一个硬盘上,简单的使用阵列,复杂的要多点存储。这就是冗余。冗余的问题在于,到底冗余多少才是最安全的以及最具有性价比的。比如刚刚说到的数据存储冗余,是一个机器两块硬盘还是一个机房两个不同的机器硬盘还是不同机房甚至不同的物理地域。
冗余其实就是平衡的一种手段,上面出事故的公司虽然明白云也是有风险的,但他们选择了相信云的风险不会搞到自己头上。或者说即使出现事故是那种不可忍受的事故的可能性极低,怎么个意思呢?低到与自己在公司或者其它云上再备份一份的成本要低不少。这就是平衡,平衡风险与奖金投入的问题。

四、例子

平衡的例子太多了,这里举一个简单的。实际开发中遇到客户要求两个月交付上线使用,并且提出了各种要求。老板因为成本的问题,只给开发团队两个人。两个开发者即使考虑了加班,发现时间也非常不足。此时,就会和客户讨论需求的细节(忽略一些参与方),对某些不太重要的或者不急切的需求,不开发或者推到二期。在这个过程中,客户方提出了某某功能必须上线,可以加钱。这不就到达了平衡的第一步么。多给钱,开发者加班,砍掉非必要功能,这就基本达到了初步的平衡。
到于冗余更好理解,举一个比较极端的例子,银行的数据保存在哪儿?比如都保存在一个大家看起来非常安全的地方,但某一天,万年洪水或超级地震袭击,数据全丢失了,客户会怎么想?所以,对于大银行的数据一定是异地多处保存备份,比如大西北一份,东北一份,南方和北方再各来一份,这数据不就近似于百分百安全了。不可能这天南海北的几个地方同时有超级大的灾难或不可控的风险出现。

五、总结

软件设计不光是技术的问题,纯技术流往往会产生一种唯技术论的现象。软件的设计是一种现实与计算机交互融合的过程,往往涉及到技术之外的经济性、效率性、公平性等等具体的社会问题。软件设计是把软件的实现与实现世界结合起来,服务于现实世界,而不是一种独立存在。
要始终明白,实际的需求才是软件技术发展的根本动力!

相关文章:

设计心得——平衡和冗余

一、平衡 在前面分析了一些软件设计的基础和原则后,今天分析一下整体设计上的一些实践问题。首先分析一下设计上的平衡问题。平衡非常好理解,看到过天平或者标称的同学们应该都知道什么平衡。无论在哪个环境里,平衡都是稳定的基础。 既然说到…...

webrtc协议详细解释

### 一、概述与背景 WebRTC(Web Real-Time Communication)最早由 Google 在 2011 年开源,旨在为浏览器与移动端应用提供客户端直连(点对点)方式进行实时音视频及数据传输的能力。传统的网络应用在进行高实时性音视频通…...

动手学强化学习(四)——蒙特卡洛方法

一、蒙特卡洛方法 蒙特卡洛方法是一种无模型(Model-Free)的强化学习算法,它通过直接与环境交互采样轨迹(episodes)来估计状态或动作的价值函数(Value Function),而不需要依赖环境动态…...

网络原理(3)—— 传输层详解

目录 一. 再谈端口号 二. UDP协议(用户数据报协议) 2.1 UDP协议端格式 2.2 UDP报文长度 2.3 UDP校验和 三. TCP协议(传输控制协议) 3.1 TCP协议段格式 3.2 核心机制 3.2.1 确认应答 —— “感知对方是否收到” 3.2.2 超时重传 3.3.3 连接管理 —— 三次握手与四…...

2025美赛美国大学生数学建模竞赛A题完整思路分析论文(43页)(含模型、可运行代码和运行结果)

2025美国大学生数学建模竞赛A题完整思路分析论文 目录 摘要 一、问题重述 二、 问题分析 三、模型假设 四、 模型建立与求解 4.1问题1 4.1.1问题1思路分析 4.1.2问题1模型建立 4.1.3问题1样例代码(仅供参考) 4.1.4问题1样例代码运行结果&…...

Elasticsearch的开发工具(Dev Tools)

目录 说明1. **Console**2. **Search Profiler**3. **Grok Debugger**4. **Painless Lab**总结 说明 Elasticsearch的开发工具(Dev Tools)在Kibana中提供了多种功能强大的工具,用于调试、优化和测试Elasticsearch查询和脚本。以下是关于Cons…...

Python-基于PyQt5,pdf2docx,pathlib的PDF转Word工具

前言:日常生活中,我们常常会跟WPS Office打交道。作表格,写报告,写PPT......可以说,我们的生活已经离不开WPS Office了。与此同时,我们在这个过程中也会遇到各种各样的技术阻碍,例如部分软件的PDF转Word需要收取额外费用等。那么,可不可以自己开发一个小工具来实现PDF转…...

小程序-视图与逻辑

前言 1. 声明式导航 open-type"switchTab"如果没有写这个,因为是tabBar所以写这个,就无法跳转。路径开始也必须为斜线 open-type"navigate"这个可以不写 现在开始实现后退的效果 现在我们就在list页面里面实现后退 2.编程式导航…...

UE5制作视差图

双目深度估计开源数据集很多都是用UE制作的,那么我们自己能否通过UE制作自己想要的场景的数据集呢。最近花了点时间研究了一下,分享给需要的小伙伴。 主要使用的是UnrealCV插件,UnrealCV是一个开源项目,旨在帮助计算机视觉研究人…...

海浪波高预测(背景调研)

#新星杯14天创作挑战营第7期# ps:图片由通义千问生成 历史工作: 针对更高细粒度、更高精度的波浪高度预测任务: Mumtaz Ali 等人提出了一种多元线性回归模型(MLR-CWLS),该模型利用协方差加权最小二乘法&a…...

代码随想录算法训练营第四十二天-动态规划-股票-188.买卖股票的最佳时机IV

题目要求进行k次买卖其实就是上一题的扩展,把2次扩展为k次定义动规数组依然是二维,第一个维度表示第几天,第二个维度表示第几次买入和卖出所以第二个维度的长度应该是2k1在for循环内,要使用一个内循环来表示第几次买入或卖出&…...

Gradle配置指南:深入解析settings.gradle.kts(Kotlin DSL版)

文章目录 Gradle配置指南:深入解析settings.gradle.kts(Kotlin DSL版)settings.gradle.kts 基础配置选项单项目配置多项目配置 高级配置选项插件管理(Plugin Management)基础配置模板案例:Android项目标准配…...

软件工程经济学-日常作业+大作业

目录 一、作业1 作业内容 解答 二、作业2 作业内容 解答 三、作业3 作业内容 解答 四、大作业 作业内容 解答 1.建立层次结构模型 (1)目标层 (2)准则层 (3)方案层 2.构造判断矩阵 (1)准则层判断矩阵 (2)方案层判断矩阵 3.层次单排序及其一致性检验 代码 …...

论文阅读(三):微阵列数据的图形模型和多变量分析

1.论文链接:Graphical Models and Multivariate Analysis of Microarray Data 摘要: 基因表达数据的通常分析忽略了基因表达值之间的相关性。从生物学上讲,这种假设是不合理的。本章介绍的方法允许通过稀疏高斯图形模型来描述基因之间的相关…...

【大模型LLM面试合集】大语言模型架构_MHA_MQA_GQA

MHA_MQA_GQA 1.总结 在 MHA(Multi Head Attention) 中,每个头有自己单独的 key-value 对;标准的多头注意力机制,h个Query、Key 和 Value 矩阵。在 MQA(Multi Query Attention) 中只会有一组 k…...

向上调整算法(详解)c++

算法流程: 与⽗结点的权值作⽐较,如果⽐它⼤,就与⽗亲交换; 交换完之后,重复 1 操作,直到⽐⽗亲⼩,或者换到根节点的位置 这里为什么插入85完后合法? 我们插入一个85,…...

【Transformer】手撕Attention

import torch from torch import nn import torch.functional as F import mathX torch.randn(16,64,512) # B,T,Dd_model 512 # 模型的维度 n_head 8 # 注意力头的数量多头注意力机制 class multi_head_attention(nn.Module): def __init__(self, d_model, n_hea…...

844.比较含退格的字符串

目录 题目思路解法收获 题目 给定 s 和 t 两个字符串,当它们分别被输入到空白的文本编辑器后,如果两者相等,返回 true 。# 代表退格字符。 注意:如果对空文本输入退格字符,文本继续为空。 思路 如何解退格之后left…...

图书管理系统 Axios 源码__编辑图书

目录 功能概述: 代码实现(index.js): 代码解析: 图书管理系统中,删除图书功能是核心操作之一。下是基于 HTML、Bootstrap、JavaScript 和 Axios 实现的删除图书功能的详细介绍。 功能概述: …...

LabVIEW纤维集合体微电流测试仪

LabVIEW开发纤维集合体微电流测试仪。该设备精确测量纤维材料在特定电压下的电流变化,以分析纤维的结构、老化及回潮率等属性,对于纤维材料的科学研究及质量控制具有重要意义。 ​ 项目背景 在纤维材料的研究与应用中,电学性能是评估其性能…...

Python|GIF 解析与构建(5):手搓截屏和帧率控制

目录 Python|GIF 解析与构建(5):手搓截屏和帧率控制 一、引言 二、技术实现:手搓截屏模块 2.1 核心原理 2.2 代码解析:ScreenshotData类 2.2.1 截图函数:capture_screen 三、技术实现&…...

日语AI面试高效通关秘籍:专业解读与青柚面试智能助攻

在如今就业市场竞争日益激烈的背景下,越来越多的求职者将目光投向了日本及中日双语岗位。但是,一场日语面试往往让许多人感到步履维艰。你是否也曾因为面试官抛出的“刁钻问题”而心生畏惧?面对生疏的日语交流环境,即便提前恶补了…...

AI Agent与Agentic AI:原理、应用、挑战与未来展望

文章目录 一、引言二、AI Agent与Agentic AI的兴起2.1 技术契机与生态成熟2.2 Agent的定义与特征2.3 Agent的发展历程 三、AI Agent的核心技术栈解密3.1 感知模块代码示例:使用Python和OpenCV进行图像识别 3.2 认知与决策模块代码示例:使用OpenAI GPT-3进…...

汽车生产虚拟实训中的技能提升与生产优化​

在制造业蓬勃发展的大背景下,虚拟教学实训宛如一颗璀璨的新星,正发挥着不可或缺且日益凸显的关键作用,源源不断地为企业的稳健前行与创新发展注入磅礴强大的动力。就以汽车制造企业这一极具代表性的行业主体为例,汽车生产线上各类…...

微服务商城-商品微服务

数据表 CREATE TABLE product (id bigint(20) UNSIGNED NOT NULL AUTO_INCREMENT COMMENT 商品id,cateid smallint(6) UNSIGNED NOT NULL DEFAULT 0 COMMENT 类别Id,name varchar(100) NOT NULL DEFAULT COMMENT 商品名称,subtitle varchar(200) NOT NULL DEFAULT COMMENT 商…...

优选算法第十二讲:队列 + 宽搜 优先级队列

优选算法第十二讲:队列 宽搜 && 优先级队列 1.N叉树的层序遍历2.二叉树的锯齿型层序遍历3.二叉树最大宽度4.在每个树行中找最大值5.优先级队列 -- 最后一块石头的重量6.数据流中的第K大元素7.前K个高频单词8.数据流的中位数 1.N叉树的层序遍历 2.二叉树的锯…...

HarmonyOS运动开发:如何用mpchart绘制运动配速图表

##鸿蒙核心技术##运动开发##Sensor Service Kit(传感器服务)# 前言 在运动类应用中,运动数据的可视化是提升用户体验的重要环节。通过直观的图表展示运动过程中的关键数据,如配速、距离、卡路里消耗等,用户可以更清晰…...

JVM虚拟机:内存结构、垃圾回收、性能优化

1、JVM虚拟机的简介 Java 虚拟机(Java Virtual Machine 简称:JVM)是运行所有 Java 程序的抽象计算机,是 Java 语言的运行环境,实现了 Java 程序的跨平台特性。JVM 屏蔽了与具体操作系统平台相关的信息,使得 Java 程序只需生成在 JVM 上运行的目标代码(字节码),就可以…...

七、数据库的完整性

七、数据库的完整性 主要内容 7.1 数据库的完整性概述 7.2 实体完整性 7.3 参照完整性 7.4 用户定义的完整性 7.5 触发器 7.6 SQL Server中数据库完整性的实现 7.7 小结 7.1 数据库的完整性概述 数据库完整性的含义 正确性 指数据的合法性 有效性 指数据是否属于所定…...

站群服务器的应用场景都有哪些?

站群服务器主要是为了多个网站的托管和管理所设计的,可以通过集中管理和高效资源的分配,来支持多个独立的网站同时运行,让每一个网站都可以分配到独立的IP地址,避免出现IP关联的风险,用户还可以通过控制面板进行管理功…...