分布式集群

Posted toria

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了分布式集群相关的知识,希望对你有一定的参考价值。

1.什么是分布式架构?什么是集群?

  • 分布式 一个业务分拆为多个子业务,分别布署到不同服务器上,需要各子业务之间配合才能完成整个业务逻辑。比如一个网站,会员系统放在A服务器,消息系统放在B服务器,支付系统放在C服务器等等,那么这个网站也算是一个分布式网站。
  • 集群 同一个业务被布署到不同的服务器以降低单台服务器的压力,多台服务器一起实现同一个业务

区别:

  1. 分布式是指将不同的业务分给不同的服务器,每一个服务器都完成不同的业务,每个服务器缺一不可;而集群指的是将几台服务器集中在一起,实现同一业务。每台服务器并不是缺一不可的。
  2. 分布式是以缩短单个任务的执行时间来提升效率的,而集群则是通过提高单位时间内执行的任务数来提升效率的。

【注】分布式中的每一个节点,都可以做集群。 而集群并不一定就是分布式的。

举个例子说明: 
  一个小饭店里,原来只有一个厨师,买菜洗菜切菜炒菜全都是这厨师一人干,这叫 单机结构 。后来饭店客人多了,一个厨师确实忙活不过来,于是饭店又请来了个厨师,现在饭店有了两个厨师,这两个厨师都能从头到尾做一样的菜,这两个厨师就是 集群 。这样两个厨师集群确实能做更多的活,客人点10个菜可以分配每个人抄5个,单个厨师压力减少了。但是这样还不行,为了让厨师专心做菜,把菜做得更好,于是饭店又请来了采购和配菜师,采购负责买菜,配菜师负责把菜挑拣洗好切好给厨师做好准备,那么采购、配菜师、厨师之间就行程了 分布式系统 。后来一个采购和一个配菜师也忙不过来了,于是又再请多了个采购和配菜师,那么两个采购又形成了集群,两个配菜师也形成了集群,同样两个厨师也还是集群,这样多个集群一起就行程了 分布式集群系统 

 

分布式和集群的关系:

  分布式主要的功能是将我们的系统模块化,将系统进行解耦,方便我们的维护和开发。但是其并不能解决并发问题,也无法保证我们的系统在服务器宕机后的正常运转。

  集群恰好弥补了分布式的缺陷,集群,就是多个服务器处理相同的业务,一方面可以解决或者说改善我们系统的并发问题,另一方面可以解决我们服务器如果出现一定数量的宕机后,系统仍然可以正常运转。

2. 为什么要用分布式?为什么要用集群?

为什么用分布式?

  传统的项目中我们将各个模块放在一个系统中,系统过于庞大,开发维护困难,各个功能模块之间的耦合度高,无法针对单个模块进行优化。而使用分布式架构将系统模块化,便于我们的维护和开发。

为什么用集群?

  项目如果部署在一台Tomcat上,所有的请求都由这一台服务器处理,会存在很大风险:

  1. 单台服务器并发处理能力有限。(一般单台服务器处理的并发量为250左右,超过250,可能会出现数据丢失,链接不稳定的情况)
  2. 使用单台服务器,一旦服务器故障,整个服务就无法访问了。
  3. 单台服务器计算能力低,无法完成复杂的海量数据计算。

  集群是是指将多台服务器集中在一起,每台服务器都实现相同的业务,做相同的事情。但是每台服务器并不是缺一不可,存在的作用主要是缓解并发压力和单点故障转移问题

3.为什么一般集群都要用3台服务器来组建?

  • 一台机器叫单机,不算分布式。
  • 两台机器组成的的集群,当有一台机器出现故障另一台机器并不能及时作出反应,况且两台机器当稳定性不一定要比单机更好。
  • 当有三台服务器是能实现zookeeper容错。

4. 你说项目基于SOA架构,什么是SOA架构?

   SOA:面向服务的架构。也就是把工程都拆分成服务层工程、表现层工程。服务层中包含业务逻辑,只需要对外提供服务即可。表现层只需要处理和页面的交互,业务逻辑都是调用服务层的服务来实现。工程都可以独立部署。

 

项目基于SOA的架构,表现层和服务层是不同的工程。所以要实现商品列表查询需要两个系统之间进行通信。如何实现远程通信?

  使用dubbo。使用rpc协议进行远程调用,直接使用socket通信,传输效率高,并且可以统计出系统之间的调用关系、调用次数,管理服务。

4.介绍一下dubbo.

  Dubbo是一个分布式服务框架,致力于提供高性能和透明化的RPC远程服务调用方案。

(注意不要与负载均衡搞混:负载均衡是对外提供一个公共地址,请求过来时通过轮询、随机等,路由到不同的服务器。)

说一下dubbo的架构、服务注册与发现的流程:

技术图片

Dubbo有5种节点角色:

  • Privoder(服务提供者):用于暴露服务
  • Consumer(服务消费者):用来调用远程服务
  • Registry(注册中心):注册与发现服务
  • Monitor(监控中心):统计服务的调用次数与调用时间
  • Container(服务运行容器)

 流程:

0. 服务容器用来启动、加载、运行服务提供者;

1. 服务提供者在启动时,向注册中心注册自己提供的服务;

2. 服务消费者在启动时,想注册中心订阅自己所需的服务;

3. 注册中心返回服务提供者地址列表给消费者。如果有变更,注册中心将基于长连接推送变更数据给消费者;

4. 服务消费者从提供者地址列表中,(基于软负载均衡)选一台服务提供者进行调用,如果调用失败,再选另一台调用;

5. 服务提供者和消费者,在内存中累计调用次数与调用时间,定时每分钟发送统计数据到监控中心。

注册中心的作用?Dubbo的注册中心有哪些?你使用的哪个?

  注册中心存储着Provider注册的远程服务,并将其所管理的服务列表通知给服务消费方(Consumer),且注册中心和提供方和消费方之间均保持长连接,可以获取Provider发布的服务的变化情况,并将最新的服务列表推送给Consumer。

  Dubbo的注册中心有Zookeeper、Redis、Multicast、Simple等。我们使用的是Zookeeper。

Dubbo的spring配置方式?

 

 

Dubbo默认使用的是什么通信框架,还有别的选择吗?

  默认也推荐使用netty框架,还有mina。

 

以上是关于分布式集群的主要内容,如果未能解决你的问题,请参考以下文章

ES集群分布式详解

03_Apache Pulsar的Local与分布式集群构建Pulsar的分布式集群模式Pulsar的分布式集群模式构建启动测试

ZooKeeper的伪分布式集群搭建以及真分布式集群搭建

分布式与集群的区别

Hadoop分布式集群实战

聊聊集群和分布式的区别