读写分离(减轻访问压力)
基本原理:将数据库读写操作分散到不同节点上,减小单个数据库的访问压力,提高访问效率。
基本实现:
事务问题:一致性。
【问题】
如何保证主机和从机的数据一致???主从复制的延迟性问题。
分库分表(减轻存储压力)
分库
将业务模块分到不同数据库服务器里。比如电商项目中用户,商品,订单就可以防在三台不同的服务器上。
【问题】
join操作问题
无法实现关联查询
事务问题
数据需要保持一致。比如订单加1商品数量就会减1。(延迟性问题)
成本
分表
单表数据拆分有水平拆分和垂直拆分两种。
拆分后可以放在同一数据库中,也可以放在不同数据库中。
垂直分表
将表中不常用的列拆分出去。会带来表数量增加的复杂性。但能显著提高查询效率。
水平分表
水平分表适合表行数特别大的表。
水平分表的问题
路由:根据什么条件拆分表
范围路由:根据有序的数据列作为路由拆分条件,比如1-999999,1000000-1999999.
建议段大小在100万到2000万之间
优缺点:分段大小选取具有复杂性;但可以随着数据增加平滑扩展新的表
hash路由
配置路由
join操作需要合并结果
order by 操作无法在数据库中进行,只能通过业务代码或者数据库中间件分别查询,然后汇总排序
nosql分类:
基本原理:将可能会重用的数据放在内存中,一次生成,多次使用。
【一个明星发一条微博,执行一个insert,然后n多个select】
缓存穿透
缓存没有发挥作用,业务系统向缓存中读取,但并没有数据。
问题:
缓存雪崩
当缓存失效后系统性能急剧下降。很多请求访问数据库,同时生成缓存。
解决方案:
缓存热点
复制多份缓存,创建缓存服务器集群,将请求分发到不同服务器上。
【比如新浪微博上粉丝超过100w的明星发的微博,生成100份缓存(当然需要100台服务器)】
从物理层面上来说:
负载均衡代替前面的任务分配。
负载均衡分类
负载均衡算法
对于分布式计算系统,只能满足一致性,可用性,分区容错性三个中的两个。
三进二
一致性
所有节点在同一时刻都能看到相同的数据。(比如mysql集群主从数据一致性)
可用性
非故障节点在合理时间返回合理响应。(不能是错误或者超时的响应)
分区容错性
当出现网络分区后(网络故障,丢包网络中断),系统可以继续运行。
cap粒度是数据,而不是系统
比如用户账号数据选择cp,而其他信息选择ap
正常情况下,可以同时满足ca
当发生了分区情况,也就是网络故障,才会存在ca的选择,在网络正常的情况下,ca可以同时满足。
关于数据库事务完整性的理论
如果无法达到强一致性,那就最终一致性
basically availible 基本可用
分布式系统故障时,保证核心功能可用(保持登录可用,损失注册)
soft status 软状态
数据不一致
eventually consistency 最终一致性
base理论是ap方案的延申。
主备复制和主从复制的共性问题是主机故障,无法进行写操作。
主备倒换和主从倒换在原有基础上增加角色倒换的功能。
互连式:主备机间建立状态传递的通道。
通道可以是网络连接,也可以是串口连接。
中介式
主备机不进行直接连接,而是通过中介传递信息。(需要中介高可用)
zookeeper仲裁节点设置节点级别。
模拟式
将备机模拟成客户端,模拟读写操作。
数据分散集群指多个服务器组成一个集群,每台服务器都会存储一部分数据,同时,每台服务器会备份一部分数据。(分库分表)
2pc 二阶段提交
问题:
3pc 三阶段提交
分布式一致性算法
paxos(纯理论)
特别复杂
raft
zab
zookeeper采用的分布式一致性算法
当部分硬件损坏时,计算任务可以正常运行。
基本思想:通过增加更多的服务器达到计算高可用。
当主机损坏且无法恢复时,需要人工将备机升至主机,并且增加新的备机
冷备:程序包和配置文件准备好,启动服务器,但业务不启动;温备:业务已启动,但不对外提供服务
适用内部管理系统,后台管理系统的等使用人数不多的情况
master-slave
当master服务器故障后,推选出新的master服务器
zookeeper通过zab协议选取master
机房断电,机房火灾,城市地震...(但是鸡蛋也不是那么容易碎的)(不要把鸡蛋放在一个篮子里)
相对与概率小的机房火灾,断电等故障,接口故障发生的情况更多。
接口级故障:
降级是着眼与整个系统的高可用,丢车保帅的一种行为。
比如论坛的系统接近负载,暂停发帖子功能,只能看帖子。
(如果系统持续负载,服务器崩溃,看帖子的功能也废了)
是降级的一种情况。换句话说,熔断会导致降级。
熔断是指请求达到一个阈值,暂停该服务的调用,防止系统负载过大,导致崩溃。
只让一部分访问通过。保证一部分响应优于全部不能响应。
如对本文有疑问, 点击进行留言回复!!
springboot利用profile配置文件进行多环境切换
如何使用MyBatis-Plus代码生成器(逆向工程)一键生成代码
网友评论