BASE理论(基本可用策略+ 最终一致性实现)

目录

  • 实现基本可用的几个策略
    • 1、流量削峰(不同地区售票时间错峰出售)
    • 2、延迟响应,异步处理(买票排队,基于队列先收到用户买票请求,排队异步处理,延迟响应)
    • 3、体验降级(看到非实时数据,采用缓存数据提供服务)
    • 4、过载保护熔断/限流,直接拒绝掉一部分请求,或者当请求队列满了,移除一部分请求,保证整体系统可用)
    • 5、 故障隔离(出现故障,做到故障隔离,避免影响其他服务)
    • 6.、弹性扩容(基于Metric和Monitor实现系统态势感知,做到弹性伸缩)
  • 实现最终一致性的具体方式
    • 1、读时修复
    • 2、写时修复
    • 3、异步修复
  • 使用BASE理论
  • 总结
  • reference

BASE理论是CAP理论中AP的延申,强调可用性。它的核心是基本可用(Basically Available)最终一致性(Eventually consistent)

实现基本可用的几个策略

基本可用本质是一种妥协,也就是出现节点故障或者系统过载时,通过牺牲非核心功能的可用性,保障核心功能的稳定运行。
实现基本可用的几个策略:

1、流量削峰(不同地区售票时间错峰出售)

以订票系统设计为例,在春运期间,开始售票前后会出现及其海量的请求峰值。
可以在不同的时间,出售不同区域的票,将访问请求错开,削弱请求峰值。

2、延迟响应,异步处理(买票排队,基于队列先收到用户买票请求,排队异步处理,延迟响应)

还以订票系统为例。用户提交购票请求后,往往会在队列中排队等待处理,可能几分钟或十几分钟后,系统才开始处理,然后响应处理结果。

3、体验降级(看到非实时数据,采用缓存数据提供服务)

以互联网系统为例,若出现网络热点事件,产生了海量的突发流量,系统过载,大量图片因为网络超时无法显示,那么可以用小图片代替原始图片,降低图片的清晰度和大小,提升系统处理能力。

4、过载保护熔断/限流,直接拒绝掉一部分请求,或者当请求队列满了,移除一部分请求,保证整体系统可用)

把接收到的请求放在指定的队列中排队处理,如果请求等待时间超时,这时直接拒绝超时请求;如果队列满了之后,就清除队列中一定数量的排队请求,保护系统不过载,实现系统基本可用。

5、 故障隔离(出现故障,做到故障隔离,避免影响其他服务)

6.、弹性扩容(基于Metric和Monitor实现系统态势感知,做到弹性伸缩)

实现最终一致性的具体方式

最终一致性是指:系统中所有的数据副本在经过一段时间的同步后,最终能够达到一个一致的状态。也就是说在数据一致性上存在一个短暂的延迟。
实现最终一致性有几种具体的方式:

1、读时修复

在读取数据时,检测数据的不一致,进行修复。
如Cassandra 的 Read Repair,在Cassandra 系统查询数据的侍好,如果检测到不同节点的副本数据不一致,系统就自动修复数据

2、写时修复

在写入数据时,检测数据的不一致,进行修复,主要通过失败重试。
如Cassandra 的Hinted Handoff实现,Cassandra 集群的节点之间远程写数据的时候,如果写失败就将数据缓存下来,然后定时重传,修复数据的不一致。

3、异步修复

通过定时对账检测副本数据的一致性,并修复。

写时修复不需要做数据一致性比对,性能消耗较低,推荐使用。
在实现最终一致性的时候,推荐同时实现自定义写一致性级别(比如 All、Quorum、One、Any)让用户可以自主选择相应的一致性级别。

使用BASE理论

DATA节点的核心功能是读和写,所以基本可用是指读和写的基本可用。可以通过分片和多副本,实现读和写的基本可用。即将同一业务的数据先分片,然后以多份副本的形式分布在不同的节点上。保障多节点多副本集群。
在这里插入图片描述
为了达到最终一致性,通过写时修复和异步修复。并且实现自定义写一致性级别,用户在写数据的时候,可以根据业务数据的特点设置不同的写一致性级别。

总结

ACID 理论是传统数据库常用的设计理念,追求强一致性模型。BASE 理论支持的是大型分布式系统,通过牺牲强一致性获得高可用性。BASE 理论在很大程度上,解决了事务型系统在性能、容错、可用性等方面痛点。BASE 理论在 NoSQL 中应用广泛,是 NoSQL 系统设计的事实上的理论支撑。
对于任何集群而言,不可预知的故障的最终后果,都是系统过载。如何设计过载保护,实现系统在过载时的基本可用,是开发和运营互联网后台的分布式系统的重中之重。

reference

《分布式协议与算法实战.韩健》

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/376889.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

一天一道算法题--6.15--卡特兰数

感谢微信平台---一天一道算法题---每天多一点进步- problem: 12个高矮不同的人 排成两排 每排必须是从矮到高排列 而且第二行比对应的第一排的人高 问排列方式有多少种? analyse: 据说 这题 是来自于 阿里巴巴的面试题 果然 很有分量 ~~ 我反正 胡思乱想了好多 没搞…

现有一些开源ESB总线的比較

现有的开源ESB总线中,自从2003年第一个开源总线Mule出现后,如今已经是百花争鸣的景象了。如今我就对现有的各种开源ESB总线根据性能、可扩展性、资料文档完整程度以及整合难易程度等方面展开。 一.CXF CXF的定位不是ESB总线,而是一…

Paxos算法(Basic Paxos 与 Multi-Paxos思想)

