一篇文章带你搞懂 etcd 3.5 的核心特性

etcd 3.5 版本发布,引入了对 Go Module 版本号语义的支持和模块化设计,解决了依赖管理痛点,提升了性能和稳定性。模块化将 etcd 拆分为多个子模块,简化了依赖管理。性能方面,通过优化读写性能和启动耗时,提高了吞吐量和响应速度,尤其在 Kubernetes 场景下有显著提升。此外,还包括日志轮转、集群降级等运维特性,增强了问题定位效率和安全性。
摘要由CSDN通过智能技术生成

作者

唐聪,腾讯云资深工程师,极客时间专栏《etcd实战课》作者,etcd活跃贡献者,主要负责腾讯云大规模k8s/etcd平台、有状态服务容器化、在离线混部等产品研发设计工作。

etcd 3.5发布

美东时间2021年6月15号18点,继 etcd 3.4 版本发布近两年之后,etcd 社区官宣发布了3.5 稳定版本,其主要贡献者来自 Google、AWS、Tencent、Red Hat、ByteDance、IBM 等公司的开发者。etcd 3.5 版本的发布,将极大提升开发者体验、更快、更稳的支撑 kubernetes。

腾讯云容器团队(tangcong/wswcfan/mlmhl等)一直致力于参与 etcd社区开源的贡献,参与以及贡献了大量提升 etcd 稳定性、性能优化的 PR 和 QoS Proposal 等,是目前国内最活跃的贡献团队,未来我们也将持续将内部大规模 kubernetes 和 etcd 集群的治理经验回馈给社区,为 kubernetes 和 etcd 社区添砖加瓦!

etcd 3.5 特性分析

那么在 etcd 3.5 版本中有哪些令人期待的特性呢?

下图我从模块化/开发者体验、性能、稳定性、运维和安全、文档及 RoadMap 方面为你总结了 etcd 3.5核心要点。

首先,在我看来,在etcd 3.5版本,最令开发者期待的当属对 Go Module 的版本号语义的支持,并将之前大的 etcd 模块按功能进行了拆分,实现了 etcd 的模块化等,解决了饱受社区吐槽的 “go get fail”、依赖复杂、循环依赖、强制依赖过低的 gRPC 版本等痛点,将大大提升 etcd 开发者幸福度。

其次,从性能及稳定性上看,etcd 3.5 版本包含了若干对etcd读写性能优化、启动耗时优化、重要 Bug 修复、内存占用优化等特性,将显著提升集群稳定性、吞吐量、延时,将更好的支撑大规模 kubernetes 集群。

最后,从运维、安全上,etcd 3.5 版本包含了 etcd 日志轮转/压缩、集群降级、etcdutl、expensive request 定位、本地 trace 及分布式 trace OpenTelemetry 等特性支持,以及一系列安全问题优化,将显著提升问题定位效率。

接下来我就从以上各方面为你解读 etcd 3.5 中核心特性。

etcd 3.5 核心特性解读

支持 Go Module 版本号语义及模块化

自从 Go 社区在 Go 1.11 版本开始推出官方的包依赖管理解决方案 Go Module,并在 Go 1.14 版本达到生产环境可用标准后,绝大部分的项目已经使用 Go Module 来解决项目中的包依赖管理的痛点,并且 Go 在1.16版本后 Go Module 已经默认开启了。

然而,如果你的 Go 项目依赖 etcd,原以为一个"go get go.etcd.io/etcd/"命令能下好所有依赖,结果却是要经历一波三折才能下好各种依赖,一开始你会遇到如下的 boltdb 错误。通过 Go Modules 的如下 replace 命令解决后,又会遇到因为 etcd 依赖过低的 gRPC 版本,导致的 gRPC 错误等。

% go get go.etcd.io/etcd/
go get: github.com/coreos/bbolt@none updating to
    github.com/coreos/bbolt@v1.3.6: parsing go.mod:
    module declares its path as: go.etcd.io/bbolt
            but was required as: github.com/coreos/bbolt
go.etcd.io/etcd imports
    github.com/coreos/etcd/etcdmain imports
    github.com/coreos/etcd/proxy/grpcproxy imports
    google.golang.org/grpc/naming: cannot find module providing package google.golang.org/grpc/naming

当你解决完各种依赖问题,满心欢喜的开始编译时,你又可能会遇到版本过低,导致编译错误,又陷入崩溃中。

为什么会版本过低呢? 查看 go.mod 文件你会发现,原来你最后 go get 下载得版本是 v3.3.25,如下所示。

% cat go.mod | grep etcd
module github.com/tangcong/etcd-lab
    github.com/coreos/etcd v3.3.25+incompatible // indirect
    go.etcd.io/etcd v3.3.25+incompatible

首先为什么v3.3.25后面含有个 incompatible 呢? 这主要是因为 etcd 3.3 分支还未支持 Go Module(未含有go mod文件),incompatible 表示它的主版本号大于2,与较低的版本号属于同一模块。go 命令可能会将其自动升级到更高的 incompatible 版本,即

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值