自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

原创 词法分析浅析

参考资料 《自制编程语言基于C语言》 《自己动手写编译器、连接器》 《自己动手构造编译系统编译、汇编与链接》 《编译原理 第二版》 词法分析 词法分析主要就是将源码分解成每一个定义的token,通过词法解析分析出哪些是关键字,哪些是标识符,哪些是字符串等等,词法分析是编译的第一阶段,通过生成to...

2020-05-12 18:15:24 30 0

原创 模板引擎-模板引擎渐进进化

模板渲染 在web开发的过程中,现在比较多的开发方式都是前后端分离开发的方式来进行的,这样让前后端的开发更加解耦、前后端解耦开发的效率会比较高。在一些简单的场景或者项目要求比较简单的情况下,模板渲染的方式来渲染前端页面的方式,会是一个比较简单快速的方式来实现前端的展示,特别在一些监控系统或者压测工...

2020-04-28 17:55:59 28 0

原创 垃圾回收算法-标记清扫回收

参考书籍 1.垃圾回收算法手册 自动内存管理的艺术 2.垃圾回收的算法与实现 标记清扫回收 垃圾回收算法一般都是现在的自动内存管理系统中都会使用到的,例如python、go等语言都实现了自己的垃圾回收机制,从而解放了用户手动来管理内存的问题。一个自动内存管理系统一般都分为主要的三个操作:1.为...

2020-04-23 11:51:53 39 0

原创 golang源码分析:defer流程分析

defer defer是golang中使用的延迟调用的函数,该函数的使用场景就是如果函数执行出错(panic),也能够通过recover方式进行捕捉错误并将出错时的一些资源进行回收,如果在性能有要求的情况,并且错误能够控制的情况下还是直接避免使用该函数。 defer的使用场景描述 最理想情况下de...

2020-03-31 17:20:10 24 0

原创 golang源码分析:编译过程词法解析的流程

