分布式架构

Siona

分布式架构

分布式是什么?为什么需要分布式?

分布式是指在多台计算机上协同工作的系统,这些计算机通过网络连接在一起,共同完成一个任务。

分布式系统能够有效地解决单台计算机处理能力不足、系统容易宕机、数据存储容量有限等问题,同时能够提高系统的可靠性、可用性和性能,适用于数据量较大、并发量高、访问频繁的场景。此外,分布式系统还可以通过横向扩展的方式提高系统的性能和可靠性,同时降低单点故障的风险,提高了系统的可伸缩性,方便进行升级和维护。

在分布式系统中,由于数据和计算任务被分布在多台计算机上,不同计算机之间需要进行通信和协调,因此需要解决分布式一致性、负载均衡、故障恢复、数据共享和安全等问题,同时需要考虑数据的一致性和可靠性。因此,分布式系统的设计和实现比单机系统更加复杂和困难,需要考虑到多个因素的综合影响。


✅ 什么是分布式 ( what ) ( 想想自己的 Dubbo )
	🔹 三个点
1 -> n : 若干独立计算机组成的集合
		▪ n -> 1 : 这些独立的计算机组合在一起在用户看来是一个系统( 共同完成 1 个任务 )
By Net : 通过网络连接在一起

✅ 为什么分布式 ( why ) ( 想想单点部署的不足,然后取反 )
	🔹 数据量
		▪ 单点部署的方式处理的数据量有上限
		▪ 分布式有更多的计算机,处理的数据量更大并且 "没有上限"
	🔹 安全容错
		▪ 单点部署,一挂全挂
		▪ 分布式系统出现故障,可以保证系统仍能够正常运行
	🔹 拓展性
		▪ 单点部署,资源用完就用完了,想拓展心有余而力不足
		▪ 分布式系统只需要在系统基础上,继续增加新的计算机,可以很方便拓展
	🔹 并发性
		▪ 单点部署:都访问一个服务端
		▪ 分布式系统,相同功能服务端有N,并发量高

✅ 缺点 ( 对着定义 )
1 -> n : 维护成本高(管理1个电脑和管理多台电脑,哪个简单还用想吗?
		▪ n -> 1 : 多台服务器存在数据一致性、可用性问题
By Net :依赖网络,如果网络出现问题,分布式系统将无法正确执行工作

分布式是指将一个大型系统划分为多个独立的子系统,这些子系统可以在不同的物理服务器上运行,它们之间通过网络互相通信,形成一个整体,提供统一的服务。

需要分布式的原因有很多,主要包括以下几点:

可扩展性:分布式系统可以很容易地进行扩展,可以根据需求增加节点,提高系统的性能和吞吐量。
可靠性:分布式系统可以通过冗余和备份机制提高系统的可靠性,当某个节点出现故障时,可以通过其他节点接管任务,保证服务的连续性。
可用性:分布式系统可以通过负载均衡、故障转移等机制提高系统的可用性,当某个节点出现故障时,可以自动切换到其他节点上,避免系统宕机。
性能:分布式系统可以通过将任务分配到不同的节点上并行处理,提高系统的性能和吞吐量。

✅ 现实业务场景中,需要使用分布式系统的场景有很多,例如:
		▪ 电商网站:需要处理大量的并发请求和交易,需要使用分布式系统提高性能和可用性。
		▪ 社交网站:需要处理大量的用户请求和消息,需要使用分布式系统提高性能和可扩展性。
		▪ 在线游戏:需要处理大量的玩家请求和游戏数据,需要使用分布式系统提高性能和可靠性。
		▪ 金融系统:需要处理大量的交易数据和资金流动,需要使用分布式系统提高性能和可靠性。

面试官问到这个问题,主要是想了解面试者对于分布式系统的理解和应用场景,以及对于分布式系统的设计和实现有哪些了解和经验。

集群、分布式、SOA、微服务

雪花算法

数据库实现分布式锁的问题、及解决方案

数据一致性模型

分布式事务?有哪些实现方案?

分布式事务.png
分布式事务.png

TCC 事务模型

ZAB 协议

如何设计一个分布式锁?

CAP 理论

BASE 理论

RPC、RMI

RPCRemote Procedure Call)是一种远程调用协议,允许一台计算机通过网络调用另一台计算机上的服务或方法。它可以让开发人员像调用本地方法一样调用远程方法,将网络通信细节封装起来,提高了分布式系统中各个模块之间的耦合性。


