分布式系统技术概要算法
如今互联网应用,尤为是大型互联网公司的应用已经发展为大规模或超大规模的分布式的,集群化的应用。而中小规模的分布式应用也已普遍出如今各个领域。将来,随着云计算向社会生活的方方面面去渗透,分布式应用将更加地普及。因此,任何一个要从事服务器端应用开发的人员,都有具有对分布式应用的基本认识。数据库
本文将简要介绍分布式应用的各基本领域的相关技术。这些技术在一个分布式应用中都会有或多或少的设计,即使暂时没有涉及到,设计人员也要有所考虑,保证系统有进一步发展的空间。服务器
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。