本文是 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 协定
- 序列号和校验码
- 确认包和主动重传
- 流量管制和拥塞管制