目前常见的 RPC 框架有:

	🔹 Dubbo:阿里巴巴开源的分布式 RPC 框架,支持多种协议和负载均衡策略。
	🔹 gRPC:Google 开源的高性能 RPC 框架,支持多种语言。
	🔹 ThriftFacebook 开源的跨语言 RPC 框架,支持多种传输协议和数据编解码方式。
	🔹 Spring Cloud NetflixSpring Cloud 的子项目之一,提供了基于 Netflix OSS 开源组件的微服务解决方案,包括服务发现、负载均衡、熔断器等功能。

RPC 框架的核心原理是基于网络传输协议实现的远程方法调用。RPC 框架通常由服务提供者和服务消费者两部分组成,服务提供者将本地方法暴露成远程服务,服务消费者通过远程代理对象调用远程方法。


在实现远程方法调用时,需要进行序列化和反序列化操作。序列化将对象转换为二进制数据流,以便于在网络中传输;反序列化则将接收到的二进制数据流转换为对象。


为了提高性能,一些 RPC 框架使用了二进制协议,如 Dubbo 使用的 Hessian2 协议和 gRPC 使用的 Protocol Buffers 协议,与基于文本的协议(如 XMLJSON)相比,二进制协议具有更小的传输体积和更高的解析速度,能够减少网络传输的开销。
img.png
img.png
img_1.png
img_1.png

如何实现接口幂等性?

paxos 算法

raft 算法

为什么 Zookeeper 可以用来作为注册中心?

ZK 对事务性的支持

ZK 的 watch 机制

ZK 的观察者机制

ZK 的数据模型

ZK 的命名服务、配置管理、集群管理

ZK 的典型应用场景

ZK 中领导者选举流程

ZK 中初始化选举和崩溃选举过程

ZK 集群中节点之间数据是如何同步的?

ZK 中一个客户端修改了某个节点的数据,其他客户端能够马上获取到这个最新数据吗?

ZK 和 Eureka 的区别

ZK 实际如何存储 Dubbo 生产者和消费者信息

ZK 分布式锁实现原理

ZK 会话管理机制

ZK 的数据模型和节点类型

ZK 的数据同步原理

Dubbo 的工作流程

Dubbo 的分层设计

Dubbo 的架构设计

Dubbo 整体架构设计、及分层设计

为什么 Dubbo 不用 JDK 的 SPI,而是自己实现?

Dubbo 的 SPI 机制

Dubbo 服务引入过程

Dubbo 服务导出过程

Dubbo 服务暴露过程

Dubbo 服务调用过程

Dubbo 负载均衡策略

Dubbo 如何做系统交互的?

Dubbo 中集群挂掉,发布者和订阅者还能通信吗?

Dubbo 支持的注册中心有哪些?

Dubbo 支持的协议

Dubbo 和 SpringCloud 的区别

Dubbo 集群容错策略

负载均衡策略

负载均衡算法、类型

分布式锁解决方案

分布式锁使用场景

分布式系统的设计目标

分布式事务解决方案

分布式事务如何处理

分布式缓存寻址算法

分布式架构下,Session 共享方案

分布式 ID ,生成方案

对比两阶段,三阶段有哪些改进?

定时任务实现原理

Quorum、WARO 机制

集群分布式 Session 如何实现?

分布式服务接口的幂等性如何设计?(Eg: 不能重复扣款)

Last Updated 8/18/2024, 2:26:38 PM
目录