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

GopherDaily

2024-09-10

每日一谚:Go is a `get things done` language


Go技术生态

致敬:程序员成长路上的良师与经典著作
在教师节这个特殊的日子,作为IT行业从业人员,我想向那些在计算机科学和编程领域给予我们启迪的老师们致敬。这些老师可能不是传统意义上站在讲台前的教育者,但他们通过自己的著作、思想和贡献,通过他们的智慧结晶,为我们指明了方向,为无数程序员的成长之路点亮了明灯

Go官博:2024第二次Go用户调查开始了
Go 团队邀请 Go 开发者社区参加一年两次的 Go 开发者调查,该调查于 9 月 9 日至 9 月 23 日举行,以收集有关 Go 编程语言的使用、挑战和所需改进的反馈。这些反馈对于理解 Go 如何应用于不同领域以及增强语言以更好地为开发人员服务至关重要。Go 团队强调了这项调查在塑造 Go 未来方面的重要性,并鼓励开发人员通过简短的调查来分享他们的见解。此外,他们敦促社区传播信息并鼓励其他人参与,强调他们共同的经验对 Go 发展的集体影响。

减少漏洞并提高 Go 质量代码
Jhon Baron 在 Medium 上的文章强调了缓解漏洞和提高 Go 代码质量的重要性。它强调了开发人员在不验证其版本的情况下集成库的常见做法,这会导致潜在风险。Baron 建议利用 govulncheck 等工具检测 Go 代码中的漏洞,并利用 SonarQube 等工具进行整体代码质量分析,包括重复代码和代码异味。此外,他主张使用 Jenkins 管道来自动化这些检查,从而将安全和质量措施集成到持续集成和交付流程中。通过采用这些策略,开发人员可以维护符合最佳实践的安全高效的代码库。

Go如何测试'go test'
本文深入探讨了 Go 团队如何测试 Go 工具的演变,以及如何使用名为 “testscript” 的工具将这些策略应用于测试用 Go 编写的命令行工具。最初,Go 团队使用一个名为“test.bash”的 shell 脚本进行测试,随着“script_test.go”的引入,该脚本演变成一个更复杂的测试框架。该框架允许以类似于 shell 脚本的方式进行测试,并具有 Go 测试基础设施的额外好处。由 Roger Peppe 开发的“testscript”工具通过提供更流畅、更直观的方式来为 CLI 工具编写测试,并具有并行测试执行和自动清理等功能,从而进一步完善了这一过程。Atlas,一个数据库模式即代码工具,已经成功地将“testscript”集成到其测试过程中,展示了该工具在确保 CLI 工具可靠性方面的实际应用和影响。

静态和动态链接的 Go 二进制文件
在这篇文章中,Alex Pliutau 深入探讨了静态和动态链接的 Go 二进制文件的复杂性,探讨了这些链接方法对可移植性、部署和安全性的影响。静态链接,即将所有必要的库直接嵌入到可执行文件中的过程,因其可移植性优势而备受强调,尽管它可能并不总是必要的,尤其是在利用 libc 等流行库时。相反,动态链接允许使用共享库,并可能导致更小的可执行文件大小,但它也引入了潜在的安全注意事项,例如 LD_PRELOAD 技巧和安全执行模式。本文还谈到了使用 cgo 的交叉编译 Go 程序的挑战,以及理解 Go 的编译和执行过程对于健壮的跨平台应用程序开发的重要性。

测量吞吐量
本文讨论了两种测量数据库系统吞吐量的方法:开环和闭环基准测试。作者解释说,虽然开环基准测试由于无法考虑排队和请求调度系统而容易不准确地测量延迟,但它们可以有效地测量吞吐量。作者提出了一种闭环基准测试方法,尽管它与开环基准测试相似,但它对数据库更宽容,因为它减轻了负载,而不是导致它无限排队。作者分享了两种方法的结果,表明闭环基准测试方法始终产生接近开环方法的吞吐量值,在本例中约为每秒 470 个查询。作者还指出,给定理想化系统,两种方法理论上应该达到相同的最大吞吐量值。

B 树和数据库索引
本文深入探讨了 B 树和 B+树的复杂性,这两种数据结构广泛用于数据库管理系统,用于通过索引进行高效的数据查找。它解释了 MySQL(一种广泛使用的 DBMS)如何使用 B+树,特别是在其 InnoDB 存储引擎中,其中所有表数据都存储在 B+树结构中。本文进一步讨论了主键选择在确定 B+树中数据的布局和性能方面的重要性。它对比了顺序键插入和随机键插入,说明了顺序键如何导致更可预测和更浅的树,从而提高查询性能。此外,本文还谈到了 MySQL 中缓冲池的重要性,尽管 MySQL 在内存中缓存,但它仍然受益于最小化查询期间访问的页面数量。

