저자 | 대만의 기술 전문가 첸 Xingyu (유 뮤) 알리 클라우드 기반 기술
에서 본 논문 마무리 "CNCF 알리바바 기본 클라우드 기술 개방 클래스 X" 강의 (17).
REVIEW : etcd 클라우드 플랫폼 구성 요소는 키 메타 정보를 저장하는 컨테이너입니다. 알리바바 사용 etcd 두 번 다시이 중요한 역할을했다 올해 11의 과정 3 년이되었습니다, 그는 11 시험 두 개의 큰 압력을 받아 들였다. etcd 성능 배경에서 저자는, 도움에 모두를 위해 안정적이고 효율적인 etcd 클러스터를 실행하는 희망, 모범 사례의 etcd 서버 측 성능 최적화 및 etcd 클라이언트 사용을 이해하는 우리를 이끌.
A, etcd 간단한
etcd Golang의 언어 발달을 사용하여, CoreOs 회사에서 출생, 키 값은 분산 스토리지 엔진이다. 우리는 데이터베이스에 저장된 분산 시스템의 메타 데이터로 etcd 사용할 수 있으며, 시스템 내부의 중요한 메타 정보를 저장합니다. etcd 널리 주요 기업에 의해 사용.
기본 아키텍처 etcd 보여줍니다 아래 그림
두 지도자와 추종자 : 세 개의 노드의 클러스터, 상기 한 바와 같이. boltdb 통해 각 노드 래프팅 알고리즘 동기화 데이터, 및 데이터를 저장한다. 노드가 정지 할 때, 다른 노드가 자동으로 리더, 고 가용성을 유지하는 것이 전체 클러스터의 기능을 선출한다. 클라이언트 요청이 임의의 노드를 연결하여 완료 할 수 있습니다.
둘째, etcd 성능을 이해
처음에 우리는지도를 보면 :
그림은 표준 etcd 클러스터 아키텍처도이다. Etcd 클러스터가 여러 핵심 구성 요소로 분할 될 수있다 : 래프트 층은 예를 들면 청색 저장 층을 적색, 내층은 treeIndex 저장 boltdb 층과 하부 영구 저장소 키 / 값 층으로 분할된다. 그들은 각 층 etcd의 성능 손실되었습니다.
首先来看 Raft 层,Raft 需要通过网络同步数据,网络 IO 节点之间的 RTT 和 / 带宽会影响 etcd 的性能。除此之外,WAL 也受到磁盘 IO 写入速度影响。
再来看 Storage 层,磁盘 IO fdatasync 延迟会影响 etcd 性能,索引层锁的 block 也会影响 etcd 的性能。除此之外,boltdb Tx 的锁以及 boltdb 本身的性能也将大大影响 etcd 的性能。
从其他方面来看,etcd 所在宿主机的内核参数和 grpc api 层的延迟,也将影响 etcd 的性能。
三、etcd 性能优化 -server 端
下面具体来介绍一下 etcd server 端的性能优化。
etcd server 性能优化-硬件部署
server 端在硬件上需要足够的 CPU 和 Memory 来保障 etcd 的运行。其次,作为一个非常依赖于磁盘 IO 的数据库程序,etcd 需要 IO 延迟和吞吐量非常好的 ssd 硬盘,etcd 是一个分布式的 key/value 存储系统,网络条件对它也很重要。最后在部署上,需要尽量将它独立的部署,以防止宿主机的其他程序会对 etcd 的性能造成干扰。
附:etcd 官方推荐的配置要求信息。
etcd server 性能优化-软件
etcd 软件分成很多层,下面根据不同层次进行性能优化的简单介绍。想深度了解的同学可以自行访问下面的 GitHub pr 来获取具体的修改代码。
- 首先是针对于 etcd 的内存索引层优化:优化内部锁的使用减少等待时间。 原来的实现方式是遍历内部引 BTree 使用的内部锁粒度比较粗,这个锁很大程度上影响了 etcd 的性能,新的优化减少了这一部分的影响,降低了延迟。
具体可参照如下链接:
- 针对于lease 规模使用的优化:优化了 lease revoke 和过期失效的算法,将原来遍历失效 list 时间复杂度从 O(n) 降为 O(logn),解决了 lease 规模化使用的问题。
具体可参照如下链接:
最后是针对于后端 boltdb 的使用优化:将后端的 batch size limit/interval 进行调整,这样就能根据不同的硬件和工作负载进行动态配置,这些参数以前都是固定的保守值。
还有一点是由谷歌工程师优化的完全并发读特性:优化调用 boltdb tx 读写锁使用,提升读性能。
基于 segregated hashmap 的 etcd 内部存储 freelist 分配回收新算法
其他的性能优化也非常多,这里我们重点介绍一下由阿里巴巴贡献的一个性能优化。这个性能优化极大地提升了 etcd 内部存储的性能,它的名字叫做:基于 segregated hashmap 的 etcd 内部存储 freelist 分配回收新算法。
上图是 etcd 的一个单节点架构,内部使用 boltdb 作为持久化存储所有的 key/value,因此 boltdb 的性能好坏对于 etcd 的性能好坏起着非常重要的作用。在阿里巴巴内部,我们大量使用 etcd 作为内部存储元数据,在使用过程中我们发现了 boltdb 的性能问题,这里分享给大家。
上图中为 etcd 内部存储分配回收的一个核心算法,这里先给大家介绍一下背景知识。首先,etce 内部使用默认为 4KB 的页面大小来存储数据。如图中数字表示页面 ID,红色的表示该页面正在使用,白色的表示未使用。
当用户想要删除数据的时候,etcd 并不会把这个存储空间立即还给系统,而是内部先留存起来,维护一个页面的池子,以提升下次使用的性能。这个页面池子叫做 freelist,如图所示,freelist 页面 ID 为 43、45、 46、50、53 正在被使用,页面 ID 为 42、44、47、48、49、51、52 处于空闲状态。
当新的数据存储需要一个连续页面为 3 的配置时,旧的算法需要从 freelist 头开始扫描,最后返回页面起始 ID 为 47,以此可以看到普通的 etcd 线性扫描内部 freelist 的算法,在数据量较大或者是内部碎片严重的情况下,性能就会急速的下降。
针对这一问题,我们设计并实现了一个基于 segregated hashmap 新的 freelist 分配回收算法。该算法将连续的页面大小作为 hashmap 的 key,value 是起始 ID 的配置集合。当需要新的页面存储时,我们只需要 O(1) 的时间复杂度来查询这个 hashmap 值,快速得到页面的起始 ID。
再去看上面例子,当需要 size 为 3 的连续页面的时候,通过查询这个 hashmap 很快就能找到起始页面 ID 为 47。
同样在释放页面时,我们也用了 hashmap 做优化。例如上图当页面 ID 为 45、46 释放的时候,它可以通过向前向后做合并,形成一个大的连续页面,也就是形成一个起始页面 ID 为 44、大小为 6 的连续页面。
综上所述:新的算法将分配的时间复杂度从 O(n) 优化到了 O(1),回收从 O(nlogn) 优化到了 O(1),etcd 内部存储不再限制其读写的性能,在真实的场景下,它的性能优化了几十倍。从单集群推荐存储 2GB 可以扩大到 100GB。该优化目前在阿里巴巴内部使用,并输出到了开源社区。
这里再提一点,本次说的多个软件的优化,在新版本中的 etcd 中都会有发布,大家可以关注使用一下。
四、etcd 性能优化 -client 端
다시 성능 etce 클라이언트의 사용에 대한 모범 사례를 소개합니다.
먼저, 클라이언트에 etcd 서버에서의 모습 몇 가지 API를 제공하자 넣어 가져 오기, 시계, 거래, 임대, 그리고 다른 많은 작업을.
더 많은 고객의 작업을 위해, 우리는 몇 가지 모범 사례 호출을 요약 :
- 넣어 조작 K8S 사용 CRD 하에서, 예를 들어, 더 단순화를 간소화하는 큰 값, 유선형의 사용을 피하기 위해 지시;
- 둘째, 저장 키 / 값 메타 데이터 정보의 빈번한 변화에 적합하지 않은 그 자체 etcd. 필요성의 사용 클라이언트는 키 / 값을 만들 자주 변경을 피하기 위해 그래서. 이 K8S에서 새로운 노드 노드의 하트 비트 데이터가이 연습을 따라 업로드, 예를 들면;
- 마지막으로, 우리는 임대의 큰 숫자를 만들지 않도록해야 재사용을 선택하려고합니다. 예를 들어, K8S에서 이벤트 데이터 관리 : 이벤트 같은 TTL 만료 시간도 유사한 임대 오히려 새로운 임대를 만드는 대신 다중 선택합니다.
클러스터가 안정적이고 효율적인 운영을 etcd 수 있도록 모범 사례를 사용하는 유지 클라이언트 : 마지막으로 한 가지를 기억하시기 바랍니다.
이 섹션에서는 요약
이 섹션에서는 우리가 여기 요약으로, 여기서 끝나지하는 것입니다 :
- 첫째, 우리는 etcd 성능 배경을 이해하는 원리 뒤에서 잠재적 인 성능 병목 지점을 이해;
- 분석 etcd 서버 측 성능 최적화, 하드웨어 / 배포 / 내부 코어 소프트웨어 알고리즘의 관점에서 최적화;
- 모범 사례의 etcd 클라이언트 사용 알아보기;
마지막으로, 나는 당신의 도움으로 안정적이고 효율적인 etcd 클러스터를 실행하는 데 학생들이이 기사를 읽은 후, 수확 할 수 있기를 바랍니다.
" 알리바바 클라우드 네이티브 우려 마이크로 서비스는 서버를 사용는, 컨테이너, 서비스 메쉬 및 클라우드 네이티브 인기있는 기술 동향 초점을 다른 기술 분야는, 대부분의 개발자의 기본 클라우드 기술 서클을 이해 할, 기본 대규모 상륙 연습 구름."