04 | BASE理论:CAP的碱,追求可用性
04 | BASE理论:CAP的碱,追求可用性
讲述:于航
时长12:52大小10.32M
实现基本可用的 4 板斧
最终的一致
如何使用 BASE 理论
内容小结
课堂思考
赞 25
提建议
精选留言(37)
- lupguo2020-03-30在系统过载情况,一方面考虑提供有损服务,弃朱保帅,另一方面积极寻求资源扩容,提升整体系统的吞吐量 1. 流量错峰(不同地区售票时间错峰出售) 2. 异步处理(买票排队,基于队列先收到用户买票请求,排队异步处理,延迟响应) 3. 服务降级(看到非实时数据,采用缓存数据提供服务) 4. 过载保护(熔断/限流,直接拒绝掉一部分请求,或者当请求队列满了,移除一部分请求,保证整体系统可用) 5. 故障隔离(出现故障,做到故障隔离,避免影响其他服务) 6. 弹性扩容(基于Metric和Monitor实现系统态势感知,做到弹性伸缩)展开
作者回复: 加一颗星:)
44 - cricket19812020-02-20All、Quorum、One、Any一致性级别中One和Any的区别是什么?
作者回复: one表示必须写成功一个节点,any表示所有节点都没写成功,如果请求成功保存到了失败重传的缓存队列中,也算成功。any是最弱的写一致性级别。
31 - Purson2020-02-19还有熔断和限流。 发现文稿里面关于最终一致性中,写的描述有矛盾:“写时修复:在写入数据,检测数据的不一致时,进行修复。” 后面 “在这里,我想强调的是因为写时修复不需要做数据一致性对比,性能消耗比较低,” 前面说写的时候有做一致性对比,后面说写的时候没有做一致性对比。其实写的时候修复主要通过失败重试的方式吧?
作者回复: 加一颗星:),是的,通过写操作的失败错误,发现不一致,然后通过重传修复数据的不一致。
共 3 条评论19 - ヾ(◍°∇°◍)ノ゙2020-02-20acid是数据库系统经典之作;base是在实践中受挫后的思想松绑,提出一种重要的指导,给人以信心
作者回复: 加一颗星:),互联网只能base,可用性和钱,低性能堆机器,都是钱:)
14 - Sinclairs2020-02-19从微服务的角度来考虑, 有这些方式能够尽可能地保证系统的基本可用: 1. 使用消息队列, 对偶然的高并发写操作进行削峰填谷; 2. 对进程间的服务调用做好熔断保护; 3. 在系统能力无法支撑高并发访问时, 对非核心业务降级; 4. 对关键服务做好限流.
作者回复: 加一颗星:)
共 2 条评论10 - fcb的鱼2020-02-20实现最终一致性的方案中,更侧重于存储层面的事情吧。假设有A,B,C三个节点,那么"读时修复"方案是不是意味着每个读操作,会同时访问这三个节点吗,然后比对三个节点返回的数据是否一样,一样的话返回任意一个节点的数据,不一样了再以最新的数据为准,并且修复其他不同节点的数据?在AP模型的应用中,是不是得同时校验几个节点的数据是否一致?
作者回复: 每种方案,都有自己比较适合的场景的,比如读时修复,在实现了Quorum NWR时,意义比较大,因为,本来就需要读多副本,发现不一致了,就顺便修复。 在AP模型系统中,一般是需要实现异步修复的,不过具体的技术方案,还是取决于场景。 咱们这么理解哈,技术是解决场景问题的,使用哪些技术?如何使用技术?是取决于场景的,也就是需求。
8 - NEO🍋2020-04-23All、Quorum、One、Any 是什么?没有介绍; 读写时修复 异步修复 又是个什么?修复什么?为什么需要修复?怎么修复?没讲清楚 难以理解 记住; 建议优化讲课方式 关键术语前置介绍 关键动作配合案例(不是一个大而泛的案例-比如文中的自研库 而是非常具体的数据例子)
作者回复: 加一颗星:),感谢反馈。修复的是数据的不一致性,因为为了实现最终一致性。All、异步修复,在11、12讲有更细节的介绍,已修正,加链接。关于文中案例,或者没有细节案例演示的内容,比如读时修复,我后面会迭代和补充。
7 - 远方2020-02-21hadoop的hdfs文件系统和kafka消息队列,按我的理解,也是基于ap的扩展base理论开发的,是这样的吧?
作者回复: 这两个之前没怎么研究过。这样哈,这个问题我先记下,后面,我研究下,做个补充:)
共 5 条评论6 - 川杰2020-02-19请问:写时修复:在写入数据,检测数据的不一致时,进行修复;这个比对,是指和其它节点数据比对吧?那么数据以谁为准呢?极端情况下,每个节点上的数据都不一样,我该听谁的?
作者回复: 可以这么理解,写时修复,写失败时,将数据缓存到本地磁盘上,然后周期性的重传,本质上,就是失败重传。 第二个问题,所有数据,都不一样,这时现实场景肯定会出现的情况,可以通过多次执行异步修复,来实现一致性。具体的实现方法,我会在11讲,具体说说:)
5 - hello2020-02-19重试、幂等、异步、负载均衡、故障隔离、流量切换、自动扩缩容、兜底(熔断限流降级)、容量规划
作者回复: 加一颗星:)
6 - 每天晒白牙2020-02-191.服务调用之间做好流量限制,即限流,避免瞬时打进大量流量 2.利用MQ实现削峰填谷 3.熔断降级也是一种保证基本可用的方案,但实际工作中我还没尝试过
作者回复: 加一颗星:)
5 - Frank2020-03-01针对文中实现最终一致性的具体方式中,自己在项目中是将写时修复与异步一起用。举个例子,比如用户修改了数据,数据落库到MySQL,通过AOP切面的方式通过MQ消息异步更新数据到ES,实现最终一致性。个人觉得这样在写请求量大时,可减少延迟响应。如果写请求量较少,也可直接省掉MQ这一步,直接同步写到ES,但是要保证MySQL和ES的数据最终一致。
作者回复: 加一颗星:),MQ能很好的弥补ES写性能差、支持突发流量能力弱的痛点。
共 4 条评论4 - reven4042020-04-03“所以,集群的可用性是每个节点可用性的乘积,比如,假设 3 个节点的集群,每个节点的可用性为 99.9%,那么整个集群的可用性为 99.7%”按道理除非同时宕机否则其中一个宕机其他节点不是应该继续提供服务么?为什么可用性还是会降低,这里的集群定义是不是有其他特殊的含义?
作者回复: 两阶段提交协议限制的,也就是执行一个操作,需要所有节点确认和投票。
共 2 条评论3 - 一个慢慢爬行的普通人2020-06-23为什么写时修复不需要做一致性对比
作者回复: 加一颗星:),因为写时修复,本质是“失败 - 缓存 - 重传”的重试机制,不涉及到一致性对比。
1 - 桂冠远航2020-03-22酸碱中和。
作者回复: 加一颗星:),权衡折中,妥协妥协,再妥协:)
1 - 安排2020-03-06写时修复,写失败将数据缓存到本地磁盘上,这个是缓存到客户端磁盘吗?还是服务节点的磁盘?
作者回复: 加一颗星:),服务器节点的磁盘。
1 - fcb的鱼2020-02-20在使用Base理论的举例中,3节点2个副本的架构中,再各个节点中这2个副本的数据最终要是一样的吧?在一个系统整体的架构中,上游的系统可以使用Base理论,但是底层的系统如支付系统需要使用强一致性,这样的话,支付系统就称为了瓶颈。在这种场景中,整个系统的架构应该如何考虑呢?
作者回复: 从描述看,这是一套复杂的系统,设计混合架构吧,根据场景特点不同,做拆分,这么说可能比较抽象。如果有更具体的信息和需求,咱们可以一起展开讨论下:) 最后补充一点,架构之道,在于权衡妥协。
1 - Michael Tesla2020-02-20老师好,请教下这个 3 节点 2 副本的InfluxDB集群的工作流程: 1. 正常工作时,某个分片的数据只在节点1写入,然后节点1将数据同步到节点2。 2. 如果节点1挂了,客户端就将数据写入节点2。 3. 之后,等节点1恢复,节点2将数据同步回节点1(即写时恢复),同时客户端也重新将数据写入节点1。
作者回复: 加一颗星:)
1 - 小晏子2020-02-19这几个“流量削峰、延迟响应、体验降级、过载保护”都是为了实现业务的基本可用的手段。比如在秒杀场景中,会突然之间有大流量的请求涌入,而对付这些过载流量,就需要使用这几个手段来保障业务的可用性。
作者回复: 加一颗星:)
1 - 盘胧2020-02-19在最前端链路就做好流量控制,和最后的兜底方案
作者回复: 加一颗星:)
1