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