什么是分布式系统的BASE理论?

什么是分布式系统的BASE理论?

BASE理论

eBay的架构师Dan Pritchett源于对大规模分布式系统的实践总结,在ACM上发表文章提出BASE理论,BASE理论是对CAP理论的延伸,核心思想是即使无法做到强一致性(Strong Consistency,CAP的一致性就是强一致性),但应用可以采用适合的方式达到最终一致性(Eventual Consitency)。

BASE是指基本可用(Basically Available)、软状态( Soft State)、最终一致性( Eventual Consistency)。

基本可用(Basically Available)

基本可用是指分布式系统在出现故障的时候,允许损失部分可用性,即保证核心可用。

电商大促时,为了应对访问量激增,部分用户可能会被引导到降级页面,服务层也可能只提供降级服务。这就是损失部分可用性的体现。

以下两个就是“基本可用”的典型例子

  • 响应时间上的损失:正常情况下,一个在线搜索引擎需要0.5秒内返回给用户相应的查询结果,但由于出现异常(比如系统部分机房发生断电或断网故障),查询结果的响应时间增加到了1~2秒
  • 功能上的损失:正常情况下,在一个电子商务网站上进行购物,消费者几乎能够顺利地完成每一笔订单,但是在一些节日大促购物高峰的时候,由于消费者的购物行为激增,为了保护购物系统的稳定性,部分消费者可能会被引导到一个降级页面

软状态( Soft State)

软状态是指允许系统存在中间状态,而该中间状态不会影响系统整体可用性。分布式存储中一般一份数据至少会有三个副本,允许不同节点间副本同步的延时就是软状态的体现。mysql replication的异步复制也是一种体现。

最终一致性( Eventual Consistency)

最终一致性是指系统中的所有数据副本经过一定时间后,最终能够达到一致的状态。弱一致性和强一致性相反,最终一致性是弱一致性的一种特殊情况。

ACID和BASE的区别与联系

ACID是传统数据库常用的设计理念,追求强一致性模型。BASE支持的是大型分布式系统,提出通过牺牲强一致性获得高可用性。

ACID和BASE代表了两种截然相反的设计哲学。

在分布式系统设计的场景中,系统组件对一致性要求是不同的,因此ACID和BASE又会结合使用。

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

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

相关文章

Docker教程介绍

Docker教程介绍 教程环境准备 linux 系统virtualbox 软件安装 教程介绍 0-安装Vagrant,安装 centos 系统。1-docker 介绍2-docker 安装3-docker 架构和底层技术简介4-什么是Image和container5-Dockerfile文件6-搭建一个私有registry7-深入练习Dockerfile8-容器操…

1-docker 介绍

1-docker 介绍 由PaaS到Container 2013年2月,前Gluster的CEO Ben Golub 和 dotCloud 的 CEO Solomon Hykes 坐在一起聊天时,Solomon谈到想把 dotCloud 内部使用的Container容器技术单独拿出来开源,然后围绕这个技术开一家新公司提供技术支持…

3-docker 架构和底层技术简介

3-docker 架构和底层技术简介 Docker Platform Docker 是一个平台。 提供了一个开发、打包、运行app的平台把app和底层 infrastructure 隔离开来 根据上图我们可以看出 Docker Engine 把上层的 app 应用程序和底层的物理设备或虚拟设备进行了隔离,然后我们在 doc…

4-什么是Image和container

4-什么是Image和container 什么是Image? 先练习一个例子: docker pull ubuntu:16.04 docker image ls # 查看镜像镜像类似于一个系统安装光盘,你可以使用一个安装光盘为多台电脑安装操作系统,同样,你也可以用同一个镜像构建多个运行的…

5-Dockerfile文件

