关于分布式和集群,再补充2句
一、分布式定义
今晚翻论坛,想看看别人是怎么说的,一路把2004年的帖子都翻出来了,基本是众说纷纭
有的人说在不同机器上才是分布式,有的人说在不同JVM里才是分布式,也有的人说在不同线程里也算分布式……
我自己的理解是,从概念上讲,如果把业务拆分到不同的节点,就算是分布式。这里的节点可以是web app、JVM、服务器。但是不包括线程,线程的前提就是要跑在一个进程里,那根本就没有办法独立部署,还叫什么分布式呢
用一个办法简单区分,就是如果相互之间需要通过RPC调用,就是分布式。如果可以NPC,就不是分布式
二、分布式的好处
1、复用
分布式可以理解为“服务化”,把一大坨业务,拆分成若干个可独立运行的小业务,或者说子系统,这就使得每个子系统具备了复用的可能性。比如若干个子系统,都用到了用户管理,那么用户管理就可以拆分出来,实现复用
淘宝的商品管理、订单管理,也都是独立部署的子系统,这样上层的业务系统,都可以直接复用了
2、支持异构客户端
这个其实和第1点没有严格的区分。主要说的是将应用的前端和后端逻辑分离,这样就可以支撑不同的客户端。比如典型的新浪微博,可以用浏览器访问,也可以用iOS客户端访问,还可以用android客户端访问,甚至也提供了API,可以自行开发独立客户端
这都要求将应用的前后端分离,否则是不可能实现的
3、提升性能
这点跟将单线程应用改成多线程应用有些类似,都需要满足一定的条件,才能实现性能提升的目的,见另一篇博客
http://kyfxbl.iteye.com/blog/1888407
如果应用的瓶颈在CPU和内存上,然后子任务可并行化,那么用分布式提升性能的“可能性”是比较大的
反之,即使系统采用分布式架构,性能也基本不会有丝毫提升
比如说,系统的瓶颈是在数据库IO上,那么就算拆分成分布式架构,数据库IO瓶颈也依然存在,对性能没有任何好处
或者,把业务拆分后,多个子任务必须要串行执行(顺序依赖、资源竞争),那么分布式也无法带来性能提升
三、分布式的坏处
首先是开发、部署都变得复杂了,不赘述
其次,如果应用不当的话,分布式还有很大的可能会降低性能。因为分布式涉及到RPC,会带来额外的开销
四、集群
集群主要是为了可服务性(双机热备、双机互备)和容灾(数据冗余、数据备份)等
另一方面,集群也能带来性能提升
首先,集群配合负载均衡,通过分流可以同时响应更多请求,这里就可以提升性能
另外,虽然从单个请求来看,集群不能带来性能提升,比如做一个任务要10分钟,那么即使用了集群,一样也是10分钟。但是考虑用4台机器组成集群,那么就可以同时处理4个请求,10分钟里处理了4个请求,从整体来看,性能也是提升了。理论上,采用集群,系统是可以无限水平扩展的
另外一个帖子总结得不错:
“分布式是以缩短单个任务的执行时间来提升效率的;而集群则是通过提高单位时间内执行的任务数来提升效率”
http://www.iteye.com/topic/1121383
五、分布式与集群的联系
基本上是2个不同的概念。非分布式的系统,一样可以做集群;分布式里的每个子系统,都可以单独做集群