All Posts (55)

Golang 的新map 实现

Golang 1.24版本引入了基于“Swiss Tables”的新map 实现,通过多个table 和group 结构提升性能。每个group 包含8个slot,并通过control word 管理状态,支持并行计算。新设计采用可扩展哈希,避免了一次性扩容影响所有数据,优化了插入和查找效率。但仍不建议并发访问,尤其在扩容时可能出现数据同步问题。

VXLAN 是如何工作的?

VXLAN 是一种基于 UDP 隧道的二层网络虚拟化技术,解决云环境中的网络扩展和隔离问题。它通过 VNI 标识不同虚拟网络,并利用 FDB 维护 MAC-VNI-VTEP 映射。VXLAN 设备封装和解析数据包,使 L2 流量在 L3 网络上传输,提升灵活性和可管理性。

尽管我不信万象有序

一台笔记本,一个kobo,外加一只猫,2024年经历了学生时代到职场生活的转变。过去因为经济受困不得之物,现在似乎都稀松平常了。但在这种表象之下,我能感受到,变卖时间的固定工作制度,以及消费盛行的社会生活,正在慢慢锁死大多数人的可能性。在这种他者赋予的确定性道路背后,我必须思考、实践一条出路,给自己争取到真正的自由。

The Paxos Paper

前面有几篇博文cover 了Raft 和Gossip 协议,但Paxos 终归是一个绕不开的话题。今天要读的这篇paper 正好用来补全这块拼图。

读《求阙斋记》

“凡厥庶民,有猷有为有守,不协于极,不罹于咎,女则锡之福。”

sync.Cond:被忽视的同步机制

Golang 条件变量的概念在过去很长一段时间一直困扰着我,好像它能派上用场的地方,用经典的channel 也没有问题。VictoriaMetrics 这篇post 很大程度上释清了我的困惑,我将它翻译过来,希望对其它Golang 新手有所帮助。

The Dapper Paper

复杂的分布式系统中涉及多个组件间的交互,这些组件往往由多个团队按照不同的规范或风格开发而成。如何快速地理解整个系统的行为,定位存在的性能问题至关重要,而Dapper 就是解决这一痛点的基础设施。

The GFS Paper

终于我们来到了The Google File System!如果还有印象的话,应该记得前面Bigtable 就使用GFS 来存储日志和数据文件,这下总算能一探究竟了。

The Chubby Paper

Chubby 是一个分布式锁服务,之前读到的Bigtable 就使用Chubby 作为其底层依赖,这篇博客是对Chubby 论文的浅读。

如何实现kube-apiserver 与kubelet 的安全通信?

在Kubernetes 的默认设置中,kube-apiserver 访问kubelet 的过程并未加密,这意味着期间可能发生中间人攻击。从我个人的学习经历来看,Kubernetes 的文档虽然大而全,但是刚上手的人很难从中获取如何解决细节问题的方案,所以我把自己的探索过程记录下来。

大连:森与海之城

The 4-Hour Work Week 里推崇“旅居”的慢节奏旅行方式:在目的地住上十天半个月,没有紧凑的日程安排,尽可能地融入当地人的生活。在学生时代的末尾,我在大连这座东北的海滨城市度过了九天八夜,践行了这种旅行方式。

The Bigtable Paper

Bigtable 是基于GFS 研发的结构化数据分布式存储系统,这篇blog 是对原论文的导读,包含对Bigtable 数据模型的解释。

The Anti-Entropy Gossip Paper

Dynamo 的成员变更消息同步是通过Gossip 实现的。与Paxos 和Raft 不同,作为一个分布式数据通信协议,Gossip 并不保证数据的强一致性,而是通过节点间随机信息交换的方式实现状态的最终一致性。

浅看中文地址匹配

中文地址匹配是我硕士期间的研究课题,主要处理的是两条地址描述文本是否指向同一或相近地理位置的判断问题。该领域面临的主要挑战是地址元素表达多样,且样本数据需求大。这篇post 主要聊这个领域在纯GIS 圈的研究进展,以及我的一些思考。

The Dynamo Paper

Dynamo 是Amazon 很久以前设计的KV 数据存储服务,原论文至今仍是分布式系统领域内的经典,其特性是能够对写操作保持高可用。本文是我对Dynamo 论文的个人学习笔记。

