分布式到底是什么?
随着计算机技术的不断进步,互联网的兴起;我们在工作生活中很容易听到分布式的词藻;那么到底什么才是分布式呢?分布式系统是什么?分布式系统又和集群有什么区别呢?这些问题如果没有详细去查阅很容易困扰我们;接下来我将介绍分布式基本概念的理解与集群的区别。文中并没有长篇累牍的介绍分布式的理论,详细的内容还是需要读者发挥主观能动性去查阅;分布式系统一方面因为使用低廉的PC能够组建强大的系统,但是随着而来的问题也是指数增长的。只有掌握分布式的“道”,才能更深刻理解一系列分布式理论对分布式系统的保驾护航。
分布式的定义
我们常说的分布式概念是相当于单机而言,分布式系统简单来说,就是一组计算机完成同一个任务或者目标而作为一个整体对外服务,对用户或者客户端来说是透明的,它就像一个单机一样; 它具有下面几个特点:
- 多个节点网络通信
- 完成同一任务或者目标
- 对用户或者客户端无感知,作为单机使用
分布式系统的由来
分布式系统的出现是因为单机性能会有瓶颈,不管是CPU还是磁盘容量能力,都会有一个极限;而分布式系统可以很好的进行横向扩展,通过不断的加机器,就能线性提升整个系统的能力;而且还可以具备单机系统无法拥有的高可用特点;
分布式系统解决的问题
当单个系统的的处理能力无法满足日益增长的计算和存储要求时,通过提升单机的CPU和硬盘能力已经得不偿失的时,程序也无法进一步优化,这个时候可以考虑使用采用分布式的方式;因此分布式所解决的问题就是:单机计算和容量瓶颈,可以用低廉的多计算机节点解决;
分布式系统带来的问题和挑战
首先我们考虑上面说到的分布式定义,是多节点计算机通过网络通信为了完成同一目标而组成的整体;因此我们很容易想到,多节点之间的通信会引入新的问题,因为网络通信总会遇到断网、时延高、丢包的情形;如果是提升存储能力,那么分布式存储会带来数据一致性问题;我们在享受分布式系统所带来的优势时也势必引入新的问题,所幸的是,当今我们已经踩在巨人的肩膀上,分布式系统的解决方案已非常成熟。后面章节我们介绍到常见的一些保障分布式系统的理论。
带来的挑战:
- 异构的机器和网络:多个节点的计算机处理、存储能力和网络状况不尽相同,如何平衡多节点之间的协作问题呢;
- 节点的故障:单机出故障的概率是比较小的,可是作为一个系统整体的多节点计算机出现故障概率是指数型增加的。因此,分布式系统不是节点数量越多整体的服务容量越大,系统服务能力和质量是随着机器数量增加边际效应越小;
- 网络的不可靠:网络的不可靠性会导致节点通信的不可靠性;
分布式与集群的区别
集群的定义
多台计算机集合起来实现同一个业务。乍一看似乎和分布式系统的定义有点相像,但实际是分布式强调业务的分散拆分到多台计算机处理,而集群则是同一个业务在多台计算机的上。简单的理解就是,你有1个任务分成10个步骤,分布式是将10个步骤分配到10台计算机上进行处理。而集群则是1个任务都在一台计算机上处理,有10台这样的计算机。
区别
在我们实际的生产环境中,我们是有几十台接口机组成一个集群,每个接口机部署着相同的项目代码。能够实现横向的扩展,当扩展到一定程度的时候,性能瓶颈将不会在接口机而是底层的数据库或者集群;
分布式系统的各个业务节点可以用集群实现;
分布式系统的特性
上面了解到分布式会带来各种各样新的问题,为了解决这类问题。研究人员提出了分布式系统设计的知道思想,常见的CAS、BASE理论,就是我们熟知的分布式理论基础:
- 一致性:分布式中会保留副本的冗余,如何保证master更新,副本进行更新;
- 可用性:服务必须处于一直处于可用的状态,在有限的时间内会访问结果
- 分区容错性:其实说出现了网络故障,仍然需要提供一致性和可用性的服务
一个分布式系统无法保证CAP理论的三者,P是满足的基本要素,必须进行取舍;为了享受分布式带来的益处,分区容错性是不能放弃的;所以目前主要还是AP、CP理论设计的系统;
总结
分布式系统的概念绝不是本文几句能讲清楚的,实际的分布式系统设计会更为复杂;但是只要我们掌握了基础的分布式系统的“道”,那么绝不会迷失在复杂设计的分布式系统中;你明白了它要解决什么问题,才会知道它为什么那么设计。
参考: https://server.zzidc.com/fwqfl/2580.html https://kb.cnblogs.com/page/503317/ https://www.jianshu.com/p/21238ae6107c https://blog.csdn.net/NYfor2017/article/details/105285252
许可协议:CC BY-NC-ND 4.0