云原生必备知识: etcd性能

简介: 决定etcd性能的关键因素,包括: 延迟( agency):延迟是完成操作的时间。 吞吐量 (throughput):吞吐量是在某个时间期间之内完成操作的总数量。当etcd接收并发客户端请求时,通常平均延迟随着总体吞吐量增加而增加。

所属技术领域:

云原生

| 名词定义 |

首先我们来看一张图:
图片.png

上图是一个标准的 etcd 集群架构简图。可以将 etcd 集群划分成几个核心的部分:例如蓝色的 Raft 层、红色的 Storage 层,Storage 层内部又分为 treeIndex 层和 boltdb 底层持久化存储 key/value 层。它们的每一层都有可能造成 etcd 的性能损失。
首先来看 Raft 层,Raft 需要通过网络同步数据,网络 IO 节点之间的 RTT 和 / 带宽会影响 etcd 的性能。除此之外,WAL 也受到磁盘 IO 写入速度影响。
再来看 Storage 层,磁盘 IO fdatasync 延迟会影响 etcd 性能,索引层锁的 block 也会影响 etcd 的性能。除此之外,boltdb Tx 的锁以及 boltdb 本身的性能也将大大影响 etcd 的性能。
从其他方面来看,etcd 所在宿主机的内核参数和 grpc api 层的延迟,也将影响 etcd 的性能。

决定etcd性能的关键因素,包括:
 延迟( agency):延迟是完成操作的时间。
 吞吐量 (throughput):吞吐量是在某个时间期间之内完成操作的总数量。当etcd接收并发客户端请求时,通常平均延迟随着总体吞吐量增加而增加。

在通常的云环境,比如 Google Compute Engine(GCE)标准的n-4或者AWS上相当的机器类型,一个三成员etcd集群在轻负载下可以在低于毫秒内完成一个请求,并在重负载下可以每秒完成超过30000个请求。

etcd使用Raft-致性算法来在成员之间复制请求并达成一致。一致性性能,特別是提交延迟,受限于两个物理约束:网络IO延迟和磁盘IO延迟。完成一个etcd请求的最小时间是成员之间的网络往返时延( Round Trip Time/RT),加需要提交数据到持久化存储的 fdatasync时间。在一个数据中心内的RTT可能有数百亳秒。在美国典型的RTT是大概50ms,而在大陆之间可以慢到400ms。旋转硬盘(注:指传统机械硬盘)的典型 fdatasync延迟是大概10ms。对于SSD硬盘,延迟通常低于1ms。为了提高吞吐量etcd将多个请求打包在一起并提交给Raft这个批量策略让etcd在重负载试获得高吞吐量。也有其他子系统影响到etcd的整体性能。每个序列化的etcd请求必须通过etcd的 bolted支持的(boltdb- backed)MVCC存储引擎,它通常需要10微秒来完成。etcd定期递增快照它最近实施的请求,将他们和之前在磁盘上的快照合并。这个过程可能导致延迟尖峰(latency spike)。虽然在SSD上这通常不是问题,在HDD上它可能加倍可观察到的延迟。而且,进行中的压缩可以影响etcd的性能。幸运的是,压缩通常无足轻重,因为压缩是错开的,因此它不和常规请求竞争资源。RPC系统,gRPC,为etcd提供定义良好,可扩展的APl,但是它也引入了额外的延迟,尤其是本地读取。

Etcd的默认配置在本地网络环境(localhost)下通常能够运行的很好,因为延迟很低。然而,当跨数据中心部署Etcd或网络延时很高时,etcd的心跳间隔或选举超时时间等参数需要根据实际情况进行调整。

网络并不是导致延时的唯一来源。不论是 Follower还是 Leader,其请求和响应都受磁盘I/O延时的影响。每个 timeout都代表从请求发起到成功返回响应的总时间。

| 技术特点 |

• 简单:
基于 HTTP+JSON 的 API 让你用 curl 就可以轻松使用。
• 安全:
可选 SSL 客户认证机制。
• 快速:
每个实例每秒支持一千次写操作。
• 可信:
使用 Raft 算法充分实现了分布式。

