奇伢云存储

其他

Go 适合 IO 密集型?并不准确!

池来管理。文件句柄可读可写事件则没有意义,因为文件句柄理论上是永远都是可读可写的,不会阻塞调用。所以文件的
2022年5月5日
其他

Go 最细节篇|pprof 统计的内存总是偏小?

任务则不断的回收内存,从而达到一个平衡。理论上是不存在常规意义的内存泄漏的。但在程序中,还是经常见到内存占用持续升高的场景,今天就是来分享这类场景的思考。Go
2022年3月28日
其他

存储架构|Haystack 太强了!存 2600 亿图片

,这个开销就太大了,空间大一倍,性能下降一倍。所以,只要是针对小文件的存储优化,基本上都会在元数据上下点功夫。Haystack
2022年1月23日
其他

存储架构|Bitcask 引擎的设计,秒!

,压榨出机械硬盘的顺序性能。要点四:删除也是写入这个其实承接上面的。也是日志类型文件采用的手段,外面看来的原有对象的更新其实是操作日志的记录,这样才能最大限度的保持顺序
2022年1月4日
其他

存储架构|聊聊 LSM Tree 强悍的设计

地址:https://github.com/liqingqiya/readcode-goleveldb-master。笔者在理解了
2021年12月20日
其他

云原生 etcd 系列|深入剖析数据多版本 MVCC 机制

key,做了啥?既然在多版本的系统中写入的数据上做了一层转化,每一次的更新操作都对应了一条数据并且记录了下来。很多人其实都忘了所谓的“删除”其实本质也是更新。划重点:删除也是写入,一条特殊的数据。
2021年11月29日
其他

云原生 etcd 系列|用“租约”给 key 加一个期限!

?有些童鞋可能会好奇,租约一般用来做什么呢?就本质上来讲,租约就是一个具有生命周期的对象。怎么使用它?这依赖于用户的想象力。曾经我在分布式的分享章节里提到过,lease
2021年11月15日
其他

云原生 etcd 系列|存储引擎 boltdb 的设计奥秘?

树有些变异,几点差异如下:节点的分支个数不是固定值;叶子节点不相互感知,它们之间不存在相互的指向引用;并不保证所有的叶子节点在同一层;划重点:boltdb
2021年11月8日
其他

云原生 etcd 系列|快照技术是什么?

,用户体验大大提升。那怎么才能分清哪个是旧的数据,哪个是新的数据呢?有办法的:同一个位置的数据多版本。数据每次更新都对应不同的版本,每个打快照都递增版本号,这样快照的数据就和时刻对应上了。比如,这
2021年11月1日
其他

分布式基石|最难 paxos 和最易 raft ?

确定多个值有啥用?接着上面,我们现在有了一系列永远无法被修改了值序列,有啥用?存储服务的基本特点是允许存储任何数据,并且能够增删改。哪还有啥用?这一个个值序列像不像一个东西:日志!这个跟
2021年10月21日
其他

​云原生 etcd 系列|Leader 是怎么选举出来的?

)。r.becomeLeader()r.bcastAppend()如果选举失败,那也转变角色,等待日志复制消息即可。r.becomeFollower(r.Term,
2021年10月12日
其他

云原生 etcd 系列|为什么值得学习?

这个程序。root@ubuntu:~/code/github/readcode-etcd-v3.4.10/src/go.etcd.io/etcd/contrib/raftexample#
2021年10月8日
其他

Go 存储基础 | 怎么使用 direct io ?

4096)那这个地址是对齐的吗?答案是:不确定。那怎么才能获取到对齐的地址呢?划重点:方法很简单,就是先分配一个比预期要大的内存块,然后在这个内存块里找对齐位置。
2021年9月29日
自由知乎 自由微博
其他

Linux fd 系列| “匿名句柄” 是一切皆文件背后功臣

anon_inode:[eventpoll]如果是正常的文件句柄,一般显式的是一个路径:root@ubuntu:~/temp#
2021年9月24日
其他

聊聊奇伢如何学习 Linux 内核源码

是一个非常庞大的项目,一个人是无法把握住所有的细节的,但是按照模块抽象划分之后,理解和开发一个功能无需关注其他模块,只需要理解本模块就好。其实,奇伢也没有把所有模块看一遍,奇伢是做存储的,所以只对
2021年9月13日
其他

存储基础 | 神奇!我的文件有个“洞”

对齐的时候,虽然没释放空间,也不会报错;程序猿要遵守承诺,一旦声明了某段空间要释放,以后不能对此空间内容做假设;文件打洞的位置,不占物理空间,后续读是返回
2021年9月9日
其他

深度细节 | Go 的 panic 的秘密都在这

为啥能嵌套?这个问题就像是在问为什么函数调用可以嵌套一样,因为这个本质是一样的。后记panic
2021年9月2日
其他

深度细节 | Go 的 panic 的三种诞生方式