Asynchronous IO: the next billion-dollar mistake?
The article questions whether asynchronous IO, a technique used to handle high traffic web services without blocking the calling OS thread, might be considered a "billion-dollar mistake" akin to Tony Hoare's invention of NULL pointers. It explores the historical context of asynchronous IO, its growth in popularity, and the alternatives it presents to handling IO operations. However, the author also highlights the challenges and limitations of asynchronous IO, such as the need for different strategies for file IO and the dependency on the underlying OS's support for asynchronous operations. The article concludes by suggesting that instead of investing in asynchronous IO, resources could have been better spent on improving the performance of OS threads, proposing a hypothetical scenario where efficient OS threads could negate the need for asynchronous IO.

优化事件驱动型工作负载:我们从 Lambda 触发器到轮询的旅程
Reshef Sharvit 是一位经验丰富的后端工程师,他在 Medium 博文中分享了他优化事件驱动型工作负载的历程。最初,服务 A 和服务 B 与 SQS 队列分离以管理数据库负载,但由于事务争用而导致的 CPU 峰值变得明显。为了解决这个问题,Sharvit 试验了一种轮询机制来取代 SQS 触发的 Lambdas,旨在平衡负载管理和处理效率。尽管在 AWS Lambda 的约束下实施长时间运行的流程很复杂,但他开发了一种解决方案,可以在 3 到 4 次执行内处理消息,从而最大限度地减少对数据库的影响。这种方法还保持了干净的日志、错误率和指标,被证明是一种灵活且以客户为中心的技术解决方案。

云原生技术

VictoriaLogs:概述,在 Kubernetes、LogsQL 和 Grafana 中运行
VictoriaLogs 是一种用于收集和分析日志的新系统,可与 Grafana Loki 相媲美,但资源密集度较低。它旨在更易使用、更高效,并注重性能和易用性。该系统仍处于早期阶段,一些组件(如 Grafana 数据源)仍处于测试阶段。尽管具有潜力,但用户可能会遇到来自 Loki Gateway 的 504 错误等问题,这促使需要 VictoriaLogs 等替代方案。此外,该系统的 LogsSQL 提供了更复杂的查询功能,尽管它可能需要用户熟悉其语法和功能。

K8sGPT:由 AI 后端提供支持的个人 Kubernetes 助手
K8sGPT 是一种创新工具,旨在通过集成 AI 功能来协助 Kubernetes 管理,特别是由 OpenAI 提供支持。它充当个人 Kubernetes 助手,能够通过 AI 驱动的分析来诊断和解决 Kubernetes 集群中的问题。要使用其功能,用户必须满足某些先决条件,包括连接到 Kubernetes 集群并访问 OpenAI ChatGPT。K8sGPT 的架构包括一个安装选项,可以在工作站上作为 CLI 执行,并能够将 OpenAI 集成为 AI 支持的后端。本摘要概括了源文档的精髓,突出了 K8sGPT 在通过 AI 辅助增强 Kubernetes 操作方面的作用。

A good day to trie-hard: saving compute 1% at a time
The source document appears to be a transcript or a snippet from a larger text, likely an instructional or informative piece, given the context of a pause indicated by "Just a moment...". This suggests that the content may involve an explanation or a detailed account that requires careful consideration or a brief intermission. The brevity of the source does not provide specific details about the topic, but the phrase implies a structured presentation of information, possibly addressing a question or a statement that necessitates a thoughtful response or a moment of reflection.

Ceph:20 年的前沿存储技术
Ceph 源自加州大学圣克鲁斯分校学生项目的 40,000 行 C++ 代码,现已发展成为一种强大的分布式对象存储系统,被很大一部分开放基础设施用户采用,报告显示截至 2023 年的使用率为 82%。该系统旨在将智能推向边缘并确保没有单点故障,在 Lustre 和 Google File System 等同时代产品中脱颖而出。包括劳伦斯利弗莫尔国家实验室、桑迪亚、洛斯阿拉莫斯国家实验室、DreamHost 和 Red Hat 在内的主要机构和公司在其开发和采用方面发挥了重要作用。Red Hat 在 2014 年收购了 Inktank,这标志着 Ceph 的关键时刻,使其进入生产就绪状态并不断改进。Ceph 的创新功能(如 CRUSH 和 DSP)进一步巩固了其作为企业环境中领先存储解决方案的地位。

数据库冗余的最常见原因和后果

