主页 | Web版 | 订阅 | 归档 | Feed

GopherDaily

20250112

每日一谚:Avoid defer in loops, or your memory might blow up


Go技术生态

Go语言插件实现的整洁架构:依赖倒置的实践示例
本文探讨了 Go 语言的插件系统如何实现依赖倒置以及其他 SOLID 原则。文章以一个简单的转换流水线项目为例,展示了如何使用 Go 的插件系统构建一个灵活且健壮的系统,并解释了如何将这种模式应用于 API 开发。

rqlite的测试方法
rqlite 是一个轻量级、开源的分布式关系数据库,构建于 SQLite 和 Raft 之上。文章探讨了 rqlite 的测试策略,它遵循测试金字塔原则,优先进行单元测试,然后是集成测试,最后是少量端到端测试。单元测试涵盖了隔离的组件,系统级测试关注 Raft 共识模块和 SQLite 之间的交互,端到端测试则作为冒烟测试,验证系统的基本功能。文章还讨论了性能测试,以及在 rqlite 测试过程中学到的经验教训,例如:从小处着手、谨慎地增加更高层次的测试、适应和迭代,以及效率至关重要等。rqlite 的健壮性证明了其严谨的测试策略,十年来,用户报告的生产环境问题很少。保持测试的简洁性将仍然是其设计理念的基石。

掌握Go错误处理:构建健壮应用程序的最佳实践
本文探讨了在 Go 语言中编写可靠且易于维护的软件时,错误处理的关键方面。文章涵盖了 Go 错误处理的关键概念和最佳实践,包括自定义错误类型、错误包装以及可靠软件的稳健策略。学习如何创建自定义错误类型、使用错误包装以及实现可靠软件的强大策略,从而提升你的 Go 编程技能。

责任链模式:Go 语言中优雅的请求处理
随着软件系统复杂性的增加,通过单一的整体处理程序来处理请求变得越来越具有挑战性。责任链模式是一种优雅的解决方案,它允许您沿处理程序链传递请求,直到其中一个处理程序处理它。让我们深入探讨这种模式如何使您的代码更灵活、更易于维护。

深入理解Go的net/netip Addr类型
本文深入探讨了 Go 1.18 中引入的 net/netip 包中的 Addr 类型,它提供了一种比旧的 net.IP 类型更健壮、更高效的方式来处理 IP 地址。Addr 类型是值类型,不可变,并且始终表示有效的 IP 地址。文章涵盖了 Addr 类型的创建、使用方法,以及一些高级用法,例如地址分类、区域处理(IPv6 范围 ID)等,并提供了一个实际的 IP 地址过滤器的示例。此外,文章还比较了 Addr 类型与 net.IP 类型的性能差异,并给出了一些常见的注意事项和技巧。

扁平化AST(以及其他编译器数据结构)
本文介绍了数据结构扁平化,这是 arena 分配的一种特例,非常适合编程语言实现。我们构建了一个简单的解释器两次,一次是普通的方式,一次是扁平化的方式,结果表明,一些相当机械的代码更改可以使速度提高 2.4 倍。除了性能之外,扁平化还带来了一些人体工程学方面的优势。

Go泛型:代码可重用性变革
Go 1.18中引入的泛型彻底改变了编写可重用且类型安全的代码的方式。泛型带来了灵活性和强大功能,同时保持了Go的简洁性。然而,理解泛型的细微之处、优势以及泛型与传统方法(如interface{})的比较需要仔细研究。本文探讨了泛型的复杂性,深入研究了约束,比较了泛型和interface{},并演示了它们的实际应用。我们还将讨论性能考虑和二进制大小的影响。

云原生技术

SQLite:ANALYZE
本文档介绍了SQLite数据库中的ANALYZE命令的语法、语义和代码生成。ANALYZE命令用于填充sqlite_stat*表,这些表包含数据库中表和索引的统计信息,以优化查询性能。文章详细解释了sqlite_stat1表的结构和含义,并讨论了在不同情况下(例如,表是否具有主键,是否使用rowid)ANALYZE命令的行为。此外,文章还描述了与ANALYZE相关的三个函数:stat_init()、stat_push()和stat_get(),并列出了实现ANALYZE功能的计划,包括所需的支持和测试。

内存分配器 101 - 编写一个简单的内存分配器
本文介绍了用 C 语言编写一个简单的内存分配器。我们将实现 malloc()、calloc()、realloc() 和 free() 函数。这是一篇初级文章,因此我不会详细解释每一个细节。这个内存分配器不会很快且高效,我们不会调整分配的内存以与页面边界对齐,但我们将构建一个有效的内存分配器。就是这样。

去中心化联合分发——缺失的互联网协议
互联网天生就是去中心化的。它的诞生并非一蹴而就,而是分阶段进行的。新的协议建立在旧协议之上,每个新协议都扩展和改进了全球网络的功能。TCP/IP协议诞生于20世纪70年代,然后是20世纪80年代的SMTP和DNS。20世纪90年代,我们迎来了可能是最著名的HTTP协议,它带来了网络的视觉体验。所有这些核心协议的建立都考虑到了去中心化的互联网。文章探讨了RSS、Bluesky以及作者提出的RSDS(真正简单的去中心化联合分发)协议,分析了其优缺点,并提出了一个更可扩展、更去中心化的互联网内容分发方案。

