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

各种协议设计

这些设计问题背后的核心本质可以总结为以下几个关键原则,我将结合不同领域为您系统讲解:

一、核心设计原则(本质层面)

  1. 抽象与分层

  • 本质:将复杂系统分解为不同层次的抽象(物理层/逻辑层/业务层)

  • 示例:TCP协议的分层设计(物理层→数据链路层→网络层→传输层)

  • 应用:数据库设计中的三级模式(外模式→概念模式→内模式)

  1. 状态与协议

  • 本质:任何交互都包含状态转移和协议约定

  • 示例:TCP三次握手(SYN-SYN-ACK状态转移)

  • 应用:类设计中成员变量的状态管理(有限状态机模式)

  1. 正交性与扩展性

  • 本质:通过正交分解降低系统耦合度

  • 示例:HTTP协议头部与body的分离设计

  • 应用:数据库表字段的原子性设计(第一范式)

二、通用设计方法论

  1. 四元组设计法(适用于所有字段/协议设计):

    • 数据标识(唯一性)

    • 数据类型(结构定义)

    • 数据语义(业务含义)

    • 数据生命周期(时效性)

  2. 协议设计黄金三角

    mermaid

    复制

    graph TD
    A[协议设计] --> B[语法(Syntax)]
    A --> C[语义(Semantics)]
    A --> D[时序(Timing)]

三、领域应用实例

  1. 数据库字段设计

  • 遵循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          -- 乐观锁控制
    );
  1. 网络协议设计

  • 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字节)、滑动窗口机制、序列号设计

  1. 类成员变量设计

  • 遵循SOLID原则的示例:

    java

    复制

    class PaymentProcessor {// 单一职责原则:只包含支付相关状态private PaymentGateway gateway;  // 依赖抽象private TransactionLog log;      // 正交功能分离// 开闭原则:通过配置参数保持扩展性private PaymentConfig config;// 状态管理封装private PaymentState state = PaymentState.INIT;
    }

四、现实世界抽象方法论

  1. **领域驱动设计(DDD)**四层模型:

    • 战略模式:限界上下文划分

    • 战术模式:实体/值对象/聚合根设计

    • 实现模式:Repository/Factory设计

  2. 四色建模法

    • Moment-Interval(时效性对象)

    • Role(角色抽象)

    • Description(描述型对象)

    • Party/Place/Thing(参与方/地点/物品)

五、推荐学习资料

  1. 经典书籍

    • 《Design Patterns: Elements of Reusable Object-Oriented Software》(设计模式圣经)

    • 《Patterns of Enterprise Application Architecture》(企业应用架构模式)

    • 《TCP/IP Illustrated Volume 1》(协议设计必读)

  2. 论文与RFC

    • "End-to-End Arguments in System Design"(端到端原则经典论文)

    • RFC 793(TCP协议规范)

    • RFC 2616(HTTP/1.1协议)

  3. 视频资源

    • MIT 6.824 Distributed Systems(分布式系统设计)

    • Stanford CS144 Introduction to Computer Networking(网络协议实现)

    • 《领域驱动设计实战》- 极客时间

六、设计题通用解法

  1. 四步设计法

    复制

    需求澄清 → 抽象建模 → 接口设计 → 异常处理
  2. 设计检查清单

    • 唯一性约束如何处理?

    • 向后兼容性如何保证?

    • 流量控制和错误恢复机制?

    • 数据一致性与性能的平衡?

建议通过实际项目练习,例如:

  1. 设计一个支持撤回功能的聊天协议

  2. 设计电商秒杀系统的库存字段

  3. 实现支持插件扩展的类结构

