各种协议设计
这些设计问题背后的核心本质可以总结为以下几个关键原则,我将结合不同领域为您系统讲解:
一、核心设计原则(本质层面)
-
抽象与分层
-
本质:将复杂系统分解为不同层次的抽象(物理层/逻辑层/业务层)
-
示例:TCP协议的分层设计(物理层→数据链路层→网络层→传输层)
-
应用:数据库设计中的三级模式(外模式→概念模式→内模式)
-
状态与协议
-
本质:任何交互都包含状态转移和协议约定
-
示例:TCP三次握手(SYN-SYN-ACK状态转移)
-
应用:类设计中成员变量的状态管理(有限状态机模式)
-
正交性与扩展性
-
本质:通过正交分解降低系统耦合度
-
示例:HTTP协议头部与body的分离设计
-
应用:数据库表字段的原子性设计(第一范式)
二、通用设计方法论
-
四元组设计法(适用于所有字段/协议设计):
-
数据标识(唯一性)
-
数据类型(结构定义)
-
数据语义(业务含义)
-
数据生命周期(时效性)
-
-
协议设计黄金三角:
mermaid
复制
graph TD A[协议设计] --> B[语法(Syntax)] A --> C[语义(Semantics)] A --> D[时序(Timing)]
三、领域应用实例
-
数据库字段设计:
-
遵循CAP定理的权衡(如最终一致性设计)
-
示例:订单表字段设计:
sql
复制
CREATE TABLE orders (order_id UUID PRIMARY KEY, -- 唯一标识status ENUM('created','paid','shipped'), -- 状态机amount DECIMAL(10,2) CHECK(amount>0), -- 业务语义version INT DEFAULT 0 -- 乐观锁控制 );
-
网络协议设计:
-
TCP协议核心字段设计启示:
复制
0 1 2 3 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | Source Port | Destination Port | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | Sequence Number | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | Acknowledgment Number | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | Data | |U|A|P|R|S|F| | | Offset| Reserved |R|C|S|S|Y|I| Window | | | |G|K|H|T|N|N| | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
设计要点:状态位复用(6个标志位共用2字节)、滑动窗口机制、序列号设计
-
类成员变量设计:
-
遵循SOLID原则的示例:
java
复制
class PaymentProcessor {// 单一职责原则:只包含支付相关状态private PaymentGateway gateway; // 依赖抽象private TransactionLog log; // 正交功能分离// 开闭原则:通过配置参数保持扩展性private PaymentConfig config;// 状态管理封装private PaymentState state = PaymentState.INIT; }
四、现实世界抽象方法论
-
**领域驱动设计(DDD)**四层模型:
-
战略模式:限界上下文划分
-
战术模式:实体/值对象/聚合根设计
-
实现模式:Repository/Factory设计
-
-
四色建模法:
-
Moment-Interval(时效性对象)
-
Role(角色抽象)
-
Description(描述型对象)
-
Party/Place/Thing(参与方/地点/物品)
-
五、推荐学习资料
-
经典书籍:
-
《Design Patterns: Elements of Reusable Object-Oriented Software》(设计模式圣经)
-
《Patterns of Enterprise Application Architecture》(企业应用架构模式)
-
《TCP/IP Illustrated Volume 1》(协议设计必读)
-
-
论文与RFC:
-
"End-to-End Arguments in System Design"(端到端原则经典论文)
-
RFC 793(TCP协议规范)
-
RFC 2616(HTTP/1.1协议)
-
-
视频资源:
-
MIT 6.824 Distributed Systems(分布式系统设计)
-
Stanford CS144 Introduction to Computer Networking(网络协议实现)
-
《领域驱动设计实战》- 极客时间
-
六、设计题通用解法
-
四步设计法:
复制
需求澄清 → 抽象建模 → 接口设计 → 异常处理
-
设计检查清单:
-
唯一性约束如何处理?
-
向后兼容性如何保证?
-
流量控制和错误恢复机制?
-
数据一致性与性能的平衡?
-
建议通过实际项目练习,例如:
-
设计一个支持撤回功能的聊天协议
-
设计电商秒杀系统的库存字段
-
实现支持插件扩展的类结构
这些设计本质的掌握需要结合具体场景反复实践。建议从简单协议设计开始(如实现一个Redis协议解析器),逐步深入到复杂系统设计。当您能在不同领域看到相同的设计模式时,就真正掌握了设计的本质。
这篇论文《End-to-End Arguments in System Design》由J.H. Saltzer、D.P. Reed和D.D. Clark撰写,首次发表于1981年,是计算机系统设计领域的经典文献之一。论文提出了“端到端原则”(End-to-End Argument),这一原则在分布式系统设计中具有深远的影响。以下是对论文的精读和核心内容的总结:
1. 核心思想:端到端原则
端到端原则的核心观点是:某些功能(如可靠性、安全性等)应该由系统的最终应用层来实现,而不是由底层的通信子系统来实现。原因在于:
-
应用层是唯一能够完全理解并正确实现这些功能的地方。底层系统(如网络协议)无法完全理解应用层的需求,因此即使底层提供了部分功能,应用层仍然需要额外的检查和处理。
-
底层提供的功能往往是冗余的。底层系统可能会为了性能优化而提供部分功能,但这些功能并不能完全替代应用层的需求。
关键论点:只有在应用层才能确保功能的完整性和正确性,底层系统提供的功能只能作为性能优化手段,而不能替代应用层的实现。
2. 案例分析:可靠文件传输
论文通过“可靠文件传输”的案例详细阐述了端到端原则:
-
问题描述:将文件从计算机A传输到计算机B,确保文件在传输过程中不被损坏。
-
潜在威胁:
-
磁盘读取错误
-
软件错误(文件系统、传输程序、通信系统)
-
硬件错误(处理器或内存故障)
-
网络错误(丢包、数据损坏、重复包)
-
-
解决方案:
-
底层方案:在通信子系统中提供可靠性保证(如校验和、重传机制)。
-
端到端方案:在应用层实现文件校验和(checksum)和重传机制。
-
-
结论:即使通信子系统提供了可靠性保证,应用层仍然需要实现端到端的校验和重传机制。因此,通信子系统的可靠性功能只能减少应用层的重传次数,而不能替代应用层的功能。
3. 其他应用场景
论文进一步将端到端原则扩展到其他系统设计场景:
-
交付确认(Delivery Acknowledgement):
-
网络层的确认(如ARPANET的RFNM)只能确认消息到达目标主机,而不能确认目标应用是否处理了消息。
-
真正的确认需要由应用层实现(如“两阶段提交协议”)。
-
-
数据加密(Secure Transmission):
-
网络层的加密无法保护数据在目标节点内的安全。
-
应用层加密可以确保端到端的安全性,并提供身份验证。
-
-
重复消息抑制(Duplicate Message Suppression):
-
网络层无法完全消除重复消息(如应用层重试导致的重复)。
-
应用层需要实现自己的重复检测机制。
-
-
消息顺序保证(FIFO Delivery):
-
网络层的FIFO保证仅限于同一虚拟电路。
-
分布式应用需要更高层的机制来确保操作的顺序。
-
4. 性能与工程权衡
端到端原则并不意味着底层系统完全不需要提供任何功能。论文指出:
-
性能优化:底层系统可以通过提供部分功能(如校验和、重传)来减少应用层的负担,从而提高整体性能。
-
工程权衡:底层系统的功能设计应基于性能需求,而不是正确性需求。过度设计底层系统可能会导致不必要的开销。
关键观点:底层系统的功能设计应尽量减少对应用层的干扰,同时为应用层提供足够的灵活性。
5. 端到端原则的适用范围
端到端原则并不是绝对的,其适用性取决于具体的应用场景。例如:
-
实时语音传输:低层的可靠性机制(如重传)可能会引入延迟,影响实时性。因此,语音应用更适合接受部分数据损坏,而不是追求完美传输。
-
语音存储系统:对于存储系统,数据的准确性比实时性更重要,因此低层的可靠性机制是有价值的。
6. 历史背景与相关研究
论文回顾了端到端原则的历史背景和相关研究:
-
早期案例:MIT的兼容分时系统(CTSS)中的“wait”消息。
-
加密领域:Branstad(1973)首次公开讨论了加密中的端到端原则。
-
分布式系统:两阶段提交协议(Gray, Lampson, Reed)是端到端原则的典型应用。
7. 结论
端到端原则是系统设计中的一种“奥卡姆剃刀”原则,它指导设计者将功能放置在最适合的层次(通常是应用层)。这一原则不仅适用于通信系统,也适用于操作系统、数据库系统等其他领域。
主要贡献:
-
提出了端到端原则,明确了功能放置的指导方针。
-
通过多个案例展示了端到端原则的广泛应用。
-
强调了性能与正确性之间的工程权衡。
8. 启示与思考
-
设计哲学:端到端原则提醒我们,系统设计应避免过度依赖底层机制,而应关注应用层的需求。
-
实际应用:在现代分布式系统(如微服务架构、区块链)中,端到端原则仍然具有重要的指导意义。
-
扩展阅读:可以结合CAP定理、分布式一致性协议(如Paxos、Raft)进一步理解端到端原则的实践。
这篇论文的核心价值在于它提供了一种通用的设计哲学,帮助设计者在复杂的系统设计中做出更合理的决策。通过理解端到端原则,我们可以更好地设计协议、字段、类成员变量等,确保系统的正确性和灵活性
相关文章:
各种协议设计
这些设计问题背后的核心本质可以总结为以下几个关键原则,我将结合不同领域为您系统讲解: 一、核心设计原则(本质层面) 抽象与分层 本质:将复杂系统分解为不同层次的抽象(物理层/逻辑层/业务层)…...

DockerFile详细学习
目录 1.DockerFile介绍 2.DockerFile常用指令 3.指令详细讲解 4.实例 构建Node-Exporter 构建Alertmanager 构建Mariadb 1.DockerFile介绍 什么是 Dockerfile? Dockerfile 是一个文本文件,包含了构建 Docker 镜像的所有指令。 Dockerfile 是一…...
Windows Docker笔记-简介摘录
Docker是一个开源的容器化平台,可以帮助开发人员将应用程序与其依赖项打包在一个独立的容器中,然后在任何安装的Docker的环境中快速、可靠地运行。 几个基本概念和优势: 1. 容器 容器是一个轻量级、独立的运行环境,包含了应用程…...

TeamSpeak开黑频道加入 —— 点歌机器人 (细致讲解100%学会)
文章目录 前言:搭建Ubuntu云服务器选择服务器:打开防火墙(前置工作):下载Xshell 连接: 创建机器人工作路径创建新用户teamspeak:升级新用户teamspeak的访问权限:切换为teamspeak用户并为机器人创建文件夹: 下载机器人本体安装依赖库:下载TS3…...

2025简约的打赏系统PHP网站源码
源码介绍 2025简约的打赏系统PHP网站源码 源码上传服务器,访问域名/install.php安装 支持自定义金额打赏 集成支付宝当面付 后台管理系统 订单记录查询 效果预览 源码获取 2025简约的打赏系统PHP网站源码...

网络安全 | 零信任架构:重构安全防线的未来趋势
网络安全 | 零信任架构:重构安全防线的未来趋势 一、前言二、零信任架构的核心概念与原理2.1 核心概念2.2 原理 三、零信任架构的关键技术组件3.1 身份管理与认证系统3.2 授权与访问控制系统3.3 网络与安全监测系统3.4 加密与数据保护技术 四、零信任架构与传统安全…...
JavaScript系列(62)--实时通信系统实现详解
JavaScript实时通信系统实现详解 🔄 今天,让我们深入探讨JavaScript的实时通信系统实现。实时通信是现代Web应用中不可或缺的一部分,它能够提供即时的数据交互和更好的用户体验。 WebSocket通信基础 🌟 💡 小知识&am…...

【蓝桥杯嵌入式】2_LED
1、电路图 74HC573是八位锁存器,当控制端LE脚为高电平时,芯片“导通”,LE为低电平时芯片“截止”即将输出状态“锁存”,led此时不会改变状态,所以可通过led对应的八个引脚的电平来控制led的状态,原理图分析…...
代码随想录day06
242.有效的字母异位词 刚学哈希表想着使用unordered_set来实现,结果无法通过,原因是对字母异位词理解有问题,字母异位词是通过重新排列不同单词或短语的字母而形成的单词或短语,并使用所有原字母一次。对字母出现的次数有要求&am…...

Spring @PropertySource:让你的应用配置更加模块化和可维护
PropertySource注解在Spring中的作用,就像是给Spring应用配了一个“外部配置箱”。 想象一下,你在开发一个Spring应用时,有很多配置信息需要设置,比如数据库的连接信息、应用的某些功能开关等。如果这些信息都硬编码在代码中&…...
【Java】MyBatis动态SQL
在MyBatis中使用动态SQL语句。 动态SQL是指根据参数数据动态组织SQL的技术。 生活中的案例: 在京东上买东西时,用户搜索商品,可以选择筛选条件,比如品牌,价格,材质等,也可以不使用筛选条件。这时…...
旅行社项目展示微信小程序功能模块和开发流程
旅行社当前旅游线路的程序(微信小程序),旨在帮助旅行社更高效地管理线下活动预订,同时为客户提供便捷的报名和查看功能。适用于短途游、团队建设等活动,支持在线预订、缴费及订单管理,可根据用户需求定制更多个性化服务,为公司提升品牌知名度与客户体验。通过简洁明了的…...
litemall,又一个小商场系统
litemall Spring Boot后端 Vue管理员前端 微信小程序用户前端 Vue用户移动端 代码地址:litemall: 又一个小商城。 litemall Spring Boot后端 Vue管理员前端 微信小程序用户前端 Vue用户移动端...

WGCLOUD监控系统部署教程
官网地址:下载WGCLOUD安装包 - WGCLOUD官网 第一步、环境配置 #安装jdk 1、安装 EPEL 仓库: sudo yum install -y epel-release 2、安装 OpenJDK 11: sudo yum install java-11-openjdk-devel 3、如果成功,你可以通过运行 java …...

Python大数据可视化:基于Python的王者荣耀战队的数据分析系统设计与实现_flask+hadoop+spider
开发语言:Python框架:flaskPython版本:python3.7.7数据库:mysql 5.7数据库工具:Navicat11开发软件:PyCharm 系统展示 管理员登录 管理员功能界面 比赛信息管理 看板展示 系统管理 摘要 本文使用Python与…...

(苍穹外卖)项目结构
苍穹外卖项目结构 后端工程基于 maven 进行项目构建,并且进行分模块开发。 1). 用 IDEA 打开初始工程,了解项目的整体结构: 对工程的每个模块作用说明: 序号名称说明1sky-take-outmaven父工程,统一管理依赖版本&…...
ASP.NET Core筛选器Filter
目录 什么是Filter? Exception Filter 实现 注意 ActionFilter 注意 案例:自动启用事务的筛选器 事务的使用 TransactionScopeFilter的使用 什么是Filter? 切面编程机制,在ASP.NET Core特定的位置执行我们自定义的代码。…...