用理性去养成习惯

在理性动物的结构中我看不到任何与正义相反的德性,而是看到一种与热爱快乐相反的德性,那就是节制。

草间求活

过去一年在极度的不确定性中达到了还算及格的效果,因此勉强能称为“草间求活”,希望能够更加关注健康、心态、精力,以提高自己应对风险的能力。

可拓展网络架构和分布式系统

本文概括了在设计可拓展的web 分布式系统时需要遵循的原则,以及为了实现这些目的通常使用的工具和手段等。

滥用抽象以致前景黯淡

这篇博文要表达的是技术人员满足于对最顶层的理解,而忽略了底层知识的掌握,最后会导致核心技能缺失的问题。

切片KV 存储服务构建

6.5840 / 6.824(分布式系统)Lab 4,在KV 存储的基础上添加数据分片,分片迁移等功能。

OS:虚拟化、并发和持久性

本文并非单纯的操作系统导论的读后感或者读书笔记,而是我目前对操作系统的理解的总结,以输出的方式内省学习效果,或许也能当作复习大纲使用。

简易KV 存储服务构建

6.5840 / 6.824(分布式系统)Lab 3,基于Raft 算法实现一个可容错的KV 存储服务。

Raft 算法实现

6.5840 / 6.824(分布式系统)Lab 2,实现Raft 算法。

线程与Goroutines

本文译自Threads and Goroutines,作者从一个具体的benchmark(启动一百万个现线程或者协程)比较了Go 和Rust 的并发性能。

密码技术入门

《图解密码技术》读书笔记,简要概括对称加密、非对称加密、散列函数、MAC、数字签名和伪随机数生成器的基本原理。

Jounery to the Net

DHCP、DNS、HTTP、TLS/SSL、TCP、UDP、ICMP、IP、ARP,blahblahblah... 本文将归纳计算机从联网到接收数据过程中所涉及的主要流程。我会把这篇文章当作计算机网络的大纲使用,但要建立一个完整的计算机网络知识体系,还需要阅读更深刻的资料。

Go channel 实现原理

channel 是Go 语言实现并发的重要机制,用来实现协程之间的通信。由于之前缺少并发编程的经验,我一直不太乐意去看channel 的源码。如今写完了MIT 6.824的Lab,总算是对并发有了更直观的认识,之前一直逃避的源码也终于清晰了起来。

Git 数据模型一窥

当我们在使用Git 的时候,我们究竟在做什么?

一种基于图结构的中文地址匹配方法

对于中文地址匹配问题,本文提出了一种基于图结构的中文地址匹配方法,该方法首先利用node2vec 算法获取地址的结点向量,然后利用GCN 获取地址的表征,最后利用MLP 进行匹配判断。

Go 的异常处理是一种叙事手法

本文译自Go's Error Handling Is a Form of Storytelling,这篇文章讲述了Golang 中异常的用法,这种把异常处理当作叙事手法的视角很新奇,文章也提供了一些写error message 的范例。但这篇文章不包括Go error 的实现原理,可以选择性的阅读。

哈希表及Golang map 的底层实现原理

哈希表是普通数组概念的一种推广,可以以键值对的形式存储数据,类似于数组通过索引值访问数组元素。本文将介绍哈希表的基本概念、哈希冲突的解决手段以及Golang 中map 的实现原理。

排序算法总结

常用排序算法归纳总结和Golang 实现,附带Golang 和CPP 中sort 算法源码分析。

寒假做了什么,未来往何处去?

本来应该是一年一度进行个人总结,但是今年的寒假比较特殊,是找工作之前的最后一个假期,而未来半年将会把主线放到找工作上,有必要对目前的计划完成情况进行复盘和存档,以便更加清晰地了解接下来要做的事情,以及这些事情的轻重缓急。

关于KMP 算法的理解

最近在刷LeetCode 的时候,对与KMP 算法有关的题目不是很理解。在题解模块发现了这样一篇技术博客,解释非常直观,于是翻译一下作为笔记使用。

神奇海鲜在哪里!

《海错图笔记》我必须给大家按头安利🥳!武大总图有完整三册,第一册还是作者签名本!没它论文早写完了(bushi