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

GopherDaily

2024-12-07

每日一谚:Avoid package-level variables


Go技术生态

Go泛型中缺少什么?
源文档讨论了 Go 泛型的局限性,并建议添加参数化类型别名和成员类型约束等功能,以增强代码的表达性和可读性。作者回顾了之前的一篇文章,他们批评 Go 的泛型没有为问题提供干净的解决方案,以及 Go 1.24 中参数化类型别名的引入如何提供了一种更具可读性和更少重复的方法。本文档还探讨了成员类型的概念,该概念将允许当前泛型无法实现的类型约束,从而简化代码并使其更易于维护。作者认为,虽然 Go 的维护者对添加新功能持谨慎态度,但成员类型的潜在好处可以证明包含它们的合理性,因为它们将实现更直接、更不冗长的代码,类似于参数化类型别名的改进。总的来说,该文档提倡这些功能,因为它们可以解决 Go 当前类型系统中的特定设计问题,使语言更加完整和富有表现力。

Go vs Rust的主要区别
Digis 的文章比较了 Go 和 Rust 这两种强大的编程语言,强调了它们在 2024 年为开发人员提供的主要区别。Go 由 Google 开发,因其在云原生环境中的简单性、生产力和性能而备受赞誉,专注于易于阅读的代码和快速的开发周期。Rust 由 Mozilla 创建,因其对内存安全、性能和控制的重视而受到认可,具有严格的编译器和所有权模型,可确保编译时线程和内存的安全。Go 和 Rust 的核心理念差异很大,Go 优先考虑开发人员的生产力和简单性,而 Rust 则专注于控制、性能和安全性。在性能方面,Rust 以其接近 C++ 的性能和对高性能计算的适用性而著称,而 Go 的垃圾回收简化了内存管理,使其成为可扩展系统的理想选择。每种语言对并发和并行的处理方式不同,Go 的 goroutines 和 channel 提供了更简单的模型,而 Rust 的所有权模型提供了更安全的并行性。本文还谈到了这两种语言的工具和生态系统,Go 的简单性使其可供新手使用,而 Rust 不断壮大的社区和强大的工具可满足高级用例的需求。最终,Go 和 Rust 之间的选择取决于项目的具体需求,Go 更适合后端开发,而 Rust 则适用于需要内存安全的性能关键型应用程序。 (字数:200)

增强您的Go代码:掌握多态函数以实现最佳性能
源文档深入探讨了如何优化 Go 中的多态函数,Go 是一种以其效率和类型安全性而闻名的语言。它强调了由于接口类型和动态调度而导致的多态性固有的性能成本,与直接特定于类型的调用相比,这可能会导致方法调用速度变慢。为了缓解这种情况,本文档建议对常见类型使用类型断言来建立快速路径,并使用类型切换来更有效地处理多个类型。它还建议定义特定接口以减少开销并提高性能。泛型在 Go 1.18 中引入,是一个强大的工具,用于创建无需接口调度即可处理各种类型的函数。对于性能要求很高的代码,本文档谨慎地提到了使用不安全的指针进行直接内存访问,尽管它警告了相关的风险。本文档进一步讨论了在插件或动态加载场景中使用反射进行动态类型处理,同时强调了缓存和明智使用的重要性。建议使用 Go 的测试包和 pprof 工具进行分析和基准测试,以确定瓶颈。首要信息是平衡抽象与具体实现,并在优化之前进行分析,确保性能提升不会影响代码的清晰度和可维护性。 (字数:199)

