BASE理论之思考
一、什么是BASE理论?
BASE理论是对CAP中一致性和可用性权衡的结果,它的核心思想是:即使无法做到强一致性,但每个应用都可以根据自身业务特点,采用适当的方式来使系统达到最终一致性。
BASE理论包含如下三个元素:
- BA:基本可用;
- S:软状态,状态可以在一段时间内不同步;
- E:最终一致性,在一定的时间窗口内,最终数据达成一致即可。
1.什么是基本可用?
举例说明:
以曾经做过的OJ系统为例,OJ系统一般宕机的原因,主要是很多学员在相同的某个时间段统一提交。那么什么时候大多学员会统一提交呢?
一般刷题的时候,时间不确定,有的人喜欢上午刷题,有的人喜欢晚上刷题。基本上OJ是能够承载着不确定时间的提交。问题提到大多学员会在什么时候统一提交,答案是考试,考试有一定的时间规定,例如120分钟或150分钟等,超过时间规定范围视为放弃考试,一般考试会提交10分钟内交卷,而这个10分钟承载着大量的学员提交,而这个大量提交不亚于电商秒杀商品。大量的学员提交,会造成系统一度假死状态,即不能正常对外提供服务,通常我们的做法是弹性伸缩,所谓弹性伸缩就是每到考试的时候,服务器会自动根据学员提交的情况来决定是否创建更多的实例,通过创建更多的实例来平衡服务压力。但有些时候并不是创建更多的实例就能应对的,例如12306抢票,全国人民抢票回家,针对这样的场景,不仅仅是加机器来横向扩容保证服务可用,还得服务将降级处理,所谓服务降级分为两个层面,一个是延迟服务,另一个是暂停目前用不到的服务把资源给优先级高的服务,以此来达到服务基本可用的目的。
2.什么是软状态?
举例说明:
以批量导入大量的历史数据为例,成千上万的Excel文件,里面装有上亿的数据,针对这些数据,系统使用人员在导入数据的过程中,总希望导入一个能够马上得到实时反馈(成功了多少,失败了多少,失败的原因是什么),但从实际中来看,几百万条数据插入到数据库,肯定会消耗数据库资源,一定程度上降低数据库性能,使得其它应用服务受到一定程度上的影响。以我上家公司的解决办法就是延迟插入,首先用户在导入数据的时候,我们会马上提示,数据正在导入中,导入成功后会给该用户发送手机短信或者是邮件,但其实数据正在导入中并没有马上导入,而是进入到一个数据导入任务队列中,排队执行,先进先出,当执行到该任务时,数据任务导入队列会集中多个服务器进行数据导入,分批次导入,这样一来效率高的多。当然了,这样一来,用户不能马上看到数据,但这在一定程度上提高了系统整体可用性,避免因为数据导入而影响对外的正常服务,正好符合软状态,即数据状态可以在一段时间内不同步。
3.什么是最终一致性?
举例说明:
以很久以前我写的一个博客爬虫为例,博客爬虫分别是有三个,一个思否爬虫,一个是CSDN爬虫,最后是博客园爬虫,三个系统均是一个小的SpringBoot微服务,我的主服务仍然是博客系统,爬虫数据抓取并实时入库,会在一定程度上导致我的主博客系统访问缓慢,原因是因为爬虫应用抓取数据并实时入库,性能在数据库上,后来我想了一个办法将爬虫数据库放在阿里云的RDS上,每当晚上的23点到第二天的5点,这个时间段,爬虫会将爬虫数据库上面的数据迁移到我的主博客系统上。
以此来保证数据的最终一致性,也就是我不一定要数据马上入库能看到效果,我可以允许一定的延迟时间,只要最终某个时间段我能看到大量的数据即可,当时做这个的目的在于那个时候研究数据库SQL优化,在研究SQL优化层面,我需要造一批数据,但我不喜欢假数据,于是通过爬虫抓取一些真实的数据,这些真实的数据主要为我个人服务,一方面作为学习的素材,另外一方面可以基于真实的内容做一些数据分析。
二、为什么会产生BASE理论?
新的理论的产生总是为了改进和完善旧有的理论,但本质上仍然变化不大(这也是左耳朵耗子为什么着重说要注重基本功,也包括我的导师以及老J也曾说过多次)。
例如:
从单体应用到分布式微服务应用、从CAP理论到BASE理论、从前后端不分离到前后分离等,就很好的说明了这一点。
BASE理论之思考的更多相关文章
- CAP理论和BASE理论及数据库的ACID中关于一致性及不同点的思考
CAP定理又被称作是布鲁尔定理,是加州大学伯克利分销计算机科学家里克在2000年提出,是分布式理论基础. CAP:是分布式系统的理论基础 [一致性 可用性 分区容错性] BASE理论是对CAP中 ...
- 【分布式】1、CAP原则(CAP定理)、BASE理论
CAP原则又称CAP定理,指的是在一个分布式系统中, Consistency(一致性). Availability(可用性).Partition tolerance(分区容错性),三者不可得兼. CA ...
- CAP原则(CAP定理)、BASE理论
CAP原则又称CAP定理,指的是在一个分布式系统中, Consistency(一致性). Availability(可用性).Partition tolerance(分区容错性),三者不可得兼. CA ...
- 关于分布式存储系统中-CAP原则(CAP定理)与BASE理论比较
CAP原则又称CAP定理,指的是在一个分布式系统中, Consistency(一致性). Availability(可用性).Partition tolerance(分区容错性),三者不可得兼. CA ...
- 差点跪了!阿里3面真题:CAP和BASE理论了解么?可以结合实际案例说下不?
本文节选自我开源的 JavaGuide :https://github.com/Snailclimb/JavaGuide (Github标星92k+!一份涵盖大部分 Java 程序员所需要掌握的核心知 ...
- 从分布式一致性谈到CAP理论、BASE理论
问题的提出 在计算机科学领域,分布式一致性是一个相当重要且被广泛探索与论证问题,首先来看三种业务场景. 1.火车站售票 假如说我们的终端用户是一位经常坐火车的旅行家,通常他是去车站的售票处购买车票,然 ...
- CAP原理、一致性模型、BASE理论和ACID特性
CAP原理 在理论计算机科学中,CAP定理(CAP theorem),又被称作布鲁尔定理(Brewer's theorem),它指出对于一个分布式计算系统来说,不可能同时满足以下三点: 一致性(Con ...
- CAP和BASE理论
详见:http://blog.yemou.net/article/query/info/tytfjhfascvhzxcyt370 1. CAP理论 2000年7月,加州大学伯克利分校的Eric Bre ...
- Zookeeper笔记1-CAP/BASE理论
分布式系统八大谬论: 1.网络相当可靠 2.延迟为0 3.传输带宽是无限的 4.网络相当安全. 5.拓扑结构不会改变 6.必须要有一名管理员 7.传输成本为0 8.网络同质化. 分布式最常出现的问题: ...
随机推荐
- RandomForestClassifier参数
[RandomForestClassifier] 参数 n_estimators : 随机森林中树的个数,即学习器的个数. max_features : 划分叶子节点,选择的最大特征数目 n_feat ...
- pyqt5 多线程+定时器+读取本地图片
前言 一个程序界面有多个button 按钮时,单击一个按钮,若此按钮对应的信号正在执行,且还未执行完毕: 此时再次单击另外一个按钮,就会出现假死状态. 这个时候我们就需要使用 多线程去解决 多线程+定 ...
- 服务器安装node全教程
我的服务器centos,安装node时出了点小麻烦,在这里记述我的方法. 1.进入node下载网站https://nodejs.org/en/download/,这里右键复制下载链接 2.进入cent ...
- Appium命令行启动,提示找不到命令,本地没有appium.cmd文件
安装appium时,直接从github上下载的appium-desktop-windows版本,安装后,从打开桌面端Server,能启动服务,appium-doctor也能正常运行. 但奇怪的地方来了 ...
- ARM详细指令集
算术和逻辑指令 ADC : 带进位的加法 (Addition with Carry) ADC{条件}{S} <dest>, <op 1>, <op 2> dest ...
- hdu4993(水题)
题意: x * a + y * b = c xyab都是正整数,给你a,b,c问有多少对xy组合满足等式. 思路: 水题,直接枚举其中一个,然后看求出的y是不是正整数就行了,第 ...
- Openstack 虚拟机宽带限速
修改Neutron配置文件,使其支持Qos 修改Neutron.conf service_plugins = neutron.services.qos.qos_plugin.QoSPlugin 修改p ...
- 【python】Leetcode每日一题-二叉搜索迭代器
[python]Leetcode每日一题-二叉搜索迭代器 [题目描述] 实现一个二叉搜索树迭代器类BSTIterator ,表示一个按中序遍历二叉搜索树(BST)的迭代器: BSTIterator(T ...
- html单页面中用angular js
1.引入angluar js文件 2.html页面应用区域中加入(ng-app="myApp" ng-controller="myController"),区域 ...
- 【.Net Core】分析.net core在linux下内存占用过高问题
现象 随着程序运行,内存占用率越来越高,直到触发linux的OOM,程序被杀死. 分析工具 运行环境:.net core 3.1(微软的分析工具要求最低3.0,无法分析2.1的core程序,需要先改为 ...