首先高可用和高性能是相悖的
⼤家可以想到基本就是副本备份、双活、多活这种架构
+ 在系统中通过复制协议将数据同步到多个存储节点,并确
保多个副本之间的数据⼀致性,当某个存储节点出故障
时,系统能够⾃动将服务切换到其他的副本
+在分布式存储中⾼性能与⾼可⽤是⽭盾的,⽐如要设计⼀
个分布式存储系统,CAP定理也可以推断出来
异步复制:对性能的考虑,记录数据时先写⼀个份数据到某个机器
上并⽴即返回,然后异步发起多个数据备份过程。这种
设计的性能最好,但存在“容错性”的⻛险,加⼊返回
后,还没来得及同步给其它节点就宕机了,则数据就丢
失(异步复制,也存在是写主节点到内存还是落到磁
盘)
同步双写:如果同时写多个副本,每个副本写成功以后再返回,则
⼜导致性能下降,这个过程取决于最慢的那台机器的性
能 (同步多写,是同步每个副本节点还是⼀个副本先)
那应该如何选择呢?
根据业务⽽定,如果要求性能更⾼,偶尔出现⽂件
丢失或访问出错则可以异步复制
要求⽂件系统⼀定要⾼可⽤,则⽤同步多写的策略,牺
牲⼀定的性能也要保证⾼可⽤数据⼀致性
基于上述的,⼤家还知道有⼀个很类似的消息队列就是
⽀持这种操作
RocketMQ消息⾼可⽤⾥⾯的
同步双写、异步刷盘,即同时写到两个节点上的
内存才返回,然后异步持久化到磁盘⾥⾯