golang编译 由于golang作为静态语言,当使用go build时就会生成对应的编译完成之后的文件,那这个编译过程大致会做什么事情呢,在golang中的编译大致有哪些流程。 golang示例代码 package main import "fmt" func main(...

2020-03-30 19:33:34 44 0

原创 Flume原理初探:基本执行原理概述

Flume Flume是一款在数据收集领域使用较多的一个apache的开源工具,是一款分布式、可靠和高可用的系统,能够高效的从不同的源中收集、聚合上传大量的日志数据到结构化的存储模块中,Flume的使用不仅限于日志数据聚合, 由于数据源是可定制的,因此Flume可用于传输大量事件数据,包括但不限于...

2020-03-16 20:39:17 69 0

原创 Redis源码分析:过期key删除与设置key的过期时间

Redis中设置key过期时间与过期key的处理流程 在Redis中,可以再设置值的时候就设置该Key的过期时间,也可以通过在expire命令来设置某个key值的过期时间,并且在了解完设置过期时间之后,来查看一下Redis的过期key的处理流程。本文先来了解一下Redis的过期键的相关流程。 Re...

2020-03-02 17:16:32 72 0

原创 Redis源码分析:AOF策略与时间触发任务

时间周期性任务与AOF策略 周期性任务在分析启动流程与服务端处理的过程的时候,描述过有关时间任务的处理过程,在Redis内部事件驱动的过程中,有通过时间来进行事件的触发与处理机制,本文会先分析一下主要的时间驱动的任务会完成大致哪些工作。在分析完了时间任务之后,再继续分析一下Redis的AOF机制,...

2020-02-06 17:47:46 97 0

原创 Redis源码分析:服务器端处理过程

服务器端处理过程 在前面我们大致分析了Redis的服务器端的启动流程,Redis服务端主要就是依据单线程的反应器模式来设计的,并且在处理的事件过程中主要分为时间事件和连接响应事件。本文就根据客户端发送一个请求进来,来查看服务器端是如何工作的。 服务器端的工作流程 本文主要描述连接响应事件,即客户端...

2020-02-04 00:33:53 54 0

原创 模式设计概述:反应器(Reactor)模式

事件处理模式 在《面向模式的软件体系架构卷2:用于并发和网络化对象模式》中,总结了对于当前比较流行的事件处理模式的四种基本模式,分别是反应器模式、主动器模式、异步完成标记和接收器-连接器模式。 反应器模式,该模式引入的结构将事件驱动的应用可以多路分解并分配从一个或者多个客户机发送应用的服务请求,...

2020-02-01 19:40:53 50 0

原创 Redis源码分析:基础概念介绍与启动概述

Redis源码分析 基于Redis-5.0.4版本,进行基础的源码分析,主要就是分析一些平常使用过程中的内容。仅作为相关内容的学习记录,有关Redis源码学习阅读比较广泛的便是《Redis设计与实现》一书,浏览学习该书之后,觉得相关内容还是觉得抽象的高度比较高,故对照着代码再阅读学习一下。 Red...

2020-01-31 18:51:16 34 0

原创 模式设计概述:代理者模式

分布式系统模式 分布式相关的模式设计有大概三种模式,分布式系统与集中式系统相比需要完全不同的软件。管道和过滤器模式,微核和代理者模式。 代理者模式 代理者模式体系结构的强制条件是 组件应该能够访问其他组件远程、地点透明的服务调用提供的服务 需要在运行期间交换、添加或移动组件 该体系结构应该向用户...

2020-01-20 16:07:26 28 0

原创 MVVM框架原理浅谈

MVVM基本原理 MVVM(Model-View-ViewModel)本质上就是MVC 的改进版,MVVM 就是将其中的View 的状态和行为抽象化,让我们将视图 UI 和业务逻辑分开。 数据修改通知ViewModel通知Model数据修改View数据修改通知ViewModelViewModel数...

2020-01-07 15:38:54 44 0

原创 golang源码分析:调度器chan调度

golang调度机制chan调度 golang的调度策略中,碰见阻塞chan就会将该chan放入到阻塞的g中,然后再等待该chan被唤醒,这是golang调度器策略的主动调度策略之一,其中还有其他的主动调度策略包括进入调用系统调用或者主动调用Gosched时,都会发生主动调度,对应的当然也有被动调...

2019-12-25 16:45:43 26 0

原创 golang源码分析-调度概述

golang源码分析-调度过程概述 本文主要概述一下golang的调度器的大概工作的流程,众所周知golang是基于用户态的协程的调度来完成多任务的执行。在Linux操作系统中,以往的多线程执行都是通过操作系统陷入内核来创建线程并提供给操作系统进行调度,在操作系统中的线程调度可以充分利用操作系统提...

2019-12-18 15:41:22 36 0

原创 golang源码分析-启动过程概述

golang源码分析-启动过程概述 golang语言作为根据CSP模型实现的一种强类型的语言,本文主要就是通过简单的实例来分析一下golang语言的启动流程,为深入了解与学习做铺垫。 golang代码示例 package main import "fmt" func mai...

2019-12-11 17:33:14 62 0

原创 租约-代码实践

租约 本文主要根据租约的基本原理,采用go语言实践一下,租约的基本流程。 租约设计概述 用例模型 租约的主要机制就是为了保证在分布式环境下使得各个客户端使用的数据保持强一致性,每个客户端在查询服务器数据的时候,都在服务端存在一个租约信息,如果服务端还有租约没有到期,则客户端提交的数据修改阻塞到所有...

2019-12-06 17:06:42 22 0

原创 chubby分布式锁服务概述

分布式锁与chubby 分布式锁,是控制分布式系统之间同步访问共享资源的一种方式。Chubby是一种面向松耦合的分布式系统的锁服务,通常用于为一个由适度规模的大量小型计算机构成的的松耦合的分布式系统提供高可用的分布式锁服务。锁服务的目的是允许它的客户端进程同步彼此的操作,并对当前所处环境的基本状态...

2019-12-03 11:34:53 187 0

原创 租约-分布式缓存一致性的高效容错机制

租约 租约被提议为一种基于时间的机制,可提供对分布式系统中缓存数据的有效一致访问。非拜占庭式故障会影响性能,而不是正确性,并通过短期租约将其影响降到最低。 缓存引入了确保缓存数据与其主要存储位置之间一致性的问题。一致的意思是,除了高速缓存的性能优势外,行为等同于仅存在单个(未缓存)数据副本。对于大...

2019-11-30 22:01:50 72 0

原创 分布式任务调度系统V1

分布式任务调度系统V1目标 初步目标实现,实现任务的下发分配,分布式任务执行,支持任务分片(在代码上支持),任务执行记录。 任务调度系统构思 基于C/S架构实现,基于长连接来管理实现,当前版本的逻辑架构图如下; 注册等注册等注册等下发任务等下发任务等下发任务等客户端A服务端客户端B客户端C 系统主...

2019-11-11 20:18:09 56 0

原创 两阶段提交实际项目V1

项目介绍 两阶段提交项目主要是实际用代码演示复现一下,两阶段提交的执行过程,仅供学习参考。本次主要分析的版本为V1版本,主要实现的流程包括服务端的基础架构编写,客户端的基础架构编写,完成事务提交的过程。 两阶段项目的用例模型 客户端注册 用例名称 客户端启动注册 主要参与者 客户端...

2019-11-01 22:17:19 35 0

原创 两阶段提交(Two-Phase Commit)

两阶段提交 两阶段提交是一种同步协议,是计算机网络尤其是在数据库领域内,为了使基于分布式系统架构下的所有节点在进行事务处理过程中保持原子性和一致性而设计的一种算法。 两阶段提交的执行过程 在两阶段提交过程中,主要分为了两种角色协调者(coordinator)和参与者(participants),协...

2019-10-22 18:40:30 60 0

原创 Zookeeper源码分析:主从角色关系流程概述

参考资料 <<从PAXOS到ZOOKEEPER分布式一致性原理与实践>> zookeeper-3.0.0 主从关系概述 在概述了主从角色的初始化流程之后,本文主要来梳理分析一下Zookeeper服务端的逻辑关系,包括选举的情况的分析,客户端数据与服务端的数据交互等情况。 ...

2019-10-17 14:35:45 37 0

原创 Zookeeper源码分析:Follower角色初始化

参考资料 <<从PAXOS到ZOOKEEPER分布式一致性原理与实践>> zookeeper-3.0.0 Follower角色初始化 本文主要简述一下Follower角色初始化的流程是什么样子。 Follower角色初始化流程 case FOLLOWING: ...

2019-10-14 16:22:54 38 0

原创 Zookeeper源码分析:Leader角色初始化

参考资料 <<从PAXOS到ZOOKEEPER分布式一致性原理与实践>> zookeeper-3.0.0 Leader角色初始化 在上文的选举完成之后,每个zk实例都会根据选举结果进入对应的角色,本文主要就是讲述Leader的初始化相关内容。 Leader初始化流程 ca...

2019-10-12 14:32:30 55 0

原创 Zookeeper源码分析:选举流程

参考资料 <<从PAXOS到ZOOKEEPER分布式一致性原理与实践>> zookeeper-3.0.0 Zookeeper选举模式 针对zookeeper-3.0.0版本,选举模式可以分为三种模式,主要分为快速认证选举,快速选举和直接UDP选举这三个算法。通过选举来确定...

2019-10-07 11:31:21 37 0

原创 Zookeeper源码分析:集群模式启动概述

参考资料 <<从PAXOS到ZOOKEEPER分布式一致性原理与实践>> zookeeper-3.0.0 Zookeeper概述 Zookeeper是一个分布式的,开放源码的分布式应用程序协调服务。致力于提供一个高性能、高可用,具有严格的顺序访问控制能力(写操作严格顺序)...

2019-09-30 10:42:55 36 0

原创 leveldb源码分析:数据合并落盘

数据的合并落盘 本文主要来梳理一下,leveldb数据是怎样从内存写入文件这么一个过程的。在前文的描述中,在数据库的Open过程中,在数据的Get过程中或者Write数据的时候等情况下都可能会触发到leveldb数据合并并写入本地文件的操作即MaybeScheduleCompaction函数的调用...

2019-09-22 15:38:00 139 0

原创 leveldb源码分析:数据查询

leveldb数据查询 查询的示例代码如下: string res; status = db->Get(ReadOptions(), "KeyNameExample", &res); 本文就先分析一下数据的获取流程。 db->Get获取数据 主要就是调用d...

2019-09-21 15:41:02 89 0

原创 leveldb源码分析:数据插入续(跳表)

leveldb数据的插入-跳表 本文主要是接着上一篇文章,继续深入探索Write函数调用插入之后的流程。 status = WriteBatchInternal::InsertInto(updates, mem_); InsertInto插入数据函数 namespace { class M...

2019-09-19 19:42:31 38 0

原创 leveldb源码分析:数据插入与删除(Put与Delete)

Status DBImpl::Write(const WriteOptions& options, WriteBatch* updates) { Writer w(&mutex_); // 初始化一个Writer...

2019-09-14 11:16:31 77 0

原创 leveldb源码分析:Open启动流程

leveldb概述 Leveldb 是一个持久化的KV存储系统,主要将大部分数据存储在磁盘上,在存储数据的过程中,根据记录的key值有序存储,当然使用者也可以自定义Key大小比较函数,一个leveldb数据库类似与一个操作系统文件夹,所有的有关数据库内容都存储在该文件夹下面,并提供Put,Dele...

2019-09-02 15:47:07 60 0

原创 Bigtable:结构化数据的分布式存储系统

相关说明 Bigtable是一个用于管理结构化数据的分布式存储系统,其设计目的是为了通过数千个服务器管理大规模数据。谷歌许多的项目例如,web索引、谷歌地球和谷歌金融都使用了Bigtable来存储大规模数据。这些应用对Bigtable提出了非常不同的要求,包括数据大小(从URL到网页到卫星图像)和...

2019-09-02 14:15:27 108 0

原创 Linux内核网络栈1.2.13-route.c概述

参考资料 <<linux内核网络栈源代码情景分析>> route路由表概述 在IP协议的实现中,只要发送数据包都要查询路由表,选择合适的路由选项,确定下一站的地址,并构造MAC地址,进而将数据包发往链路层进行处理,本文就继续学习route相关内容 route概述 rout...

2019-08-28 15:33:08 57 0

原创 Linux内核网络栈1.2.13-icmp.c概述

参考资料 <<linux内核网络栈源代码情景分析>> icmp协议 在实现的过程中, ICMP协议工作再IP协议之上,但又不与TCP协议工作再一级,而是在下一级,在一般ICMP模块处理完后,还需要进一步调用TCP协议进行处理。该协议的目的主要是用于通报错误或者探测远端主机...

2019-08-27 19:30:24 81 0

原创 Linux内核网络栈1.2.13-tcp.c概述

参考资料 <<linux内核网络栈源代码情景分析>> af_inet.c文件中调用函数在协议层的实现 本文主要根据在af_inet.c文件中根据初始化不同的协议,来调用不同的协议族处理。在af_inet.c中的inet_create函数中就是根据传入不同的连接类型展示不同...

2019-08-26 16:10:24 44 0

原创 Linux内核网络栈1.2.13-af_inet.c概述

参考资料 <<linux内核网络栈源代码情景分析>> socket常用函数继续调用分析 根据socket提供的常用库函数,socket、read和write等函数,继续往下一层分析tcp/ip协议的执行过程,本文分析的函数大部分位于af_inet.c文件中,该层大部分逻辑...

2019-08-08 15:47:39 44 0

原创 Linux内核网络栈1.2.13-socket.c函数概述

参考资料 <<linux内核网络栈源代码情景分析>> socket常用函数概述 根据socket提供的常用的库函数,socket,read,write等函数, 执行的过程 inet协议的注册流程 在上文中分析过了在设备的初始化过程中,会调用sock_init函数初始化,在...

2019-07-26 15:35:28 38 0

原创 Linux内核网络栈1.2.13-网卡设备的初始化流程

参考资料 <<linux内核网络栈源代码情景分析>> 网卡设备的初始化 本文主要描述一下网卡设备的整个初始化的过程,该过程主要就是根据设备的硬件信息来获取与传输网络数据,注册相关的网卡中断处理函数,协议的初始化等内容。 初始化过程 首先在操作系统初始化的过程中,在main...

2019-07-25 11:17:01 199 0

原创 Linux内核网络栈1.2.13-有关tcp/ip协议的基础入门

参考资料 <<linux内核网络栈源代码情景分析>> Linux内核网络栈的基础内容 主要分析tcp/ip相关的基本构成,概述了socket的系统调用进入内核的一个流程,并了解了协议的执行流程。为后续的理解学习做铺垫。 应用程序调用进入内核的过程 Tcp/ip协议示意图如...

2019-07-24 14:24:56 54 0

提示
确定要删除当前文章?
取消 删除