集群/分布式/SOA

集群

  1. 维基百科

    计算机集群简称集群是一种计算机系统,它通过一组松散集成的计算机软件和/或硬件连接起来高度紧密地协作完成计算工作。在某种意义上,他们可以被看作是一台计算机。集群系统中的单个计算机通常称为节点,通常通过局域网连接,但也有其它的可能连接方式。集群计算机通常用来改进单个计算机的计算速度和/或可靠性。一般情况下集群计算机比单个计算机,比如工作站或超级计算机性能价格比要高得多

  2. 特点
    1. 通过多台计算机来完成一个工作,达到更高的效率

    2. 两机或多机内容和工作过程完全相同,如果一台死机还有另外的可以进行使用

  3. 白话文讲解集群(对于服务而言)
    1. 我们开发的秒杀项目里面有几种一摸一样,功能也一致的服务,这种情况叫做集群
    2. 背景讲解
      1. 当我们的项目在一台差不读配置的服务器上部署,当有一天我们的服务器开始大批量的进入访问量,这个时候我们服务器的访问变得很慢,所以PopDemo准备再买一台服务器,将我们的项目部署到上面

      2. 特点
        1. 两个服务器同时去运行同一个项目
      3. 好处
        1. 我们之前是一个服务器而言,所有的压力都在这一个服务器上面,当我们两个服务器同时去部署这个项目时,分担了访问的压力,大大的提高了我们的质量
  4. 集群:同一个业务,部署在多个服务器上(不同的服务器运行同样的代码,干同一件事)

分布式

  1. 维基百科

    分布式系统是一组计算机,通过网络相互连接传递消息与通信后并协调它们的行为而形成的系统。组件之间彼此进行交互以实现一个共同的目标

  2. 白话文理解
    1. 当我们的项目部署到两个服务器上后我们发现,访问量还是不停的上增,我们的访问也愈来愈慢,不可能再去买一个服务器跑吧,我们开始追究项目问题,当我们发现所有的服务都在一个tomcat上运行着,这么高的访问量怎么弄的快
    2. 解决
      1. 我们可以直观的发现有些服务的访问量是很低的,所以我们打算抽象独立出来
        1. 将我们访问量高的服务拿配置好一点的服务器来跑
        2. 访问量低的我们拿差的服务器装着
    3. 好处
      1. 资源合理利用
        1. 我们访问量高的使用高配置的服务器吗
      2. 耦合度降低
        1. 我们将我们模块抽象独立出来,大大的降低了我们代码之间的耦合度
  3. 特点
    1. 我们将项目的服务进行模块化的拆分,之后再组合起来就是个完美的系统
  4. 好处
    1. 拆分成模块化后,我们模块之间的各做各的事情,便于扩展
    2. 高吞吐量
      1. 某个任务需要一个机器运行10个小时,将该任务用10台机器的分布式跑(将这个任务拆分成10个小任务),可能2个小时就跑完了

分布式:一个项目拆分为多个子模块,部署在不同的服务器上(不同的服务器,运行不同的代码,干着同一件事)

集群/分布式
集群和分布式不冲突,还可以有分布式集群

​ 现在PopDemo的公司规模变大了,有5个小伙子写Java,4个小伙子写前端,2个小伙子做测试,1个小伙子做DBA。

  • Java,前端,测试,DBA的关系看作是分布式的
  • 5个Java看作是集群的(前端,测试同理)…
微服务/分布式/SOA

​ 我认为分布式和微服务/SOA这三个是差不多的,只不过微服务更+1吧

2.CAP理论

前言

​ 对于我们上面分布式概念我们已经很大的清楚,简答的理解也就是说,将一个业务拆分为多个子业务,一个业务部署在不同的的服务器上

  • 一个子业务称之为一个结点

首先我们看一下CAP是什么,他们分别代表着什么

  1. C:数据一致性(consistency)
    1. 所有的数据都拥有数据的最新版
  2. A:可用性(availability)
    1. 数据具有高可用性
  3. P:分区容错性(partition-tolerance)
    1. 容忍网络出现分区,分区之间的网络不可达

下面是三个节点(它们是集群的)此时的三个节点可以相互通信

img
  • 由于我们的系统是分布式的,节点之间的通讯交流是通过我们的网络来进行的。只要是分布式系统,那就有可能发生一种情况:因为一些故障,使得我们节点之间不能进行通信了,整个网络也就分成了几部分
  • 数据分散在不连通的区域中,这叫分区

img
  • 出现网络分区后,ok,现在有一个用户请求注册,请求打了进来

    img
  • 这个时候我们有几个抉择

    • 如果允许当前用户进行注册,此时记录数据的是由节点一和节点二或者是节点二和节点三,因为节点一和节点三的之间是不通信的
      • 这种情况也就是选择了可用性(availability),同时抛弃了数据一致性(consistency)
    • 如果不允许当前用户进行注册(也就是要等节点一和节点三回复通信),节点一和节点三以但通信,我们也就直接的保证了数据的一致性
      • 这种情况也就抛弃了可用性(availability),选择了数据一致性(consistency)

ok,再梳理一下CAP理论

一般来说我们的分布式系统,P:分区容错性(partition-tolerance)这个是必须的,是具有一定的客观性存在性

CAP是无法完全兼顾的,在上面举的例子中,我们可以选择Ap,也可以选择CP,但是一定要注意,不是说选择了AP,C就直接完全抛弃了,不说选了CP,A也就完全抛弃了

在CAP中C所表示的一致性是强一致的(每个节点的数据都是最新版的),其实一致性还有其它版本的

  • 弱一致性
    • 对于强一致性而言,它不能保证总能得到最新的值
  • 最终一致性
    • 放宽对其时间的要求,在被调完成操作响应后的某个时间点,被调多个节点的数据最终达成一致

参考至:JAVA3y

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值