分布式系统的介绍(2)--分布式系统&中间件从入门到精通(二)

本文涉及的产品
服务治理 MSE Sentinel/OpenSergo,Agent数量 不受限
Serverless 应用引擎免费试用套餐包,4320000 CU,有效期3个月
注册配置 MSE Nacos/ZooKeeper,118元/月
简介: 分布式系统的介绍(2)--分布式系统&中间件从入门到精通(二)

上篇文章我们说了分布系统存在的意义,基础的线程进程运行模式,进程之间内存是相互独立的,多线程是在进程内部,共享同一个进程里的内存,进程之间也可以共享对象,但是就有了序列化和反序列化的开销。网络通信知识有BIO/NIO/AIO、java通常用的NIO非阻塞,把出现的事件交给event handler处理,不需要一个socket分配一个线程,一个线程可以处理多个socket套接字工作。

分布式系统的介绍(1)--分布式系统&中间件从入门到精通(一)

前面提到了计算机由五个部分组成,输入设备,CPU(运算、控制器),外存/内存,输出设备,那么大型分布式是不是也可以从这个维度来分析呢。


输入设备的变化


分布式系统由多个单节点组成,那么输出设备可以看做两种,一种是互相连接的多个节点,一个节点向另一个节点发送数据,那么这个发送数据的节点就是输出设备,另一种就是传统意义上的人机交互,输入设备。


输出设备的变化


和输入设备变化类似,一种就是多个节点相互连接的情况下,一个节点接收另一个节点发送的数据,那么这个接收数据的节点就是输入设备,另一种就是传统意义上的人机交互,输出设备。


控制器的变化


在单个机器中,控制器和运算器都在cpu中。在分布式系统中,则控制器指的是分布式系统中如何由多个节点通过网络连接在一起并通过消息的传递进行协调的系统,控制器主要作用就是协调或者控制节点之间接收或者传输信息的动作。

第一种:可以使用硬件负载均衡器来完成,请求发起方和请求处理方中有一个硬件负载均衡器设备,所有的请求和接收都会通过这个负载均衡器来控制,这是一种控制方式。

第二种:如果换成软件负载均衡也是可以的,比如换成LVS,这种方式的特点是代价低,可控制性强,即你可以想对自由的按照自己的需求去增加负载均衡策略。

上面这两种方式称为透明代理。在集群中,这种对于请求方和发起方都是透

的,他们只需要在负载均衡设备/负载均衡软件把消息发送/接收,发起消息方不用关系有多少台服务器提供服务,也不需要提供服务的地址。但这种方式有两点不足,一方面会增加服务器的开销,开销指流量的开销,还有延迟的开销(实际使用的时候延迟影响很小)。另一不足就是这个透明代理是处于必经之路,当代理出现宕机的时候,则会出现所有请求不能发送的场景,这种时候我们则需要考虑代理服务器热备份。不过在切换的时候请求还是会受到影响。

第三种:名称服务。名称服务跟透明服务最大的区别就是,请求发起和请求处理方中间没有代理服务,而是通过名称服务来获取需要发送的ip服务名称,或者通过名称服务爱获取需要接受的ip服务名称。这样当服务名称机器宕机的时候,可以给他一个默认的ip来直接连接请求处理的服务。所以这个优点就是当名称服务宕机的时候,我们有很多办法可以保证请求处理正常。缺点就是代码升级比较复杂,需要处理当名称服务宕机的时候业务逻辑。

第四种:规则服务。这个和名称服务类似,不需要通过负载均衡,直接请求者与发送者直接连接,那么请求发起如何获取请求处理的ip呢,则是通过规则服务的机器来负载均衡获取的。这种情况下,请求发起方和规则服务来进行交互就好,来实现负载,请求处理服务不需要与规则服务交互。

第五种:Master+Worker。这种方式是存在一个master节点来管理任务,由master把任务分配给不同的worker去进行处理。这种方式和前面场景不太一样,主要是任务分配和管理。


运算器的变化


在单机系统中,运算器具体的电子元件,而在分布式系统中,运算器由多个节点来组成的,计算机的单机能力又上线,而分布式系统中运算器运用多个节点的计算能力来完成任务。

首先我们如果有10个用户,10个用户全部访问单个服务器,压力太大,所以这时候就增加多个网站服务来增加运算,那么如何保证他们能负载均衡访问呢,通过DNS服务器进行调度和控制。

在日志的处理有一个经典的场景,当一个日志服务需要处理太多其他服务的日志,这时候就需要增加日志的服务器,这时候可以用前面说的master+worker解决,或者用规则服务器来解决。


存储器变化


传统的单机模式会吧存储器分为内存和外存,内存在系统宕机后就会消失,外存的数据则会持久化,当然也不会是绝对就吃华可靠的,在分布式系统中,我们需要把承担存储的多个节点组织起来,最基础的是key-value场景存储。

如果需要负载均衡则需要采用名称服务或者规则服务来使用,当然也可以用master-worker来分配使用。


分布式的难点


在单机系统中,程序就以自己机器上的时钟为准,那么分布式的情况下,怎么控制呢,每个节点都有字节的时钟,在消息相互发送进行协调时候,如果依赖时钟,则相对难处理。这个问题首先想到的解决办法是保证每个节点的时间一致,当然如果能保证是最好的,但是这个方法本身没有办法实现,因为同步的时候本身就存在时间差,但有的时候,我们需要区分两个动作的先后顺序,而不是一定要知道准确的时间,这种情况,我们可以把工作交给单独的集群来解决。

面对故障独立性,分布式系统由多个节点组成,整个分布式完全出问题的概率是存在的,但多数情况都是出现某个节点不可用,但是其他节点还可以用,在单机的情况下,如果我们不使用多进程的方式,基本不会遇到独立障碍,只要出现机器问题或者OS问题或者程序bug,就会直接整体不可用,但是分布式会出现单个节点不可用而不影响整体使用,这时候就要找出相对应的哪个节点故障。

