分布式系统就是将系统的应用层,数据层或其它部分构架成分布(物理和逻辑上的都可以)状(通常是网状)。分布式系统通常是为了增强系统的可扩展性、稳定性和执行效率。比如在线游戏通常就是分布系统,里面所谓的“区”就是分布系统里子例程。而分布式数据库其实也可以称作分布式系统,数据持久化层是分布的。所以说分布式系统更准确地说是一种系统构架概念,不是一种技术。
分布式系统可以比喻为一个跨节点的操作系统,包括:
分布式通信系统
分布式存储系统
分布式计算系统
分布式监控系统
分布式部署系统
分布式调度系统
分布式代码分发系统
其中后四者可以归类到分布式管理系统中。
分布式通信系统
分布式通信系统是分布式系统的基础,分布式系统依赖节点之间的相互通信,而通信方式可以是点对点、订阅通知、广播等各种类型,通信失败后可以丢弃、重发或超时处理,这些都是依赖分布式通信系统进行处理的。分布式通信系统主要有两大类,一类是以库的形式提供,没有一个中心或分布式地通信服务器,这类比较简单,但提供的功能也有限,zeroMQ就是这样一个库。还有一类是有独立部署的通信服务器,可以是单个的也可以是集群的,比较有名的开源实现有rabbitMQ,activeMQ等。
分布式存储系统
分布式存储系统包括很多内容,有分布式文件系统(对象存储),分布式块存储,分布式NoSQL存储,分布式关系数据库等等
分布式文件系统用于存储 Blob 对象,典型的系统有 Facebook Haystack 以及 Taobao File System(TFS)。分布式文件系统是分布式的基石,通常作为上层系统的底层存储。
总体上看,分布式文件系统存储三种类型的数据 :Blob 对象、定长块以及大文件。在系统实现层面,分布式文件系统内部按照数据块(chunk)来组织数据,每个 chunk 的大小大致相同,每个 chunk 可以包含多个 Blob 对象或者定长块,一个大文件也可以拆分为多个 chunk
分布式计算系统
分布式计算系统更加复杂,没有一个统一的标准,可以是一个分布式计算平台,也可以是分布式计算框架,比如MapReduce框架,Storm框架-Twitter的项目,Amazon的EC2服务也可以认为是一个分布式计算系统。
分布式服务器管理系统
在分布式服务器管理系统软件中有一些比较优秀的软件,其中比较理想的一个是Cfengine。它可以对服务器进行分组,不同的分组可以分别定制系统配置文件、计划任务等配置。它是基于C/S 结构的,所有的服务器配置和管理脚本程序都保存在Cfengine Server上,而被管理的服务器运行着 Cfengine Client 程序,Cfengine Client通过SSL加密的连接定期的向服务器端发送请求以获取最新的配置文件和管理命令、脚本程序、补丁安装等任务。
有了Cfengine这种集中式的服务器管理工具,我们就可以高效的实现大规模的服务器集群管理,被管理服务器和 Cfengine Server 可以分布在任何位置,只要网络可以连通就能实现快速自动化的管理。
分布式系统涉及的知识体系非常的多,要求对通信机制、远程调用、消息机制等有深入的理解和掌握,要求的都是从理论、硬件级、操作系统级以及所采用的语言的实现都有清楚的理解。
架构师要考虑问题:1.到底要解决什么问题? 2.解决问题的类型是什么?