关于可靠通信的三条基础定理

标签: Computer System 分布式 | 发表时间:2021-06-06 13:50 | 作者:ideawu
出处:https://www.ideawu.net/blog

广义的可靠通信不限于计算机网络通信, 只要两个物体具有发送和接收能力, 或者两个物体之间有发送和接收动作, 均属于通信范畴. 例如人于人的声音对话, 身体语言等等. 可靠通信至少包括三项要求:

  1. 不重复
  2. 不丢包
  3. 完整性(原子性)

为了达到这三项要求, 对应有三条定理:

  • 定理一(去重定理): 排队(串行化)是解决去重问题的 唯一正确方法
  • 定理二(丢包定理): 确认和重传是解决丢包的问题 唯一正确方法
  • 定理三(原子定理): 单点标记或者自校验是完整性(原子性)的 唯一正确方法

有些同学可能对排队理论有怀疑, 表示搞一个全局位图(标记集合)也能解决去重问题. 如果深究, 判断标记和修改标记本质上是独立的两步操作, 这两步操作就遇到去重问题, 也即, 对标记集合的操作本身也需要排队. 当然, CAS 是一种解决方案, 但 CAS 的实现内部本质也是排队.

用这三条基础理论可以解释许多问题, 指导我们具体的代码开发, 也能指导我们进行系统架构设计.

例如 TCP 为什么能实现可靠通信? 因为它至少遵循了这三条定理. TCP 的序号用于排队, TCP 有超时重传机制 兜底(还有选择重传, 快速重传等多项技术进行优化), TCP 有 checksum 校验数据的完整性.

例如设计一个在线商店系统, 库存超卖问题本质就是判断库存和下订单这两步操作, 是一个去重的问题. 我们做设计 review 的时候, 一定要紧紧抓住对应的基础定理, 挑战设计者有没有设计排队策略. 如果没有, 则根据定理可以直接否定设计方案. 当然, 具体实现时, 有很多技术可以实现排队策略, 比如引入外部的队列组件, 利用数据库的锁(悲观锁或者乐观锁, 显式锁或者隐式锁). 方法有很多, 但本质只对应一条定理.

还是在线商店系统的问题, 订单和支付一般是两套独立的系统, 这就是涉及到了不丢包的问题. 根据定理, 我们必须有定时任务进行确认和补单的机制. 所谓的分布式事务(XA), 本质也要依赖确认和重传.

数据库事务的原子性(Atomicity)的实现手段, 常常依赖单点标记(commit point), 对分散的多个对象进行确认. 还有一种比较取巧的方案, 但很少见, 那便是把多个对象相连组成一个环形, 从而不依赖单点标记即可自校验.

实际问题千变万化, 但本质定理就是这三条, 按定理做, 就是对的, 不按定理做, 就是错的. 以定理作为讨论基础, 大家有的放矢, 信息简炼, 能快速聚焦.

这也是我经常提到的, 要想保证系统的正确性, 一定要先在理论上, 确保基础的核心模型的正确性. 只要核心正确了, 整个系统的健壮性就能得到保证.

Related posts:

  1. 代码 Review 要点
  2. 小心递归次数限制
  3. SSH ProxyCommand及其思想
  4. SSDB 数据库的图形化界面管理工具 – phpssdbadmin
  5. 让你的网站支持手机二维码登录

相关 [可靠 通信 基础] 推荐:

关于可靠通信的三条基础定理

- - idea's blog
广义的可靠通信不限于计算机网络通信, 只要两个物体具有发送和接收能力, 或者两个物体之间有发送和接收动作, 均属于通信范畴. 例如人于人的声音对话, 身体语言等等. 为了达到这三项要求, 对应有三条定理:. 定理一(去重定理): 排队(串行化)是解决去重问题的 唯一正确方法. 定理二(丢包定理): 确认和重传是解决丢包的问题 唯一正确方法.

socket通信之可靠和不可靠的原理

- - CSDN博客互联网推荐文章
TCP可靠,UDP不可靠的实现.          每个TCP socket在内核中都有一个发送缓冲区和一个接收缓冲区,TCP的全双工的工作模式以及TCP的滑动窗口便是依赖于这两个独立的buffer以及此buffer的填充状态. 接收缓冲区把数据缓存入内核, 应用进程一直没有调用read进行读取的话,此数据会一直缓存在相应socket的接收缓冲区内.

