MIT 6.824 2022 notes 1
Lecture 1: Introductionwhy do we use distributed systems? connect physically seperated machines Usually shared increase capacity through parallelism tolerate faults achieve security/via isolate What are the challenges? Concurrency Partial failure High performance Infrastructure Abstractions storage communication Computation ImplementationRPC, threads, concurrency lock. performaceScalability Fault Tolerance Availability Recoverbility Solutions: NV storage(non-volatile storage)非易失性存储 ...
分布式学习资料
引子时下,随着通信技术的发展、移动互联网的普及、物联网车联网人工智能的兴起,每天所产生的数据呈爆炸性的增长。这种尺度的数据不是传统单机系统可以独立处理的,而只能借助于大规模的分布式系统,因而分布式系统渐渐的变成一门 “显学”。而作为一个分布式系统初学者,面对网上未加归类、浩如烟海的学习资料,很容易两眼抓瞎。 但分布式系统有其基本研究内容和独特发展脉络,比如: 一些基本研究问题:时序问题、一致性问题、容错技术、共识算法、并发控制等等。 一些基本定理:CAP、PACELC、FLP 渐次发展的工业系统:MapReduce、Spark、GFS、Dynamo、Cosmos 因此只需要在 “时空” 两个维度对分布式系统进行把握,就能提纲挈领,愈学愈明。“时” 表示分布式系统的演进脉络,可以通过阅读不同时期、学术界工业界的一些论文来把握。“空” 表示分布式系统中所研究的基本问题的拆解,可以通过阅读一些书籍建立分布式系统的知识体系。本文将我在学习分布式系统知识过程搜集到的一些资料,按类别简单汇总,以飨诸君。资料排名没有先后,请按需采用。 注:文中推荐的资料大多为英文,如果阅读有困难,推荐使用...
anna论文笔记
Anna(支持任意扩展和超高性能的KV数据库系统)阅读笔记 前言初略看了一眼Paper,似乎很是牛X。说是支持任意规模的扩展,并且性能不低于 pedis。于是抽空来看看并了解下这套系统的设计特点和这种夸张的单机性能和扩展性的来源。 主流分布式KVS的比较 系统名词 扩容设计 内存模型 针对单个Key的一致性策略 针对多个Key一致性策略 Masstree 多核 共享内存 线性(Linearizable) 无 Bw-tree 多核 共享内存 线性(Linearizable) 无 PALM 多核 共享内存 线性(Linearizable) 无 MICA 多核 共享内存 线性(Linearizable) 无 Redis 单核 N/A 线性(Linearizable) 串行化(Serializable) COPS, Bolt-on 分布式 消息队列 最终一致性(Eventual) 因果一致性(Causal) Bayou 分布式 消息队列 最终一致性(Eventual), 单调读/写, Read Your Writes 最终一致性(Eventual) ...
体制内还是体制外工作
看到这个我觉得就是经济学家纯纯傻逼, 经济学家向松祚表示: 我看到这些优秀的清北毕业生,都去考公,我觉得很遗憾。我觉得这是不应该的,就说中国这些顶级大学的学生出来,应该主要是去做科学家,企业家,思想家和艺术家。学生可以做这些,不能去当官,如果一窝蜂都去当官了,就是没有希望了。 要不是这些尸位素餐只会说大话的在占着位置,谁愿意内卷,不内卷为什么又去卷体制内,而且什么鬼依靠读的大学来决定,解决温饱才有可能做科学家企业家思想家艺术家,得有相应的生活保证才有心思去创造好不好。 民营企业的工作强度太大,那么去体制内工作未尝不是一个理性的选择。这种情况大概回到了8、90年代时候大学毕业生的情况,那时候的大学毕业生都喜欢去国有单位和事业单位,拿铁饭碗。 王朔在1984年就在小说里提到了多数人最喜欢的工作:“少干活,多拿钱;不干活,也拿钱。” 体制内的工作,实际上就是王朔所说的这种工作。 只能说是其他的工作压力导致大家的选择偏向了公职。
译Dynamo Amazon's Highly Available Key-value Store
转自arthurchiao.art /blog/amazon-dynamo-zh/ [译] [论文] Dynamo: Amazon’s Highly Available Key-value Store(SOSP 2007)39-49 minutes Published at 2019-07-06 | Last Update 2019-07-06 译者序本文翻译自 2007 年 Amazon 的分布式存储经典论文:Dynamo: Amazon’s Highly Available Key-value Store (PDF)。 标题直译为:《Dynamo:Amazon 的高可用键值仓库(存储)》。 对排版做了一些调整,以更适合 web 阅读。 Dynamo 是 Amazon 的高可用分布式键值存储(key/value storage)系统。这篇论文发表 的时候(2007)它还只是一个内部服务,现在(改名为 DynamoDB)已经发展成 AWS 最核心 的存储产品(服务)之一,与 S3 等并列。据了解,国内某一线大厂的公有云键值 存储服务,也是参考这篇文章设计和实现的。 现在提到键值...
redis哨兵sentinels
哨兵SentinelSentinel节点本质上是一个特殊的Redis节点 它可以监视任意多个主服务器以及这些主服务器属下的所有从服务器,并在被监视的主服务器进人下线状态时(根据ping的时间间隔判断是否是下线了), 自动将下线主服务器属下的某个从服务器升级为新的主服务器, 然后由新的主服务器代替已下线的主服务器继续处理命令请求 当 serverl 的下线时长超过用户设定的下线时长上限时, Sentinel 系统就会对server1 执行故障转移操作: 首先, Sentinel 系统会挑选 server1属下的其中一个从服务器, 并将这个被选中的从服务器升级为新的主服务器。 之后, Sentinel 系统会向 serverl 属下的所有从服务器发送新的复制指令, 让它们成为新的主服务器的从服务器, 当所有从服务器都开始复制新的主服务器时, 故障转移操作执行完毕。 另外, Sentinel 还会继续监视已下线的 serverl, 并在它重新上线时, 将它设置为新的主服务器的从服务器。 网络连接每个Sentinel实例会维护与所监测的主从实例之间的两个连接,分别是命令连...
redis客户端与服务器
redis客户端与服务器客户端 cli命令行 typedef struct multiCmd { //参数 robj **argv; //参数数量 int argc; //命令指针 struct redisCommand *cmd; } multiCmd; client结构(直接对于所有的数据结构进行了解释) //I/O复用,所以需要为每个客户端维持一个状态,多个客户端在服务器用链表链接 typedef struct client { //client的id uint64_t id; /* Client incremental unique ID. */ connection *conn; //协议版本 int resp; /* RESP protocol version. Can be 2 or 3. */ //当前正在使用的数据库 redisDb *db; /* Pointer to currentl...
redis事件
redis事件数据结构//事件处理器状态(同时是时间处理器和文件处理器) typedef struct aeEventLoop { //当前注册的最大描述符 int maxfd; /* highest file descriptor currently registered */ //当前追踪的最大描述符 int setsize; /* max number of file descriptors tracked */ //时间事件的id,时间事件链表中记录了最大的id long long timeEventNextId; //已注册的文件事件 aeFileEvent *events; /* Registered events */ //已经就绪,执行过处理器的文件事件 aeFiredEvent *fired; /* Fired events */ //时间事件 aeTimeEvent *timeEventHead; //事件处理器开关 int stop; ...
redis单机数据库以及持久化
单机数据库实现和持久化数据库细节实现 数据库的数据结构 源代码: typedef struct redisDb { // 数据库键空间,保存着数据库中的所有键值对 dict *dict; /* The keyspace for this DB */ // 键的过期时间,字典的键为键,字典的值为过期事件 UNIX 时间戳 dict *expires; /* Timeout of keys with a timeout set */ // 正处于阻塞状态的键 dict *blocking_keys; /* Keys with clients waiting for data (BLPOP)*/ // 可以解除阻塞的键 dict *ready_keys; /* Blocked keys that received a PUSH */ // 正在被 WATCH 命令监视的键 dict *watched_keys; ...
redis基础
redis基础数据结构sds 字符串长度保存在本体中,获取需要常数时间复杂度 header包含的部分: len: 表示字符串的真正长度(不包含NULL结束符在内)。 alloc: 表示字符串的最大容量(不包含最后多余的那个字节)。 flags: 总是占用一个字节。其中的最低3个bit用来表示header的类型。 缓冲区不会溢出 减少修改时的内存重分配次数 空间预分配 alloca记录分配的总空间,惰性空间释放 除了自己加上的头部字段,其他和c函数一样,兼容相关函数 链表 双向链表 无环,头指针的prev,尾指针的next都指向null 自带指向头指针和尾指针的指针 链表具有链表长度计数器,标识长度 void *可以保存不同类型的值 dict基于哈希表实现,采用某个哈希函数从key计算得到在哈希表中的位置,采用拉链法解决冲突,并在装载因子超过预定值时自动扩展内存,引发重哈希,并且在重哈希的过程中,每次增删改查推进一步重哈希,避免重哈希期间单个请求的响应时间剧烈增加. 实现增量式重哈希,dict的数据结构里包含两个哈希表。在重哈希期间,数据从第一个哈希表向第二个哈希表迁移...
3W1H | 关于写博客的反思
3W1H | 关于写博客的反思Why?为什么会想起来写博客?也就是之前只是做了一个比较粗糙的主页,现在想要丰富一下自己的页面 What?都写一些什么主题的博客?大概就是记录自己学习过程的东西吧,主要做的就是redis方面的 Who?写出来的博客都是给谁看的?更多只是自己学习方面的记录,我觉得有时间摸摸鱼写一下就是很给博客面子了 How much?要花多少时间和金钱来运营维护?不准备花多少时间哈哈哈哈哈哈我可能就是心血来潮搞一下而已
