Xargin

If you don't keep moving, you'll quickly fall behind

分布式系统中的不可靠复制问题

在《Designing Data-Intensive Application》一书中为当今大多数的互联网系统下了个定义,即数据密集型系统。在数据密集型系统中我们要应对的是数据的爆炸性增长问题。 为了应对问题我们采用了一些手段,比如 partition、replication,但这些手段,在一些场景或语言受限的情况下会带来一些麻烦的问题。本文主要讲一讲复制方面的问题。 说到复制 replication,可能大多数人第一印象都是存储系统中的复制,比如 MySQL 中基于 binlog 的复制,redis 中基于操作日志的复制,zk/etcd/kafka 中基于特定算法的复制(实质上也是基于 log 的复制),等等。但复制的概念本身实际上是很广的,

Go 系列文章3 :plan9 汇编入门

plan9 assembly 完全解析 众所周知,Go 使用了 Unix 老古董(误 们发明的 plan9 汇编。就算你对 x86 汇编有所了解,在 plan9 里还是有些许区别。说不定你在看代码的时候,偶然发现代码里的 SP 看起来是 SP,但它实际上不是 SP 的时候就抓狂了哈哈哈。 本文将对 plan9 汇编进行全面的介绍,同时解答你在接触 plan9 汇编时可能遇到的大部分问题。 本文所使用的平台是

[译]Go 和 interface 探究

这篇和之前的汇编那篇一样,都是翻译自 github 的 go-internals 这个项目,我的翻译地址是: > https://github.com/cch123/go-internals 这篇写的比较长,如果讲深度的话。。那自己真是惭愧到不好意思去写 interface 的文章了。 不过还是要写,因为看这种基于汇编分析问题的东西,对于大多数人来说还是比较难。这篇其实也不能算面面俱到,而且作者的研究方法是从 binary asm 反推实现原理,实际上还可以直接去看编译器的代码的。 废话不多说,如下。 $ go version go version go1.

Go 系列文章2:Go 程序的启动流程

Bootstrap locate entry point 思路,找到二进制文件的 entry point,在 debugger 中确定代码位置。 使用 gdb: (gdb) info files Symbols from "/home/ubuntu/exec_file". Local exec file: `/home/ubuntu/exec_file', file type elf64-x86-64. Entry

Go 系列文章1:Channel 从使用到源码分析

说明,做 Go 开发也有不短的时间了,积累了不少工具,感觉是时候开这么个坑了。源码阅读这种事情,别人发文、出书是别人的事情,如果没有自己尝试做一遍始终还是会少得到很多东西。最近感觉时机成熟,因为自己没有之前那么菜了,所以开这个坑。慢慢填上。内容是读 1.10 的源代码。用 stackedit 写完以后同步到 github 上,这里是原始仓库:golang-notes [https://github.com/cch123/golang-notes]。 更新主要还是在 github 吧,