首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 软件管理 > 软件架构设计 >

关于分布式跟集群,再补充2句

2013-07-09 
关于分布式和集群,再补充2句一、分布式定义今晚翻论坛,想看看别人是怎么说的,一路把2004年的帖子都翻出来了

关于分布式和集群,再补充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个不同的概念。非分布式的系统,一样可以做集群;分布式里的每个子系统,都可以单独做集群

热点排行