Shusheng Blog

年轻的时候,我们总是会将自己的创作冲动误解为创作才能 -- 钱钟书

MIT6.828 Lab1-系统启动

MIT6.828 学习笔记

mit6.828的JOS系统启动分为两部分,Boot Loader和kern。BIOS加载Boot Loader程序,在完成它的一系列初始化后便把控制权交给Boot Loader程序,在 我们的 JOS 实验中,我们的 Boot Loader 程序会在编译成可执行代码后被放在模拟硬盘的第一个扇区。实验代码中有Kern和Boot两个可执行文件,其中 Kernel 是即将被 Boot Lo...

MIT6.828 实验环境配置

MIT6.828 学习笔记

1 安装工具包 # sudo apt-get install -y build-essential libtool libglib2.0-dev libpixman-1-dev zlib1g-dev git libfdt-dev gcc-multilib gdb 2 安装qemu 下载qemu定制版本 # git clone http://web.mit.edu/ccutler/ww...

Docker 底层技术

本文最早发于 简书。 Docker容器技术已经发展了好些年,在很多项目都有应用,线上运行也很稳定。整理了部分Docker的学习笔记以及新版本特性,对Docker感兴趣的同学可以看看,之前整理过的Linux namespace可以见之前的博文。 1 容器 & Docker & 虚拟机 Container(容器)是一种轻量级的虚拟化技术,它不需要模拟硬件创建虚拟机。在...

socket.io 原理分析

本文最早发于 简书。 在项目中用到socket.io在WEB端做消息推送,遂花了点时间看了socket.io实现,做个简单分析,本文 Docker 环境示例代码见 这里。如有错漏,欢迎指正。 1 概述 socket.io是一个基于WebSocket的CS的实时通信库,它底层基于engine.io。engine.io使用WebSocket和xhr-polling(或jsonp)封...

Web 编程基础

谈论WEB编程的时候常说天天在写CGI,那么CGI是什么呢?可能很多时候并不会去深究这些基础概念,再比如除了CGI还有FastCGI, wsgi, uwsgi等,那这些又有什么区别呢?为了总结这些这些WEB编程基础知识,于是写了此文,如有错误,恳请指正,示例代码见 web-basis 。 1 CGI 1.1 CGI原理 在说明CGI是什么之前,我们先来说说CGI不是什么。 ...

分布式系统学习(2)-Raft原理和实现

MIT6.824 课程学习笔记

Raft是一个分布式系统的一致性算法,它不像Paxos那么难懂,实现比Paxos简单许多,性能与Paxos相当,在Etcd,Consul里面等都有广泛运用。之前在容器服务化的时候用到Consul,顺带看了Raft算法的论文,然后为了练手Go语言做了mit6.824分布式系统课程的lab2。由于实验里面随机选举时间和模拟的节点crash导致的异常可能在你运行上百次才会出现,实现后要测试多...

Docker 容器监控系统初探

本文最早发于 简书。 随着线上服务的全面docker化,对docker容器的监控就很重要了。SA的监控系统是物理机的监控,在一个物理机跑多个容器的情况下,我们是没法从一个监控图表里面区分各个容器的资源占用情况的。为了更好的监控容器运行情况,更重要的是为了后续的容器动态调度算法需要的大量运行时数据的搜集,经过调研后,基于CAdvisor + InfluxDB + Grafana搭建了这...

时序数据库 InfluxDB 使用详解

本文最早发于 简书。 InfluxDB 是一个开源的时序数据库,使用GO语言开发,特别适合用于处理和分析资源监控数据这种时序相关数据。而InfluxDB自带的各种特殊函数如求标准差,随机取样数据,统计数据变化比等,使数据统计和实时分析变得十分方便。在我们的容器资源监控系统中,就采用了InfluxDB存储cadvisor的监控数据。本文对InfluxDB的基本概念和一些特色功能做一个详...