《亿级流量网站架构核心技术》
墨菲定律
- 任何事情都美哦有表面看起来那么简单
- 所有的事都会比你预计的时间长
- 可能出错的事总会出错
- 如果你担心某种情况发生,那么它就更有可能发生。
康威定律
- 系统架构事公司组织架构的反映
- 应该按照业务闭环进行系统拆分/组织架构划分,实现闭环/高内聚/低耦合,减少沟通成本
- 如果沟通出现问题,那么就应该考虑进行系统和组织架构的调整
- 在合适时机进行系统拆分,不要一开始就把系统/服务拆得非常细,虽然闭环,但是每个人维护的系统多,维护成本高。
高并发原则
- 无状态:应用无状态,配置文件有状态,应用比较容易做水平扩展。
- 拆分:是单块系统还是按功能模块拆分系统根据环境进行权衡
系统维度:系统功能/业务拆分
功能维度:功能拆分
读写维度:读写比例特征进行拆分
大量读的情况,考虑使用缓存提升性能
大量写的情况,考虑使用分库分表
聚合读的情况,数据异构拆分系统,将分散在多处的数据聚合到一处存储
AOP维度:根据访问特征,按照AOP进行拆分。CDN、页面渲染系统都属于AOP。
模块维度:按照基础或者代码维护特征进行拆分。 - 服务化:进程内服务 -> 单机远程服务 -> 集群手动注册服务 -> 自动注册和发现服务 -> 服务的分组/隔离/路由 -> 服务治理如限流/黑白名单
- 消息队列:服务解耦(一对多消费),异步处理,流量削峰/缓冲等。
(1) 为流量缓冲
牺牲强一致性,而保证最终一致性
(2) 数据校对
保证数据一致性和完整性
Worker扫描原始表,对业务数据进行校对,有问题的要进行补偿 - 数据异构
(1) 数据异构
查询某个用户的订单,则需要聚合多个表才能返回,订单表读性能很差,对订单表进行异构
异构一套订单表,按照用户ID进行分库分表,考虑对历史数据的归档
其它方法,异步加载,合并请求
(2) 数据闭环- 数据异构:通过MQ机制接收数据变更,原子化存储到合适的存储引擎,如Redis或持久化KV存储
- 数据聚合:
数据异构 —— 把数据从多个数据源拿过来
数据聚合 —— 数据聚合的目的是把这些数据做个聚合 - 前端展示:前端通过一次或少量几次调用拿到所需要的数据
- 缓存银弹
流程节点 | 缓存技术 |
---|---|
客户端 | 使用浏览器缓存 |
客户端应用缓存 | |
客户端网络 | 代理服务器开启缓存 |
广域网 | 使用代理服务器(含CDN) |
使用镜像服务器 | |
使用P2P技术 | |
源站与源站网络 | 使用接入层提供的缓存机制 |
使用应用层提供的缓存机制 | |
使用分布式缓存 | |
静态化、伪静态化 | |
使用服务器操作系统提供的缓存 |