ChatGPT怎么回事?
纯属发现,调侃一下~ 这段时间deepseek不是特别火吗,尤其是它的推理功能,突发奇想,想用deepseek回答一些问题,回答一个问题之后就回复服务器繁忙(估计还在被攻击吧~_~) 然后就转向了GPT…...
软件工程-可行性研究
包含 技术可行性 使用现有技术能实现这个系统吗? 经济可行性 这个系统的经济效益能超过它的开发成本吗? 操作可行性 系统的操作方式在这个用户组织内行得通吗? 必要时还应该从法律、社会效益等更广泛的方面研究每种解法的可行性 可行性…...

园区网设计与实战
想做一个自己学习的有关的csdn账号,努力奋斗......会更新我计算机网络实验课程的所有内容,还有其他的学习知识^_^,为自己巩固一下所学知识。 我是一个萌新小白,有误地方请大家指正,谢谢^_^ 文章目录 前言 这个实验主…...

自动化办公集成工具:一站式解决文档处理难题
1. 项目概述 在当今信息化时代,办公自动化已成为提升工作效率的关键。本文将详细介绍一款基于Python和PyQt5开发的「自动化办公集成工具」,该工具集成了多种常用的办公文档处理功能,包括批量格式转换、文本智能替换、表格数据清洗等,旨在为用户提供一站式的办公自动化解决方…...
Linux 用户层 和 内核层锁的实现
目录 一、系统调用futex介绍1. 核心机制2. 常见操作3. 工作流程示例(互斥锁)4. 优势5. 注意事项6. 典型应用 二、Linux中用户态的锁和内核的锁不是同一个实现吗?2.1 本质区别2.2 用户态锁如何工作(以 pthread_mutex 为例ÿ…...

老年生活照护实训室建设规划:照护质量评估与持续改进实训体系
随着人口老龄化程度的不断加深,老年生活照护需求日益增长,对专业照护人才的培养提出了更高要求。老年生活照护实训室建设方案作为培养高素质照护人才的重要载体,其核心在于构建科学完善的照护质量评估与持续改进实训体系。通过该体系的建设&a…...
计算机基础知识(第五篇)
计算机基础知识(第五篇) 架构演化与维护 软件架构的演化和定义 软件架构的演化和维护就是对架构进行修改和完善的过程,目的就是为了使软件能够适应环境的变化而进行的纠错性修改和完善性修改等,是一个不断迭代的过程࿰…...
AI Agent 架构设计:ReAct 与 Self-Ask 模式对比与分析
一、引言 (一) AI Agent 技术发展背景 🚀 AI Agent 的演进是一场从“遵循指令”到“自主决策”的深刻变革。早期,以规则引擎为核心的系统(如关键词匹配的客服机器人)只能在预设的流程上运行。然而,大语言模型的崛起为…...

生成模型+两种机器学习范式
生成模型:从数据分布到样本创造 生成模型(Generative Model) 是机器学习中一类能够学习数据整体概率分布,并生成新样本的模型。其核心目标是建模输入数据 x 和标签 y 的联合概率分布 P(x,y),即回答 “数据是如何产生的…...

SpringBoot2.3.1集成Knife4j接口文档
首先要查看项目中pom文件里面有没有swagger和knife4j的依赖,如果有的话删除,加入以下依赖 <!-- swagger --><dependency><groupId>com.github.xiaoymin</groupId><artifactId>knife4j-openapi3-spring-boot-starter</…...

PG 分区表的缺陷
简介 好久没发文,是最近我实在不知道写点啥。随着国产化进程,很多 oracle 都在进行迁移,最近遇到了一个分区表迁移之后唯一性的问题。oracle 数据库中创建主键或者唯一索引,不需要引用分区键,但是 PG 就不行ÿ…...
springboot的test模块使用Autowired注入失败
springboot的test模块使用Autowired注入失败的原因: 注入失败的原因可能是用了junit4的包的Test注解 import org.junit.Test;解决方法:再加上RunWith(SpringRunner.class)注解即可 或者把Test由junit4改成junit5的注解,就不用加上RunWith&…...
青少年编程与数学 01-011 系统软件简介 01 MS-DOS操作系统
青少年编程与数学 01-011 系统软件简介 01 MS-DOS操作系统 1. MS-DOS的历史背景1.1 诞生背景1.2 发展历程1.3 与Windows的关系 2. MS-DOS的技术细节2.1 系统架构2.2 启动过程2.3 内存管理2.4 设备驱动程序 3. MS-DOS的用户界面3.1 命令行界面3.2 配置文件 4. MS-DOS的应用程序与…...