按用户注册时间分片有什么问题?
计算机原理 · 小纸条
选一章打印。双面打印(按长边翻页)后沿虚线剪开,每张卡片正面题目、背面答案。
它解决了什么问题?
不用虚拟节点会怎样?
怎么处理?
所以实际是在哪两者之间选?
这个区别为什么重要?
为什么代价高?
什么业务能接受?
怎么实现?
为什么会时间倒退?
参考答案(家长):增删节点时只有相邻的一小部分数据要迁移。
参考答案(家长):新用户全挤在最后一个分片上,热点严重。
参考答案(家长):给这个键加随机后缀拆成多份,或者在应用层加缓存。
参考答案(家长):节点少时环上分布不均,负载差异很大。
参考答案(家长):正常时不必牺牲任何一个,只需为分区期准备预案。
参考答案(家长):分区发生时,在一致性和可用性之间选。
参考答案(家长):点赞数、浏览量、非关键的用户资料。
参考答案(家长):写要等多数节点确认,延迟高且分区时不可用。
参考答案(家长):两次读落到了同步进度不同的两个副本上。
参考答案(家长):让该用户的读请求路由到刚写入的那个副本。
为什么这很难?
那实际系统怎么办?
它的致命问题是什么?
这说明什么?
为什么多数派是关键?
为什么"好懂"也是一个设计目标?
两个候选人同时发起怎么办?
为什么要多数确认才提交?
为什么多数派能防?
容忍 f 个拜占庭节点需要多少总节点?
参考答案(家长):引入超时假设或随机化,在实践中绕开这个理论限制。
参考答案(家长):你无法区分"节点挂了"和"节点很慢"。
参考答案(家长):分布式事务没有既简单又完美的方案。
参考答案(家长):协调者在第二阶段挂了,参与者会一直阻塞等待。
参考答案(家长):懂不了就实现不对,实现不对就没有正确性可言。
参考答案(家长):任意两个多数派一定有共同成员,保证了信息传递。
参考答案(家长):保证已提交的内容在任何新主上都存在。
参考答案(家长):都没拿到多数就重新选,超时时间随机化避免反复冲突。
参考答案(家长):至少 3f 加 1 个。
参考答案(家长):分区后最多一边能凑够多数,另一边选不出主。
为什么内部不用?
持锁者卡住怎么办?
怎么防?
为什么?
解耦体现在哪?
怎么做到恰好一次?
怎么保证同一用户的消息有序?
怎么提前发现?
不做会怎样?
本地消息表怎么工作?
参考答案(家长):给锁加过期时间,但这又带来了新问题。
参考答案(家长):节点都是自己的,代价大收益小。
参考答案(家长):它的正确性依赖很多假设,出错时难查也难复现。
参考答案(家长):给锁配递增令牌,资源方拒绝令牌变小的请求。
参考答案(家长):至少一次加上消费端幂等,等效于恰好一次。
参考答案(家长):生产者不需要知道谁在消费、也不用等它处理完。
参考答案(家长):监控队列深度和消费延迟。
参考答案(家长):按用户 ID 哈希到固定分区。
参考答案(家长):消息先写进同一个数据库事务,再由后台任务投递。
参考答案(家长):一条坏消息可能让整个队列卡死。