5-Dockerfile文件 先练习一个例子: 创建 Dockerfile 文件 FROM ubuntu:14.04 LABEL maintainer"vincent <jeffmanwordgmail.com>" RUN apt-get update && apt-get install -y redis-server EXPOSE 6397 ENTRYPOINT [ "/usr/bin/redis-server&quo…

6-搭建一个私有registry

6-搭建一个私有registry docker hub 查找 registry docker hub registry 可以看到部署很简单&#xff0c;只有一条命令。 docker run -d -p 5000:5000 --restart always --name registry registry:2部署私有registry 找一台linux的服务器并安装好docker 在此服务器上部署re…

7-深入练习Dockerfile

7-深入练习Dockerfile 创建一个json-server 镜像 首先创建一个 json-server 文件夹 mkdir json-server在json-server文件夹下创建Dockerfile FROM node:10.15.0 RUN npm install -g json-server构建镜像 docker build -t json-server .创建一个api服务的镜像 首先创建一个 …

8-容器操作

8-容器操作 普通操作 进入容器 docker exec -it api /bin/bash容器停止与启动 docker stop api docker start api容器重启 docker restart api查看容器详细信息 docker inspect api查看日志 docker logs api容器删除 docker stop api # 必须先停止才能删除 docker rm…

9-资源限制

9-资源限制 了解stress工具 stress是一个压力测试工具 docker run -it ubuntu:16.04此时会进入ubuntu内&#xff0c;这时我们安装 stress工具 apt-get update && apt-get install -y stress查看help stress --helpUsage: stress [OPTION [ARG]] ...-?, --help …

10-Docker 网络

10-Docker 网络 基础网络概念 数据传输通过数据包 两台笔记本之间通信是通过数据包通信的。想知道数据包是怎么打包的呢&#xff0c;就先要知道网络分层的概念。 网络分层 目前有两种网络分层的模型。 ISO/OSI 分层&#xff0c;也就是 7 层模型。TCP/IP 分层&#xff0c;也就…

11-Docker Bridge详解

11-Docker Bridge详解 容器之间是如何通信的&#xff1f; 操作前删除test2的容器。 查看当前机器上docker的网络 docker network lsNETWORK ID NAME DRIVER SCOPE 056d0ece100f bridge bridge local a…

12-容器之间link

12-容器之间link 这篇主要讲 容器之间如何 link。 需要准备的是&#xff0c;创建两个容器 test1 和 test2 通过 busybox。 在之前的课程中已经创建的只需要重新启动即可。 什么情况下需要link 例如有一个容器是 web 服务器&#xff0c;并且跑在一个docker容器内&#xff0c;…

13-容器的端口映射

13-容器的端口映射 部署一个简单web nginx容器 docker run -d --name web nginxnginx 默认的端口是 80 端口&#xff0c;此时我们是没有办法访问的。 好的&#xff0c;通过前面的学习我们已经知道&#xff0c;这个 web 容器四连接到 bridge 网桥上的&#xff0c;那我们查看一…

14-容器网络之host和none

14-容器网络之host和none 在之前的小节&#xff0c;我们有看到过 host 和 none。 通过 docker network ls 查看。 none 网络 删除 test1 容器 docker stop test1 && docker rm test1创建 test1 容器并连接到none网络 docker run -d --name test1 --network none busy…

15-多容器复杂应用的部署

15-多容器复杂应用的部署 此节主要是通过部署一个复杂的应用场景&#xff0c;进而练习容器的网络相关知识。 创建一个flask-web应用 创建一个 flask-web 文件夹 mkdir flask-web在此文件夹内创建 app.py 文件 cd flask-web touch app.py编写一个简单的 web 程序 import os im…

16-多机器通信

16-多机器通信 回顾上节课的思考题。 flask-redis 想访问 redis&#xff0c;该如何通信&#xff1f; 创建另外一台linux虚拟机 直接拷贝Vagrantfile文件创建一个 centos 虚拟机 我们创建一个centos7-2文件夹&#xff0c;然后创建虚拟机 vagrant up创建的过程中提示选择网络接…

17-Docker的数据持久化介绍

17-Docker的数据持久化介绍 回顾容器与镜像 容器是在镜像之上创建的一层运行时层&#xff0c;这一层是可以读写的&#xff0c;我们能够在容器内添加数据&#xff0c;读取数据。 也就是说我们在创建容器的时候&#xff0c;我们能够在容器内创建文件&#xff0c;安装软件等等&a…

18-数据持久化-Data Volume

18-数据持久化-Data Volume Data Volume 使用场景。一般来讲有些容器自己会产生一些数据&#xff0c;我们不想数据随着容器的销毁而销毁&#xff0c;我们想保存数据&#xff0c;正常一般用在数据库&#xff0c;比如我们想保存数据库中的数据&#xff0c;这个时候我们就会使用 …

19-数据持久化-Bind Mounting

19-数据持久化-Bind Mounting Bind Mounting 与 Data Volume区别 Data Volume 需要在 Dockerfile 内声明需要创建的 volume 目录。 Bind Mounting 则不需要在 Dockerfile 声明 volume&#xff0c;只需要在创建容器的时候&#xff0c;也就是 run 的时候声明即可。 如: dock…

go自定义包教程

go自定义包教程 而是环境为 go version go1.11 linux/amd64linux mint 19 创建一个自定义的包 切换到src目录下&#xff0c;创建demo目录 cd src mkdir demo再创建smap 文件夹 cd demo mkdir smap创建包文件 cd smap touch map.gomap.go文件内容 package smapimport "…