分布式系统概念扫盲

什么是分布式软件系统?分布式软件系统是什么意思?


分布式软件系统(Distributed Software Systems)是支持分布式处理的软件系统,
是在由通信网络互联的多处理机体系结构上执行任务的系统。
它包括分布式操作系统、分布式程序设计语言及其编译(解释)系统、分布式文件系统
和分布式数据库系统等。

分布式操作系统负责管理分布式处理系统资源和控制分布式程序运行。
它和集中式操作系统的区别在于资源管理、进程通信和系统结构等方面。

分布式程序设计语言用于编写运行于分布式计算机系统上的分布式程序。
一个分布式程序由若干个可以独立执行的程序模块组成,
它们分布于一个分布式处理系统的多台计算机上被同时执行。
它与集中式的程序设计语言相比有三个特点:分布性、通信性和稳健性。

分布式文件系统具有执行远程文件存取的能力,并以透明方式对分布在网络上的
文件进行管理和存取。

分布式数据库系统由分布于多个计算机结点上的若干个数据库系统组成,
它提供有效的存取手段来操纵这些结点上的子数据库。
分布式数据库在使用上可视为一个完整的数据库,
而实际上它是分布在地理分散的各个结点上。
当然,分布在各个结点上的子数据库在逻辑上是相关的。


分布式系统的几个重要特性

从使用分布式系统的用户所关心的主要问题出发,我们可以看出分布式系统的
具有以下几个重要特征。

1) 高稳定性

分布式系统的用户获取服务的请求随时随地都有可能发生。所以,
我们需要分布式系统一年365天7*24小时随时给用户提供服务,
分布式系统的稳定性要求非常高。
如果系统的稳定性不好,经常发生宕机事故,将会伤害到用户的忠诚度。


2) 高可用性

什么是高可用?这个概念在分布式系统中是一个非常重要的概念。
高可用是指,当系统发生了不可抗拒的灾难(例如机房断电,火灾等)以后,
能快速恢复服务的能力。通常来说,也就是双机热备。
当系统的一部分设备发生灾难以后,能使服务快速、无缝的切换到备份集群上,
使用户几乎感受不到灾难的发生。


3) 高可扩展

一般来说,分布式系统要求能承载海量的数据,而且要求运行相当长的时间。
而物理设备的空间、容量和性能是一定的。
对于一家不断发展的公司而言,用户的数据量却是不断增长的。
在系统运行了一段时间以后,往往会受到物理设备的局限,
例如,物理设备的总硬盘空间不够,或者物理设备的总运算能力不够,
或者网络吞吐能力不足等局限。
一般来说,架构设计合理的分布式系统,是可以通过增加物理设备以
实现增加系统服务能力的,例如用户并发量,系统数据吞吐量,
系统数据总容量等。如果不能做到这一点,那么系统的可扩展性到达极限,
可能需要对系统进行重新设计。
然而,总体来说,分布式系统的扩展性是相对的,不是无限的。


4) 高可管理

我们知道,分布式系统需要持续运行相当长的时间。
通常来说,系统运行的时间越长,宕机的风险也就越大。
从概率统计的观点来看,我们很容易理解这一点。
正如我们都知道,飞机的出事故的概率是很低的,然而长时间运行无故障以后,
发生事故的概率就会明显上升。
因此,停机检修成为了降低故障率的一个重要措施。分布式系统也一样。
我们需要在相对稳定的系统运行了一段时间以后,分集群对服务器进行检修,
这里就涉及到系统的可管理性。这里需要强调的是,系统检修不等于停止服务。
对于分布式系统,我们需要始终坚持的一个原则是一年365天7*24小时提供服务。
系统的可管理性可以分为两种,一种是故障发生时的管理;一种是故障发生前的管理。
故障隔离属于发生故障时的管理;而系统检修则是故障发生前的管理,即事前管理。
我们希望做到事前管理。