这些设计本质的掌握需要结合具体场景反复实践。建议从简单协议设计开始(如实现一个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,确保文件在传输过程中不被损坏。

  • 潜在威胁

    1. 磁盘读取错误

    2. 软件错误(文件系统、传输程序、通信系统)

    3. 硬件错误(处理器或内存故障)

    4. 网络错误(丢包、数据损坏、重复包)

  • 解决方案

    • 底层方案:在通信子系统中提供可靠性保证(如校验和、重传机制)。

    • 端到端方案:在应用层实现文件校验和(checksum)和重传机制。

  • 结论:即使通信子系统提供了可靠性保证,应用层仍然需要实现端到端的校验和重传机制。因此,通信子系统的可靠性功能只能减少应用层的重传次数,而不能替代应用层的功能。


3. 其他应用场景

论文进一步将端到端原则扩展到其他系统设计场景:

  1. 交付确认(Delivery Acknowledgement)

    • 网络层的确认(如ARPANET的RFNM)只能确认消息到达目标主机,而不能确认目标应用是否处理了消息。

    • 真正的确认需要由应用层实现(如“两阶段提交协议”)。

  2. 数据加密(Secure Transmission)

    • 网络层的加密无法保护数据在目标节点内的安全。

    • 应用层加密可以确保端到端的安全性,并提供身份验证。

  3. 重复消息抑制(Duplicate Message Suppression)

    • 网络层无法完全消除重复消息(如应用层重试导致的重复)。

    • 应用层需要实现自己的重复检测机制。

  4. 消息顺序保证(FIFO Delivery)

    • 网络层的FIFO保证仅限于同一虚拟电路。

    • 分布式应用需要更高层的机制来确保操作的顺序。


4. 性能与工程权衡

端到端原则并不意味着底层系统完全不需要提供任何功能。论文指出:

  • 性能优化:底层系统可以通过提供部分功能(如校验和、重传)来减少应用层的负担,从而提高整体性能。

  • 工程权衡:底层系统的功能设计应基于性能需求,而不是正确性需求。过度设计底层系统可能会导致不必要的开销。

关键观点:底层系统的功能设计应尽量减少对应用层的干扰,同时为应用层提供足够的灵活性。


5. 端到端原则的适用范围

端到端原则并不是绝对的,其适用性取决于具体的应用场景。例如:

  • 实时语音传输:低层的可靠性机制(如重传)可能会引入延迟,影响实时性。因此,语音应用更适合接受部分数据损坏,而不是追求完美传输。

  • 语音存储系统:对于存储系统,数据的准确性比实时性更重要,因此低层的可靠性机制是有价值的。


6. 历史背景与相关研究

论文回顾了端到端原则的历史背景和相关研究:

  • 早期案例:MIT的兼容分时系统(CTSS)中的“wait”消息。

  • 加密领域:Branstad(1973)首次公开讨论了加密中的端到端原则。

  • 分布式系统:两阶段提交协议(Gray, Lampson, Reed)是端到端原则的典型应用。


7. 结论

端到端原则是系统设计中的一种“奥卡姆剃刀”原则,它指导设计者将功能放置在最适合的层次(通常是应用层)。这一原则不仅适用于通信系统,也适用于操作系统、数据库系统等其他领域。

主要贡献

  • 提出了端到端原则,明确了功能放置的指导方针。

  • 通过多个案例展示了端到端原则的广泛应用。

  • 强调了性能与正确性之间的工程权衡。


8. 启示与思考

  • 设计哲学:端到端原则提醒我们,系统设计应避免过度依赖底层机制,而应关注应用层的需求。

  • 实际应用:在现代分布式系统(如微服务架构、区块链)中,端到端原则仍然具有重要的指导意义。

  • 扩展阅读:可以结合CAP定理、分布式一致性协议(如Paxos、Raft)进一步理解端到端原则的实践。


这篇论文的核心价值在于它提供了一种通用的设计哲学,帮助设计者在复杂的系统设计中做出更合理的决策。通过理解端到端原则,我们可以更好地设计协议、字段、类成员变量等,确保系统的正确性和灵活性

相关文章:

各种协议设计

这些设计问题背后的核心本质可以总结为以下几个关键原则,我将结合不同领域为您系统讲解: 一、核心设计原则(本质层面) 抽象与分层 本质:将复杂系统分解为不同层次的抽象(物理层/逻辑层/业务层&#xff09…...

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&#xf…...

软件工程-可行性研究

包含 技术可行性 使用现有技术能实现这个系统吗? 经济可行性 这个系统的经济效益能超过它的开发成本吗? 操作可行性 系统的操作方式在这个用户组织内行得通吗? 必要时还应该从法律、社会效益等更广泛的方面研究每种解法的可行性 可行性…...

园区网设计与实战

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

React Native 导航系统实战(React Navigation)

导航系统实战(React Navigation) React Navigation 是 React Native 应用中最常用的导航库之一,它提供了多种导航模式,如堆栈导航(Stack Navigator)、标签导航(Tab Navigator)和抽屉…...

Auto-Coder使用GPT-4o完成:在用TabPFN这个模型构建一个预测未来3天涨跌的分类任务

通过akshare库,获取股票数据,并生成TabPFN这个模型 可以识别、处理的格式,写一个完整的预处理示例,并构建一个预测未来 3 天股价涨跌的分类任务 用TabPFN这个模型构建一个预测未来 3 天股价涨跌的分类任务,进行预测并输…...

dedecms 织梦自定义表单留言增加ajax验证码功能

增加ajax功能模块&#xff0c;用户不点击提交按钮&#xff0c;只要输入框失去焦点&#xff0c;就会提前提示验证码是否正确。 一&#xff0c;模板上增加验证码 <input name"vdcode"id"vdcode" placeholder"请输入验证码" type"text&quo…...

学校招生小程序源码介绍

基于ThinkPHPFastAdminUniApp开发的学校招生小程序源码&#xff0c;专为学校招生场景量身打造&#xff0c;功能实用且操作便捷。 从技术架构来看&#xff0c;ThinkPHP提供稳定可靠的后台服务&#xff0c;FastAdmin加速开发流程&#xff0c;UniApp则保障小程序在多端有良好的兼…...

06 Deep learning神经网络编程基础 激活函数 --吴恩达

深度学习激活函数详解 一、核心作用 引入非线性:使神经网络可学习复杂模式控制输出范围:如Sigmoid将输出限制在(0,1)梯度传递:影响反向传播的稳定性二、常见类型及数学表达 Sigmoid σ ( x ) = 1 1 +...

网络编程(UDP编程)

思维导图 UDP基础编程&#xff08;单播&#xff09; 1.流程图 服务器&#xff1a;短信的接收方 创建套接字 (socket)-----------------------------------------》有手机指定网络信息-----------------------------------------------》有号码绑定套接字 (bind)--------------…...

让回归模型不再被异常值“带跑偏“,MSE和Cauchy损失函数在噪声数据环境下的实战对比

在机器学习的回归分析中&#xff0c;损失函数的选择对模型性能具有决定性影响。均方误差&#xff08;MSE&#xff09;作为经典的损失函数&#xff0c;在处理干净数据时表现优异&#xff0c;但在面对包含异常值的噪声数据时&#xff0c;其对大误差的二次惩罚机制往往导致模型参数…...

打手机检测算法AI智能分析网关V4守护公共/工业/医疗等多场景安全应用

一、方案背景​ 在现代生产与生活场景中&#xff0c;如工厂高危作业区、医院手术室、公共场景等&#xff0c;人员违规打手机的行为潜藏着巨大风险。传统依靠人工巡查的监管方式&#xff0c;存在效率低、覆盖面不足、判断主观性强等问题&#xff0c;难以满足对人员打手机行为精…...

STM32---外部32.768K晶振(LSE)无法起振问题

晶振是否起振主要就检查两个1、晶振与MCU是否兼容&#xff1b;2、晶振的负载电容是否匹配 目录 一、判断晶振与MCU是否兼容 二、判断负载电容是否匹配 1. 晶振负载电容&#xff08;CL&#xff09;与匹配电容&#xff08;CL1、CL2&#xff09;的关系 2. 如何选择 CL1 和 CL…...

抽象类和接口(全)

一、抽象类 1.概念&#xff1a;如果⼀个类中没有包含⾜够的信息来描绘⼀个具体的对象&#xff0c;这样的类就是抽象类。 像是没有实际⼯作的⽅法,我们可以把它设计成⼀个抽象⽅法&#xff0c;包含抽象⽅法的类我们称为抽象类。 2.语法 在Java中&#xff0c;⼀个类如果被 abs…...