适用场景:
从 etcd github 上的介绍来看:
etcd is a distributed reliable key-value store for the most critical data of a distributed system, with a focus on being:
Simple: well-defined, user-facing API (gRPC)
Secure: automatic TLS with optional client cert authentication
Fast: benchmarked 10,000 writes/sec
Reliable: properly distributed using Raft
etcd 是一个分布式的 kv 存储,具有高性能和可靠的优点。etcd 可以应用到以下场景:
一:服务发现
所有服务将元信息存储到以某个 prefix 开头的 key 中,然后消费者从这些 key 中获取服务信息并调用。消费者也可以 watch 这些 key 的变更,以便在服务增加和减少时及时获得通知。
二:配置共享
应用将配置信息存放到 etcd,当配置信息被更改时可以通过 watch 机制从 etcd 及时获得通知。
三:分布式锁
由于 etcd 中的数据是一致的,当多个应用同时去创建一个 key 时只有一个会成功,创建成功的应用即获取了锁。
etcd 还有更多的应用场景,例如集群监控,Leader 竞选等。需要注意的是,应该使用 etcd 来存储一个关键的控制数据,对于应用数据应该只在数据量较小时存储。
etcd 已经应用到很多的项目中,其中最著名的莫过于 kubernetes。etcd 已经是一个相当成熟的项目,当你的项目中有需要服务发现,配置共享等功能时,可以考虑使用 etcd。

资料来源:

  1. 名词定义:https://developer.aliyun.com/lesson_1651_16861
    简书:https://www.jianshu.com/p/f31ef5e7bdd0
  2. 技术特点:etcd的特性
  3. 适用场景:知乎https://www.zhihu.com/question/60406751/answer/388896426
相关文章
|
1月前
|
关系型数据库 MySQL Serverless
阿里云云原生数据库 PolarDB MySQL Serverless:卓越的性能与无与伦比的弹性
阿里云原生数据库 PolarDB MySQL Serverless 拥有卓越性能和无与伦比的弹性。通过实验体验,深入了解其基本管理和配置、智能弹性伸缩特性和全局一致性特性。实验包括主节点和只读节点的弹性压测以及全局一致性测试,旨在亲身体验 PolarDB 的强大性能。通过实验,可以更好地在实际业务场景中应用 PolarDB,并根据需求进行性能优化和调整。
702 2
|
9天前
|
存储 Kubernetes 安全
云上攻防-云原生篇&K8s安全&Config泄漏&Etcd存储&Dashboard鉴权&Proxy暴露
云上攻防-云原生篇&K8s安全&Config泄漏&Etcd存储&Dashboard鉴权&Proxy暴露
|
1月前
|
Cloud Native Java Docker
【Spring云原生】Spring官宣,干掉原生JVM,推出 Spring Native!整体提升性能!Native镜像技术在Spring中的应用
【Spring云原生】Spring官宣,干掉原生JVM,推出 Spring Native!整体提升性能!Native镜像技术在Spring中的应用
|
1月前
|
存储 Kubernetes Cloud Native
云原生|kubernetes|centos7下的kubeadm部署的集群内在线部署kubesphere(外部etcd)
云原生|kubernetes|centos7下的kubeadm部署的集群内在线部署kubesphere(外部etcd)
81 0
|
1月前
|
Kubernetes Cloud Native 虚拟化
云原生|kubernetes|找回丢失的etcd集群节点---etcd节点重新添加,扩容和重新初始化k8s的master节点
云原生|kubernetes|找回丢失的etcd集群节点---etcd节点重新添加,扩容和重新初始化k8s的master节点
138 0
|
1月前
|
存储 Kubernetes Cloud Native
云原生|kubernetes|etcd集群详细介绍+安装部署+调优
云原生|kubernetes|etcd集群详细介绍+安装部署+调优
475 0
|
1月前
|
Kubernetes 负载均衡 Cloud Native
云原生|kubernetes|kubeadm部署高可用集群(二)---kube-apiserver高可用+etcd外部集群+haproxy+keepalived
云原生|kubernetes|kubeadm部署高可用集群(二)---kube-apiserver高可用+etcd外部集群+haproxy+keepalived
172 0
|
1月前
|
Kubernetes Cloud Native Linux
云原生|kubernetes|kubeadm部署高可用集群(一)使用外部etcd集群
云原生|kubernetes|kubeadm部署高可用集群(一)使用外部etcd集群
155 0
|
1月前
|
Kubernetes Cloud Native 数据库
云原生|kubernetes|etcd数据库增删改查
云原生|kubernetes|etcd数据库增删改查
86 0
|
1月前
|
存储 Kubernetes Cloud Native
云原生|kubernetes|kubernetes的etcd集群备份策略
云原生|kubernetes|kubernetes的etcd集群备份策略
360 0

热门文章

最新文章