2023-分布式学习记录4
作者:@kuaiquxie
作者的github:https://github.com/bitebita
本文为作者原创,如需转载,请注明出处:https://www.cnblogs.com/dzwj/p/17182431.html
分布式系统:
一个分布式系统由多个通过网络互联的独立自治的计算节点组成,这些计算节点基于消息传递机制进行相互协作,以完成共同的目标。
理解分布式系统定义的要点:
- 计算节点:分布式计算的基本计算单元,可以是单个计算机,也可以是单个进程、线程或虚拟机。
- 网络互联:节点间通过网络进行消息传递,以实现同步协作。
- 独立自治:每个计算节点都是独立的,不同节点的动作是同时进行的。
- 相互协作以完成共同目标
- 消息传递
分布式系统的优点:
- 提高计算能力
- 提高存储能力
- 提高网络吞吐能力(并发访问能力)
- 提高可靠性(解决局部失效问题)
- 提高安全性(解决被局部攻击问题)
- 提高可扩展性(解决瓶颈问题)
- 实现资源共享
- 实现跨越时空的协同服务(发挥不同节点的优势)
两种模型
消息传递模型:节点间没有公共状态,需要通过相互通信进行协作;影响效率的主要因素是通信复杂度
共享内存模型:不同节点间通过共享存储器共享公共状态,通过共享公共状态进行通信
传统并行计算采用共享内存模型,分布式计算采用消息传递模型。
衡量分布式系统优劣的特性
- 可扩展性/可伸缩性
- 垂直可扩展性
- 水平可扩展性
- 容错性
- 可用性
- 可恢复性
- 透明性
- 开放性
- 安全性
- 可维护性
分布式一致性
通过数据库备份问题来理解:
大型数据库系统一般采用一主多备的模型进行数据备份,即一个主节点,多个备份节点,且只有主节点数据库接收写入请求,由主节点向备份节点发送数据更新命令。
这种模式的优点:
- 解决数据库备份的问题,提升可靠性。即使一个节点出现问题,仍有其他节点可以正常工作。主节点出现问题时,也可以随时切换备份节点为主节点
- 提高效率。主备节点状态一致时,客户端可以从任意节点读取数据
当然,这种模式也有问题,主要问题就是如何保持主备节点状态一致,即分布式一致性的问题。
解决分布式一致性问题的协议:Paxos、Raft
分布式计算任务
按任务限定完成时间长短(时效性)分类:
- 实时处理任务(OLTP),要求高并发
在线购物、在线交易等
- 准实时处理任务,流处理模型
Web 搜索时的联想、广告推送、商品推荐等
- 批处理任务(OLAP),只有单一用户
分布式系统构架
- 客户端-服务器模式(C-S)
- 客户端发出服务请求,服务器端根据客户端请求参数完成实际运算,并将运算结果返回给客户端。
- 客户端运算任务轻,服务器端运算任务重
- 服务器一般要应对并发问题
- 客户端一般负责和用户进行交互
- 瘦客户端/胖客户端
变种——Client-Cluster模式,服务器端由多个服务器构成,共同分担计算任务。
三层结构的Client-Cluster模式:
- 表示层,展现给用户的界面
- 应用层,将负责业务分解成功能单一的服务,服务由独立的组件实现,应用层由组件组成
- 数据层,直接操作数据库
优点:解耦,开发人员只关注某一层,降低层间依赖,利于复用,扩展性强
- 主-从模式(Master-Slave)
- 主节点负责根据负载情况分发任务和监视从节点执行情况进行调度
- 从节点负责执行由主节点分发的任务
- 总线模式
- 不同节点之间通过虚拟总线相连,不必知道接收者和发送者
- 异步方式通信
- 对等模式(P2P)
- 每个计算节点在任务分工上是完全对等的
- 混合模式
负载均衡
- 随机,随机选择
- 轮询,按顺序分发
- 固定权重值,请求更多地分发到高配置服务器
- IP 哈希
- 最少 TCP 连接数,分发到连接数最少的服务器
- 最小响应时间,分发到相应最快的服务器
- 基于各服务器实际负载的动态负载均衡算法
中间件
中间件:介于应用程序和操作系统之间的组件,将具体业务和底层逻辑解耦。
作用:
- 为开发者提供高层的变成抽象,屏蔽分布式系统底层的异构性和复杂性
- 提高互操作性和可移植性
- 提供分布式系统的基础设施服务
常用中间件:
- 远程过程调用中间件
- 分布式对象中间件
- 分布式组件中间件
- 消息队列中间件
- Web 服务中间件
- P2P 中间件
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 记一次.NET内存居高不下排查解决与启示
· DeepSeek 开源周回顾「GitHub 热点速览」
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了