- 博客(17)
- 收藏
- 关注
原创 PhxPaxos源码分析之(4)Learner篇
本篇文章介绍一下PhxPaxos-Learn的过程,Learn主要的功能是追数据,追数据分为两部分,如果数据差距过大进行批量追加即ckpt(下片文章介绍),本篇文章主要介绍差距没有超过设定的闸值时,追条数据追加的过程。PhxPaxos在追数据的过程模拟了TCP的三次握手和ACK机制,下面看一下简单的示意图:有了上面主要流程的示意图,下面看一下时序图:接下来分三个阶段进行介绍:...
2019-03-08 19:20:16
758
3
原创 PhxPaxos源码分析之(3)提案发起篇(Paxos协议核心)
本篇内容根据Paxos协议分五部分介绍,即发起Prpare请求、给Prepare请求投票、收集Prepare投票,接收Accept请求 && 统计Acceot结果、Learn阶段,最后总从InstatnceID维度再次理解一下Mutil-Paxos协议,内容比较多。接上篇提议申请成功之后调用AddNotify通知主循环发起提案,主循环收到通知之后调用CheckNewValue,...
2019-03-07 21:19:28
707
原创 PhxPaxos源码分析之(2)提案申请篇
核心思想在正式执行Paxos协议进行确定最终提案之前,需要先进行一些控制保证提案有序的进行。本部分的核心是提前发起量的控制,首先,在同一个节点上提案需要按顺序进行发起不能前一个提案还没有结束就进行下一个,这个比较好理解。其次,不能来了的提前请求都接受,如果并发量过高就会处理不过来也是不行的。下面重点看一下提案发起前的一些控制逻辑。时序图主要代码逻辑:1. 由Commiter发起提案...
2019-03-06 01:01:39
945
原创 PhxPaxos源码解析(1)之概述篇
写在前面的话年前工作的间歇期计划学一些优秀的开源代码充充电,侧面打听到微信团队开源的Paxos源码在微信内部有大量的线上应用加之自己对Paxos之前的理解并不算深刻,所以想借着这个机会彻底搞懂它。年后回来趁着还“热乎"整理成系列文章巩固一下记忆。为什么选择PhxPaxos作为学习Paxos的源码,这就涉及到优秀开源项目的标准。个人理解优秀的开源项目需要具备以下几点:经过大量的生产环境验证...
2019-03-05 02:55:16
1188
原创 Redis Scan命令源码解析
背景最近团队自研的redis需要在集群版本上实现SCAN类命令,便于用户粗略的遍历全量key。相比较分析RDB文件对用户更友好,故深入的学习Redis相关源码。类似命令SCAN遍历全量的key,除此之外还包括HSCAN、SSCAN、ZSCAN针对hash、set、zset的一个key进行遍历,详见官网说明SCAN。代码架构官网SCAN命令介绍中有提到,每次返回key的数量不一定,可能...
2019-01-16 23:03:25
777
原创 《数据密集型应用系统设计》第二章 数据模型与查询语言
概述本章从数据库之初的数据模型开始介绍(20世纪60年代),从用户使用的角度分析了每种数据模型的优缺点。就目前国内互联网存储来看实际用处并不大,对于互联网分布式存储开发工程师更多的意义是提供了一个全面(发展历程)、笼统的了解数据库的发展。在数据模型部分介绍了,关系数据模型、文档数据模型并结合一对多、多对多等用户使用方式上进行了比较,原文在本章并没有介绍互联网更看重的性能、扩展性等因素。在...
2018-10-20 15:15:40
434
原创 《数据密集型应用系统设计》第一章 可靠、可扩展与可维护的应用系统
可靠性硬件故障 一块硬盘可以使用40-50年,10000块磁盘的系统每天至少有一块磁盘故障(50 * 365 在10000的量级上) 注:数字有两个作用,第一是对硬件故障率有一个初步感知,第二是设计系统时默认边界是硬件故障是常态。软件错误 避免方法:仔细考虑实现细节、描述清楚系统设计场景(约束)、系统间交互、测试(单测、集成测试等)、监控...
2018-10-18 20:52:32
970
1
原创 《大规模分布式存储系统》第十章 数据库功能
只读事务 首先,MergeServer模块中SQL层进行SQL语句解析、词法分析、申城语法树,其中查询优化是MySQL的核心和难点,但是OceanBase在本部分并没有很多工作。其次,无论是单表查询还是多表查询都会根据需求拆分为子请求,分发到目的ChunkServer上执行。最后,OceanBase 原则上尽量保持存储节点与计算节点一致,即ChunkServer可以计算的,尽量在ChunkS...
2018-03-08 16:29:00
289
原创 《大规模分布式存储系统》第九章 分布式存储引擎
概述 本章主要介绍 OceanBase 分布式引擎层各模块的实现细节。涉及到数据结构、RPC开发框架、内存优化等细节,即使介绍的较为详细但是对于深入学习还是不够的,只能在日常工作中大量的实践才能充分体会。本部分只以个人视角,记录较为重要的技术。公共模块(基础库)内存管理:全局的内存池(64Kb、2MB两种),每个线程单独的内存管理。全局内存池好处有两个,第一是可以统计各模块的内存使用情况,第...
2018-03-07 18:01:20
403
原创 《大规模分布式存储系统》第八章 OceanBase 架构初探
设计目标 及 设计思路1. PB级存储量、数十万级TPS、数百级QPS。2. 支持跨行跨表事务。3. 可扩展、低成本、易用。 传统的数据库分库分表在性能上满不足不了需求的。BigTable仅支持单行事务。Google Percolator 使用BigTable + 2PC 技术实现分布式事务,但是性能不满足需求(2-5s),比较适合网页建库这样的半线上业务。 分析淘宝的业务发现,短时(...
2018-03-06 16:31:35
659
原创 《大规模分布式存储系统》第七章 分布式数据库
数据库中间层 本部分主要是介绍SQL集群化涉及的一些组件,主要包括:proxy、数据节点、agent、元数据节点等,与目前主流分布式存储系统无异。目前基于SQL的分布式数据库,最被诟病的几个问题主要如下: 1. 扩展性差,成倍扩容,甚至需要停止服务一段时间。 2. 单机SQL性能较差,单机吞吐的限制,会导致可用性下降(与引擎相关)。 3. 数据库复制,采用异步方式,可能有数...
2018-03-04 16:17:20
430
原创 《大规模分布式存储系统》第六章 分布式表格系统
Google BigTable表格存储 与 键值存储 表格存储的数据格式<rowkey,column family,timestamp>代表一行,所有的数据是主键(rowkey)排序的,可以抽象为主键为key,行尾value的键值存储,故称键值存储是表格存储的一个特例。 需要注意的是,column family表示列组(很多列,需要预先定义),每列还可以有qualifler...
2018-03-04 14:30:50
1126
原创 《大规模分布式存储系统》第五章 分布式键值系统
Dynamo问题与方案数据分布一致性Hash分片内一致性协议NWR数据冲突处理向量时钟临时故障处理数据回传永久性故障恢复Merkle哈希树节点故障探测及元信息Gossip协议数据分布 常见的一致性Hash(虚拟节点、哈希环等),集群的元信息通过Gossip传播,每个节点都全量的存储集群元信息。一致性与复制 NWR保证数据的读写一致性,问题是分片内不区分主从,数据更新的协调者不是单点,引...
2018-02-28 20:18:45
876
原创 《大规模分布式存储系统》第四章 分布式文件系统
GFS系统特点:对大文件友好,支持追加写。租约机制:Chunk之间通过租约机制选主,减少了Master的压力。追加流程 数据流是复制连,控制流与数据流分开。数据流是复制连的优点是,减少延时、节省带宽,尤其是在跨交换机的情境下。 数据流与控制流分开的优点是,GFS专门设计给大文件(舍弃小文件),猜测可能是在异常情况下(例如,切主)减少带宽(数据流记录在日志中,控制流决定是否写入,如果切主...
2018-02-28 15:46:49
535
原创 《大规模分布式存储系统》第三章 分布式系统
基本概念1. 异常类型 服务器宕机、网络异常、磁盘故障。2. 超时 在分布式系统中,机器交互有三个结果,即成功、失败、超时。超时单作为一小节讲述,表明了其特殊性。节点间交互超时返回,并不意味着失败,也可能成功,这种不确定性需要特殊的设计机制保证系统的确定性。一个典型的解决方案是,所有的操作是幂等的,这样重试即可。3. 一致性 分片内数据的一致性,可以从用户角度和存储系统两个角度描...
2018-02-27 15:15:38
382
原创 《大规模分布式存储系统》第二章 单机存储系统
硬件基础CPU:首先,区分 多核处理器 与 多处理器,简单理解多处理器对应多CPU,多核处理器(core)是一个处理器(CPU)上集成多个核心,每个核心(core)是真正运行线程的物理单位,即一个CPU上有多个core,可以多线程并发执行。其次,了解多处理器的架构,主要包括CPU、core、L1Cache、L2Cache、L3Cache、内存、总线组成,其中L1Cache分为L1iCache(指令...
2018-02-25 16:57:19
694
原创 《大规模分布式存储系统》第一章 概述
分布式存储概念分布式存储系统具备以下几个特点:可扩展:目前分布式存储系统几百台规模很常见,多的可以达到几千上万台,Amazon S3设计目标甚至达到10-30万台。集群规模并不是初始化阶段就会达到很大,都是随着业务的增长逐渐扩展,需要分布式系统支持可扩展。而且随着集群规模的增长,系统整体性能也需要呈线性增加。低成本:成本分为两部分,一部分是机器成本,分布式系统需要在异构的机器上运行,且机器可能是比...
2018-02-08 23:38:41
683
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人