分布式集群
Posted toria
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了分布式集群相关的知识,希望对你有一定的参考价值。
1.什么是分布式架构?什么是集群?
- 分布式 :一个业务分拆为多个子业务,分别布署到不同服务器上,需要各子业务之间配合才能完成整个业务逻辑。比如一个网站,会员系统放在A服务器,消息系统放在B服务器,支付系统放在C服务器等等,那么这个网站也算是一个分布式网站。
- 集群 :同一个业务被布署到不同的服务器以降低单台服务器的压力,多台服务器一起实现同一个业务。
区别:
- 分布式是指将不同的业务分给不同的服务器,每一个服务器都完成不同的业务,每个服务器缺一不可;而集群指的是将几台服务器集中在一起,实现同一业务。每台服务器并不是缺一不可的。
- 分布式是以缩短单个任务的执行时间来提升效率的,而集群则是通过提高单位时间内执行的任务数来提升效率的。
【注】分布式中的每一个节点,都可以做集群。 而集群并不一定就是分布式的。
举个例子说明:
一个小饭店里,原来只有一个厨师,买菜洗菜切菜炒菜全都是这厨师一人干,这叫 单机结构 。后来饭店客人多了,一个厨师确实忙活不过来,于是饭店又请来了个厨师,现在饭店有了两个厨师,这两个厨师都能从头到尾做一样的菜,这两个厨师就是 集群 。这样两个厨师集群确实能做更多的活,客人点10个菜可以分配每个人抄5个,单个厨师压力减少了。但是这样还不行,为了让厨师专心做菜,把菜做得更好,于是饭店又请来了采购和配菜师,采购负责买菜,配菜师负责把菜挑拣洗好切好给厨师做好准备,那么采购、配菜师、厨师之间就行程了 分布式系统 。后来一个采购和一个配菜师也忙不过来了,于是又再请多了个采购和配菜师,那么两个采购又形成了集群,两个配菜师也形成了集群,同样两个厨师也还是集群,这样多个集群一起就行程了 分布式集群系统 。
分布式和集群的关系:
分布式主要的功能是将我们的系统模块化,将系统进行解耦,方便我们的维护和开发。但是其并不能解决并发问题,也无法保证我们的系统在服务器宕机后的正常运转。
集群恰好弥补了分布式的缺陷,集群,就是多个服务器处理相同的业务,一方面可以解决或者说改善我们系统的并发问题,另一方面可以解决我们服务器如果出现一定数量的宕机后,系统仍然可以正常运转。
2. 为什么要用分布式?为什么要用集群?
为什么用分布式?
传统的项目中我们将各个模块放在一个系统中,系统过于庞大,开发维护困难,各个功能模块之间的耦合度高,无法针对单个模块进行优化。而使用分布式架构将系统模块化,便于我们的维护和开发。
为什么用集群?
项目如果部署在一台Tomcat上,所有的请求都由这一台服务器处理,会存在很大风险:
- 单台服务器并发处理能力有限。(一般单台服务器处理的并发量为250左右,超过250,可能会出现数据丢失,链接不稳定的情况)
- 使用单台服务器,一旦服务器故障,整个服务就无法访问了。
- 单台服务器计算能力低,无法完成复杂的海量数据计算。
集群是是指将多台服务器集中在一起,每台服务器都实现相同的业务,做相同的事情。但是每台服务器并不是缺一不可,存在的作用主要是缓解并发压力和单点故障转移问题。
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。
以上是关于分布式集群的主要内容,如果未能解决你的问题,请参考以下文章
03_Apache Pulsar的Local与分布式集群构建Pulsar的分布式集群模式Pulsar的分布式集群模式构建启动测试