对於分散式资料库的高可用性,
在前面【Day 3】分散式系统模型、容错、高可用的後段已经提过衡量的标准、服务不能用等於$$$飞走等,
这篇整理 3 大可达成 HA 的 replication 架构:single-leader / multi-leader / leaderless
以及收集目前常见的 HA 实作(尽量啦,就还没开始工作),也就是一些备援机制,以有个初步认识。
但还是比较着重於基础知识,毕竟每个 HA 方案的实作都有大量的细节,
不太可能研究完或是能够很简单的分为一类。
使用 leader follower 是为了与前面的分散式系统课程保持一致。
我会避免使用 Master Slave 等用词,以支持这些正名运动。
何况我们有那麽多可以使用的替代词!
虽然确实已经用习惯、行之有年,可能会有人说「干嘛那麽敏感?」
但我希望多花一点心力,转换成没有歧视意味的用词,让这个世界多一分善意。
况且,会觉得没关系的人,都只是刚好,过得太幸福而已。
这边定义 leader 为可被读写,
follower 只能提供读。
leader 决定处理 write request 的顺序,follower 跟随 leader 的决定。
希望减少歧义。
一个 write request 传给 leader 时:
sync: 只有当 follower 都更新好回报 leader,leader 才跟 client 説这个请求成功
async: leader 不等 follower 回报就跟 client 説这个请求成功
显而易见,sync 情况下,可以确保每个 follower 们都有最新的资料,但这不现实,
毕竟如果 follower 数量一多,就可能要等很久。
semi-synchronous:让少数 follower synchronous 就好,如果其他 follower 发现自己不是最新的可以跟他们要。
replication 不一致会碰到的问题前面分散式系统的笔记都有提到,
有兴趣建议多看看。
问题在不同 leaders 出现冲突的时候,他们都已经告诉 client 写入成功,这该怎麽解决?
没用过的东西真的不太好写..
主要参考:
常见的高可用MySQL资料库解决方案
一文了解数据库高可用容灾方案的设计与实现
希望没理解错
<<: Day17:终於要进去新手村了-Javascript-回圈-while简单举例练习
>>: Day 18 - WooCommerce 测试环境建立 (下)
本篇文章同步发表在 HKT 线上教室 部落格,线上影音教学课程已上架至 Udemy 和 Youtu...
Redis.config GENERAL daemonize 是否要用daemon方式启动Redis...
这篇是 Thunkable学习笔记 2 - 加入Firebase登入功能(使用EMail) 的功能加...
再来就是实际建立透过 select 选择的脚位,并建立相关 Firmata 功能。 (过程和建立 w...
前言:最近算是自学到一个阶段~已经开始面试。这次参加铁人赛的主题以 JS 基础知识为主,并会尽量将面...