重学分布式(二) 我眼中的分布式的轮廓

215 阅读4分钟
其实我学习分布式的时间是很短的, 大概半个月之前学了不到三天之后就放弃了, 然后从前天开始又重新学习了一下分布式, 希望能有新的感悟, 前天也写了一篇入门博客, 但现在在我看来, 这一篇文章写的属实垃圾, 完全就是概念的拼凑(虽然我现在也没有强到哪里去), 其实那天学完之后我也感觉到了, 自己在这方面的道行不够, 很多概念该如何描述我并不知道, 所以我就潜心修炼了两天, 看了许多相关的资料, 至少现在, 分布式系统是什么以及它的一些基本概念已经浮现在我脑海中了, 相关的知识也等日后慢慢地去填充, 去不断丰富这个依稀的轮廓. 现在我就说一说我现在脑中的分布式, 也算是强化一下理解吧!

我们为什么需要分布式系统?

一是因为单机的存储能力不够了, 持久化的数据太大, 单机的硬盘无法存储 一开始我觉得这个不涉及分布式, 只要一个集群就可以解决了, 把数据存到这个集群的节点上不就可以了吗? 但后来一想, 可能还是和分布式系统有关系的, 因为这里面肯定有冗余机制啊, 你要保证一致性啊, 这不就是分布式系统面临的问题吗?

二是由于单机的计算能力不够了, 单个节点的内存以及CPU的处理能力跟不上数据的规模了, 比如对于一些复杂的业务逻辑, 一台机器肯定不够用, 所以我们就要把业务拆开来, 部署到多台服务器上, 这几台服务器甚至都可能是异构的, 而且上面运行的服务也是不同的.那么这个也就是一个分布式系统了, 注意, 如果能在单机上面搞就在单机上面搞, 不然你为了秀技术硬是搞一个分布式系统出来, 那你以后就等着加班加到死吧!

注意: 集群和分布式其实是两个不同的概念, 我之前也搞混了, 相关的区别有一篇博客已经讲解的很清楚了, 我直接贴一个链接就好了

分布式与集群的区别?.

那么分布式系统到底该如何理解呢? 我的理解就是, 把单机上的计算与存储问题扩展到多台机器上, 利用更多的廉价的机器, 处理更多的数据.(大神轻喷)

我觉得分布式的哲学就是: 当你解决了一个问题, 你会引来更多的问题.

就比如说, 我们用分布式系统解决了单点计算能力瓶颈的问题, 但你首先得先将数据进行分片, 将业务进行解耦合, 这不就是一个问题吗?

就算你已经将数据分片到多台机器上了, 但是如果有一台机器坏掉了呢? 这台机器上的数据岂不是就丢失了? 您可能会说可以利用冗余来解决.

好, 那么当我更新了一台节点的数据后, 你怎么保证冗余节点的数据能够同步更新呢?

归根结底, 就是数据的可用性与一致性的问题.

昨天我了解了一下CAP理论, 发现其实要解决的就是CA问题, 因为在需要用到CAP理论的场景下, P是一定会存在的.

为了解决CA问题, 我们又诞生了许多的协议与算法, 比如解决单点故障的问题, 解决去中心化的选举问题, 解决如何在多个节点之间确定变量的值的一致性问题(又分为强一致, 弱一致, 最终一致)等等.

为了解决相关的问题, 市面上也有许多的框架: 比如提供负载均衡的Nginx, 比如提供消息队列服务的Kafka, 再比如提供分布式选举的zookeeper等等, 这些框架现在看起来好像也没那么可怕了!

半个月前学习分布式, 我完全是一头栽在了那些概念里面, 幸好学了两三天就放弃了, 前天重学, 还是一头栽进了概念里面, 幸好写那篇博客的历程让我知道了, 或许这样不可取

而现在, 从全局的角度思考这些, 仿佛轮廓明显了起来, 现在就是如果真要用什么就知道去看什么了, 不会用一头扎进基础概念无法自拔

这篇文章没有任何知识的干货, 网上介绍基础概念的干货文章也不少, 等我以后有这个能力再写, 但现在是肯定没这个能力的! 求轻喷