那发生了单点故障之后,也就是SPoF(Single Point of Failure)。我们需要在分布式系统中尽量避免出现单点故障,避免单点的关键就是把单点编程集群,当然这种比较困难,如果不能把单点部署成集群有另外两种办法。1、给这个单点做个容灾备份,手动恢复,尽量做成自动恢复,减少恢复时间。2、降低故障影响范围。可以把数据库拆分成多份,这样其中一个数据库出现故障,另一个数据库还能访问其他的数据,这样影响范围降低。但是一台数据库拆分成多台之后,会增加出故障的次数和时间,本质上这种方式更多是转移和交换故障。

分布式事务挑战,单机的分布式很好解决,但是不同节点之间的事务回滚就比较难实现,大家或许都听过2pc两阶段提交的缺陷,最终一致性,cap理论等,这些在后面会做详细介绍。

相关实践学习
SLB负载均衡实践
本场景通过使用阿里云负载均衡 SLB 以及对负载均衡 SLB 后端服务器 ECS 的权重进行修改,快速解决服务器响应速度慢的问题
负载均衡入门与产品使用指南
负载均衡(Server Load Balancer)是对多台云服务器进行流量分发的负载均衡服务,可以通过流量分发扩展应用系统对外的服务能力,通过消除单点故障提升应用系统的可用性。 本课程主要介绍负载均衡的相关技术以及阿里云负载均衡产品的使用方法。
相关文章
|
3月前
|
存储 缓存 监控
分布式链路监控系统问题之kywalking在后期维护过程中可能会遇到中间件版本升级的问题如何解决
分布式链路监控系统问题之kywalking在后期维护过程中可能会遇到中间件版本升级的问题如何解决
|
3月前
|
存储 SQL 分布式数据库
OceanBase 入门:分布式数据库的基础概念
【8月更文第31天】在当今的大数据时代,随着业务规模的不断扩大,传统的单机数据库已经难以满足高并发、大数据量的应用需求。分布式数据库应运而生,成为解决这一问题的有效方案之一。本文将介绍一款由阿里巴巴集团自主研发的分布式数据库——OceanBase,并通过一些基础概念和实际代码示例来帮助读者理解其工作原理。
302 0
|
26天前
|
消息中间件 关系型数据库 Java
‘分布式事务‘ 圣经:从入门到精通,架构师尼恩最新、最全详解 (50+图文4万字全面总结 )
本文 是 基于尼恩之前写的一篇 分布式事务的文章 升级而来 , 尼恩之前写的 分布式事务的文章, 在全网阅读量 100万次以上 , 被很多培训机构 作为 顶级教程。 此文修改了 老版本的 一个大bug , 大家不要再看老版本啦。
|
2月前
|
Dubbo Java 应用服务中间件
分布式-dubbo的入门
分布式-dubbo的入门
|
3月前
|
机器学习/深度学习 并行计算 PyTorch
PyTorch与DistributedDataParallel:分布式训练入门指南
【8月更文第27天】随着深度学习模型变得越来越复杂,单一GPU已经无法满足训练大规模模型的需求。分布式训练成为了加速模型训练的关键技术之一。PyTorch 提供了多种工具来支持分布式训练,其中 DistributedDataParallel (DDP) 是一个非常受欢迎且易用的选择。本文将详细介绍如何使用 PyTorch 的 DDP 模块来进行分布式训练,并通过一个简单的示例来演示其使用方法。
285 2
|
3月前
|
运维 安全 Cloud Native
核心系统转型问题之分布式数据库和数据访问中间件协作如何解决
核心系统转型问题之分布式数据库和数据访问中间件协作如何解决
|
3月前
|
运维 负载均衡 算法
“分布式基础概念”全面解析,让你秒懂分布式系统!【一】
该博客文章全面解析了分布式系统的基础概念,包括微服务架构、集群与分布式的区别、节点定义、远程调用、负载均衡、服务注册与发现、配置中心、服务熔断与降级以及API网关,帮助读者快速理解分布式系统的关键组成部分和工作原理。
“分布式基础概念”全面解析,让你秒懂分布式系统!【一】
|
3月前
|
存储 NoSQL MongoDB
(四)成为分布式高手必经之路:理解那些工作在分布式系统底层的一致性模型
在分布式领域里,一致性成为了炙手可热的名词,缓存、数据库、消息中间件、文件系统、业务系统……,各类分布式场景中都有它的身影,因此,想要更好的理解分布式系统,必须要理解“一致性”这个概念。本文就展开聊聊 分布式系统里的一致性模型。
|
3月前
|
前端开发 中间件 索引
Django入门到放弃之中间件
Django入门到放弃之中间件
|
3月前
|
存储 中间件 PHP
Python编程入门:从零到一的代码实践深入理解 PHP 中的中间件模式
【8月更文挑战第28天】本文旨在通过浅显易懂的方式,向初学者介绍Python编程的基础知识,并结合具体代码示例,带领读者一步步实现从零基础到能够独立编写简单程序的转变。文章将围绕Python语言的核心概念进行讲解,并通过实例展示如何应用这些概念解决实际问题。无论你是编程新手还是希望扩展技能的专业人士,这篇文章都将为你打开编程世界的大门。 【8月更文挑战第28天】在PHP的世界中,设计模式是构建可维护和可扩展软件的重要工具。本文将通过浅显易懂的语言和生动的比喻,带领读者深入理解中间件模式如何在PHP应用中发挥魔力,实现请求处理的高效管理。我们将一步步揭开中间件的神秘面纱,从它的定义、工作原理到