Rust 标准库的 sync 模块提供了一系列并发原语,包括对应原子操作的 atomic 系列,实现 channel 通信的 mpsc 和 mpmc 等,以及对应互斥锁的 Mutex、RwLock 和 Condvar 等。 不过,这些原语都是对应同步编程模型,基于线程阻塞来实现的。如果在 Future 和 async/await 上下文当中使用,可能会因为阻塞运行时调度而成为 Async Rust 的性能瓶颈。甚至 Rust 官方定义了一条 Lints 规则,提示开发者不...| 夜天之书
日志是应用可观测的重要组成部分。可以说,任何运行在生产环境的应用,可能还没建立起指标(Metrics)体系,也或许还没上一套完整的追踪(Traces)方案,但是一定会打日志,至少是关键生命周期日志和错误日志。否则,一旦应用出现问题,几乎无从着手排查。 早在 2014 年底,Rust 生态就出现了官方的 log 库。这个库主要提供了打日志的宏指令定义,日志结构体的实现,...| 夜天之书
随着应用程序从单体走向分布式微服务架构,追踪(Trace)请求在各个模块间的流转变得越来越重要。然而,现有应用系统还没充分认识到分布式追踪的价值和必要性。这很大程度上是因为生态当中缺乏一个可靠、高效且易用的分布式追踪方案。 Rust 生态尤其如此。作为一个新兴的语言生态,可供 Rust 开发者选择的追踪框架并不多。目前常用的 tokio-rs/tracing 库存在明显的生态...| 夜天之书
近年来,时序数据的增长是 Data Infra 领域一个不容忽视的趋势。这主要得益于万物互联带来的自然时序数据增长,以及软件应用上云和自身复杂化后的可观测性需求。前者可以认为是对联网设备的可观测性,而可观测性主要就建构在设备或应用不断上报的指标和日志等时序数据上。 分析时序数据的演变史几乎是大数据分析演变史的复现,即一开始都是把数据存在关系型数据...| 夜天之书
『太长不看版』 Apache Kvrocks 作为 Redis 的开源替代,近期支持了以下查询语法: 欢迎试用或跳转文末到完整示例段落查看具体步骤的含义。 原文作者 twice 发表于 Apache Kvrocks 官方博客。本文是取得原文作者许可的中文译文,翻译过程中间略有措辞顺序调整和演绎。| 夜天之书
本文承接《Zig 中间表示》的内容,继续讨论 Zig 程序编译的下一步:从 ZIR 指令序列,经过语义分析的过程,生成 AIR 指令序列。 本文翻译自 Mitchell Hashimoto 关于 Zig 的系列博客第四篇: Zig Sema: ZIR => AIR (https://mitchellh.com/zig/sema) 语义分析是 Zig 程序编译的核心环节,且它包括了 Zig 语言独特的设计:编译时求值。不同于其他语言常常需要使用额外的语法来定义和计算类型(泛型...| 夜天之书
本文承接《Zig 词法分析和语法解析》的内容,继续讨论 Zig 程序编译的下一步:从抽象语法树(AST)中生成中间表示(IR)。 本文翻译自 Mitchell Hashimoto 关于 Zig 的系列博客第三篇: Zig AstGen: AST => ZIR (https://mitchellh.com/zig/astgen) 翻译本文的过程中,我越来越回想起自己使用 Perl 6 做编译实习作业的时候。通过 Perl 6 内嵌的 Grammar 语法,我基本把词法分析和语法分析的内容给快速...| 夜天之书
Zig 语言是近几年来逐渐声名鹊起的一个新编程语言,也是数目稀少的系统编程语言家族中的一个新成员。它由 Andrew Kelley 于 2015 年开始创造,至今已经开发了八个年头,但是仍然还未发布 1.0 版本。 不过,已经有不少新锐项目选择使用 Zig 开发,例如 JavaScript 运行时和完整开发套件 bun 和分布式金融数据库 tigerbeetle 等。 Hashicorp 的创始人 Mitchell Hashimoto 也在前年卸任 CEO 成为 I...| 夜天之书
昨天的文章里,我介绍了 Async Rust 当前的实现以及一个实现 Async Runtime 需要了解的概念和现有的一些实践。 文章发出后,有评论称 Async Rust 创造性工作,没有可借鉴的经验。诚然,Rust 系统编程语言的定位就决定了它与其他有运行时的语言在设计时存在巨大的不同,同类语言 C 和 C++ 在异步编程方面,受限于语言的历史包袱,相关的支持往往以三方库而不是语言级的支持出现...| 夜天之书
绝大多数第一次接触 Async Rust 的开发者所写的 Hello World 程序是下面这样的: 1 2 3 4 5 6 7 8 9 10 11 12 13 asyncfnsay_world() { println!("world"); } #[tokio::main] asyncfnmain() { // Calling `say_world()` does not execute the body of `say_world()`. letop = say_world(); // This println! comes first println!("hello"); // Calling `.await` on `op` starts executing `say_world`. op.await; } 目前最流行的 Rust Async Runtime tokio 告诉你,只要在 main 函数前加...| 夜天之书
许多语言的高性能程序库都是建立在 C/C++ 的核心实现上的。 例如,著名 Python 科学计算库 Pandas 和 Numpy 的核心是 C++ 实现的,RocksDB 的 Java 接口是对底层 C++ 接口的封装。 Rust 语言的基本目标之一就是替代 C++ 在这些领域的位置,为开发者提供 Rust 具备的安全性和可组合性优势。 Apache OpenDAL (incubating) 是 Databend 工程师 Xuanwo 开发的一个 Rust 语言实现的开放数据访问层。它的核心...| 夜天之书
Git 版本管理系统由 Linux 的作者 Linus Torvalds 于 2005 年创造,至今不到二十年。 起初,Git 用于 Linux Kernel 的协同开发,用于替代不再提供免费许可的 BitKeeper 软件。随后,这一提供轻量级分支的分布式版本管理系统得到了开源开发者的广泛喜爱,在大量开源项目中投入使用。如今,Git 几乎是版本管理系统的同义词。 Git 最大的创新就是轻量级的分支实现,鼓励分布式的开发者...| 夜天之书
首先说一下结论:最终我选择了基于 Arch Linux 的 Garuda Linux 发行版作为基础来搭建自己的 Linux 开发机。 Neofetch 时刻| 夜天之书
本文成文于 2019 年。最近 Apache StreamPark (Incubating) 项目要做第一个 Apache 版本的发布,遇到了类似的发布多 Scala 支持版本时如何正确生成对应 POM 文件,又尽可能复用流水线的问题。由于过往发布记录都被删除,故重新发布。 近日在阅读 FLINK 代码时发现 FLINK 有一个 force-shading 模块,关于这个模块的作用注释在其使用点 maven-shade-plugin 的配置中是这样写的 现在这个模块已经移...| 夜天之书
上周开发报表的时候实现了一个 Spring Boot + Next.js 前后端代码分离,但是端口唯一的 WebApp 方案。这个方案既能利用好各自的生态,也能避免要起两个 server 占用两个端口的繁琐构建部署逻辑。 本文从选型到实现做一个分享,主要面向熟悉 Spring Boot 技术栈,又想跟进 React 系前端组件化方案的开发者。| 夜天之书
缘起 《ClickHouse 社群指标模型》一文里提到了 ClickHouse 社群基于自己的软件 ClickHouse 制作社群指标的探索。由于遇到了公开数据集表模式缺列,查询执行内存限制,以及数据库只读模式限制等问题,我在过去一周里试着按照 ClickHouse 官方博客的介绍,搭建起了一个属于自有的基于 ClickHouse 的 GitHub 事件数据库。 简单介绍下结果,自建数据集确实解决了上面列举的三个问题。...| 夜天之书
从本世纪初谷歌的三篇论文发布以来,数据处理领域在大数据的方向上探索了将近二十年的时间。从三篇论文的开源实现 Apache Hadoop 和 Apache HBase 开始,到打破传统关系型数据库的分布式数据处理系统如雨后春笋般接连诞生,NoSQL 系统回应了移动互联时代的数据爆发式增长的挑战。 诚然,传统的数据库专家对 NoSQL 也有像 MapReduce: A major step backwards 这样的批评,不过 NoSQL 系统...| 夜天之书
关于开源软件的发布相关的内容还在构思当中,先摆烂重发部分以前讨论过的关于构建系统的文章。构建和发布密不可分,可以认为都是持续交付流水线的一环。 我会分多篇文章讨论软件发布和开源软件发布的各个方面,文章内容再加以提炼放到编撰当中的《开源指南》里。 构建系统是软件开发的重要组成部分,生产环境中的绝大多数软件都由多个组件所组成,由一系列依...| 夜天之书
近日尝试利用 Apache Ratis 这个项目包装一个 Raft 协议驱动的状态机的时候,遇到了需要用 Protobuf 传输数据的场景。由于 Gradle 构建工具的门槛和 Java 语言项目的某些惯例碰到了使用上的问题,这里记录一下我在这个玩具项目当中的用例。| 夜天之书