zoukankan      html  css  js  c++  java
  • 分布式与集群理解

    分布式与集群

    • 分布式:

    将任务划分为多份由不同的服务器来处理。分布式是相对于集中式来说的,分布式系统具有更好的可扩展性。某个任务节点的失败不影响其他任务节点的处理。
    比如:有9个人要买车票,去A的3人,去B的3人,去C的3人。购买一张票的处理时间为1分钟,那么一个窗口需要9分钟。采用分布式就是将去A的人分配到A窗口排队买票,将去B的人分配到B窗口排队买票,将去C的人分配到C窗口排队买票,那么只需要3分钟就可以处理完。后来业务增加了,可以购买去D的车票,我只需要开一个D窗口处理就可以了,而不用影响A,B,C窗口的处理。这就是分布式的可扩展性。如果C窗口的售票员生病来不了了,那么乘客就不能买到去往C的车票了。

    • 集群:

    表示可以独立完成某个任务的个体的集合。每个个体都可以处理任务。
    比如:有9个人要买车票,去A的3人,去B的3人,去C的3人。购买一张票的处理时间为1分钟,那么一个窗口需要9分钟。采用集群就是多开几个窗口,每个窗口都可以售票A,B,C。如果业务增加了D,那么窗口A,B,C都要能够处理D的业务。如果C窗口的售票员生病来不了了,那么只是将压力分给了其他几个窗口而已。对业务无影响。

    假如乘客去往A的人数一直比较多,而去往C的人数比较少,那么采用分布式的A售票员不是很累吗,怎么去协调这个资源呢,
    如果采用集群方式处理,那么怎么确保车票A的资源的数据共享呢。每来一个A乘客,售票员都要问下其他人,票还有吗。如果这样的集群单元非常多,也是很耗时间的吧

    解决:我们可以先采用分布式,对于乘客多的A,可以进行集群处理,多开几个窗口出来处理A,另外找一个调度员,专门告诉他们哪里可以买票,哪里人少。
    如果客流继续扩大,车站处理不了了,不能添加窗口了怎么办,有人说对车站升级,扩大,添加窗口不就行了,当然可以。我们还可以另外在建多个这样的售票站是不是也可以做到呢。

    • 从上面的2个例子可以看出

    分布式的优点: 高扩展性,新增业务对原有业务无影响。
    分布式的缺点:也是由其优点决定的,单个处理节点失效将直接导致业务的无法处理,对业务的处理无法做到负载均衡
    集群的优点: 横向扩展,业务量的提升可以通过添加节点解决。
    集群的缺点:业务的改变将影响所有处理节点,也是没有做到负载均衡。资源共享的问题。

    2者结合使用确实解决了,售票员上不了班而不能售票的问题,也解决了增加业务不用所有售票员都要学习新技能的问题。控制客流我们也有调度员,但是资源共享的问题怎么解决呢?办法来了,我们对资源也做集群处理资源E,资源F,都可以出A票,E售票员与F售票员都在处理A票,E售票员从E资源取票,F售票员从F资源取票,那么我来一个监控人员,他来做一个协调,他不停的监控资源E,资源F,如果发现哪个资源票快不够了,那么就将剩下的票重新分配一下。是不是解决了呢。

    今天写了好多字啊。

  • 相关阅读:
    java多线程学习-java.util.concurrent详解(四) Exchanger
    java多线程学习-java.util.concurrent详解(三) Semaphore
    java多线程学习-java.util.concurrent详解(二) CyclicBarrier
    java多线程学习-java.util.concurrent详解(一) CountDownLatch
    MongoDB 入门学习
    Protrator自动化测试(针对Angular 应用的自动化测试)
    Jasmine 编写 JavaScript 测试用例
    记录一下mysql忘记密码重置
    System.Data.DbType的字符串和数据库中字符串类型对应关系
    memcached和mongodb 在windows下安装
  • 原文地址:https://www.cnblogs.com/yun965861480/p/7286376.html
Copyright © 2011-2022 走看看