?小奇伢认为,它就是个特殊函数调用,仅此而已。有多特殊?限于篇幅,此处不表,下篇剖析其深度原理。给读者朋友先思考几个小问题,下次我们一起揭秘:panic
2021年8月30日
其他

Linux fd 系列|信号编程(signal)竟能这样做?涨姿势

进程间通信的一种机制,也叫软中断信号。既然是通信机制,那么就是传递信息用的,信号传递的信息很简单,就是一个整数,一般用于配合系统管理任务,比如进程的终结、恢复、热加载等。信号都用整数常量表示,命名以
2021年8月26日
其他

Go 存储基础 — “文件”被偷偷修改?来,给它装个监控!

准确率(比较自己轮询判断要好);怎么做到这个事情呢?既然是操作系统的支持,那么就涉及到系统调用。系统调用直接使用略微复杂了些,Go
2021年8月23日
其他

Linux fd 系列 — 定时器 timerfd 是什么?

epoll_wait?准备工作基本上就做好了,回调唤醒的路已经准备好了,下面继续看下怎么触发的。timerfd
2021年8月16日
其他

Go 并发编程 — 结构体多字段的原子操作

p.age)}打印结果是啥?你能猜到吗?可能是这样的:p.name=nobody:2p.age=3也可能是:p.name=nobody:8p.age=7按照排列组合来算,一共有
2021年8月10日
其他

Linux fd 系列 — socket fd 是什么?

,这个对象有意思了,这个也是以组合的方式往下兼容的,同一个地址强转类型得到不同层面的结构体。原理就在于:他们是一块连续的内存空间,起始地址相同。sock
2021年8月5日
其他

Linux 编辑器之神 vim 的 IO 存储原理

EX_RANGE|EX_WHOLEFOLD|EX_BANG|EX_FILE1|EX_ARGOPT|EX_DFLALL|EX_TRLBAR|EX_CMDWIN|EX_LOCK_OK,
2021年7月27日
其他

浅析 Go IO 的知识框架

啥的,统统封装起来)方便不?WriterFile:给一个路径,把内存一把写入文件,方便不?ReadDir:给一个目录路径,把这个路径下的文件列表一把读上来,方便不?ReadAll:给一个
2021年7月22日
其他

Linux fd 系列 — eventfd 是什么?

的可读可写事件就更有意思了,因为文件一直是可写的,所以一直都触发可写事件,文件里的数据也一直是可读的,所以一直触发可读事件。这个也是为什么类似
2021年7月12日
其他

深入理解 Linux 的 epoll 机制

举个例子:网卡收发包其实走的异步流程,操作系统把数据丢到一个指定地点,网卡不断的从这个指定地点掏数据处理。请求响应通过中断回调来处理,中断一般拆分成两部分:硬中断和软中断。poll
2021年7月5日
其他

自制文件系统 —— 05 总结:一切都为了狙击“文件”

副本就是数据存储多个副本的意思,这样就避免单点问题,数据就算丢了一份,还有其他份,这样可以提高可靠性。多副本说起来简单,但其实有很有讲究,其中最关键就是一致性的问题。
2021年6月28日
其他

自制文件系统 — 04 HelloFS 进阶 分布式加密文件系统

举个例子,小明每天写日记(旁白:正经人谁写日记),有天日记被人偷偷看了,大概率人设就要蹦了。但是,如果小明是用的甲骨文来写,那就算日记被偷也没人看得懂,损害最多也就丢个笔记本,于人设无害。
2021年6月21日
其他

自制文件系统 —— 03 Go实战:hello world 的文件系统

协议解析和封装用的。童鞋们,注意啦,重点来了。划重点:只要是数据协议,就有一个特点:和具体语言无关。数据协议格式只不过是对字节流的分析方式而已
2021年6月7日
其他

自制文件系统 — 02 FUSE 框架,开发者的福音

前文介绍了一些探索文件系统的命令和方法,并且提到内核文件系统开发的艰难,笔者说过要带读者朋友一起动手做一个极简的文件系统。但笔者总不能带娇嫩的读者趟一次内核的浑水吧?不能食言,怎么办?
2021年5月31日
其他

自制文件系统 — 01 文件系统的样子

之下,块存储模块之上的一个位置。对外呈现文件存储实现,对下管理裸块设备。划重点,文件系统是位于内核的一个模块,那就可以理解了,内核模块的开发之所以艰难就是难在调试和排障,用户态的程序你可以随意
2021年5月24日
其他

Go 存储基础 — 内存结构体怎么写入文件?

,字节)。想清楚这点就很清晰了,划重点,写入的时候关键在于怎么把结构体转变成字节数组,读取的时候关键在于怎么把字节数组转化成结构体。怎么做到这点?
2021年5月12日
其他

深度剖析 Linux 的 3 种“拷贝”命令

