
每周好文笔记
文章平均质量分 77
记录一些非常棒的论文核心思想以及个人感悟
Ch_ty
这个作者很懒,什么都没留下…
展开
-
分布式系统知识学习(六)分布式系统
分布式系统知识体系庞大而精妙,不花费大量的时间无法掌握。本文根据一些前人经验和自己摸索总结,由浅入深、由基础概念到实际运用,给出了一条学习曲线相对平滑的分布式学习攻略,希望和大家多多交流,共同进步。本篇为基础篇学习,涉及到了数百篇论文及博客资料,需要耐下心慢慢学习才可以体会到其精髓,欲速则不达。另外,本系列文章在github上优先更新,有空才会更新优快云的同篇文章,有兴趣的可以关注Awesome-Distributed-System基本理论共识算法分布式锁分布式时钟分布式快原创 2022-03-06 10:42:01 · 390 阅读 · 0 评论 -
分布式系统知识学习(五)分布式快照、错误检测及链复制
分布式系统知识体系庞大而精妙,不花费大量的时间无法掌握。本文根据一些前人经验和自己摸索总结,由浅入深、由基础概念到实际运用,给出了一条学习曲线相对平滑的分布式学习攻略,希望和大家多多交流,共同进步。本篇为基础篇学习,涉及到了数百篇论文及博客资料,需要耐下心慢慢学习才可以体会到其精髓,欲速则不达。另外,本系列文章在github上优先更新,有空才会更新优快云的同篇文章,有兴趣的可以关注Awesome-Distributed-System基本理论共识算法分布式锁分布式时钟分布式快原创 2022-02-17 19:28:08 · 581 阅读 · 0 评论 -
分布式系统知识学习(四)分布式时钟
分布式系统知识体系庞大而精妙,不花费大量的时间无法掌握。本文根据一些前人经验和自己摸索总结,由浅入深、由基础概念到实际运用,给出了一条学习曲线相对平滑的分布式学习攻略,希望和大家多多交流,共同进步。本篇为基础篇学习,涉及到了数百篇论文及博客资料,需要耐下心慢慢学习才可以体会到其精髓,欲速则不达。另外,本系列文章在github上优先更新,有空才会更新优快云的同篇文章,有兴趣的可以关注Awesome-Distributed-System基本理论共识算法分布式锁分布式时钟分布式快原创 2022-02-07 18:36:24 · 1047 阅读 · 0 评论 -
分布式系统知识学习(三)分布式锁
分布式系统知识体系庞大而精妙,不花费大量的时间无法掌握。本文根据一些前人经验和自己摸索总结,由浅入深、由基础概念到实际运用,给出了一条学习曲线相对平滑的分布式学习攻略,希望和大家多多交流,共同进步。本篇为基础篇学习,涉及到了数百篇论文及博客资料,需要耐下心慢慢学习才可以体会到其精髓,欲速则不达。另外,本系列文章在github上优先更新,有空才会更新优快云的同篇文章,有兴趣的可以关注Awesome-Distributed-System基本理论共识算法分布式锁分布式时钟分布式快原创 2022-01-28 21:09:46 · 2447 阅读 · 0 评论 -
分布式系统知识学习(二)共识算法
分布式系统知识体系庞大而精妙,不花费大量的时间无法掌握。本文根据一些前人经验和自己摸索总结,由浅入深、由基础概念到实际运用,给出了一条学习曲线相对平滑的分布式学习攻略,希望和大家多多交流,共同进步。本篇为基础篇学习,涉及到了数百篇论文及博客资料,需要耐下心慢慢学习才可以体会到其精髓,欲速则不达。另外,本系列文章在github上优先更新,有空才会更新优快云的同篇文章,有兴趣的可以关注Awesome-Distributed-System基本理论共识算法分布式锁分布式时钟分布式快原创 2022-01-22 11:11:44 · 11469 阅读 · 0 评论 -
分布式系统知识学习(一)基本理论
分布式系统知识体系庞大而精妙,不花费大量的时间无法掌握。本文根据一些前人经验和自己摸索总结,由浅入深、由基础概念到实际运用,给出了一条学习曲线相对平滑的分布式学习攻略,希望和大家多多交流,共同进步。本篇为基础篇学习,涉及到了数百篇论文及博客资料,需要耐下心慢慢学习才可以体会到其精髓,欲速则不达。另外,本系列文章在github上优先更新,有空才会更新优快云的同篇文章,有兴趣的可以关注Awesome-Distributed-System基本理论共识算法分布式锁分布式时钟分布式快原创 2022-01-17 21:20:37 · 494 阅读 · 0 评论 -
解密虚拟内存0x400000以下的地方
一. 前言 最近看CSAPP时,对以前没有仔细注意的一处知识盲区产生了兴趣,所以进行了深入研究,并写下此文一记录。二. 问题 二话不说直接上图。下图是CSAPP第七章的虚拟内存分析图。书中提到在X86-64位Linux系统中,代码段总是从地址0x400000处开始,后面是数据段。堆在数据段之后,通过调用malloc向上增长… 但是0X400000以下呢?为什么没有提到呢?翻遍全书,都没有一处提到0至0X400000处的空间是做什么用的。实际运行以下cat /proc/self/maps原创 2020-12-19 00:06:37 · 3098 阅读 · 8 评论 -
Linux操作系统学习笔记(二十七)磁盘I/O性能优化
一. 前言 本文是性能优化系列的最后一篇,将分析磁盘I/O的性能指标、测试方法、常见问题的优化套路等内容。二. I/O性能指标及查询工具 磁盘性能的衡量标准经常用到的包括使用率、饱和度、IOPS、吞吐量以及响应时间等。这五个指标是衡量磁盘性能的基本指标。使用率,是指磁盘处理 I/O 的时间百分比。过高的使用率(比如超过 80%),通常意味着磁盘 I/O 存在性能瓶颈。饱和度,是指磁盘处理 I/O 的繁忙程度。过高的饱和度,意味着磁盘存在严重的性能瓶颈。当饱和度为 100% 时,磁盘无法接受原创 2020-12-07 22:03:50 · 1002 阅读 · 0 评论 -
Linux操作系统学习笔记(二十六)内存性能优化
一. 前言 本文将分析内存的性能指标、测试方法、压测工具以及内存常见问题的优化套路。二. Buffer和Cache 通过free或者top命令我们可以发现其将内存分为了buffer和cache等部分。Buffer 和 Cache 的设计目的,是为了提升系统的 I/O 性能。它们利用内存,充当起慢速磁盘与快速 CPU 之间的桥梁,可以加速 I/O 的访问速度。通过man free可以查阅到下面的说明buffers Memory used by kernel buffers (Buffers原创 2020-12-07 22:01:56 · 420 阅读 · 1 评论 -
杂谈之code review
一. 前言 本文有感于大佬不厌其烦多次的code review,确实让人受益良多,颇多感激难以言语表达,只能默默记在心里。本文将从写代码和帮别人过代码两个角度来记录感悟,希望对大家都能有所帮助。二. Show leader the code 对程序员来说,代码就是自己的名片,也是自己的最好证明,所以一定要对代码有所追求。套用某部YY小说里的一句台词:“世界上没有纯净的铁,只有发现不了杂质的人”,追求代码的完美是毕生的事。关于代码规范,该部分属于程序员基本素养,但是绝大多数人做的都不算好。细谈原创 2020-10-23 00:11:31 · 355 阅读 · 0 评论 -
Linux操作系统学习笔记(十九)网络通信之套接字
一. 前言 在前面我们逐一分析了进程间通信的各种方法:信号,管道,共享内存和信号量,本文开始将分析更为复杂也是更为常用的另一套进程间通信:网络通信。网络通信和其他进程间通信最大的区别在于不局限于单机,因此成为了互联网时代的主流选择,无论是分布式、云计算、微服务、容器及自动化运营都离不开网络通信,其重要性可想而知。 经过30多年的发展,网络协议栈已经变得极为复杂,远远不是一两篇文章能够说清楚的东西,所以这里着重剖析我们更为关注的东西:网络编程涉及到的相关协议栈。从本文开始,将分别介绍套接字及其创建、网原创 2020-09-19 12:31:34 · 645 阅读 · 0 评论 -
Linux操作系统学习笔记(十八)进程间通信之共享内存和信号量
一. 前言 本文为进程间通信的最后一篇,介绍共享内存和信号量。之所以将二者一起叙述,是因为二者有着密不可分的关系。共享内存会利用虚拟内存和物理内存的映射关系,让不同进程开辟一块虚拟空间映射到相同的物理内存上,从而实现了两个进程对相同区域的读写,即进程间通信。而信号量则实现了互斥锁,可以为共享内存提供数据一致性的保证,因此二者常结合使用。二. 基础知识 共享内存的使用包括调用shmget()创建共享内存调用shmat()映射共享内存至进程虚拟空间调用shmdt()接触映射关系 信号量原创 2020-09-19 12:30:38 · 1556 阅读 · 0 评论 -
面试官角度看简历和笔试,不得不吐的槽
一. 前言 最近受老大赏识,有幸参与了我司校招的笔试出题、简历筛选、阅卷,于其中积攒了不少槽点,不吐不快,往广大同学切记切记不要再犯,提高自己的offer收割率,也可以保护考官们的眼睛不被污染。注意,本文不会教你投机取巧,实力依然是程序员最重要的东西,本文仅仅会告诉你如何更好地展示自己,如何避免一些不必要的问题。二. 关于简历 关于怎么写好简历网上其实有不少不错的文章了,但是或多或少忽视了一些东西,这些东西导致了大家简历的水平依然参差不齐。简历无疑是很重要的,没有一个好的简历基本上失败一半了,所以原创 2020-09-19 12:16:53 · 1616 阅读 · 0 评论 -
Linux操作系统学习笔记(十四)块设备
一. 前言 上文我们分析了字符设备,本文接着分析块设备。我们首先分析块设备的基本结构体,然后分析块设备生成、加载的整个过程,最后分析块设备的直接I/O访问和缓存I/O访问。二. 块设备基本结构体 上文中我们分析了字符设备驱动程序的抽象结构体cdev和管理cdev的结构体cdev_map,在块设备中会相对复杂一些,因为涉及到一个概念:伪文件系统bdevfs。在此之下主要有三个结构体:对块设备或设备分区的抽象结构体block_device,对磁盘的通用描述gendisk以及磁盘分区描述hd_struc原创 2020-08-21 22:12:30 · 5092 阅读 · 0 评论 -
Linux操作系统学习笔记(十二)虚拟文件系统
一. 前言 基于上文介绍的文件系统的基本结构,本文将继续深入Linux文件系统的精髓所在:虚拟文件系统。操作文件的本质是将磁盘文件数据映射到进程中,上文的文件系统是如何存储文件数据,而从进程如何映射到该文件系统,中间还有一系列的过程,主要包括进程发出文件操作命令,通过系统调用如sys_open、sys_read、sys_write调用相应内核函数在内核中为进程打开的文件和系统文件创建数据结构进行维护通过虚拟文件系统对各种不同的文件系统操作,如I/O设备、管道、进程间通信、网络等进行抽象并统一接口原创 2020-07-31 12:28:12 · 1210 阅读 · 0 评论 -
Linux操作系统学习笔记(十一)文件系统
一. 前言 本节开始将分析Linux的文件系统。Linux一切皆文件的思想可谓众所周知,而其文件系统又是字符设备、块设备、管道、进程间通信、网络等等的必备知识,因此其重要性可想而知。本文将先介绍文件系统基础知识,然后介绍最重要的结构体inode以及构建于其上的一层层的文件系统。二. 文件系统基础知识 一切设计均是为了实现需求,因此我们从文件系统需要的基本功能来看看其该如何设计。首先,一个文件系统需要有以下基本要求文件需要让人易于读写,并避免名字冲突等文件需要易于查找、整理归类操作系统需要原创 2020-07-31 12:27:30 · 531 阅读 · 0 评论 -
Linux操作系统学习笔记(十)内存管理之内存映射
一. 前言 本文为内存部分最后一篇,介绍内存映射。内存映射不仅是物理内存和虚拟内存间的映射,也包括将文件中的内容映射到虚拟内存空间。这个时候,访问内存空间就能够访问到文件里面的数据。而仅有物理内存和虚拟内存的映射,是一种特殊情况。本文首先分析用户态在堆中申请小块内存的brk和申请大块内存的mmap,之后会分析内核态的内存映射机制vmalloc,kmap_atomic,swapper_pg_dir以及内核态缺页异常。二. 用户态内存映射 用户态调用malloc会分配堆内存空间,而实际上则是完成了一原创 2020-07-08 12:49:11 · 694 阅读 · 0 评论 -
Linux操作系统学习笔记(九)内存管理之分页
一. 前言 上文分析了内存再用户态的结构体mm_struct及各个区域映射的vm_area_struct以及32位和64位的内核态结构体,本文将基于这些结构来分析Linux的内存管理系统。内存管理系统包括虚拟内存和物理内存的分页以及虚拟内存和物理内存的映射。本文将介绍分页机制,而映射则在下文中说明。本文首先简单介绍SMP和NUMA系统,然后对物理内存的节点、区域、页结构进行分析,在此基础上剖析伙伴系统和Slub Allocator的实现原理,最后介绍页面交换。二. 内存模型 在计算机的发展历程中原创 2020-07-08 12:48:12 · 714 阅读 · 0 评论 -
Linux操作系统学习笔记(八)任务空间管理
一. 前言 从本文开始,我们进入内存部分的学习。首先会接着前面的任务task_struct讲解任务空间管理结构体mm_struct,并简单介绍物理内存和虚拟内存的相关知识,关于详细的基础知识和概念可以参照CSAPP一书,这里不会做过多的赘述,而是默认在已了解其映射关系的基础上进行的学习。在后文中,会继续介绍物理内存的管理以及用户态和内核态的内存映射。二. 基本概念梳理CPU、缓存、内存、主存的架构是源于越快的设备越贵,因此出于节约(qiong)考虑设计了多层架构,CPU中有了MMU物理内存有限,原创 2020-06-25 17:42:38 · 804 阅读 · 0 评论 -
Linux操作系统学习笔记(五)进程的核心——task_truct
一. 前言 在前文中,我们分析了内核启动的整个过程以及系统调用的过程,从本文开始我们会介绍Linux系统各个重要的组成部分。这一切就从进程和线程开始,在 Linux 里面,无论是进程,还是线程,到了内核里面,我们统一都叫任务(Task),由一个统一的结构 task_struct 进行管理。这个结构非常复杂,本文将细细分析task_struct结构。主要分析顺序会按照该架构体中的成员变量和函数的作用进行分类,主要包括:任务ID亲缘关系任务状态任务权限运行统计进程调度信号处理内存管理文件原创 2020-05-31 21:18:27 · 1688 阅读 · 1 评论 -
Linux操作系统学习笔记(四)系统调用
前言 通过前面几篇文章,我们分析了从按下电源键到内核启动、完成初始化的整个过程。在后面的文章中我们将分别深入剖析Linux内核各个重要部分的源码。考虑到后面的部分我们会从用户态的代码开始入手一步一步深入,因此在分析这些之前,我们需要仔细看一看如何实现一个从用户态到内核态再回到用户态的系统调用的全过程,即系统调用的实现。 本文的说明顺序如下首先从一个简单的例子开始分析glibc中对应的调用针对32位和64位中调用的结构不同会分开两部分单独介绍,会介绍整个调用至完成的过程。即用户态->内核原创 2020-05-24 10:36:39 · 1211 阅读 · 0 评论 -
Linux操作系统学习笔记(三)内核初始化
前言 前文分析到Linux内核正式启动,完成了实模式到保护模式的切换,并做好了各种准备工作。下来就要看开始内核初始化工作了,源码位置位于init/main.c中的start_kernel(),源码如附录所示。这包括了一系列重要的初始化工作,本文会介绍其中一部分较为重要的,但是详细的介绍依然会留在后文各个模块的源码学习中单独进行。本文的目的在于承接上文给出一个从内核启动到各个模块开始运转的过程介绍,而不是详细的各部分内容介绍。创建0号进程:INIT_TASK(init_task)异常处理类中断原创 2020-05-17 22:47:56 · 1589 阅读 · 0 评论 -
Linux操作系统学习笔记(二)内核运行
前言 上文中,我们分析了从按下电源键到BootLoader完成加载的过程。加载完成之后,就要正式启动Linux内核了,而在这之前首先要完成从实模式到保护模式的切换。本文主要分析以下几部分内容新旧中断的交替打开A20进入main函数内核初始化 其实整个过程中还有很多内容,比如检查各种硬件设备等,在此略过不提。下面就开始潜入Linux源码的海洋畅游啦。新旧中断的交替 在实模...原创 2020-05-09 11:05:54 · 991 阅读 · 0 评论 -
阅读笔记(二十四)Raft算法《in search of an understandable consensus algorithm》
一. 简介 paxos算法是Lamport大神提出的共识算法,在众多分布式系统中均有使用。但是paxos本身实现起来较为复杂,因此业界出现了另一种更为方便实现的共识算法:raft。...原创 2020-04-25 10:17:59 · 378 阅读 · 0 评论 -
关于MMORPG多人对战中热点问题的解决思路讨论
一. 引子 本人是重度游戏爱好者,MMORPG当然也体验过很多,从早期的传奇、奇迹到冒险岛,从天下三、剑网三到天刀、逆水寒,其中有一个共同的问题:人一多就卡。拿剑网三举例,大攻防小攻防简直不要太卡,尤其是一波对冲,如果你不屏蔽人物、不降低画质,那简直就是在作死的边缘试探。为此,本文试分析如何解决MMORPG中多人对战造成的卡顿问题。 注意,玩家个人网速过差或者硬件未达标而强行开高画质不在本...原创 2020-04-19 09:50:47 · 936 阅读 · 0 评论 -
阅读笔记(二十三)谷歌paxos算法实践经验《Paxos Made Live - An Engineering Perspective》
一. 前言 《Paxos Made Live - An Engineering Perspective》一文为谷歌公司所写,主要内容为paxos算法工程领域实践遇到的问题和经验教训。原创 2020-04-18 16:36:18 · 914 阅读 · 0 评论 -
阅读笔记(二十二)链复制扩展CRAQ《High-throughput chain replication for read-mostly workloads》
一. 简介原创 2020-04-11 18:39:44 · 982 阅读 · 0 评论 -
NAT穿透技术简介和实现方案分析
1. NAT和NAT穿透 NAT的出现是为了解决IPV4地址稀缺的问题,同时起到了防火墙的作用保护了内网的信息安全,但是对于P2P下载来说无疑是很大的阻碍。本文先简单介绍了NAT和NAT穿透的分类,然后就常用的STUN/TURN/ICE进行介绍,最后分析现有的一些ICE开源项目。1.1 NAT类型介绍 根据RFC3235规定,NAT类型主要有Full Cone NAT(全锥型), Res...原创 2020-04-11 18:38:59 · 3800 阅读 · 4 评论 -
阅读笔记(二十一)链复制技术《Chain Replication for Supporting High Throughput and Availability》
一. 前言 根据CAP原理,一般由于分区存在原创 2020-04-06 10:55:08 · 1602 阅读 · 0 评论 -
阅读笔记(二十)分布式快照奠基算法《Distributed Snapshots: Determining Global States of Distributed Systems》
一. 前言 本文是Lamport大神继paxos和分布式时钟同步之后又一个奠基性的伟大算法。原创 2020-04-06 10:54:24 · 816 阅读 · 0 评论 -
qsort()函数原理
qsort()是glib中的排序函数,本文分析其基本流程。qsort()的判断流程如下:优先使用归并排序来排序输入数据。归并排序的空间复杂度为O(n),当数据量不算大的时候,可以负担的其额外的O(n)空间来实现更快的排序速度当数据量较大的时候,改用快速排序算法实现快速排序的分区点选取采用三数取中法:从区间的首、尾、中间,分别取出一个数,然后对比大小,取这 3 个数的中间值作为分区点。...原创 2020-04-04 16:55:46 · 2162 阅读 · 1 评论 -
NS《集合啦动物森友会》联机系统硬核分析及优化讨论
一. 联机系统简介 集合啦动物森友会是最近NS的大爆款,我也第一时间入坑玩的不亦乐乎。在最近一周的游玩过程中,唯一被大家抱怨的问题大概就是这个联机系统了。首先我来简单介绍一下动物森友会的网络联机流程和中间的一些机制。需要开通NS会员这肯定没啥好说的去别的岛上逛或者别人来自己岛上逛只能二选一,不可以自己开着岛让别人来玩同时自己跑别人岛上玩如果想去别人岛上玩,此时不允许岛上有人开着窗口...原创 2020-03-29 19:54:31 · 3371 阅读 · 0 评论 -
阅读笔记(十九)TCC和SAGA
一. 简介 本文介绍TCC(Try Confirm Cancel)和SAGA模式,这两者是对2PC的改进优化版本,均有着广泛的运用。二. 从2PC到TCC 如下图所示为2PC的工作流程:首先发出请求,收到回复如果全部同意则发送commit,否则发送abort。 Try-Confirm/Cancel (TCC)也是补偿型事务模式,支持两阶段的商业模型。尝试阶段 将服务置于待处...原创 2020-03-22 11:06:28 · 2542 阅读 · 0 评论 -
阅读笔记(十八)SAAS的奠基石12 factor-app《The Twelve-Factor App》
一. 前言 12 factor app是SAAS(Software As A Service)的基本原则,也是在我们日常工作中需要遵循的原则。其原文链接在文末给出,因为有对应的中文版(虽然翻译的不是很好)所以本文主要不在于复制粘贴一遍内容,而是对其内容的归纳和理解,以及一些自己遇到的事例经验。12 factor app核心思想包括:版本控制:使用标准化流程自动配置,从而使新的开发者花费最少...原创 2020-03-14 11:41:05 · 392 阅读 · 0 评论 -
阅读笔记(十七)bully algorithm
一. 前言 在分布式系统中,无论是Paxos等共识算法还是主从复制机制,都需要有一个组织者(coordinator/master),而如何选举组织者则是一个需要解决的问题。本文介绍领导选择算法中的bully algorithm算法。二. 算法主要内容算法前提 这里进程即各个分布式的机器运行的进程,而非本机上的多进程间的操作系统实现同步进程随时可能失败,包括在算法的运行期间当...原创 2020-03-07 11:35:25 · 510 阅读 · 0 评论 -
阅读笔记(十六)高可用KV数据存储Dynamo实现细节《Dynamo: Amazon’s Highly Available Key-value Store》
一. 简介 Dynamo是亚马逊的一个高可用分布式存储系统,《Dynamo: Amazon’s Highly Available Key-value Store》一文详细描述了该系统的整个架构及思考。原创 2020-03-01 11:05:05 · 750 阅读 · 0 评论 -
阅读笔记(十五)分布式错误检测《Survey on Scalable Failure Detectors》
一. 简介原创 2020-02-23 11:29:12 · 528 阅读 · 0 评论 -
阅读笔记(十四)时钟同步问题综述《An Overview of Clock Synchronization 》
一. 简介 本文介绍常见的时钟同步模型。原创 2020-02-13 09:52:49 · 1041 阅读 · 2 评论 -
阅读笔记(十二)Lamport Clock算法原理《Time, Clocks, and the Ordering of Events in a Distributed System》
《Time, Clocks, and the Ordering of Events in a Distributed System》是大神Leslie Lamport写的一篇关于时钟序列的文章。本文影响极其深远,可以说是分布式领域开山奠基式的重要文章。而该作者Leslie Lamport,同时也是共识算法Paxos的发明者,也是Latex的创作者,是一位非常可敬的牛人。 此文不长,主要以提出算法和数学证明为主。在这里我主要记录算法的主要思想,具体证明过程请原创 2020-02-02 13:14:27 · 3979 阅读 · 1 评论 -
阅读笔记(十一)分布式系统简介《Introduction to Distributed Systems》
一. 简介 《Introduction to Distributed Systems》一文简洁的介绍了分布式的各个层面。原创 2020-02-02 11:30:43 · 507 阅读 · 0 评论