分布式系统详解--基础知识(概论)

简介: 分布式系统详解--基础知识(概论)

分布式系统详解--基础知识(概论)

一、 引言

       由于网上介绍的分布式的系统讲解并没有多少,所以在这儿就希望可以写一套系统的分布式的详解,未来也结合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等的认识,在之后其他篇中,还会讲到分布式架构体系、消息服务。分布式存储的开源框架均有讲到。文章慢慢更新中。。。

目录
相关文章
|
15天前
|
监控 数据可视化 Java
【JAVA】分布式链路追踪技术概论
【JAVA】分布式链路追踪技术概论
26 2
|
1月前
|
监控 数据可视化 Java
【JAVA】分布式链路追踪技术概论
skywalking拥有更加的强大和细粒度的图形监控界面。
41 2
|
2天前
|
NoSQL Redis
redis分布式锁redisson
底层会尝试去加锁,如果加锁失败,会睡眠,自旋加锁,直到获取到锁为止。
9 1
|
1月前
|
NoSQL Java 关系型数据库
【Redis系列笔记】分布式锁
分布式锁:满足分布式系统或集群模式下多进程可见并且互斥的锁。 分布式锁的核心思想就是让大家都使用同一把锁,只要大家使用的是同一把锁,那么我们就能锁住线程,不让线程进行,让程序串行执行,这就是分布式锁的核心思路
444 2
|
14天前
|
NoSQL 算法 Java
探讨redis分布式锁
探讨redis分布式锁
18 1
|
20天前
|
缓存 NoSQL 安全
玩转Redis!非常强大的Redisson分布式集合,少写60%代码
Redisson是Java的Redis客户端,提供实时数据平台服务,简化了分布式环境下的数据管理。它包含RList、RSet、RMap等分布式集合,支持ConcurrentMap和Set接口,确保线程安全和数据一致性。例如,RMap实现了本地缓存和监听器功能,允许数据监听和本地加速读取。此外,还提供了RSet的排序和去重功能,以及RQueue和RBlockingQueue等队列实现,支持阻塞操作。通过Redisson,开发者能轻松处理分布式系统的数据同步和操作。
|
1月前
|
监控 NoSQL 算法
探秘Redis分布式锁:实战与注意事项
本文介绍了Redis分区容错中的分布式锁概念,包括利用Watch实现乐观锁和使用setnx防止库存超卖。乐观锁通过Watch命令监控键值变化,在事务中执行修改,若键值被改变则事务失败。Java代码示例展示了具体实现。setnx命令用于库存操作,确保无超卖,通过设置锁并检查库存来更新。文章还讨论了分布式锁存在的问题,如客户端阻塞、时钟漂移和单点故障,并提出了RedLock算法来提高可靠性。Redisson作为生产环境的分布式锁实现,提供了可重入锁、读写锁等高级功能。最后,文章对比了Redis、Zookeeper和etcd的分布式锁特性。
248 16
探秘Redis分布式锁:实战与注意事项
|
2天前
|
NoSQL Redis
redis分布式锁
在主线程创建分布式锁的时候,创建一个子线程,定时(一定要小于锁过期时间)去延长锁的过期时间,让锁在主线程不退出的情况下,永远不过期。当主线程退出后,子线程也相应退出。
11 0
|
24天前
|
缓存 NoSQL 关系型数据库
【Redis】 浅谈分布式架构
【Redis】 浅谈分布式架构
|
7天前
|
负载均衡 NoSQL 关系型数据库
Redis分布式锁学习总结
Redis分布式锁学习总结
12 0

热门文章

最新文章