所以,你明白了吗?软链接文件就是一个文件而已,文件里面存储的是一个路径字符串。所以软链接文件可以非常灵活,链接文件本身和源解耦,只通过一段路径字符串寻路。
2021年5月8日
其他

存储进阶—怎么才能保证 IO 数据的安全?

这样的好处是保证了写的性能,貌似写的性能非常好(可不好嘛,数据写内存的速度),坏处是存在数据风险。因为用户收到成功的时候,数据可能还在内存,这个时候整机掉电,由于内存是易失性介质,数据就丢了。丢数据
2021年4月30日
其他

存储基础 —— 磁盘 IO 为什么总叫你对齐?

格式化文件系统的时候,一定要注意对齐的偏移,不要故意搞成非对齐的偏移,不然一旦文件系统格式化的时候都不对齐,后面谁也救不了,除非你重新格式化文件系统。
2021年4月21日
其他

读者问答:Go 编程怎么也有踩内存?

*(*reflect.SliceHeader)(unsafe.Pointer(key))加了这两行代码之后,就不会踩到外面的内存了,因为这样先在栈上分配出
2021年4月16日
其他

深度剖析 Go 的 nil

不管内部怎么样,这两个结构体占用内存是一样的,都是一个正常的指针类型和一个无类型的指针类型(
2021年4月12日
其他

存储基础 — 文件描述符 fd 究竟是什么?

这个结构体我们说是用来管理所有打开的文件的。怎么管理?本质上就是数组管理的方式,所有打开的文件结构都在一个数组里。这可能会让你疑惑,数组在那里?有两个地方:
2021年4月7日
其他

存储入门进阶推荐:存储技术通关看这几本书

有些朋友是已经深耕存储多年,有的朋友是刚刚入门、或者说有兴趣但是迟迟不得入门。以下从笔者的经验出发,向大家推荐几本书,可以比较系统的补充一些编程的内功和存储的基础知识,向你展示一条存储通关之路。
2021年3月31日
其他

Go 存储基础 — 文件 IO 的姿势

库,也就是系统调用。从名字也能看出来,系统调用是和操作系统强相关的,因为是操作系统提供给你的调用接口,所以系统调用会因为操作系统不同而导致不同的特性,不同的接口。
2021年3月26日
其他

全面剖析 MongoDB 高可用架构

客户端配置写多数成功才算成功。没错,这个权限交由由客户端配置。如果没有配置写多数成功,那么很可能写一份数据成功就成功了,这个时候如果发生故障,或者切主,那么数据可能丢失或者被主节点
2021年3月19日
其他

Go并发编程 — sync.Once 单实例模式的思考

第一次可能在锁互斥的时候,可能会比较慢。因为要抢锁,但是只要执行过一次,就不会在走到锁内的逻辑了。都是走原子读的路径,也是非常快的。
2021年3月17日
其他

深度剖析 Linux cp 的秘密

。稀疏文件本质上就是计算机文件,用户不感知,文件系统支持稀疏文件只是为了更有效率的使用磁盘空间而已。稀疏文件就是后分配空间的一种实现形式,做到真正用时才分配,最大效率的利用磁盘空间。
2021年3月13日
其他

Linus Torvalds 命名 [ 冰封荒原 ] 版 Linux 内核的思考

one)。这个就很容易理解,因为有这么个假设存在:只要写成功了,那么多副本的数据就是一致的,你随便读哪个都是正确的数据(不考虑静默或其他问题,静默导致的问题用数据自校验解决)。
2021年3月5日
其他

Go 并发编程 — sync.Pool 源码级原理剖析 [2] 终结篇

unsafe.Sizeof(poolLocalInternal{})%128]byte}//
2021年3月1日
其他

Go 并发编程 — 深入浅出 sync.Pool ,围观最全的使用姿势,理解最深刻的原理

个元素的池,然后就可以在池子里面直接获取到元素,免去了申请和初始化的流程,大大提高了性能。释放元素也是直接丢回池子而免去了真正释放元素带来的开销。
2021年2月22日
其他

为什么为公众号搞留言功能?

元不到的收入,当前,公众号的更新纯粹是为了喜爱,为了心里需要的一点认同感。更重要的是,笔者在研究问题的时候,会查询很多资料并且不断实践,形成文字分享给大家,自己也把问题彻底梳理清楚,一举两得吧。
2021年2月19日
其他

Go 最新资讯:Go 1.16 正式发布,支持 macOS ARM64 架构

个月,所以这个版本迭代速度还是挺快的。本次更新没有对语言本身做变更,主要更新的是工具链,运行时(
2021年2月17日
其他

Golang 最细节篇 — 解密 defer 原理,究竟背着程序猿做了多少事情?

这个是需要去堆上分配结构内存的。而我们绝大部分的场景都是可以是在栈上分配的,所以自然整体性能就提升了。栈上分配内存自然是比对上要快太多了,只需要
2021年2月8日