DLS之单机毛胚房已成

DLS之单机毛胚房已成

十月 07, 2025

(话接上回)在一个多月前,我开启了造一个 DLS 的旅途。在写上一篇文章时,已经过了差不多 1 个月的工期,门前土已松,脚手架已就绪。

这是当时的模样,对游客来讲,无甚可观可感:

3周已过,它渐渐有了一点色彩,至少,花园的门算是修好了:

言而总之

一眼望去,有一个显眼包站在了花园门口,没错,它就是 Server 。从今天起,这个大门便可以迎来送往。通过它,我们可以借助 TCP 网络传输来完成简单的日志写入和查询。比方说:

Server 在打工:

游客 在消费:

对,眼神好的朋友可能发现上面没有 写入 的截图。没关系,那不重要了,我喜欢随意一点,就不补了。

背后的汗水

最大的那滴

最大的一滴汗水,得是莫名的服务器崩溃了,因为它的捣乱,直接影响了 Server 上岗的时间点。

这个问题在我曾经写自定义客户端去读取 LLM API 的时候也遇到过,那时,解决了一些但没完全解决,最后不得已雇了一条看门狗 supervisord,帮我盯梢着,这才凑合着让公众号里的大模型问答上了线。

而这次,避无可避了。靠自己肯定是无济于事了,就索性去了 Discord ,请教了神通广大的 Zig 圈前辈,一番思辨后,终究是了了这桩难题。

讨论过程:

这里,分别是崩溃版和修复版的截图:

简单来说,还是因为对内存分配和指针的理解不到位,导致根本无从下手。这就是实践的意义,纸上得来终觉浅。

发酵的汗水

有了这么好的线索,自然不能放过。于是,经过几番折腾,不经意间发现了一本介绍 Zig 的在线电子书。在阅读相关章节后,最终,我绘成了一个便于自己理解和记忆的文档(这里并没有囊括所有的 Allocator 类型):

最有价值的那滴

这次的最有价值汗水,则是针对内存管理的设计和优化。如果你细看,会发现这一版的 MemTable 比上一版,多了个 arena: ArenaAllocator 。

通过它,大大减少了内存重复分配的次数,提升了内存释放的便捷性和准确性。文字太苍白,所以这又牵扯到了另一滴汗水,专门的文档用于记录整个创造过程的性能变化。

细节不表,这里只展示下,上路以来,5 个小迭代的变化:

歇息时刻

其实,这为期 3 周的进展,在原计划中只是1个星期的任务。但此间发生了太多不可预知的问题,有太多需要修枝的小毛病,先适可而止吧,漫步徜徉。

最后,如果你好奇现在的进展和后续的建设计划,门票在这儿 GitHub DLS