其实我学习分布式的时间是很短的, 大概半个月之前学了不到三天之后就放弃了, 然后从前天开始又重新学习了一下分布式, 希望能有新的感悟, 前天也写了一篇入门博客, 但现在在我看来, 这一篇文章写的属实垃圾, 完全就是概念的拼凑(虽然我现在也没有强到哪里去), 其实那天学完之后我也感觉到了, 自己在这方面的道行不够, 很多概念该如何描述我并不知道, 所以我就潜心修炼了两天, 看了许多相关的资料, 至少现在, 分布式系统是什么以及它的一些基本概念已经浮现在我脑海中了, 相关的知识也等日后慢慢地去填充, 去不断丰富这个依稀的轮廓. 现在我就说一说我现在脑中的分布式, 也算是强化一下理解吧!
我们为什么需要分布式系统?
一是因为单机的存储能力不够了, 持久化的数据太大, 单机的硬盘无法存储 一开始我觉得这个不涉及分布式, 只要一个集群就可以解决了, 把数据存到这个集群的节点上不就可以了吗? 但后来一想, 可能还是和分布式系统有关系的, 因为这里面肯定有冗余机制啊, 你要保证一致性啊, 这不就是分布式系统面临的问题吗?
二是由于单机的计算能力不够了, 单个节点的内存以及CPU的处理能力跟不上数据的规模了, 比如对于一些复杂的业务逻辑, 一台机器肯定不够用, 所以我们就要把业务拆开来, 部署到多台服务器上, 这几台服务器甚至都可能是异构的, 而且上面运行的服务也是不同的.那么这个也就是一个分布式系统了, 注意, 如果能在单机上面搞就在单机上面搞, 不然你为了秀技术硬是搞一个分布式系统出来, 那你以后就等着加班加到死吧!
注意: 集群和分布式其实是两个不同的概念, 我之前也搞混了, 相关的区别有一篇博客已经讲解的很清楚了, 我直接贴一个链接就好了
那么分布式系统到底该如何理解呢? 我的理解就是, 把单机上的计算与存储问题扩展到多台机器上, 利用更多的廉价的机器, 处理更多的数据.(大神轻喷)
我觉得分布式的哲学就是: 当你解决了一个问题, 你会引来更多的问题.
就比如说, 我们用分布式系统解决了单点计算能力瓶颈的问题, 但你首先得先将数据进行分片, 将业务进行解耦合, 这不就是一个问题吗?
就算你已经将数据分片到多台机器上了, 但是如果有一台机器坏掉了呢? 这台机器上的数据岂不是就丢失了? 您可能会说可以利用冗余来解决.
好, 那么当我更新了一台节点的数据后, 你怎么保证冗余节点的数据能够同步更新呢?
归根结底, 就是数据的可用性与一致性的问题.
昨天我了解了一下CAP理论, 发现其实要解决的就是CA问题, 因为在需要用到CAP理论的场景下, P是一定会存在的.
为了解决CA问题, 我们又诞生了许多的协议与算法, 比如解决单点故障的问题, 解决去中心化的选举问题, 解决如何在多个节点之间确定变量的值的一致性问题(又分为强一致, 弱一致, 最终一致)等等.
为了解决相关的问题, 市面上也有许多的框架: 比如提供负载均衡的Nginx, 比如提供消息队列服务的Kafka, 再比如提供分布式选举的zookeeper等等, 这些框架现在看起来好像也没那么可怕了!
半个月前学习分布式, 我完全是一头栽在了那些概念里面, 幸好学了两三天就放弃了, 前天重学, 还是一头栽进了概念里面, 幸好写那篇博客的历程让我知道了, 或许这样不可取
而现在, 从全局的角度思考这些, 仿佛轮廓明显了起来, 现在就是如果真要用什么就知道去看什么了, 不会用一头扎进基础概念无法自拔
这篇文章没有任何知识的干货, 网上介绍基础概念的干货文章也不少, 等我以后有这个能力再写, 但现在是肯定没这个能力的! 求轻喷