简述 ETCD 及其特点?
etcd
是
CoreOS
团队发起的开源项目,是一个管理配置信息和服务发现(
service discovery
)的项目,它的目标是构建一个高可用的分布式键值(key-value)数据库,基于 Go
语言实现。
特点:
- 简单:支持 REST 风格的 HTTP+JSON API
- 安全:支持 HTTPS 方式的访问
- 快速:支持并发 1k/s 的写操作
- 可靠:支持分布式结构,基于 Raft 的一致性算法,Raft 是一套通过选举主节点来实现分布式系统一致性的算法。
简述 ETCD 适应的场景?
etcd
基于其优秀的特点,可广泛的应用于以下场景:
服务发现
(Service Discovery)
:服务发现主要解决在同一个分布式集群中的进程或服务,要如何才 能找到对方并建立连接。本质上来说,服务发现就是想要了解集群中是否有进程在监听 udp
或
tcp
端口,并且通过名字就可以查找和连接。
消息发布与订阅
:在分布式系统中,最适用的一种组件间通信方式就是消息发布与订阅。即构建一个配 置共享中心,数据提供者在这个配置中心发布消息,而消息使用者则订阅他们关心的主题,一旦主题有消息发布,就会实时通知订阅者。通过这种方式可以做到分布式系统配置的集中式管理与动态更新。应用中用到的一些配置信息放到 etcd
上进行集中管理。
负载均衡
:在分布式系统中,为了保证服务的高可用以及数据的一致性,通常都会把数据和服务部署多份,以此达到对等服务,即使其中的某一个服务失效了,也不影响使用。etcd
本身分布式架构存储的信息访问支持负载均衡。etcd
集群化以后,每个
etcd
的核心节点都可以处理用户的请求。所以,把数据量小但是访问频繁的消息数据直接存储到 etcd
中也可以实现负载均衡的效果。
分布式通知与协调
:与消息发布和订阅类似,都用到了
etcd
中的
Watcher
机制,通过注册与异步通知机制,实现分布式环境下不同系统之间的通知与协调,从而对数据变更做到实时处理。
分布式锁
:因为
etcd
使用
Raft
算法保持了数据的强一致性,某次操作存储到集群中的值必然是全局一致的,所以很容易实现分布式锁。锁服务有两种使用方式,一是保持独占,二是控制时序。
集群监控与
Leader
竞选:通过
etcd
来进行监控实现起来非常简单并且实时性强。
简述 HAProxy 及其特性?
HAProxy
是可提供高可用性、负载均衡以及基于
TCP
和
HTTP
应用的代理,是免费、快速并且可靠的一种解决方案。HAProxy
非常适用于并发大(并发达
1w
以上)
web
站点,这些站点通常又需要会话保持或七层处理。HAProxy
的运行模式使得它可以很简单安全的整合至当前的架构中,同时可以保护web 服务器不被暴露到网络上。
HAProxy
的主要特性有:
- 可靠性和稳定性非常好,可以与硬件级的 F5 负载均衡设备相媲美;
- 最高可以同时维护 40000-50000 个并发连接,单位时间内处理的最大请求数为 20000 个,最大处
- 理能力可达 10Git/s;
- 支持多达 8 种负载均衡算法,同时也支持会话保持;
- 支持虚机主机功能,从而实现 web 负载均衡更加灵活;
- 支持连接拒绝、全透明代理等独特的功能;
- 拥有强大的 ACL 支持,用于访问控制;
- 其独特的弹性二叉树数据结构,使数据结构的复杂性上升到了 0(1),即数据的查寻速度不会随着数据条目的增加而速度有所下降;
-
支持客户端的 keepalive 功能,减少客户端与 haproxy 的多次三次握手导致资源浪费,让多个请求在一个 tcp 连接中完成;
-
支持 TCP 加速,零复制功能,类似于 mmap 机制;
-
支持响应池(response buffffering);
-
支持 RDP 协议;
-
基于源的粘性,类似 nginx 的 ip_hash 功能,把来自同一客户端的请求在一定时间内始终调度到上游的同一服务器;
-
更好统计数据接口,其 web 接口显示后端集群中各个服务器的接收、发送、拒绝、错误等数据的统计信息;
-
详细的健康状态检测, web 接口中有关于对上游服务器的健康检测状态,并提供了一定的管理功能;
-
基于流量的健康评估机制;
-
基于 http 认证;
-
基于命令行的管理接口;
-
日志分析器,可对日志进行分析。
简述 HAProxy 常见的负载均衡策略?
HAProxy
负载均衡策略非常多,常见的有如下
8
种:
- roundrobin:表示简单的轮询。
- static-rr:表示根据权重。
- leastconn:表示最少连接者先处理。
- source:表示根据请求的源 IP,类似 Nginx 的 IP_hash 机制。
- ri:表示根据请求的 URI。
- rl_param:表示根据 HTTP 请求头来锁定每一次 HTTP 请求。
- rdp-cookie(name):表示根据据 cookie(name)来锁定并哈希每一次 TCP 请求。
简述负载均衡四层和七层的区别?
四层负载均衡器
也称为
4
层交换机,主要通过分析
IP
层及
TCP/UDP
层的流量实现基于
IP
加端口的负载均衡,如常见的 LVS
、
F5
等;
七层负载均衡器
也称为
7
层交换机,位于
OSI
的最高层,即应用层,此负载均衡器支持多种协议,如HTT