分布式系统技术概要
现在互联网应用,尤其是大型互联网公司的应用已经发展为大规模或超大规模的分布式的,集群化的应用。而中小规模的分布式应用也已广泛出现在各个领域。未来,随着云计算向社会生活的方方面面去渗透,分布式应用将更加地普及。所以,任何一个要从事服务器端应用开发的人员,都有具备对分布式应用的基本认识。
本文将简要介绍分布式应用的各基本领域的相关技术。这些技术在一个分布式应用中都会有或多或少的设计,即便暂时没有涉及到,设计人员也要有所考虑,保证系统有进一步发展的空间。
1. 集群管理
关键字:Apache Zookeeper、Paxos 算法、Etcd、Raft、Apache Curator
在一个分布式系统中,存在着一些和系统运行,以及重要业务紧密相关的数据,如节点相关的数据、应用服务和数据服务相关的数据等,这些数据对集群的正常运行至关重要。
- 服务器节点相关数据:服务器的地址、状态
- 服务相关数据:服务的IP、端口、版本、协议、状态、主备节点信息
- 数据库相关数据:路由规则、分库分表规则
这些重要的数据在分布式系统中存在着多份拷贝,以保证高可用性。但这产生了另外一个问题,就是如何保证这些数据的一致性。因为这些数据是如此重要,不一致的数据会产生严重甚至致命的错误。在一个小规模的分布式系统中,因为可以用一两台服务器去做集群管理,所以数据的一致性容易实现。但是对于一个大规模的分布式系统,一两台集群配置管理服务器无法支撑整个集群所带来的大量并发读写操作,所以要使用几台、十几台,甚至更多的服务器去支撑这些请求。此时,就需要一个保持这些服务器中集群配置数据的一致性的方案了。
这众多方案中,Paxos 算法算是最佳方案之一。关于 Paxos 算法的内容,不在这里详述了。简单描述就是集群中各节点相互以提议的方式通信(对一项数据的修改),提议中带有不断增加的 ID 号,节点永远同意当前 ID 号最大的提议,并拒绝其它提议。当有半数以上节点同意一项提议之后,这个提议便被整个节点所接受并采纳。
1.1. Apache Zookeeper
Paxos 算法的语言表述看上去不难,但是其中的技术难点并不少。好在现在已经有了很多的解决方案,其中最为著名的便是 Apache Zookeeper。Zookeeper 不仅可以用来存储配置数据,还可以用来实现集群 Master 选举、分布式锁等场景。Apache Curator 是 Zookeeper 的客户端,可以简化对 Zookeeper 的使用,实现各式的场景。
Zookeeper 是一个分布式的服务管理框架。Zookeeper 的典型的应用场景包括配置文件的管理、集群管理、分布式锁、Leader 选举、队列管理等。Zookeeper 可工作在集群模式下,zoo.cfg 中记录着集群中所有 Zookeeper 服务器的地址,每个服务器有自己唯一的 ID。同时,每个服务器在自己的 dataDir 目录下还要有一个 myid 文件,以标示自己的 ID。在 Zookeeper 中,数据以树状的结构存储,类似于 LDAP 数据库。
现在类似 Zookeeper 的项目还有使用 go 语言实现的 Etcd。