在IDF05(Intel Developer Forum 2005)上,Intel首席执行官Craig Barrett就取消4GHz芯片计划一事,半开玩笑当众单膝下跪致歉,给广大软件开发者一个明显的信号,单纯依靠垂直提高硬件性能来提升系统性能的时代已结束,分布式开发的时代实际上早已悄悄地成为了时代的主流,吵得很热的云计算实际上只是包装在分布式以外的商业概念,不少开发者(包括我)都想加入研究云计算这个潮流,在google上经过“云计算”这个关键词来查询资料,查到的都是些概念性或商业性的宣传资料,其实真正须要深刻的仍是那个早以被人熟知的概念------分布式。web
分布式可繁也能够简,最简单的分布式就是你们最经常使用的,在负载均衡服务器后加一堆web服务器,而后在上面搞一个缓存服务器来保存临时状态,后面共享一个数据库,其实不少号称分布式专家的人也就停留于此,大体结构以下图所示:算法
这种环境下真正进行分布式的只是web server而已,而且web server之间没有任何联系,因此结构和实现都很是简单。推荐看下:到底什么是分布式系统?关注微信公众号:Java技术栈,在后台回复:分布式,能够获取我整理的 N 篇分布式技术干货。数据库
有些状况下,对分布式的需求就没这么简单,在每一个环节上都有分布式的需求,好比Load Balance、DB、Cache和文件等等,而且当分布式节点之间有关联时,还得考虑之间的通信。编程
另外,节点很是多的时候,得有监控和管理来支撑。这样看起来,分布式是一个很是庞大的体系,只不过你能够根据具体需求进行适当地裁剪。按照最完备的分布式体系来看,能够由如下模块组成:缓存
分布式任务处理服务:负责具体的业务逻辑处理服务器
分布式节点注册和查询:负责管理全部分布式节点的命名和物理信息的注册与查询,是节点之间联系的桥梁微信
分布式DB:分布式结构化数据存取网络
分布式Cache:分布式缓存数据(非持久化)存取架构
分布式文件:分布式文件存取并发
网络通讯:节点之间的网络数据通讯
监控管理:搜集、监控和诊断全部节点运行状态
分布式编程语言:用于分布式环境下的专有编程语言,好比Elang、Scala
分布式算法:为解决分布式环境下一些特有问题的算法,好比解决一致性问题的Paxos算法
所以,若要深刻研究云计算和分布式,就得深刻研究以上领域,而这些领域每一块的水都很深,都须要很底层的知识和技术来支撑,因此说,对于想提高技术的开发者来讲,以分布式来做为切入点是很是好的,能够以此为线索,探索计算机世界的各个角落。
集群是个物理形态,分布式是个工做方式。
只要是一堆机器,就能够叫集群,他们是否是一块儿协做着干活,这个谁也不知道;一个程序或系统,只要运行在不一样的机器上,就能够叫分布式,嗯,C/S架构也能够叫分布式。
集群通常是物理集中、统一管理的,而分布式系统则不强调这一点。
因此,集群可能运行着一个或多个分布式系统,也可能根本没有运行分布式系统;分布式系统可能运行在一个集群上,也可能运行在不属于一个集群的多台(2台也算多台)机器上。
布式是相对中心化而来,强调的是任务在多个物理隔离的节点上进行。中心化带来的主要问题是可靠性,若中心节点宕机则整个系统不可用,分布式除了解决部分中心化问题,也倾向于分散负载,但分布式会带来不少的其余问题,最主要的就是一致性。
集群就是逻辑上处理同一任务的机器集合,能够属于同一机房,也可分属不一样的机房。分布式这个概念能够运行在某个集群里面,某个集群也可做为分布式概念的一个节点。
一句话,就是:“分头作事”与“一堆人”的区别
分布式是指将不一样的业务分布在不一样的地方。而集群指的是将几台服务器集中在一块儿,实现同一业务。
分布式中的每个节点,均可以作集群。而集群并不必定就是分布式的。
举例:就好比新浪网,访问的人多了,他能够作一个群集,前面放一个响应服务器,后面几台服务器完成同一业务,若是有业务访问的时候,响应服务器看哪台服务器的负载不是很重,就将给哪一台去完成。
而分布式,从窄意上理解,也跟集群差很少, 可是它的组织比较松散,不像集群,有一个组织性,一台服务器垮了,其它的服务器能够顶上来。
分布式的每个节点,都完成不一样的业务,一个节点垮了,哪这个业务就不可访问了。
简单说,分布式是以缩短单个任务的执行时间来提高效率的,而集群则是经过提升单位时间内执行的任务数来提高效率。
例如:
若是一个任务由10个子任务组成,每一个子任务单独执行需1小时,则在一台服务器上执行该任务需10小时。
采用分布式方案,提供10台服务器,每台服务器只负责处理一个子任务,不考虑子任务间的依赖关系,执行完这个任务只需一个小时。(这种工做模式的一个典型表明就是Hadoop的Map/Reduce分布式计算模型)
而采用集群方案,一样提供10台服务器,每台服务器都能独立处理这个任务。假设有10个任务同时到达,10个服务器将同时工做,1小时后,10个任务同时完成,这样,整身来看,仍是1小时内完成一个任务!
集群通常被分为三种类型,高可用集群如RHCS、LifeKeeper等,负载均衡集群如LVS等、高性能运算集群;分布式应该是高性能运算集群范畴内。
分布式:不一样的业务模块部署在不一样的服务器上或者同一个业务模块分拆多个子业务,部署在不一样的服务器上,解决高并发的问题
集群:同一个业务部署在多台机器上,提升系统可用性
小饭店原来只有一个厨师,切菜洗菜备料炒菜全干。后来客人多了,厨房一个厨师忙不过来,又请了个厨师,两个厨师都能炒同样的菜,这两个厨师的关系是集群。为了让厨师专心炒菜,把菜作到极致,又请了个配菜师负责切菜,备菜,备料,厨师和配菜师的关系是分布式,一个配菜师也忙不过来了,又请了个配菜师,两个配菜师关系是集群