Labs AI Tools for Devs Docker Desktop 扩展入门
源文档似乎是来自 Web 服务器(特别是 nginx)的错误消息,指示 403 Forbidden 状态。此 HTTP 状态代码表示服务器理解请求但拒绝授权,通常是由于缺少权限或请求被明确禁止。该消息以简单的格式显示,状态代码和简要说明周围带有星号。此消息的存在表明用户尝试访问服务器正在保护的资源,但被拒绝访问。该文档不包含除状态代码及其描述之外的任何其他信息。

AI

The Rise of Chatbots: Revolutionizing Customer Interaction and Business Automation
The article by Mokabbir on "The Rise of Chatbots: Revolutionizing Customer Interaction and Business Automation" explores the significant impact of chatbots in transforming customer service and automating business processes across various industries. Chatbots, powered by AI and capable of understanding and responding to human language, have become essential tools for instant, 24/7 communication, cost-effective support, personalized customer engagement, and efficient lead generation. The article categorizes chatbots into rule-based, AI-powered, and hybrid types, each serving distinct functions. Looking ahead, the future of chatbots promises more human-like interactions, omni-channel integration, AI-driven decision-making, and voice-enabled functionalities. However, the article also highlights the challenges and ethical considerations, such as privacy concerns, potential bias in AI, and the need to balance automation with human touch.

控制 AI 输出的提示技术
源文档提供了有关提示技术控制 AI 输出的广泛指南,强调了它们在指导 AI 模型在自然语言处理中实现特定结果方面的重要性。它介绍了各种技术,例如长度控制、受众控制、语气控制、样式控制、种子文本、分解子任务、思维链、系统和用户角色、澄清和避免幻觉。此外,它还为每种技术提供了实际示例,并鼓励用户探索更多资源来提高他们的提示工程技能。该文件还包括一个关于社区参与的部分,强调了 AI 爱好者社区内支持和协作的重要性。

流行工具与项目

DiceDB/dice
DiceDB 是一个内存中的实时数据库,具有基于 SQL 的反应性。它经过高度优化,可在现代硬件上构建和扩展真正的实时应用程序,同时是 Redis 的直接替代品。

josephburnett/jd
JSON 差异和补丁

mikefarah/yq
yq 是一个可移植的命令行 YAML、JSON、XML、CSV、TOML 和属性处理器

stretchr/testify
一个带有常见断言和 mock 的工具包,可与标准库很好地配合

shadow1ng/fscan
一款内网综合扫描工具,方便一键自动化、全方位漏扫扫描。

HavocFramework/Havoc
浩劫框架。

DataDog/datadog-agent
Datadog Agent 的主存储库

spf13/cobra
用于现代 Go CLI 交互的 Commander

golang-migrate/migrate
数据库迁移。CLI 和 Golang 库。

grpc-ecosystem/grpc-gateway
遵循 gRPC HTTP 规范的 gRPC 到 JSON 代理生成器

elastic/beats
🐠 Beats - 适用于 Elasticsearch 和 Logstash 的轻量级运输器

jackc/pgx
适用于 Go 的 PostgreSQL 驱动程序和工具包

moby/moby
Moby 项目 - 容器生态系统的协作项目,用于组装基于容器的系统

Masterminds/squirrel
适用于 golang 的 Fluent SQL 生成

influxdata/telegraf
用于收集、处理、聚合和写入指标、日志和其他任意数据的代理。

kyverno/kyverno
云原生策略管理

open-telemetry/opentelemetry-go
OpenTelemetry Go API 和 SDK

sirupsen/logrus
用于 Go 的结构化、可插拔日志记录。

chaos-mesh/chaos-mesh
适用于 Kubernetes 的混沌工程平台。

testcontainers/testcontainers-go
Testcontainers for Go 是一个 Go 包,它使创建和清理基于容器的依赖项变得简单,用于自动集成/冒烟测试。这个干净易用的 API 使开发人员能够以编程方式定义应作为测试的一部分运行的容器,并在测试完成后清理这些资源。

grafana/alloy
具有可编程管道的 OpenTelemetry Collector 发行版

onsi/ginkgo
Go 的现代测试框架

hashicorp/terraform
Terraform 使您能够安全且可预测地创建、更改和改进基础设施。它是一个源代码可用的工具,可将 API 编纂为声明性配置文件,这些文件可以在团队成员之间共享、视为代码、编辑、审查和版本控制。

pressly/goose
数据库迁移工具。支持 SQL 迁移和 Go 函数。

kubernetes/client-go
适用于 Kubernetes 的 Go 客户端。


编辑:Tony Bai

编辑主页:tonybai.com

GopherDaily项目:github.com/bigwhite/gopherdaily

Copyright 2019-2024 GopherDaily