前言
自己最近也在慢慢摸索原理性相关的知识点,现学之后就会简单的记录一下当做自己的笔记,如果有不对之处,还希望批评指正,本文档会不断更新。
场景
互联网项目上线之后,数据量日复一日的递增,现有的单体结构已经无法支撑日益膨胀的业务,这时候就需要对架构进行一些优化
方案
1.系统拆分
把原有的单体系统架构进行拆分,成为分布式系统,每一个系统连接一个数据库,减少数据库压力
2. 缓存
大多数并发场景都是读多写少,那么就可以根据业务利用redis缓存来减少数据库压力
3. 消息队列
常见的有MQ,kafka等。可以把大量需求放到队列里,由后面的系统依次进行消费,控制在mysql的承受范围之内
4. 分库分表
将原有复杂的数据库或者表,拆分成多个,将每个表的数据相对简单,提升sql性能
5. 读写分离
因为大部分时候数据库都是读多写少,所以没必要所有请求都集中在一个库上。可以实现一个主从架构,主库写,从库读,这样读流量太多的时候可以加更多的从库。(主库会把发生的一些dml(数据操纵语言,常见的新增、删除、修改)和ddl(数据定义语言,常见的结构的修改、新增)操作的变化发送给从库)
常见的主从结构有:
- 一主多从:可能存在单点故障问题
- 双主复制:互为主从
- 多级复制:层级结构,父-子-孙关系