分布式系统详解--基础知识(概论)
一、 引言
由于网上介绍的分布式的系统讲解并没有多少,所以在这儿就希望可以写一套系统的分布式的详解,未来也结合springboot的搭建分布式系统进行详细构建。也愿意坚持写下去,写给自己也分享给大家,希望大家可以提出宝贵的意见,一同长进。哈哈。。第一篇文章,开个头。
二、分布式定义。
了解起来分布式呢,顺便也介绍一下集群,这两个概念和举例放在这里,让大家更能清楚的认识和知道。
(1)专业术语:
分布式系统:是一个硬件或软件组件分布在不同的网络计算机上,彼此之间仅仅通过消息传递进行通信和协调的系统。
分布式:不同的业务模块部署在不同的服务器上或者同一个业务模块分拆多个子业务,部署在不同的服务器上,解决高并发的问题。
集群:同一个业务部署在多台机器上,提高系统可用性。
(2)举例讲解:
摊煎饼卖煎饼,卖煎饼需要进行三道的工序:准备原料、加工、销售。主人A发现这样一天太累了,根本忙不过来,于是乎招人B准备原料,招人C来帮忙加工,这样主人A就可以之进行销售,B和C呢相对于A来说就是分布式;后来随着销量的增加,B和C忙不过来,又找了B1加入到准备原料,C1加入到加工小组。这样B和B1之间就是集群关系,C和C1之间也是集群关系。B小组和C小组属于分布式关系。
(3)图解更为清晰(网上搜刮的一张)
如果还是不清楚呢?推荐你一篇文章 分布式与集群的区别。
三、 集中式系统和分布式。
如果上面的图解大家已经明白了,那么分布式和集中式也就相应的理解了。
集中式系统:就是指由一台或多台主计算机组成中心节点,数据集中存储于这个中心 节点中,并且整个系统的所有业务单元都集中部署在这个中心节点上,系统所有的功能均由其集中处理。也就是说,集中式系统中,每个终端或客户端及其仅仅负责 数据的录入和输出,而数据的存储与控制处理完全交由主机来完成。
传统的集中式处理模型越来越不能适应人们的需求:
(1)集中式系统如果进行大型项目的开发,改为大型主机,需要很昂贵的财力,这是一笔不小的开支。
(2)集中式系统运行在一台主机之上,如果这台主机出现故障,所有人都要等待这台主机的恢复。对于用户而言,什么也看不到了。
(3)安全度不高。如果被攻击,损失也是最大的。
分布式系统:《分布式系统概念与设计》一书介绍到一个标准的分布式系统在没有特定逻辑的情况下,会表现出来的特性:
(1)分布性
空间中随机分布。这些计算机可以分布在不同的机房,不同的城市,甚至不同的国家。
(2)对等性
分布式系统中的计算机没有主/从之分,组成分布式系统的所有节点都是对等的。在分布式系统最常见的概念之一是副本--数据副本和服务副本。数据副本是指在不同的节点上持久化同一份数据,当某一个节点上存储的 数据丢失时,可以从副本上读取到该数据,这是解决分布式系统数据丢失问题最为有效的手段。服务副本,指多个节点提供同样的服务,每个节点都有 能力接收来自外部的请求并进行相应的处理。
(3)并发性
同一个分布式系统的多个节点,可能会并发地操作一些共享的资源,诸如数据库或分布式存储。
(4)缺乏全局时钟
既然各个计算机之间是依赖于交换信息来进行相互通信,很难定义两件事件的先后顺序,缺乏全局始终控制序列。
(5)故障总会发生
组成分布式的计算机,都有可能在某一时刻突然间崩掉。分的计算机越多,可能崩掉一个的几率就越大。如果再考虑到设计程序时的异常故障,也会加大故障的概率。
(6)处理单点故障
单点SPoF(Single Point of Failure):某个角色或者功能只有某一台计算机在支撑,在这台计算机上出现的故障是单点故障。
当然处理方式可以是采用上面所讲的:集群。
四、如何设计分布式系统。
说白了就是: 如何合理将一个系统拆分成多个子系统部署到不同机器上。
将系统拆分成多个子系统,这就意味着拆分后的系统必然需要通过网络进行互相通信联系。所以通信中的稳定和安全也显得尤为重要。随着业务慢慢的增长,扩展性、可靠性、数据一致性都需要进行考虑。
(1)系统拆分成子系统。这个需要设计师好好设计,将一个大系统拆分成多个小系统,分层次来维护。
(2)设计系统间的通信。在这儿我们可以使用消息中间件,开源框架帮我们解决了这个问题。如Apache ActiveMQ、RabbitMQ、Apache RocketMQ、Apache Kafka等。
(3)设计分布式计算。开源框架有apReduce、Apache Hadoop、Apache Spark 等。
(4)大数据和分布式存储。有Apache HBase、Apache Cassandra、Memcached、Redis、MongoDB等。
(5)分布式监控控制。常用的技术包括Nagios、Zabbix、Consul、ZooKeeper等。
这篇文章对于分布式系统进行了一个大体的讲解,在接下来的文章当中,文章还会继续对分布式有着更深入的讲解和分析,基础篇中会讲到一些关于 线程、通信、一致性、容错性、CPA等的认识,在之后其他篇中,还会讲到分布式架构体系、消息服务。分布式存储的开源框架均有讲到。文章慢慢更新中。。。