当前位置: 首页 > 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账号,努力奋斗......会更新我计算机网络实验课程的所有内容,还有其他的学习知识^_^,为自己巩固一下所学知识。 我是一个萌新小白,有误地方请大家指正,谢谢^_^ 文章目录 前言 这个实验主…...

SkyWalking 10.2.0 SWCK 配置过程

SkyWalking 10.2.0 & SWCK 配置过程 skywalking oap-server & ui 使用Docker安装在K8S集群以外,K8S集群中的微服务使用initContainer按命名空间将skywalking-java-agent注入到业务容器中。 SWCK有整套的解决方案,全安装在K8S群集中。 具体可参…...

从WWDC看苹果产品发展的规律

WWDC 是苹果公司一年一度面向全球开发者的盛会,其主题演讲展现了苹果在产品设计、技术路线、用户体验和生态系统构建上的核心理念与演进脉络。我们借助 ChatGPT Deep Research 工具,对过去十年 WWDC 主题演讲内容进行了系统化分析,形成了这份…...

JVM垃圾回收机制全解析

Java虚拟机(JVM)中的垃圾收集器(Garbage Collector,简称GC)是用于自动管理内存的机制。它负责识别和清除不再被程序使用的对象,从而释放内存空间,避免内存泄漏和内存溢出等问题。垃圾收集器在Ja…...

Java多线程实现之Thread类深度解析

Java多线程实现之Thread类深度解析 一、多线程基础概念1.1 什么是线程1.2 多线程的优势1.3 Java多线程模型 二、Thread类的基本结构与构造函数2.1 Thread类的继承关系2.2 构造函数 三、创建和启动线程3.1 继承Thread类创建线程3.2 实现Runnable接口创建线程 四、Thread类的核心…...

Device Mapper 机制

Device Mapper 机制详解 Device Mapper(简称 DM)是 Linux 内核中的一套通用块设备映射框架,为 LVM、加密磁盘、RAID 等提供底层支持。本文将详细介绍 Device Mapper 的原理、实现、内核配置、常用工具、操作测试流程,并配以详细的…...

docker 部署发现spring.profiles.active 问题

报错: org.springframework.boot.context.config.InvalidConfigDataPropertyException: Property spring.profiles.active imported from location class path resource [application-test.yml] is invalid in a profile specific resource [origin: class path re…...

Bean 作用域有哪些?如何答出技术深度?

导语: Spring 面试绕不开 Bean 的作用域问题,这是面试官考察候选人对 Spring 框架理解深度的常见方式。本文将围绕“Spring 中的 Bean 作用域”展开,结合典型面试题及实战场景,帮你厘清重点,打破模板式回答&#xff0c…...

【Ftrace 专栏】Ftrace 参考博文

ftrace、perf、bcc、bpftrace、ply、simple_perf的使用Ftrace 基本用法Linux 利用 ftrace 分析内核调用如何利用ftrace精确跟踪特定进程调度信息使用 ftrace 进行追踪延迟Linux-培训笔记-ftracehttps://www.kernel.org/doc/html/v4.18/trace/events.htmlhttps://blog.csdn.net/…...

高保真组件库:开关

一:制作关状态 拖入一个矩形作为关闭的底色:44 x 22,填充灰色CCCCCC,圆角23,边框宽度0,文本为”关“,右对齐,边距2,2,6,2,文本颜色白色FFFFFF。 拖拽一个椭圆,尺寸18 x 18,边框为0。3. 全选转为动态面板状态1命名为”关“。 二:制作开状态 复制关状态并命名为”开…...

免费批量Markdown转Word工具

免费批量Markdown转Word工具 一款简单易用的批量Markdown文档转换工具,支持将多个Markdown文件一键转换为Word文档。完全免费,无需安装,解压即用! 官方网站 访问官方展示页面了解更多信息:http://mutou888.com/pro…...