最优雅的配置语言
本文介绍了一种名为 CCL(Categorical Configuration Language)的极简配置语言,其核心思想是基于范畴论,只使用键值对,并通过巧妙的设计支持列表、注释、分段、多行字符串以及与其他配置语言的集成。CCL 的简洁性体现在它只做最必要的事情,将复杂的逻辑留给使用者,从而避免了因功能过多而导致的测试成本过高和潜在的错误。文章还深入探讨了 CCL 在数学上的抽象,例如半群、幺半群和幺半群同态,以及如何利用这些抽象来优化配置的组合和解析。

第二部分:Netflix 分析工程工作的调查
本文是多部分系列文章的第二部分,分享了 Netflix 分析工程工作的广度,最近作为我们年度内部分析工程会议的一部分发表。本文重点介绍了一些令人兴奋的分析业务应用,在最后一篇文章中,我们将深入探讨技术工艺的各个方面。

变增量计数布隆过滤器的工作原理
本文深入探讨了如何在概率数据结构中使用数学属性来代替显式状态跟踪——以变增量计数布隆过滤器为例。布隆过滤器是一种优雅的概率数据结构,用于测试元素是否在一个集合中。计数布隆过滤器(CBF)通过用小的计数器替换每个位来解决删除问题。变增量 CBF 通过消除计数器字段来优化 Bh-CBF,从而将内存使用量减少了一半,但代价是增加了误报率。文章详细解释了 Bh 序列的概念以及如何在 VI-CBF 中使用它们来提高效率。

透过硬件计数器:迈向三倍性能提升的旅程
Netflix 技术博客文章,讲述了将 Java 微服务迁移到更大规模的 AWS 实例后,性能提升远低于预期的案例。通过使用性能监控计数器 (PMC) 和 Intel vTune 进行微架构分析,他们发现了由于“伪共享”和“真共享”导致的 JVM 本地代码瓶颈。最终,通过简单的代码修改,他们实现了 3.5 倍的吞吐量提升。

AI

生成式 AI——力量与荣耀
迈克尔·利布赖希为彭博新能源财经撰写了一份关于生成式 AI 的现状、能源消耗和数据中心增长的史诗般报告。作者从阅读这篇报告中获益良多,并推荐给所有对 AI 工具能源影响感兴趣的人。报告中的一些要点包括:数据中心电力消耗的预测并非首次出现;AI 基础设施的预期支出需要巨额资金;新一代 AI 训练数据中心对电力需求巨大;英伟达声称取得了巨大的能效提升;到 2030 年,全球额外需求将达到 45GW;谷歌、微软、Meta 和亚马逊都有净零排放目标;埃隆·马斯克在孟菲斯的 10 万 GPU 数据中心目前使用天然气发电;2023 年全球新增电力产能的 91% 来自风能和太阳能。作者认为,科技巨头最终会发现,为 AI 数据中心供电的最佳方式是通过传统方式,并与当地社区合作。报告的结论总体上比较乐观。

用于时间序列预测的仅解码器基础模型
谷歌研究人员 Rajat Sen 和 Yichen Zhou 发布了一篇关于 TimesFM 的博文,TimesFM 是一种仅解码器基础模型,经过预训练,可在各种公共基准测试中实现令人印象深刻的零样本性能。该模型已在 HuggingFace 和 GitHub 上发布。

流行工具与项目

AdguardTeam/AdGuardHome
Network-wide ads & trackers blocking DNS server

gohugoio/hugo
The world’s fastest framework for building websites.

sundowndev/phoneinfoga
Information gathering framework for phone numbers

HavocFramework/Havoc
The Havoc Framework

WireGuard/wireguard-go
Mirror only. Official repository is at https://git.zx2c4.com/wireguard-go

gitleaks/gitleaks
Find secrets with Gitleaks 🔑

evcc-io/evcc
Solar Charging ☀️🚘

1Panel-dev/1Panel
🔥 Top-Rated Web-Based Linux Server Management Tool. 1Panel features an intuitive web interface that seamlessly integrates server management and monitoring, container management, database administration, website management, system backup and restoration, and more.

encoredev/encore
Open Source Development Platform for building robust type-safe distributed systems with declarative infrastructure

netbirdio/netbird
Connect your devices into a secure WireGuard®-based overlay network with SSO, MFA and granular access controls.

go-gitea/gitea
Git with a cup of tea! Painless self-hosted all-in-one software development service, including Git hosting, code review, team collaboration, package registry and CI/CD

navidrome/navidrome
🎧☁️ Your Personal Streaming Service

containers/podman
Podman: A tool for managing OCI containers and pods.

IceWhaleTech/CasaOS
CasaOS - A simple, easy-to-use, elegant open-source Personal Cloud system.

dlvhdr/gh-dash
A beautiful CLI dashboard for GitHub 🚀

ethereum-optimism/optimism
Optimism is Ethereum, scaled.

icereed/paperless-gpt
Use LLMs and LLM Vision (OCR) to handle paperless-ngx - Document Digitalization powered by AI

apache/answer
A Q&A platform software for teams at any scales. Whether it's a community forum, help center, or knowledge management platform, you can always count on Apache Answer.

trustwallet/assets
A comprehensive, up-to-date collection of information about several thousands (!) of crypto tokens.

mudler/LocalAI
🤖 The free, Open Source alternative to OpenAI, Claude and others. Self-hosted and local-first. Drop-in replacement for OpenAI, running on consumer-grade hardware. No GPU required. Runs gguf, transformers, diffusers and many more models architectures. Features: Generate Text, Audio, Video, Images, Voice Cloning, Distributed, P2P inference

v2fly/v2ray-core
A platform for building proxies to bypass network restrictions.


编辑:Tony Bai

编辑主页:tonybai.com

GopherDaily项目:github.com/bigwhite/gopherdaily

Copyright 2019-2024 GopherDaily