本文是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协定

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