目录Basic Paxos三个角色达成共识的方法对于Basic Paxos的总结Multi-Paxos领导者优化 Basic Paxos 执行referencePaxos 算法包含 2 个部分: 1、Basic Paxos : 描述多节点之间如何就某个值达成共识 2、Multi-Paxos : 描述执行多个Basic Paxos实…

vs2012下调试mvc4源代码

当前流行的应该是mvc3才对。然后在研究mvc3的源代码时候,Html这个属性下的扩展方法Partial()都没有。IntelliSense不会提示该方法,找了半天的资料也问了一些博友,没看到好的解决棒法。最后没辙另辟蹊跷,就开始着手研究mvc4的源代码…

JAVA UDP网络编程学习笔记

一、UDP网络编程概述 采用TCP协议通信时,客户端的Socket必须先与服务器建立连接,连接建立成功后,服务器端也会持有客户端连接的Socket,客户端的Socket与服务器端的Socket是对应的,它们构成了两个端点之间的虚拟通信链路…

firefox 插件开发

IDE,你可以尝试下NetBeans foxbeans这个插件。转载于:https://www.cnblogs.com/sode/archive/2013/01/25/2876562.html

13种负载均衡算法

目录前言(1)轮转调度(Round-Robin Scheduling)算法(2)加权轮转调度(Weighted Round-Robin Scheduling)算法(3)随机均衡调度(Random Scheduling&am…

对于shell脚本参数获取时的一点小技巧

问题如下: 根据脚本参数的个数$#进行一个循环,在依次输出每个参数$1 $2 $3...... 我有一个循环变量i $i 取到这时的i为1,我想使用这个1再去调用$1,也是就是打印出第一个参数 就是$($i)的意思来取到第几个参数,当然$($i)是不好用的…

(转)页游安全攻与防,SWF加密和隐藏密匙

原文链接:http://netsecurity.51cto.com/art/201211/364775.htm 页游,最最核心的就是客户端(swf)与服务端的游戏通信了。游戏通信产生的封包,内容是否可识别,可篡改,可重放,处理逻辑…

C++自动类型推导 : auto 与 decltype 用法

基本用法与区别 auto 总是推导出“值类型”,绝不会是“引用”,如果有引用,auto会把引用去掉,推导出值类型; auto 可以附加上 const、volatile、*、& 这样的类型修饰符,得到新的类型。 auto x 10L; // auto推导为…

C++智能指针使用指南 part1:基本使用

加粗样式>TOC 智能指针是代理模式的具体应用,它使用 RAII 技术代理了裸指针,能够自动释放内存, 无需程序员干预,所以被称为“智能指针”。 智能指针不是指针,而是一个对象,所以不要对其调用delete&…

AS3.0 BitmapData类介绍

注:文中的Bitmapdata和BMD均为同一意思BitmapData,BMD为其缩写一,概括: Bitmapdata继承Object对象,实现IBitmapDrawable接口,这个接口有什么用,你可以理解为Drawable,能被画。官方介绍是:IBitma…

C++使用JSON的序列化与反序列化

这里使用的json解析工具为JSON for Modern C,使用的话仅需要包含头文件。 获取方式:wget https://github.com/nlohmann/json/releases/download/v3.7.3/json.hpp JSON json的序列化功能和map一样,用关联数组的"[]"来任意添加数据&#xff0c…

iOS判断为空或者只为空格

本文转载至 :http://www.cnblogs.com/superhappy/archive/2012/11/08/2761403.html 经常有需求 要判断不能为空,后台老是鄙视不做非空判断的前端 ,木办法 只能写一个。 第一种想法:我不就是判断 是不是nil就可以了么。结果发现太天…

Hyper-V

Hyper-V:也就是虚拟化技术,允许终端用户在同一台机器上运行多个操作系统,支持32位和64位系统,可以直接在Windows 8上创建自己的虚拟机。开启Hyper-V虚拟机需要更多的内存,正常运行需要至少4GB以上内存,所以…

sdut 1451 括号东东 DP

http://acm.sdut.edu.cn/sdutoj/problem.php?actionshowproblem&problemid1451 题意:中文..... 思路: pku有一道题,经典的括号匹配(区间DP)题目,那道题目是求的最长满足条件的子串的长度,那…

CDN缓存替代算法

CDN缓存工作过程如下:用户发出一个请求,如果请求被命中,缓存将对用户的请求进行响应,返回其请求的数据;如果未被命中,缓存向上拉取用户需要的数据,并对其存储的数据进行替换。 缓存算法的意义在…

前端开发常用正则表达式

1、电话 var phone /(^[^1][0-9\-]{6,20}$)|(^(134|135|136|137|138|139|150|151|152|157|158|159|182|183|187|188|147|130|131|132|155|156|185|186|145|133|153|180|189|181|184)\d{8}$)/ 2、邮箱 var email /^([a-zA-Z0-9_.-])([a-zA-Z0-9_-])((\.[a-zA-Z0-9_-]{2,3}){1,…

android 中调用接口发送短信

转载:http://ziyu-1.iteye.com/blog/1013932 android中可以通过两种方式发送短信 第一:调用系统短信接口直接发送短信;主要代码如下: Java代码//直接调用短信接口发短信 SmsManager smsManager SmsManager.getDefault(); List…

linux 命令案例学习——文件搜索

两个搜索文件的工具 locate ——仅仅通过文件名查找文件find ——依据文件的各种属性在既定目录(包括子目录)里查找一个通常与文件搜索命令一起使用、处理搜索结果文件列表的命令 xargs1 locate 1.1 查找文件名中含有zip的文件名 locate zip 看下结…