那么,如何才能做到事前管理呢?由于系统具有高可用性,我们可以实现对系统的检修。
例如,如果我们的分布式系统采用的是主辅集群设计,通常情况下,
辅集群是不对外提供服务,而只是备份用的,那么这时候,
我们可以将用户流量切换到辅集群上,关闭主机群的服务,对主集群的系统进行检修,
排除一些隐患和故障以后,重新开启主机群的服务,将用户流量切换到主集群。
这个是采用主辅集群轮换的方式实现系统检修的。当系统流量非常大的时候,
这种做法的风险非常大,主要原因是,在用户流量的切换过程中,
瞬间的流量冲击太大,容易出现问题。

还有一种比较好的方式是局部检修。如果系统设计采用的是局部对等的小集群设计,
我们可以先将某一个小集群(例如20台服务器)挂起
(系统挂起指的是保持老用户的服务功能,拒绝为新的用户提供服务),
等待该集群的用户切换到其他的对等的小集群上,当切换完成后,
就可以对该小集群的服务器进行检修。这样做的好处在于切换过程中,用户流量小,
避免了大流量冲击的风险。


5) 高并发性

高并发性是一个相对比较容易理解的概念,即系统在单位时间内能同时接受和
处理的请求数量。高并发性也是分布式系统的一个基本要求。
然而,承载着不同应用的不同分布式系统,对于并发设计的要求也是有很大差异的。
一般来说分为两种情况:一种情况,需要对会话过程进行保持(session保持),
即,当用户与分布式系统的连接断开以后,需要重新连回到分布式系统内部
原来分配给用户提供服务的设备上;
另一种,不需要对会话过程进行保持,也就是说,用户与分布式系统内部的某
一物理设备连接断开后,重新连接到分布式系统内部的任意物理设备也能提供正确的服务。

一般来说,解决高并发问题,核心的设计是负载均衡。
在某一个时刻,单一物理设备的处理能力是有限的。
将用户流量、用户的并发请求合理的分配到更多的物理设备上,
是解决高并发问题的基本方法。负载均衡算法(有很多种)往往也是分布式系统
测试的核心内容。


6) 数据一致性

分布式系统具有硬件设备分布式零散性的特点,内部数据的一致性也是非常重要的。
数据的时效性对于用户来是非常重要的。
然而,这也是分布式系统设计中需要解决的一个难题。
对于海量数据和跨地域数据同步来说,则更加困难。
首先,我们要保证数据同步的正确性;
其次,我们需要保证数据同步的高效性,即在足够短的延时中完成数据同步。
由于分布式系统可能存在地域分散的特点,区域间的固定延时(RTT)
将是分布式系统设计的一个难题。


一个典型的分布式系统的应用

在分布式系统的应用中,下图描述的是一个典型的应用。A公司的用户遍布全球各地,
该公司在全球分别设有多个IDC数据服务中心(例如:纽约、北京、东京等)。
某北京用户Jennifer一直在北京使用A公司的数据服务,
并且保存了相当多的文档和数据等。
由于工作需要,Jennifer到纽约出差,需要使用A公司的数据服务,
使用以前保存的文档和数据。这时,Jennifer使用到的数据服务将由A公司部署
在纽约的数据服务器提供。


image.png


分布式操作系统有哪些?


分布式操作系统是一种特殊的操作系统,它将计算机系统划分为多个独立的计算单元
(也称为节点),这些节点被部署到不同的计算机上,并通过网络连接,
保持着持续的通信状态。以下是对分布式操作系统的一些具体实例和特点的归纳:


分布式操作系统的实例

虽然直接列举特定的分布式操作系统名称可能不如传统操作系统(如Windows、Linux)
那样直观,但我们可以从概念上理解一些常见的分布式系统或框架,
它们通常基于分布式操作系统的理念构建:


LAXCUS分布式操作系统:

这是一个具体的分布式操作系统示例,它采用松耦合架构,支持并行处理、容错处理、数据一致性、资源管理等关键功能。

它通过多模通信网络实现节点间的通信,支持大规模计算任务。

Hadoop:

虽然Hadoop本身不是一个传统意义上的操作系统,
但它是一个广泛使用的分布式系统基础架构,用于大数据处理。

Hadoop的HDFS(Hadoop Distributed File System)是一个分布式文件系统,
而YARN(Yet Another Resource Negotiator)则负责资源管理和作业调度,
这些都可以看作是分布式操作系统的一部分功能。


Kubernetes:

Kubernetes是一个开源的容器编排平台,用于自动化部署、扩展和管理容器化应用程序。

它虽然不直接被视为一个操作系统,但提供了类似操作系统的资源管理、
进程调度和故障恢复等功能,在分布式环境中扮演着重要角色。

分布式操作系统的特点

模块化:

分布式操作系统采用模块化的设计思想,将系统划分为多个功能模块,
每个模块负责完成特定的任务。

这种设计使得系统更加易于维护和升级。

并行处理:

分布式操作系统支持多种并行处理模型,如共享内存模型、消息传递模型和
客户机/服务器模型等。

这些模型可以充分利用多核处理器的性能,提高系统的处理能力。

容错能力:

分布式操作系统具有较强的容错能力,可以在节点出现故障时自动恢复。

这主要依赖于分布式系统中的冗余设计和故障检测与诊断机制。

数据一致性:

分布式操作系统需要保证数据在各个节点之间的一致性。

这通常通过使用事务、锁和协调器等技术来实现。

资源管理:

分布式操作系统需要对系统中的硬件资源进行有效的管理,包括内存、
磁盘空间和CPU时间等。

这通常通过使用资源调度算法和优先级调度策略等技术来实现。



分布式程序设计语言有哪些?


分布式程序设计语言是指那些特别适用于开发分布式系统或应用的编程语言。
这些语言通常具备跨平台、高并发、网络通信能力强等特点,
以满足分布式系统对性能、可靠性和可扩展性的要求。
以下是一些常见的分布式程序设计语言,按照您的要求进行分类和归纳:


1. Java

优势:跨平台、稳定、安全、高性能。

应用场景:大数据处理、微服务架构、企业级应用开发。

特点:Java拥有成熟的生态系统和丰富的第三方库,如Hadoop、Spring Cloud等,
支持分布式计算和微服务架构。

2. Python

优势:简洁的语法、丰富的库支持、易于学习。

应用场景:数据科学、机器学习、Web开发。

特点:Python在分布式系统中的应用广泛,尤其是在数据科学和机器学习领域。
同时,它也支持Web开发,如使用Django或Flask框架构建分布式Web应用。


3. Go(Golang)

优势:简洁的语法、高性能、并发支持。

应用场景:微服务架构、高并发处理。

特点:Go语言特别适用于构建高性能的分布式系统,其内置的goroutine和
channel机制简化了并发编程。
同时,Go语言的跨平台特性和高效的编译器也简化了分布式系统的开发和部署。

4. Node.js

优势:高性能、轻量级、事件驱动。

应用场景:Web开发、实时通信。

特点:Node.js基于V8引擎,提供了高性能的JavaScript运行环境。
它特别适用于构建需要高并发和实时交互的Web应用,如实时聊天应用、在线游戏等。

5. Erlang

特点:Erlang特别适合构建高可靠性和容错性的系统。它通过轻量级的进程
(不同于操作系统的进程)和进程间的消息传递机制,构建了一个弹性的系统架构。

6. Scala

特点:Scala是一种多范式的编程语言,将面向对象和函数式编程特性融合于一体。
它运行在Java虚拟机(JVM)上,能够很好地与现有的Java库和框架进行集成。
Scala在分布式存储系统中的一个优势在于它强大的并发模型,
特别是通过使用Akka框架,可以构建高效、可伸缩的并发应用程序。

7. Rust

特点:Rust特别注重安全性,特别是内存安全。通过所有权(ownership)、
借用(borrowing)、生命周期(lifetimes)等机制,
Rust能够在编译期间避免数据竞争和悬挂指针等问题。
这在分布式存储系统中尤为重要,因为数据的完整性和安全性是系统设计的核心。