frood,一个 Alpine initramfs NAS
Frood 是一个独特的 Alpine Linux 系统,完全位于 initramfs 中,提供快速且耐磨的 NAS 解决方案。尽管具有优势,但该系统在持久性和状态跟踪方面面临挑战,这促使人们探索各种声明式系统。系统的启动过程和配置通过脚本和工具(如 alpine-make-rootfs 和 lbu)的组合进行管理。包括一个简单的基于 Go 的状态服务来监控系统的状态。该设置是开源的,由 Filippo 维护,并得到 Geomys 客户端(包括 AvalancheGo 和 Tailscale)的支持。该项目的可持续性得到了 Avalabs、SandboxAQ 和其他 Geomys 客户的赞助,确保了持续的开发和维护。 (注意:摘要旨在封装源文档的关键方面,侧重于系统的设计、挑战和支持结构,同时省略了特定的技术细节和问题。

为什么Pinterest使用分布式 SQL 实现其图形服务的现代化
Pinterest 是一家领先的视觉搜索和发现平台,通过从传统的 Zen 系统过渡到基于分布式 SQL 数据库 TiDB 构建的新架构,实现了其图形存储服务的现代化。这一举措是由数据不一致、查询功能受限和高技术债务等挑战推动的。TiDB 的分布式 SQL 架构提供了强大的一致性、可扩展性和运营效率,有效地解决了这些问题。PinGraph 是一项新的图形服务,它引入了高级查询功能,显著降低了延迟,并实现了显著的成本节约。Pinterest 的旅程为希望使用分布式 SQL 实现数据基础设施现代化的组织提供了蓝图,为可扩展且功能丰富的图形服务设定了基准。 (注:该摘要旨在概括源文档的关键点,重点介绍从 Zen 到 PinGraph 的转变、其背后的原因以及使用 TiDB 取得的成果。它避免了冗余信息,并连贯地展示了 Pinterest 的现代化工作。

云原生技术

了解 k0s:面向社区的轻量级 Kubernetes 发行版
源文档介绍了 k0s,这是一种轻量级 Kubernetes 发行版,旨在简化 Kubernetes 集群的设置和管理。k0s 由 Mirantis 和 Replicated 开发,以其单一的二进制架构脱颖而出,无需多个组件和依赖项。它针对资源效率进行了优化,使其成为边缘计算、IoT 和中小型企业的理想选择。k0s 支持多节点集群,完全兼容 Kubernetes 生态,提供内置高可用等功能。本文档还将 k0s 与其他发行版进行了比较,突出了它的简单性和易用性。k0s 的安装非常简单,只需下载二进制文件并运行单个命令即可启动服务器。k0s 社区很活跃,在 Slack 上进行讨论,并为开发人员提供每月的办公时间。总体而言,k0s 提供了一种简化、高效且用户友好的方法来部署和管理 Kubernetes 集群。

Open RAN 革命:协作生态系统的力量
源文件强调了协作生态系统对 Open RAN 革命的变革性影响,强调了 VIAVI 的 VALOR Lab 和 Red Hat 的开源战略等行业计划之间的协同作用。它强调了测试、认证和云原生方法对于加速开放式 RAN 网络的部署和运营的重要性。Red Hat 致力于开源平台(如 Red Hat OpenShift),为服务提供商提供了必要的灵活性和可扩展性,同时与硬件和软件合作伙伴的合作实现了模块化、可定制的网络架构。该文件还指出了开放式 RAN 中网络功能的分解带来的成本效益和日益激烈的竞争。总体而言,叙述表明,合作伙伴关系和共同愿景是推动电信更加互联和适应性强的未来的关键。 (注意:该摘要旨在概括源文档的精髓,重点关注协作生态系统在 Open RAN 革命中的作用、Red Hat 和 VIAVI 的战略贡献,以及对电信行业的更广泛影响。

谁是更大的恶棍?数据债务与技术债务
本文深入探讨了数据债务和技术债务之间的比较,强调了两者对软件开发和数据管理的关键差异和影响。数据债务是技术债务的一种形式,源于糟糕的数据管理实践,导致效率低下、成本增加和对数据驱动型见解的信任度降低。与可以战略性管理甚至宣布破产的技术债务不同,数据债务因其随着时间的推移而积累并且缺乏简单的重置机制,因此更难解决。本文强调了“左移”方法的重要性,倡导早期数据建模和设计优先策略,以防止数据债务的发生。通过在数据收集之前规划数据结构和关系,组织可以确保团队之间的清晰度、一致性和一致性,从而促进更轻松的集成、分析和长期可扩展性。这篇文章强调,虽然可能已经存在一定程度的数据债务,但主动措施和战略规划对于管理和减轻其影响至关重要。 (注意:提供的摘要基于给定的文本,不包括文档中的直接引用或具体问题。

宣布推出 Vanir:开源安全补丁验证
Google 宣布推出开源安全补丁验证工具 Vanir,详见其 2024 年 12 月 5 日的安全博客文章。该计划旨在为开发人员和安全研究人员提供有效验证补丁的框架,从而提高 Android 设备的安全性。该公告是 Google 为加强其产品和服务(包括 Android、Chrome 和 Google Play Protect)的安全性而持续努力的一部分。Vanir 的发布预计将为漏洞的检测和预防做出重大贡献,从而提高互联网的整体安全性。该博文还包括各种相关主题,例如隐私、供应链安全和互操作性,展示了 Google 的全面安全方法。 (注意:摘要基于提供的文本,该文本似乎是链接和标题的结构化列表,而不是传统的文章。该摘要综合了与 Vanir 的公告及其对安全性的影响相关的关键要素。

将服务置于tsnet上的四种日益复杂的方法
源文件概述了将服务集成到 Tailscale 网络以增强远程访问和安全性的四种渐进方法。第一种方法涉及直接在设备或子网上安装 Tailscale,允许通过主机名和端口号直接访问。第二种方法利用 Tailscale 的“serve”命令来提供 HTTPS 支持和身份标头,从而改善用户体验和安全性。第三种方法建议在具有专用 Tailscale sidecar 的 Docker 容器中运行服务,提供更清晰的网络配置和令人难忘的地址。最后,本文档介绍了 tsnet,这是一个 Go 库,它将 Tailscale 直接集成到服务中,无论底层硬件如何,都可以提供完整的灵活性和原生 Tailscale 功能。这些方法可满足不同级别的技术专业知识和特定需求,从简单的设置到高级集成。

宣布推出 Linkerd 2.17:出口、速率限制和联合服务
Linkerd 2.17 是一个服务网格平台,现已发布,引入了重要的新功能,例如出口流量可见性和控制、速率限制和联合服务。此重大更新增强了项目的核心设计原则,即简单性,允许最少的配置,同时提供高级功能。出口可见性和控制现在提供完整的 L7 可见性和对离开 Kubernetes 集群的流量的精细控制,并能够实施出口安全策略。速率限制是一项新的服务器端功能,可保护服务免于过载,并通过可配置的策略确保在客户端之间公平分配。联合服务支持跨多个集群的服务副本的逻辑联合,从而提供自动负载平衡和强大的故障处理。该版本还包括对 OpenTelemetry 的支持,用于分布式跟踪。此外,CNCF 将在 KubeCon London 举办 Linkerd Day,促进社区参与和知识共享。edge-24.11.8 版本标志着 Linkerd 2.17 的相应边缘版本,在 GitHub、Slack、Twitter 和邮件列表中拥有蓬勃发展的社区。 (注意:摘要经过精心设计,以封装源文档的关键点,同时保持简洁和连贯性。它不包括直接引用或特定 URL,遵循内容摘要的说明。

disaggregated OLTP系统
源文档对各种云原生分解式 OLTP RDBMS 设计进行了深入分析,重点介绍了它们的架构注意事项和性能影响。它首先讨论了 Amazon Aurora,它引入了预写日志协议,以最大限度地减少数据传输效率低下的情况,并将处理工作负载卸载到存储节点。然后,本文档研究了 Microsoft Socrates,重点介绍了其无共享体系结构以及使用 Azure 高级存储进行低延迟操作。阿里巴巴 PolarDB Serverless 使用 RDMA 和快速 SSD 创建高性能的分片文件系统。华为 Taurus 还因其基于重新配置的复制策略而受到关注,该策略不同于传统的仲裁复制模型。本文档最后比较了这些系统,指出了它们处理日志、页面存储和复制的独特方法,这些方法会影响它们的持久性、可用性和效率。 (注意:摘要经过精心设计,以封装源文档的关键点,同时保持简洁和连贯性。它不包括直接引用或文档中的具体细节,而是综合了所提出的总体主题和比较。

AI

Meta AI 发布 Llama 3.3
Meta AI 宣布发布 Llama 3.3,这是一个具有 700 亿个参数的大规模语言模型,能够使用高达 128,000 个令牌的上下文长度,并接受多种语言的训练,包括英语、德语、法语、意大利语、葡萄牙语、印地语、西班牙语和泰语。该模型是在 H100-80GB 硬件上使用 3930 万个 GPU 小时开发的,已针对经济高效的本地推理进行了优化,使其可以在 M2 MacBook Pro 等常见开发人员工作站上运行。Ollama 提供了 43GB 千兆底层格式 (GGUF),以及 8 位 MLX 版本和其他量化版本,以实现高效部署。训练数据包括 15 万亿个代币的庞大语料库,截止日期为 2023 年 12 月。训练该模型对环境的影响估计为 11,390 吨二氧化碳当量,大约相当于从纽约到伦敦的 20 次客运航班。该版本在 Simon Willison 的 Weblog 上分享,更新了模型对生成式 AI 和边缘计算的影响并进行了讨论。

Wake Vision 简介:适用于 TinyML 计算机视觉应用的高质量、大规模数据集
Wake Vision 为 TinyML (Tiny Machine Learning) 应用程序推出了一个开创性的数据集,专门针对低功耗设备中的人员检测。该数据集比其前身 Visual Wake Words (VWW) 更大且质量更高,它提供了两个不同的训练集来平衡大小和标签准确性。这一进步对 TinyML 至关重要,因为传统模型更多地受益于数据质量而不是数量。Wake Vision 的精细基准测试可评估模型在各种真实条件下的性能,例如不同的距离、照明和人口统计表示。数据集通过流行服务及其宽松的许可提供,鼓励了该领域的广泛使用和贡献。Wake Vision 的推出有望加速 TinyML 的研发,从而为超低功耗设备创建更高效、更可靠的人员检测模型。 (注意:该摘要旨在概括源文档的关键点,重点介绍 Wake Vision 的介绍、它对 TinyML 的意义及其对研究界的影响。

Agentic AI 是 2025 年网络安全的新流行语吗?
源文件探讨了代理 AI 的概念及其对网络安全的变革潜力,特别是在网络钓鱼电子邮件调查领域。代理 AI 的特点是其能够做出决策并与工具交互的自主代理,是针对传统自动化在警报分类和调查方面的局限性的解决方案。本文档重点介绍了代理 AI 通过支持上下文驱动的决策和减少对人工分析师的依赖,为安全运营中心 (SOC) 带来的机会。然而,它也概述了局限性,强调需要全面的工具和数据来确保有效的决策。该文件建议,组织要充分利用代理 AI,他们必须使用开源框架开发自定义解决方案,或者采用 Intezer 的 Autonomous SOC 等交钥匙平台,该平台提供先进的 AI 模型和证据收集工具。展望未来,该文件预计具有组织环境和改进的 AI 框架的更智能代理将进一步增强网络安全运营。 (注意:根据说明,摘要旨在封装源文档的关键点,同时保持简洁和连贯性。

流行工具与项目

grpc/grpc-go
gRPC 的 Go 语言实现。基于 HTTP/2 的 RPC

chaitin/SafeLine
充当反向代理,保护您的 Web 服务免受攻击和利用。

pocketbase/pocketbase
1 个文件中的开源实时后端

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

nats-io/nats-server
适用于 NATS.io、云和边缘原生消息传递系统的高性能服务器。

AdguardTeam/AdGuardHome
全网广告和跟踪器阻止DNS服务器

spf13/viper
使用 fangs 的 Go 配置

zitadel/zitadel
ZITADEL - 身份基础设施,为您简化。

grafana/k6
使用 Go 和 JavaScript 的现代负载测试工具 - https://k6.io

ethereum-optimism/optimism
Optimism 是以太坊,可扩展。

moby/buildkit
并发、缓存高效且与 Dockerfile 无关的构建器工具包

semaphoreui/semaphore
适用于 Ansible、Terraform、OpenTofu、PowerShell 和其他 DevOps 工具的现代 UI 和强大的 API。

GoogleCloudPlatform/terraformer
CLI 工具从现有基础设施生成 terraform 文件(反向 Terraform)。基础设施到代码

swaggo/swag
使用 Swagger 2.0 for Go 自动生成 RESTful API 文档。

hashicorp/consul
Consul 是一种分布式、高可用性和数据中心感知型解决方案,用于跨动态分布式基础设施连接和配置应用程序。

redis/go-redis
Redis Go 客户端

pulumi/pulumi
Pulumi - 任何编程语言🚀的基础设施即代码

helm/helm
Kubernetes 包管理器

docker/compose
使用 Docker 定义和运行多容器应用程序

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

dexidp/dex
OpenID Connect (OIDC) 身份和具有可插拔连接器的 OAuth 2.0 提供程序

bluenviron/mediamtx
即用型 SRT / WebRTC / RTSP / RTMP / LL-HLS 媒体服务器和媒体代理,允许读取、发布、代理、录制和播放视频和音频流。

elastic/cloud-on-k8s
Kubernetes 上的 Elastic Cloud


编辑:Tony Bai

编辑主页:tonybai.com

GopherDaily项目:github.com/bigwhite/gopherdaily

Copyright 2019-2024 GopherDaily