文 / 70号实验室
在云计算领域,对于ETCD相信大家一定不会陌生。ETCD是一个使用Golang语言开发的分布式存储系统。作为CNCF基金会旗下孵化的开源项目,ETCD拥有来自全球众多贡献者,被AWS、Google、Microsoft、阿里巴巴等大型互联网公司广泛使用,CNCF开源基金会下众多项目都使用了ETCD作为其核心的数据存储系统。
随着金融行业业务发展和技术革新,容器技术得到快速发展,逐步替代传统单机部署成为主流的基础设施层。Kubernetes作为目前业界主流的容器编排技术,同隶属于CNCF开源基金会其核心数据一般存储在ETCD中,因此ETCD成为容器技术的标准存储方案。ETCD自身具备的高可用性、强一致性和安全性也正契合了金融行业对于安全、稳定的追求。由于ETCD内存储的数据非常核心,其重要性也逐渐显现,成为金融科技基础设施层最关键的节点之一。
一、ETCD介绍
ETCD是一个分布式key-value存储系统,其设计用来可靠而迅速地保存关键数据并提供访问。通过分布式锁,leader选举和raft协议来实现可靠的分布式协作。ETCD集群为高可用、持久化数据存储和检索而生,具有简单、安全、快速、可靠等特点。提供HTTP API进行交互,支持SSL证书保证访问安全性,具有良好的读性能,按照官方提供的数据单实例支持每秒2k以上的读操作。
二、ETCD在金融领域的应用场景
1.集群元数据存储
Kubernetes容器编排技术作为云原生核心技术,包含一系列对象,如pod、deployment、configmap等,目前主流存储方案是将状态保存在ETCD中,ETCD具备如下优势:
(1)元数据高可用,无单节点故障
一个ETCD集群一般由3个、5个或者7个节点组成,多个节点之间通过raft一致性算法实现分布式一致性协同,算法会选出一个主节点作为leader,由leader负责数据的同步与数据的分发。当leader出现故障后系统自动重新选举,选取另外一个节点作为leader,并重新完成数据的同步。在ETCD架构中,通常只要超过半数节点可用,ETCD就可以继续提供服务,有效保障了ETCD的高可用性。
(2)安全通信
ETCD使用TLS身份验证确保安全通信,只有具有有效证书的客户端可以访问API接口,确保集群内部正常通信,外部无法攻击篡改其存储的集群运行节点、参数对象数据。
(3)数据强一致性
ETCD采用raft算法,leader节点统一处理client请求,通过定期同步wal日志给其他follower节点保证各节点数据同步。follower节点接收到消息后按照wal日志index顺序更新数据,超过半数follower节点同步完成日志后,leader节点会将数据更新为committed状态,日志数据每1w条commit会记录一次快照。通过ETCD内部raft算法同步机制确保各节点数据强一致性。ETCD架构如图1所示。
2.容器对外服务发现
容器自身存在“漂移不定”的特点,容器版本升级或者宿主机IO异常都可能导致容器漂移,其对外服务地址也随之改变。为了实现容器对外服务发现,涉及到分布式消息发布与订阅机制,在分布式系统中,最常见的一种组件间通信方式就是消息发布与订阅,即构建一个配置共享中心,数据提供者在这个配置中心发布消息,而消息使用者则订阅他们关心的主题,一旦主题有消息发布,就会实时通知到订阅者。通过这种方式,可以实现配置信息集中式管理与动态更新,借助反向代理器实现系统透明地对多个容器实例进行访问,并实现多实例之间负载均衡。
ETCD作为上述消息发布与订阅机制中的“配置共享中心”,在容器对外服务发现过程中起到了关键的桥梁作用,其结合confd和haproxy可以实现容器对外服务发现,在容器故障重启时动态更新容器配置,保障请求透明访问到容器实例。
其中,在ETCD中存储最新的容器注册信息,通过deployment生命周期函数post_start和pre_stop绑定容器启动和死亡时向ETCD注册和解注册容器地址信息,增加同步对账机制保障ETCD中数据的新鲜。confd是一个轻量级的配置管理工具,通过对ETCD某个目录下数据进行watch,当发现etcd键值对数据有变化时,结合配置模板引擎,实时更新haproxy配置文件,同时调用haproxy reload方法热加载,实现容器地址列表无感刷新,保证haproxy稳定对外负载提供服务。
三、总结
随着金融领域云计算和分布式的快速发展,未来在分布式配置存储和服务发现方面会有更多需求,比如分布式通知与协调机制、分布式协同工作场景等均可以借助ETCD的强一致性、租约机制、watch监听机制、分布式锁机制实现。目前开源社区ETCD仍在不断推出新的性能,加上目前已具备的安全、分布式一致性、读写性能良好等优点,相信未来ETCD在金融领域会有更广泛的应用。