总结

分布式程序设计语言的选择取决于具体的应用场景和开发团队的技术栈。
上述语言各自具有独特的优势和特点,适用于不同的分布式系统或应用。
例如,Java和Go在微服务架构和高并发处理方面表现出色;
Python在数据科学和机器学习领域具有广泛应用;
Node.js则特别适用于需要高并发和实时交互的Web应用。
在选择分布式程序设计语言时,应综合考虑语言特性、生态系统、开发效率等因素。


分布式数据库有哪些?

分布式数据库是将数据分散存储在多个节点上的数据库系统,
它通过网络连接进行数据通信和交换,并由一个或多个管理节点协调各个
节点之间的数据访问。
以下是一些常见的分布式数据库,按照不同的方向和特性进行分类和归纳:


一、按应用场景分类

物联网方向

时序数据库:这类数据库主要用于满足IoT数据的收集、存储和统计需求。例如:

InfluxDB

Kudu

kdb

OpenTSDB

交易关系方向

这些数据库主要替代传统交易关系型数据库产品,以应对海量吞吐、
并发、交易和存储需求。例如:

蚂蚁金服OceanBase(近年来持续领先,服务金融、运营商等行业)

腾讯TDSQL

热璞HotDB

中兴GoldenDB(在金融领域有广泛应用)

开源MyCAT

开源Cobar

分析关系方向

解决结构化数据存储和数据分析的业务场景。例如:

Greenplum

Vertical

Gbase8a


KV分析方向

基于Hadoop、Spark等基石进行二次研发,特别是兼容SQL标准语法的数据库。


KV文档方向

解决在线文档类型的非结构化数据存储和数据处理。例如:

MongoDB

巨衫SequoiaDB

二、按架构和特性分类

虽然这一分类不是直接基于应用场景,但了解分布式数据库的架构和特性对于
选择和使用分布式数据库同样重要。


集中式分布式数据库

将整个分布式数据库的管理权交由一个节点负责,其他节点只负责存储数据。
特点是管理简单、易于维护,但存在单点故障问题。

对等式分布式数据库

各个节点之间没有主从关系,每个节点都可以独立地提供服务。
特点是具有较好的可扩展性和容错性,但管理复杂度较高。

混合式分布式数据库

综合了集中式和对等式两种分布式数据库的优点,同时具备较好的可扩展性和容错性,
也相对易于管理和维护。

三、市场排名和流行度

根据最新的市场排名和流行度,一些分布式数据库在特定领域和场景中表现出色,
如OceanBase在金融和运营商行业的广泛应用,以及TiDB在数据库排行榜中的上升势头。


四、总结

分布式数据库的选择应根据具体的应用场景、性能需求、可扩展性、
可靠性以及生态系统的成熟度等因素综合考虑。
不同的分布式数据库在各自擅长的领域和场景中发挥着重要作用。


本文出自勇哥的网站《少有人走的路》wwww.skcircle.com,转载请注明出处!讨论可扫码加群:
本帖最后由 勇哥,很想停止 于 2024-07-02 11:58:46 编辑

发表评论:

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。

会员中心
搜索
«    2025年4月    »
123456
78910111213
14151617181920
21222324252627
282930
网站分类
标签列表
最新留言
    热门文章 | 热评文章 | 随机文章
文章归档
友情链接
  • 订阅本站的 RSS 2.0 新闻聚合
  • 扫描加本站机器视觉QQ群,验证答案为:halcon勇哥的机器视觉
  • 点击查阅微信群二维码
  • 扫描加勇哥的非标自动化群,验证答案:C#/C++/VB勇哥的非标自动化群
  • 扫描加站长微信:站长微信:abc496103864
  • 扫描加站长QQ:
  • 扫描赞赏本站:
  • 留言板:

Powered By Z-BlogPHP 1.7.2

Copyright Your skcircle.com Rights Reserved.

鄂ICP备18008319号


站长QQ:496103864 微信:abc496103864