浅谈高端通信系统中一些分布式理论基础(4)

- yasy - 弯曲评论
系列目录 浅谈高端通信系统中一些分布式理论基础. 浅谈高端通信系统中一些分布式理论基础-前言. 浅谈高端通信系统中一些分布式理论基础(1). 浅谈高端通信系统中一些分布式理论基础(2). 浅谈高端通信系统中一些分布式理论基础(3). 浅谈高端通信系统中一些分布式理论基础(4). 基于分布式队列(Distributed Queue)的数据结构和在这些队列之上的操作就是一切通信系统的基础.

浅谈高端通信系统中一些分布式理论基础(3)

- gOODiDEA - 弯曲评论
系列目录 浅谈高端通信系统中一些分布式理论基础. 浅谈高端通信系统中一些分布式理论基础-前言. 浅谈高端通信系统中一些分布式理论基础(1). 浅谈高端通信系统中一些分布式理论基础(2). 浅谈高端通信系统中一些分布式理论基础(3). 在分布式应用系统中,我们首先来做个半学术半胡扯的定义:分布式服务系统和分布式通信系统.

浅谈高端通信系统中一些分布式理论基础(1)

- sun - 弯曲评论
这个题目是在暑假在北京时胡编的. 当时,刚把略带黄色的Cache Coloring的文章写完. 据说Cache Coloring的文章在江湖上还是受到一定的肯定. ,特别是那些有过实战经验的同学. 这种妈咪小姐的讲解体系结构高级话题的教学方式估计是大牌教授们或者CAP们无法达到的境界. 为什么想写这个《浅谈高端通信系统中的一些分布式理论基础》呢.

浅谈高端通信系统中一些分布式理论基础(2)

- Liam - 弯曲评论
系列目录 浅谈高端通信系统中一些分布式理论基础. 浅谈高端通信系统中一些分布式理论基础-前言. 浅谈高端通信系统中一些分布式理论基础(1). 浅谈高端通信系统中一些分布式理论基础(2). 浅谈高端通信系统中一些分布式理论基础(3). 分布式通信系统,互联网分布式系统[现在为了骗人,都喜欢叫做云计算]在经典的分布式计算这个领域到底是个什么宝宝.

HTTP基础

- - ITeye博客
HTTP的结构主要包括下面几个要点:. HTTP的版本主要有1.0,1.1 和更高版本.    1.1 及以上版本允许在一个TCP连接上传送多个HTTP协议,1.0能 .    1.1 及以上版本多个请求和响应可以重叠,1.0不能.    1.1 增加了很多的请求头和响应头.     一个请求行,若干小心头,以及实体内容,其中的一些消息头和实体内容是可选的,消息头和实体内容需要空行隔开.

Git基础

- Wolf - 潘魏增
上个月末在公司内部作了一次《Git基础》的主题分享. 这里把分享内容公布出来,希望对一些朋友有用. 如果之前没有接触过Git,wikipedia上面已经有非常好的介绍. pdf格式:http://panweizeng.com/download/git-basics-meituan.pdf. keynote格式:http://panweizeng.com/download/git-basics-meituan.key.

JavaScript 基础

- - CSDN博客推荐文章
JavaScript可以出现在HTML的任意地方,甚至在之前插入也不成问题,使用标签. 不过要在框架网页中插入的话,就一定要在之前插入,否则不会运行. JavaScript对数据类型要求不严格,一般来说,声明变量的时候不需要声明类型,而且就算声明了类型,在使用过程中也可以给变量赋予其他类型的值,声明变量使用var关键字.

CSS基础

- - CSDN博客Web前端推荐文章
1、引入CSS的四种方式. 行内样式、内嵌样式、链接样式、导入样式. 基本选择器:标签选择器,ID选择器,类选择器,通用选择器. 通用选择器:*{css代码}. 通用选择器作用:对整个网页中所有HTML标签进行样式定义. 常见用法:定义*{margin:0;padding:0}通用样式,并置于CSS文件最顶端,用于对HTML内所有的标签进行重置以保证页面能兼容多种浏览器.