集群
维基百科
计算机集群简称集群是一种计算机系统,它通过一组松散集成的计算机软件和/或硬件连接起来高度紧密地协作完成计算工作。在某种意义上,他们可以被看作是一台计算机。集群系统中的单个计算机通常称为节点,通常通过局域网连接,但也有其它的可能连接方式。集群计算机通常用来改进单个计算机的计算速度和/或可靠性。一般情况下集群计算机比单个计算机,比如工作站或超级计算机性能价格比要高得多
特点
白话文讲解集群(对于服务而言)
集群:同一个业务,部署在多个服务器上(不同的服务器运行同样的代码,干同一件事)
分布式
维基百科
分布式系统是一组计算机,通过网络相互连接传递消息与通信后并协调它们的行为而形成的系统。组件之间彼此进行交互以实现一个共同的目标
白话文理解
- 当我们的项目部署到两个服务器上后我们发现,访问量还是不停的上增,我们的访问也愈来愈慢,不可能再去买一个服务器跑吧,我们开始追究项目问题,当我们发现所有的服务都在一个tomcat上运行着,这么高的访问量怎么弄的快
- 解决
- 我们可以直观的发现有些服务的访问量是很低的,所以我们打算抽象独立出来
- 将我们访问量高的服务拿配置好一点的服务器来跑
- 访问量低的我们拿差的服务器装着
- 我们可以直观的发现有些服务的访问量是很低的,所以我们打算抽象独立出来
- 好处
- 资源合理利用
- 我们访问量高的使用高配置的服务器吗
- 耦合度降低
- 我们将我们模块抽象独立出来,大大的降低了我们代码之间的耦合度
- 资源合理利用
特点
- 我们将项目的服务进行模块化的拆分,之后再组合起来就是个完美的系统
好处
- 拆分成模块化后,我们模块之间的各做各的事情,便于扩展
- 高吞吐量
- 某个任务需要一个机器运行10个小时,将该任务用10台机器的分布式跑(将这个任务拆分成10个小任务),可能2个小时就跑完了
分布式:一个项目拆分为多个子模块,部署在不同的服务器上(不同的服务器,运行不同的代码,干着同一件事)
集群/分布式
集群和分布式不冲突,还可以有分布式集群
现在PopDemo的公司规模变大了,有5个小伙子写Java,4个小伙子写前端,2个小伙子做测试,1个小伙子做DBA。
- Java,前端,测试,DBA的关系看作是分布式的
- 5个Java看作是集群的(前端,测试同理)…
微服务/分布式/SOA
我认为分布式和微服务/SOA这三个是差不多的,只不过微服务更+1吧
2.CAP理论
前言
对于我们上面分布式概念我们已经很大的清楚,简答的理解也就是说,将一个业务拆分为多个子业务,一个业务部署在不同的的服务器上
- 一个子业务称之为一个结点
首先我们看一下CAP是什么,他们分别代表着什么
- C:数据一致性(consistency)
- 所有的数据都拥有数据的最新版
- A:可用性(availability)
- 数据具有高可用性
- P:分区容错性(partition-tolerance)
- 容忍网络出现分区,分区之间的网络不可达
下面是三个节点(它们是集群的)此时的三个节点可以相互通信
![img](https://i-blog.csdnimg.cn/blog_migrate/b814ca27dc31eeda8180b3b394d9c0dc.png)
- 由于我们的系统是分布式的,节点之间的通讯交流是通过我们的网络来进行的。只要是分布式系统,那就有可能发生一种情况:因为一些故障,使得我们节点之间不能进行通信了,整个网络也就分成了几部分
- 数据分散在不连通的区域中,这叫分区
![img](https://i-blog.csdnimg.cn/blog_migrate/4284cb63e0ad23e6cf6a74a7486f8a95.png)
出现网络分区后,ok,现在有一个用户请求注册,请求打了进来
这个时候我们有几个抉择
- 如果允许当前用户进行注册,此时记录数据的是由节点一和节点二或者是节点二和节点三,因为节点一和节点三的之间是不通信的
- 这种情况也就是选择了可用性(availability),同时抛弃了数据一致性(consistency)
- 如果不允许当前用户进行注册(也就是要等节点一和节点三回复通信),节点一和节点三以但通信,我们也就直接的保证了数据的一致性
- 这种情况也就抛弃了可用性(availability),选择了数据一致性(consistency)
- 如果允许当前用户进行注册,此时记录数据的是由节点一和节点二或者是节点二和节点三,因为节点一和节点三的之间是不通信的
ok,再梳理一下CAP理论
一般来说我们的分布式系统,P:分区容错性(partition-tolerance)这个是必须的,是具有一定的客观性存在性
CAP是无法完全兼顾的,在上面举的例子中,我们可以选择Ap,也可以选择CP,但是一定要注意,不是说选择了AP,C就直接完全抛弃了,不说选了CP,A也就完全抛弃了
在CAP中C所表示的一致性是强一致的(每个节点的数据都是最新版的),其实一致性还有其它版本的
- 弱一致性
- 对于强一致性而言,它不能保证总能得到最新的值
- 最终一致性
- 放宽对其时间的要求,在被调完成操作响应后的某个时间点,被调多个节点的数据最终达成一致
参考至:JAVA3y