EasyDSS的部分项目当中,需要频繁对视频做合成处理,但是视频处理非常耗费CPU,使用单一服务器会使CPU占用率一直处于高负载的状态,因此我们要对这种情况进行优化。
起初计划采用的nginx模式部署,但nginx模式略微复杂,且nginx数据单进程模式也会影响GRPC调用性能,因此我们决定采用一个新的负载均衡模式——ETCD。
ETCD是一个基于Go语言编写的分布式的、高可用的、一致的key-value存储数据库,主要用于共享配置和服务发现。为了防止单点故障,etcd还可以以集群方式部署,etcd集群使用raft一致性算法处理日志复制,保证多节点数据的强一致性。
一、本地安装
通过网页下载对应系统架构的安装包,解压即可运行;
安装包地址: https://github.com/etcd-io/etcd/releases
二、Docker安装
1.下载镜像
docker pull quay.io/coreos/etcd
2.运行
docker run -it -d -p 2379:2379 -p 2380:2380 --name etcd quay.io/coreos/etcd
3.查看
docker exec -it etcd etcdctl member list
etcdKeeper
这是一个管理etcd服务的WebUI管理后台程序。可以通过web页面对注册到etcd的服务进行管理。并进行服务节点的添加和删除;
三、拓展
etcd 使用 raft 协议来维护集群内各个节点状态的一致性。简单说,etcd 集群是一个分布式系统,由多个节点相互通信构成整体对外服务,每个节点都存储了完整的数据,并且通过 Raft 协议保证每个节点维护的数据是一致的。
每个 etcd 节点都维护了一个状态机,并且,任意时刻至多存在一个有效的主节点。主节点处理所有来自客户端写操作,通过 Raft 协议保证写操作对状态机的改动会可靠的同步到其他节点。