redis复制过程浅析 发表于 2018-07-23 | 阅读次数: 复制 在分布式系统遇到网络分区故障时,往往需要依赖分区容错性来对外提供可用性和一致性服务,这就要求同一份数据在分布式环境中存在数据冗余,并在某部分数据损坏或不可访问后,仍然能够不影响用户的使用。复制便是提供这种分区容错性的常用手段,它要求同一份数据在多台机器各保存一份完整的版本。之前几篇文章介绍了redis单机版本的一些工作原理,本文便开始扩展到分布式环境,简单分析一下redis的多机版本是如何实现复制这一功能的。整个复制过程可分为master和slave两个部分介绍。 阅读全文 »
linux可执行文件结构及链接过程分析 发表于 2018-07-07 | 阅读次数: 前言 简单总结一下linux可执行文件的结构,以及有关链接的几个比较重要的概念,如符号表,重定位,静态链接,动态链接等。本文例子及部分描述摘自《深入理解计算机系统》及MIT教学操作系统xv6(Unix第6版用ANSI C重写)的源码。 阅读全文 »
redis 浅析单机服务器工作原理 发表于 2018-04-16 | 阅读次数: 前言 redis服务器的设计非常精巧,涵盖了内存kv数据库要考虑的方方面面。本文旨在总结和分析单机服务器部分的工作原理以及设计思想,希望能尽可能地涵盖整个单机服务器的工作流程。 阅读全文 »
redis 浅析IO多路复用与事件处理 发表于 2018-03-25 | 阅读次数: IO模型 在讲redis的IO多路复用机制前,先简单介绍一下其他几种常见的IO模型。这几种IO模型的根本差异在于以下两个过程的处理方式不同: kernel等待足够的数据到达。 kernel将数据从内核空间拷贝到用户空间。 阅读全文 »
redis 浅析服务器与客户端的通信流程 发表于 2018-03-21 | 阅读次数: 前言 这段时间实验室工作较忙,很难静下心来写点东西。发现还是得把做的看的记录下来,抽时间总结一下。最近研究redis的源码,本文就先简要分析一下服务器与客户端的通信流程,这一块也算是redis的核心功能了。 阅读全文 »
xv6 bootstrap部分源代码分析 发表于 2017-06-06 | 阅读次数: 前言 xv6是x86处理器上用ANSI标准C重新实现的Unix第六版(Unix V6,通常直接被称为V6),本文主要对xv6的bootstrap实现部分的源代码进行分析,分析一下机器开机之后,从BIOS引导boot loader,boot loader从磁盘加载内核到内存,到执行内核程序的全过程。 阅读全文 »
xv6 shell实现源代码分析 发表于 2017-06-04 | 阅读次数: 前言 xv6是x86处理器上用ANSI标准C重新实现的Unix第六版(Unix V6,通常直接被称为V6),本文主要对xv6的shell实现部分的源代码进行分析,同时引申一些操作系统系统调用的内容,包括管道,重定向,进程等等基本概念。通过阅读这部分的源代码,也可以对现代操作系统的shell这个用户程序的核心实现有一个基本的认识。 阅读全文 »
erlang二进制串深度解析及优化 发表于 2017-05-20 | 阅读次数: 前言 erlang作为函数式与天生并发的语言,其内存管理与垃圾回收无疑便是重点话题。本文并不想详细解析其内存管理与垃圾回收机制,而关注的是与这个主题密切相关的二进制串型。二进制串型是erlang的一种数据类型,目的是用二进制数编码erlang的其他类型,通常是用做进程间的大数据量传输。其设计非常精妙,特别是erlang的R12B版本以后对其做了大幅度的优化,有必要分析一下它对于erlang内存管理方面的影响。 阅读全文 »
SSH协议基本原理及用法 发表于 2017-05-02 | 阅读次数: 前言 SSH是linux系统远程登录及命令操作的常用协议与指令,基本用法非常简单。最近在做持续集成工作时候,在SSH上面遇到一些坑,因此在这里总结一下。 阅读全文 »
Gitlab CI 对erlang应用进行自动测试 发表于 2017-03-20 | 阅读次数: Common Test测试框架 common test是erlang自带的一个测试框架,对于复杂,大规模,特别是分布式的测试场景,它尤为合适。我们将先用它来编写测试计划,然后再编写gitlab ci的测试脚本来调用这些测试计划,从而实现自动测试。 阅读全文 »