etcd篇——基本介绍

1. etcd简介

etcd是一个非常可靠的kv存储系统,常在分布式系统中存储着关键的数据。它是由coreos团队开发并开源的分布式键值存储系统,具备以下特点:

  • 简单:提供定义明确且面向用户的API
  • 安全:支持SSL证书验证
  • 性能:基准压测支持1w+/sec写入
  • 可靠:采用Raft协议保证分布式系统数据的可用性和一致性。

etcd的这些特性,使得它常常出现在分布式设计场景下的工具集中。

1.1 etcd常见功能

  • 键值存储、查询功能:支持精准查询、range操作、ttl机制、key版本等。
  • 一致性机制:采用raft协议保证强一致性。
  • 可用性机制:提供集群和leader选举机制。
  • SSL认证机制。
  • watch机制。

1.2 etcd常见应用场景

1. 配置中心

etcd是一个分布式的键值存储系统,其优秀的读写性能、一致性和可用性的机制,非常适合用来做配置中心角色。

2. 分布式锁

etcd的强一致性保证,可以用来做分布式场景下的同步机制保证。

3. leader选举组件

分布式场景下,常采用leader-follower模式来保证有状态服务的高可用(即使leader挂掉,其他follower立马补上),比如k8s和kafka partition高可用机制。可以很方便的借助etcd来实现leader选举机制,这里有个leader election实现:https://github.com/willstudy/leaderelection

4. 服务注册与服务发现

为了解决微服务场景下,服务地址的注册和发现问题,和配置中心类似,不同之处在于服务注册和服务发现,还伴随着状态检测。

5. 消息订阅和发布

etcd内置watch机制,完全可以实现一个小型的消息订阅和发布组件。

6. more and more

etcd优秀的特性,适合的场景很多。

2. etcd和同类型产品的对比

2.1 etcd vs redis

etcd诞生之日起,就定位成一种分布式存储系统,并在k8s 服务注册和服务发现中,为大家所认识。它偏重的是节点之间的通信和一致性的机制保证,并不强调单节点的读写性能。

而redis最早作为缓存系统出现在大众视野,也注定了redis需要更加侧重于读写性能和支持更多的存储模式,它不需要care一致性,也不需要侧重事务,因此可以达到很高的读写性能。

总结一下,redis常用来做缓存系统,etcd常用来做分布式系统中一些关键数据的存储服务,比如服务注册和服务发现。

2.2 etcd vs consul

consul定位是一个端到端的服务框架,提供了内置的监控检查、DNS服务等,除此之外,还提供了HTTP API和Web UI,如果要实现简单的服务发现,基本上可以开箱即用。

但是缺点同样也存在,封装有利有弊,就导致灵活性弱了不少。除此之外,consul还比较年轻,暂未在大型项目中实践,可靠性还未可知。

2.3 etcd vs zookeeper

etcd站在了巨人的肩膀上。。zookeeper有如下局限性:

  • 不能动态的变更节点,需要人工修改配置 & 重启进程。
  • 大规模链接时,读写性能表现差。

3. etcd性能表现

来自于官网介绍:https://etcd.io/docs/v3.4.0/op-guide/performance/ 大致总结一下:

  • 读:1w ~ 10w 之间
  • 写:1w左右

建议:

  • etcd需要部署到ssd盘(强烈建议)
  • 多个写采用batch操作。
  • 非必要情况下,避免range操作。

etcd集群更偏重一致性和稳定性,并不强调高性能,在绝大部分场景下均不会到达etcd性能瓶颈,如果出现瓶颈的话,需要重新review架构设计,比如拆分或者优化流程。

4. 总结

etcd是一个分布式的可靠的键值存储系统,是分布式架构设计的常见组件。

每个轮子都有好有坏,正是坏的那一点的存在,才能将好的那一点发挥到极致。在架构设计中,需要根据业务场景选择适合的轮子,避免坏的那一面,并将好的那一面发挥到极致。

5. 推荐