乐趣区

关于系统设计:System-Design-学习笔记2

本文是 GitHub 热门我的项目零碎设计入门的学习笔记第 2 篇,本篇记录了零碎架构中常常用到的各个组件。

略过的内容

  • DNS
  • CDN
  • 反向代理
  • 缓存
  • 平安

负载平衡

常见的负载平衡算法有:

  • 随机
  • 最小负载 / 连贯
  • 轮询 / 加权轮询
  • 哈希

负载平衡还能够分为四层负载平衡和七层负载平衡,例如 AWS 提供的 NLB 和 ALB 就是这样辨别的。简略来说,四层负载平衡 (NLB) 工作在 TCP 那一层,七层负载平衡 (ALB) 工作在 HTTP 那一层,所以 NLB 性能好,能解决所有 TCP 流量,ALB 性能略微差点,只能解决 HTTP 流量,但能依据 HTTP 自身的数据进行路由(例如申请的门路、参数、Header 不同)。

数据库

关系型数据库

关系型数据库的一些技术及其细节:

  • 主从复制

    • 主库负责读写,从库只负责读
    • 主库在复制数据到从库之前挂掉会造成数据失落
    • 从库太多写入提早
    • 主库挂掉时,从库晋升为主库须要额定的逻辑
  • 主主复制

    • 须要额定的逻辑来决定写入哪个数据库
    • 与主从复制一样的问题
  • 联结

    • 把数据按不同性能分为多个库,例如用户库、产品库
    • 不不便 JOIN
    • 利用须要额定逻辑来确定读写哪个库
  • 分片

    • 一个表分为多个表,如用户表按姓名首字母分为多个
    • SQL 语句更简单
    • 分片不合理可能导致数据不平衡,例如某个姓的用户很多
    • 不不便 JOIN
  • 非规范化

    • 即不齐全遵循关系型数据库的标准来贮存数据
    • 冗余信息来缩小 JOIN 操作,适宜写少读多的状况
  • SQL 调优

    • 慢查问
    • 应用索引

非关系型数据库

BASE 实践:

  • Basically Available: 分布式系统在呈现不可预知故障的时候容许损失局部可用性
  • Soft state: 容许存在中间状态
  • Eventually consistent: 数据最终会统一

类型:

  • KeyValue 型,如 redis
  • 文档型,如 MongoDB
  • 列式存储,如 HBase
  • 图数据库

SQL 还是 NoSQL

抉择 SQL 的起因

  • 结构化数据
  • 关系型数据,须要 join
  • 事务等

抉择 NoSQL 的起因

  • 半结构化数据
  • 非关系型数据库
  • 高吞吐量等

适宜 NoSQL 的场景

  • 埋点和日志数据
  • 热数据
  • 元数据等

异步

工作队列和音讯队列

  • 音讯队列接管,保留和传递音讯,如 RabbitMQ、Kafka
  • 工作队列接管工作及其相干数据,并执行工作,例如 Celery

通信

略过的内容

  • OSI 7 层模型
  • UDP 协定
  • RPC
  • REST

HTTP 协定

  • HTTP2.0

TCP 协定

  • 序列号和校验码
  • 确认包和主动重传
  • 流量管制和拥塞管制
退出移动版