<大型网站系统与Java中间件实践>读书笔记

本文深入探讨了数据库的垂直与水平分拆策略、分布式事务管理、跨库操作及查询优化,同时阐述了消息中间件在一致性、可靠性及性能优化方面的关键作用。涵盖了从数据源连接、数据库访问实现到消息投递的全面解决方案。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

DB

 

垂直分拆:

1.ACID原则

2.join查询

3.外键约束

水平分拆:

1.ACID原则

2.join查询

3.外键约束

4.自增唯一ID

5.跨库查询

 

分布式:

XA

AP/RM/TM 

 

AP->tx->TM

AP->XA Native API->RM

TM<--XA-->RM

 

两阶段提交

 

 

paxos协议-->ZooKeeper

集群内数据一致性的算法:Quorum、vector clock

 

多机sequence

1.唯一性

2.连续性

 

UUID

ID生成器

1.一个生成

2.规则生成器在各个服务器

week:

1.性能

2.稳定性

3.存储问题

 

跨库Join

1.业务多次查询

2.数据冗余

3.借助外部系统(引擎)

 

跨库查询

1.按特点分库分表

2.合并-->排序,函数处理,求均值,非排序分页,排序分页

 

数据库访问层

1.api方式

2.JDBC方式

3.ORM/类ORM方式

 

SQL规则处理

1.固定哈希算法

2.一致性哈希算法

3.虚拟节点对一致性哈希算法的改进

4.映射表与规则自定义计算方式

 

数据源连接

1.DataSource

2.groupDataSource

3.AtomDataSource

 

数据库访问实现方式

1.jar

2.proxy

 

读写分离的挑战与应对

场景

1.数据结构相同,多从库对应一主库

2.主/备库分库方式不同的数据复制

3.引入数据变更平台(Extractors,Applier,Pipleline)

 

数据平滑迁移

1.增量日志

2.复制数据到新库,并有新数据更新进来

3.全量迁移结束后,增量日志的数据也进行迁移

4.数据比对,记录差异

5.停止源数据对要迁移走的数据的写操作,后进行增量日志的处理,新库数据是新的

6.更新路由规则,所以新数据的读或写就到了新库

 

 

消息中间件

 

消息发送的一致性

1.分布式事务。-->XA协议

2.入库回调

 

消息中间件与使用者的强依赖问题

1.提升中间件系统的可靠性

2.消息存储位置与方式

 

限制

1.需要确定要发送的消息内容

2.需要实现对业务的检查

 

消息模型

1.Queue

2.Topic

 

集群

1.先Topic

2.消息中转

3.再Queue

 

订阅消息的方式

1.持久订阅

2.非持久订阅

 

保证消息可靠性的做法

1.持久订阅

2.消息存储

 

消息发送端可靠性的保证

回调检查

 

消息存储的可靠性保证

1.基于文件的消息存储-->查询,文件的空洞

2.数据库存储

3.双机存储

 

消息系统的扩容

1.中间件的扩容

2.存储的扩容-->1.不保证消息顺序2.不支持主动获取消息

 

消息投递的可靠性

消息投递的可靠性

投递处理的优化

1.线程池投递,结果进内存,再进行批量操作。

2.单机多订阅者共享链接

3.消息只发送一次,然后传到单机的多订阅都是生成多个实例处理。

 

订阅者角度的消息重复

原因

一.消息发送端发送重复

1.消息中间件收到消息存储成功后,中间件出现问题,导致应用端没有收到消息发送成功的返回,而进行重试

2.消息中间件负载高响应慢,返回结果超时

3.返回出现网络问题

二.消息中间件发送重复

1.接收者接收成功,处理完毕后应用出问题,消息中间件没有收到处理结果

2.接收者接收成功,处理完毕后网络出问题,消息中间件没有收到处理结果

3.接收者接收成功,处理时间长超时,消息中间件没有收到处理结果

4.中间件发送成功后,中间件出问题,没收到回复

5.中间件收到结果,但消息存储出问题,没更新投递状态。

 

处理方式

1.分布式事务处理-->比较复杂,成本也高

2.消息接收端做幂等操作-->接收端应用带来限制与门槛

 

JMS的消息确认方式与消息重复的关系

1.AUTO_ACKNOWLEDGE-->客户端自动确认,但可能消息还没得及处理或尚未处理完成。

2.CLIENT_ACKNOWLEDGE-->客户端自己确认,需主动调用Message接口的ackownledge()方法确认。

3.DUPS_OK_ACKNOWLEDGE-->消息接收方处理完成后进行确认。

 

接收者会出现两种情

1.at least once(至少一次)

1.at most once(至多一次)

 

消息传递的其他属性

1.优先级

2.订阅者消息处理顺序和分级订阅

3.自定义属性

4.局部顺序

 

                            push                   pull

1.数据传输状态            保存在服务端         保存在消费端

2.传输失败,重试   服务端维护传输状态,需重试  不需要

3.数据传输实时性     非常实时              短轮询依赖pull间隔时间,长轮询与push一致

4.流控机制      服务端需要订阅者的消费能力做流控  消费者可以根据自身的消费能力决定是否去pull消息

 

 

 

 

 

 

 

 

  

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值