bilibili-架构300讲-笔记

bilibili-架构300讲-笔记,第1张

bilibili-架构300讲-笔记 MySql集群模式与应用场景

单库:适合数据量千万以下小型应用,不具备可用性与并发性。
读写分离集群模式:主库写-从库读 主从binlog日志同步,适用于读多写少,单表不过千万。
分库分表(分片)集群模式:每个节点数据是所有数据子集,适用于十亿级总量大型应用,不具备高可用特性。分片算法:范围法 根据id 平均分,取模法 %3 结果 0 1 2然后均匀分配。

垂直分表

一个表中有100个字段,将一个表分表为两个表,一个基础表,一个详细表。

分表前
select * from 商品表 where 商品列表 = 'ad钙奶' 
分表后
select * from 商品基本信息表 a,商品详情表 b where a.商品id = b.商品id and a.商品标题 = 'ad钙奶'

垂直分表依据:

  1. 单表数据量可能千万。
  2. 字段超过20个,且包含了超长到varchar、clob、blob字段。

什么字段放小表:
数据查询、排序需要到字段、如分类编号、商品id、品牌编号、逻辑删除标志位等。
高频访问的小字段:如商品名称、子标题、价格、厂商基本等。
什么字段放大表:
配送信息、售后声明、最后更新时间等、大字段:商品图文详情、图片BLOB、JSON元数据等。

多级缓存架构

什么时候加入多级缓存:

  1. 缓存到数据是稳定的。
  2. 瞬间可能会产生极高并发到场景。
  3. 一定程度上允许数据不一致。
大表水平分表不能使用自增主键

商品表有3个亿到数据,分片 0 -1 、1- 2 、 2-3三个区间。
如果按id范围分片,不能动态扩展。
尾部热点:
不可以使用uuid来代替自增主键,uuid无序,作为主键会涉及大量重排。
雪花算法 有序、唯一 snowflake
第一部分 1位符号
第二部分 41位时间戳 毫秒级别
第三部分 机器id 2 10次方 = 1024个节点
第四部分 12位序列 2 12 = 4096
注意问题,时间回拨 很小概率可能会产生重复id。

布隆过滤器在亿级流量系统到应用

缓存1-1000数据。如果查询编号在缓存中不存在,短时间大流量会直接落到数据库中,缓存穿透。
布隆过滤器:采取很长的二进制数组,来查询数据是否存在 。
如果某一个位为0,则说明一定不存在。
如果某一位为1,说明可能存在。
减少误判次数:
增大二进制数组位数,增加hash次数(会降低性能)。
假如商品被删除了该怎么办?
布隆过滤器因为某一位二进制可能被多个编号Hash引用,因此布隆过滤器无法直接处理删除数据到情况
解决方案1:定时异步重建布隆过滤器
解决方案2:计数Bloom Fliter。

ip直连 cap定理

Consistency : all clients see the same view of data even right after update or delete
availability : all clients can find a replica of data even in case of partial node failures
Partitioning: the system continues to work as expected even in presence of partial network failure

c一致性:代表更新 *** 作完成后,所有节点在同一时间到数据完全一致;
a可用性:代表用户访问数据时,系统能否在正常响应时间返回预期的结果。
p分区容错性:代表分布式系统在遇到某节点或网络故障时,仍然能够对外提供满足一致性或可用性。

cp表现为订单创建后一直等待库存减少后才返回结果。常见于银行等。
ap表现为订单创建后不等待库存减少直接返回处理结果。用户体验好。
ac表现为单体应用。

Nignx五种负载均衡策略

轮训、权重、ip_hash、url_hash (三方)、fair (三方)

为啥禁用外键约束?

不得使用外键。外键概念在应用层解决。
每次做delete和update必须考虑外键约束,会导致开发到时候很痛苦,测试不方便。
订单表-订单明细表。并发问题,
外键约束会启用行级锁,主表写入会阻塞。

029Mysql脏读,幻读、不可重复读

脏读:
不可重复读:
幻读:

042生产环境JVM与垃圾回收GC配置建议

最大堆和最小堆大小、GC收集器、新生代(年轻代)大小

053动静分离

静态数据:无个性化的数据,静态文件,低频变动的数据。
动态数据:个性化推荐,高频写。
有效的区分页面中的动静数据是优化的关键前提。

页面伪静态化技术,利用redis缓存,缓存生成的页面,没有碎片化问题,可以自动过期,数据管理轻松,需要大量内存存储信息。

052 耦合 070 @Transactional

@Transactional(rollbackFor = Exception.class)

074 海量数据大页码Mysql如何优化

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/zaji/5637446.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2022-12-16
下一篇2022-12-16

发表评论

登录后才能评论

评论列表(0条)

    保存