软件工程师需要了解的分布式系统知识体系大纲

2022年8月7日17:52:18云计算与大数据评论204 views字数 1276阅读模式

软件工程师需要了解的分布式系统知识体系大纲

本大纲旨在向软件工程师介绍现实中分布式系统的基础知识,以便让大家获得对分布式系统中关键术语的直观理解,并探讨生产中问题。

分布式系统的定义

什么是分布式系统?Lamport在1987给出了分布式的定义

A distributed system is one in which the failure of a computer you didn't even know existed can render your own computer unusable.

一个分布式系统是那种发生问题后,你都不知道发生在哪里,最终导致你的计算机变得无法访问和使用。

上面其实是对分布式的一个简单描述,可以说不是严格的定义。分布式是将业务分散在多个处理单元(节点)上,通过单元(单元)间的协作完成一个共同的任务。

分布式的节点

节点是分布式的基本单元,英文名为Node。在分布式系统中节点也是要认真考虑的问题,包含性能和容错等内容。

  • 硬件设备
  • 双网卡冗余,单网卡的故障会导致节点的不可用,因此需要考虑双网卡冗余
  • CPU绑定,CPU的缓存对提升性能有很大的帮助,绑定CPU避免进程跨CPU切换导致缓存失效。
  • RDMA,高性能的设备对性能的提升非常明显
  • 操作系统
  • 内存拷贝对性能的影响
  • 零拷贝技术
  • 缓存与文件系统
  • 编程语言与编译器
  • 程序写法对性能的影响
  • 编译器优化

分布式的网络

网络是分布式的基石,分布式系统只有通过网络才能将多个节点连接成为一个整体。一般分布式系统都是基于TCP协议进行的,另外,在TCP的基础上回封装自己的私有协议。

软件工程师需要了解的分布式系统知识体系大纲

  • 网络是节点沟通的通道
  • 人类交流通过讲话
  • 计算机交互通过协议(TCP、UDP、RPC)
  • 计算机的协议其实类似人类的语言
  • 消息随时间广播
  • 这是分布式系统的缓慢部分
  • 我们称这为“延迟latency"
  • 网络会存在各种异常
  • 重复Duplicate
  • 延误Delay
  • 丢失Drop
  • 重新排序Reorder

分布式协议

由于分布式系统的复杂性和网络的不可靠性,因此科学家发明了很多算法来解决这些问题。分布式领域核心的算法有3类,分布式解决分布式一致性的算法,进行负载均衡选路的算法和信息高效分发的协议。

软件工程师需要了解的分布式系统知识体系大纲

  • 分布式一致性协议
  • 二阶段提交
  • 三阶段提交
  • Paxos协议
  • Raft协议
  • ZAB协议
  • 选路算法
  • DHT一致性哈希算法
  • 数据分发算法
  • Gossip

分布式应用

分布式系统在实际生产中涉及的内容很多,但从应用方面就包括分布式计算和分布式存储。而分布式存储又分为IaaS的存储、KV存储、表格存储和缓存等等,内容之多,数不胜数。

软件工程师需要了解的分布式系统知识体系大纲

分布式任务处理服务:负责具体的业务逻辑处理

分布式节点注册和查询:负责管理所有分布式节点的命名和物理信息的注册与查询,是节点之间联系的桥梁

分布式DB:分布式结构化数据存取

分布式Cache分布式缓存数据(非持久化)存取

分布式文件:分布式文件存取

网络通信:节点之间的网络数据通信

监控管理:搜集、监控和诊断所有节点运行状态

分布式编程语言:用于分布式环境下的专有编程语言,比如Elang、Scala

分布式算法:为解决分布式环境下一些特有问题的算法,比如解决一致性问题的Paxos算法

开源项目:Redis,ZooKeeper,Dubbo,Etcd,Ceph,K8S

  • 本站内容整理自互联网,仅提供信息存储空间服务,以方便学习之用。如对文章、图片、字体等版权有疑问,请在下方留言,管理员看到后,将第一时间进行处理。
  • 转载请务必保留本文链接:https://www.cainiaoxueyuan.com/yunda/26719.html
匿名

发表评论

匿名网友 填写信息

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

确定