一文了解分布式协议与算法
分布式协议与算法分布式故障
拜占庭将军问题
什么是拜占庭将军问题
「拜占庭将军问题」来源于这样一个场景:拜占庭帝国的军队正在围攻一座城市。这支军队被分成了多支小分队,驻扎在城市周围的不同方位,每支小分队由一个将军领导。这些将军们彼此之间只能依靠信使传递消息(无法聚在一起开个会)。每个将军在观察自己方位的敌情以后,会给出一个各自的行动建议(比如进攻、撤退或按兵不动),但最终的需要将军们达成一致的作战计划并共同执行,否则就会被敌人各个击破。但是,这些将军中可能有叛徒,他们会尝试阻止其他忠诚的将军达成一致的作战计划。
这就是拜占庭将军的「问题」:只能依靠通信相互交流,又不知道谁是叛徒,怎么能不受叛徒们的影响,让这些忠诚的将军快速的达到一致的作战计划呢?
类比到计算机系统就是如下情景:在一个分布式系统中,针对每个运算,每台独立的机器也需要最终达成一致的结果。但每个计算机节点之间也只能依靠网络通信(显然它们无法聚在一起开会),每个计算机节点都有出错的可能(被攻击,或故障),从而变成「叛徒」干扰正常的计算机达成一致。
两将军问题
背景:两支军队的将军只能派信使穿越敌方领土进行通信,来约定 ...
一文了解mysql内部架构及执行过程
一文了解mysql内部架构及执行过程内部架构
MySQL 的架构共分为两层:Server 层和存储引擎层。
Server 层负责建立连接、分析和执行 SQL。MySQL 大多数的核心功能模块都在这实现,主要包括连接器,查询缓存、解析器、预处理器、优化器、执行器等。另外,所有的内置函数(如日期、时间、数学和加密函数等)和所有跨存储引擎的功能(如存储过程、触发器、视图等。)都在 Server 层实现。
存储引擎层负责数据的存储和提取。支持 InnoDB、MyISAM、Memory 等多个存储引擎,不同的存储引擎共用一个 Server 层。现在最常用的存储引擎是 InnoDB,从 MySQL 5.5 版本开始, InnoDB 成为了 MySQL 的默认存储引擎。我们常说的索引数据结构,就是由存储引擎层实现的,不同的存储引擎支持的索引类型也不相同,比如 InnoDB 支持索引类型是 B+树 ,且是默认使用,也就是说在数据表中创建的主键索引和二级索引默认使用的是 B+ 树索引。
Sql 的执行过程1. 链接器先连接 MySQL 服务,然后才能执行 SQL 语句,普遍我们都是使用下面这条命令进 ...
一文了解GO垃圾回收与内存管理
一文了解GO垃圾回收与内存管理GC 常识GC,即垃圾回收,是一种自动内存管理的机制。当程序向操作系统申请的内存不再需要时,垃圾回收主动将其回收,并供其他代码进行内存申请时复用,或者将其归还给操作系统。这种对内存级别资源的自动回收过程称为垃圾回收,负责垃圾回收的程序组件称为垃圾回收器。
垃圾回收的好处体现在两方面。一方面,程序员不需要对内存进行手动地申请和释放操作,GC 会在程序运行时自动释放残留的内存。另一方面,GC 对程序员几乎透明,只有在程序需要特殊优化时,通过提供可调控的 API,对 GC 的运行时机、运行开销进行把控时才得以现身。
通常垃圾回收分为两个半独立的组件:
赋值器指代用户态的代码。对垃圾回收器而言,用户态的代码仅仅只是修改对象之间的引用关系,即在对象图上进行操作。
回收器负责执行垃圾回收的代码。
根对象根对象又被称为根集合,是垃圾回收器在标记过程时最先检查的对象,包括:
全局变量:程序在编译器就能确定的那些存在于程序整个生命周期的变量。
执行栈:每个 goroutine 都包含自己的执行栈,这些执行栈上包含栈上的变量以及指向分配的堆内存区块的指针。
寄存器:寄存 ...