分布式架构
文章平均质量分 94
No_Game_No_Life_
这个作者很懒,什么都没留下…
展开
-
面试准备:分布式事务协议汇总
文章目录基本概念ACIDBASECAP强一致性协议2PC3PCTCCSagaATZABPAXOSRaftPoW最终一致性协议基于MQ基于BinlogRefer:BASE介绍、CAP介绍2PC介绍、3PC介绍、 TCC介绍Saga模式介绍、AT模式介绍ZAB介绍、 PAXOS介绍、Raft共识算法BlockChain学习——奖励机制与共识机制MQ 生产端可靠性投递和消费端幂等性保障方案、Mysql Binlog不止是主从同步基本概念ACID原子性(Atomic):一个事务中的所有操作原创 2021-08-15 16:01:16 · 485 阅读 · 0 评论 -
Distributed Database System —— Mysql Binlog实现异地多活
文章目录引入数据冲突数据回环解决方案引入数据库架构在部署时,往往会部署到不同的地区,甚至跨洲,这样做有一些好处:部署到多个地区(IDC),不同的用户可以选择离自己最近的机房进行访问。比如部署到华北地区时,北京用户访问该数据库可能就会比上海用户速度快,而如果在华东地区再部署一个数据库时,可能上海用户延迟高的情况就会得到优化。解决容灾问题。这里容灾不是单台机器故障,而是指机房断电,自然灾害,或者光纤被挖断等重大灾害。一旦出现这种问题,将无法正常为用户提供访问,甚至出现数据丢失的情况。当然有一个问题原创 2021-03-10 20:44:19 · 312 阅读 · 1 评论 -
Distributed Database System —— Mysql Binlog不止是主从同步
文章目录引入Binlog应用场景读写分离数据恢复保证数据最终一致性异地多活引入Mysql 5.0以后,支持通过binary log(二进制日志)以支持主从复制。复制允许将来自一个MySQL数据库服务器(master) 的数据复制到一个或多个其他MySQL数据库服务器(slave),以实现灾难恢复、水平扩展、统计分析、远程数据分发等功能。下面以mysql主从复制为例,讲解一个从库是如何从主库拉取binlog,并回放其中的event的完整流程。mysql主从复制的流程如下图所示:主要分为3个步骤:原创 2021-03-10 18:08:17 · 177 阅读 · 1 评论 -
Distributed Database System —— Multi-raft协议介绍
文章目录Multi-Raft协议Multi-Raft需要解决的问题Multi-Raft实现细节Raft协议已经详细介绍过,不做赘述,在Crdb中使用了Multi-Raft协议,那么Multi-Raft协议是如何工作的呢?Multi-Raft协议下面是Crdb里对于Multi-Raft的介绍,说明了在分布式环境下,为什么要开始使用Multi-Raft协议。In CockroachDB, we use the Raft consensus algorithm to ensure that your d原创 2021-03-09 18:04:24 · 1670 阅读 · 0 评论 -
Distributed Database System —— CockroachDB文档阅读
文章目录[Architecture Overview](https://www.cockroachlabs.com/docs/stable/architecture/overview.html)SQL Layer为了简单表示,在今后这个系列的文章,都以CRDB或者crdb来表示CockroachDB。要了解这个NewSQL数据库,我们先从Architecture Overview开始,从Cockroach labs提供的文档开始了解。Architecture OverviewCockroachDB原创 2021-03-09 16:59:02 · 351 阅读 · 1 评论 -
Distributed Database System —— Write Intent In CockroachDB
文章目录概述两阶段提交Phase 1: PreparePhase2: Commit or Rollback概述CockroachDB实现了 Serializability 的分布式 ACID 事务,本文主要理解原子性和隔离性的实现方案。由于在CockroachDB(以下简称CRDB)中存在多个Range,所以一次事务可能会涉及到多个Range上的存储, 所以 CRDB 是使用 Two-Phase Commit 来保证事务在多个 store 同时进行事务修改操作的原子性。不过CRDB在此基础上做了很多原创 2020-12-20 15:16:04 · 507 阅读 · 0 评论 -
Distributed System Transaction —— 各种一致性(Consistency)的讨论
文章目录概述一致性需要考虑的几个问题各种一致性顺序一致性线性一致性因果一致性和最终一致性概述在Distributed System Transaction —— 什么是线性一致性(Linearizability)?一文中,介绍过一致性这样的概念,对于一致性,简单的分类是“强一致”和“弱一致”,但这只是一种统称,实际上可以分为:(弱->强)最终一致性(Eventual)因果一致性(Casual)顺序一致性(Sequential)线性一致性(Linearizable)所以强一致是包含顺序原创 2020-12-16 17:32:09 · 554 阅读 · 0 评论 -
Distributed Database System —— Snapshot Isolation 快照隔离的各种实现方案
文章目录SI & MVCCSI运作过程SI & Write SkewSSISI & MVCC快照隔离(SI,Snapshot Isolation)是讨论隔离性时常见的术语,可以做两种的解读,一是具体的隔离级别,SQL Server、CockroachDB都直接定义了这个隔离级别;二是一种隔离机制用于实现相应的隔离级别,在Oracle、MySQL InnoDB、PostgreSQL等主流数据库中普遍使用。多版本并发控制(MVCC,multiversion concurrency c原创 2020-12-15 21:15:57 · 989 阅读 · 0 评论 -
Distributed Database System —— 分布式数据库的两种架构风格
文章目录概述PGXC:单体数据库的自然演进NewSQL:革命性的新架构概述总的来说,分布式数据库大多可以分为两种架构风格一种是 NewSQL,它的代表系统是 Google Spanner;另一种是从单体数据库中间件基础上演进出来的,被称为 Prxoy 风 格,没有公认的代表系统,便于理解,所以选了一个出现较早的产品来指代这种风 格,这就是 PostgreSQL-XC(下文简称 PGXC)。数据库从逻辑上拆分为 5 个部分,分别是客户端通讯管理器 (Client Communications M原创 2020-12-15 16:58:51 · 763 阅读 · 2 评论 -
Distributed System Transaction —— 什么是线性一致性(Linearizability)?
文章目录Linearizability & SerializabilityLinearizability场景举例分布式系统中的Linearizability数据库中的Linearizability线性一致性实践如何保证线性一致性如何验证线性一致性Linearizability & SerializabilityLinearizability(线性一致性) 可以用来衡量一个分布式系统的正确程度,来自于《Linearizability: A Correctness Condition for原创 2020-12-15 14:25:04 · 765 阅读 · 0 评论 -
Distributed System Transaction —— 2PL
文章目录2PL2PL两阶段锁(two-phase locking)是用来解决多线程之间的竞态条件的,其算法非常简单,数据库中的每一个数据对象都有两种锁:(S)hared lock 和 e(X)clusive lock,即常见的读写锁。操作和锁的对应关系很简单:如果一个transaction想要读取 [公式] ,那它必须获取 [公式] 上的shared lock;如果一个transaction想要写入 [公式] ,那它必须获取 [公式] 上的exclusive lock。那么读写锁是怎么实现2PL原创 2020-12-14 20:24:50 · 213 阅读 · 0 评论 -
Distributed System Clocks分布式系统时钟解决方案
文章目录PT(Physical Time) & TT(True Time)LC(Logic Clock)VC(Vector Clock)HLC(Hybird Logic Clock)Naive HLC改进HLC本文将首先依次简单介绍分布式系统下的物理时钟(Physical Time,也称PT),逻辑时钟(Logical Clock,也称LC),向量时钟(Vector Clock,也称VC),真实时钟(True Time,也称TT)的基本概念,然后着重笔墨介绍混合逻辑时钟(Hybrid Logica原创 2020-12-08 16:18:47 · 1224 阅读 · 0 评论 -
Vagrant安装centos7并配置网络
文章目录Vagrant安装配置什么是VagrantVagrant安装配置首先需要先下载VirtualBox的稳定版本,下载链接????。接着下载Vagrant,下载链接????,下载成功后,在命令行里输入vagrant命令即可查看是否安装成功。接下来,我们使用vagrant命令安装centos7虚拟机。由于直接使用vagrant init centos/7来使用国外下载链接很慢,首先需要下载cent...原创 2020-02-07 20:28:23 · 1626 阅读 · 0 评论 -
云服务器下Kubernetes的安装和配置
文章目录安装DockerK8s的安装条件K8s和其他工具需要开放的端口安装kubeadm, kubelet 和 kubectl使用 kubeadm 创建一个单主集群安装DockerDocker的安装可以查看以前的文章 云服务器下Docker的安装和配置Docker启动,并设置自启动。[root@master ~]# systemctl start docker[root@master ~...原创 2019-10-21 16:03:15 · 3098 阅读 · 3 评论 -
深入ZooKeeper——ZooKeeper原语和架构
ZooKeeper基础设计一个用于协作需求的服务的方法往往是:提供原语列表,暴露出每个原语的实例化调用方法,并直接控制这些实例。这种设计存在一些重大的缺陷:首先,我们要么预先提出一份详尽的原语列表,要么提供API的扩展,以便引入新的原语;其次,以这种方式实现原语的服务使得应用丧失了灵活性。因此,在ZooKeeper中我们另辟蹊径。ZooKeeper并不直接暴露原语,取而代之,它暴露了由一小...原创 2018-11-14 17:21:49 · 1040 阅读 · 0 评论 -
Hadoop是小象——YARN / Split&Block
了解Hadoop架构Hadoop可运行于一般的商用服务器上,具有高容错、高可靠性、高扩展性等特点。(特别适合写一次,读多次的场景)其架构如下:HDFS: 分布式文件存储(可靠性由心跳机制和冗余提供)YARN: 分布式资源管理MapReduce: 分布式计算Others: 利用YARN的资源管理功能实现其他的数据处理方式内部各个节点基本都是采用主从架构。之前HDFS和MapRedu...原创 2019-02-27 10:39:46 · 1650 阅读 · 0 评论 -
Hadoop是小象——MapReduce / HDFS原理解析
HDFS&MapReduce有一箩筐(100根)胡萝卜,小象进食速度是1根/秒,那么吃完一箩筐需要100秒。怎么让这100根胡萝卜被吃的更快呢?有人说榨汁……算了(其实我们这里说的是硬盘数据的读出),所以如果我们有20头小象,每个箩筐只装5根胡萝卜,那么5秒就可以合计吃掉一箩筐的量。似乎每只小象吃5根会吃不饱(也就是硬盘利用率只有5%),但是我们箩筐里可以不止放胡萝卜,我们可以放土豆,...原创 2019-02-26 17:43:31 · 1925 阅读 · 0 评论 -
Spark一路火花带闪电——Spark底层原理介绍
文章目录Spark计算引擎原理1.1 术语1.1.1 Application:Spark应用程序1.1.2 Driver:驱动程序1.1.3 Cluster Manager:资源管理器1.1.4 Executor:执行器1.1.5 Worker:计算节点1.1.6RDD:弹性分布式数据集1.1.7 DAGScheduler:有向无环图调度器1.1.8 TaskScheduler:任务调度器1.1....原创 2019-03-29 13:17:40 · 3280 阅读 · 0 评论 -
Azkaban的囚徒——Azkaban安装和介绍
文章目录Azkaban简介Azkaban安装Azkaban简介为什么需要工作流调度器?1、一个完整的数据分析系统通常都是由大量任务单元组成: shell 脚本程序,java 程序,mapreduce 程序、hive 脚本等2、各任务单元之间存在时间先后及前后依赖关系3、为了很好地组织起这样的复杂执行计划,需要一个工作流调度系统来调度执行简单的任务调度:直接使用 linux 的 cr...原创 2019-04-22 14:53:18 · 2211 阅读 · 0 评论 -
Azkaban的囚徒——Azkaban运行模式和流
文章目录Azkaban运行模式Azkaban运行Azkaban 流Azkaban运行模式在3.x版本里,提供了3种运行模式the stand alone “solo-server” mode standalone模式the heavier weight two server mode 两个server的模式distributed multiple-executor mode 分布式(多...原创 2019-04-22 15:57:17 · 2696 阅读 · 1 评论 -
Spark一路火花带闪电——Accumulator & Broadcast
文章目录Accumulator累加器Accumulator简介陷阱及解决办法Broadcast广播变量Accumulator累加器Accumulator简介Accumulator是spark提供的累加器。在Spark中如果想在Task计算的时候统计某些事件的数量,使用filter/reduce也可以,但是使用累加器是一种更方便的方式,累加器一个比较经典的应用场景是用来在Spark Strea...原创 2019-04-15 10:47:20 · 2130 阅读 · 0 评论 -
Spark一路火花带闪电——Spark踩坑记
文章目录踩坑记:版本号一定要正确!!!JDK一定要匹配。使用idea打包maven项目踩坑记:版本号一定要正确!!!JDK一定要匹配。我这里使用的是scala 2.11.12 和spark 2.4.1(不知道自己版本号的同学可以使用spark-shell,查看自己的版本号)该版本号下,一定要使用jdk1.8,如果使用jdk1.7会出现低版本错误,使用jdk11或者jdk12会有高版本错误。...原创 2019-04-24 11:08:43 · 2037 阅读 · 0 评论 -
伸缩自如的ElasticSearch——集群内原理
文章目录ES是什么ES是什么Elasticsearch是一个基于Apache Lucene™的开源搜索引擎。无论在开源还是专有领域,Lucene可以被认为是迄今为止最先进、性能最好的、功能最全的搜索引擎库。但是,Lucene只是一个库。想要使用它,你必须使用Java来作为开发语言并将其直接集成到你的应用中,更糟糕的是,Lucene非常复杂,你需要深入了解检索的相关知识来理解它是如何工作的。...原创 2019-05-17 15:14:49 · 722 阅读 · 0 评论 -
伸缩自如的ElasticSearch——文档CRUD操作
文章目录文档文档元数据_index_type_id取文档更新文档创建文档删除文档处理冲突文档在大多数应用中,多数实体或对象可以被序列化为包含键值对的 JSON 对象。 一个 键 可以是一个字段或字段的名称,一个 值 可以是一个字符串,一个数字,一个布尔值, 另一个对象,一些数组值,或一些其它特殊类型诸如表示日期的字符串,或代表一个地理位置的对象:{ "name": "...原创 2019-05-17 16:29:31 · 1370 阅读 · 0 评论 -
云服务器下Docker的安装和配置
文章目录Docker安装Docker 部署TomcatDocker核心概念Docker安装安装一些必要的系统工具:sudo yum install -y yum-utils device-mapper-persistent-data lvm2添加软件源信息:sudo yum-config-manager --add-repo http://mirrors.aliyun.com/docke...原创 2019-07-09 14:32:09 · 4291 阅读 · 0 评论 -
Redis——NoSQL与缓存
使用NoSQL有了RedisTemplate之后,我们就可以开始保存获取以及删除键值对了。假设我们想通过RedisTemplate<String,Product>保存Product,其中key是num属性的值,如下代码展示了如何借助opsForValue()来完成该功能:redis.opsForValue().set(product.getNum(),product);//存储...原创 2018-11-22 13:18:38 · 756 阅读 · 0 评论 -
Redis——初识Redis
Redis简介Redis的数据结构致力于帮助用户解决问题,而不是像关系型数据库那样,要求用户扭曲问题来适应数据库。除此之外,通过复制、持久化和客户端分片(client-side sharding)等特性,用户可以很方便的将Redis扩展成一个能够包含数百GB数据、每秒处理上百万次请求的系统。Redis 是完全开源免费的,遵守BSD协议,是一个高性能的key-value数据库。Redis不使用表...原创 2018-11-22 11:16:16 · 458 阅读 · 0 评论 -
Dubbo——Dubbo属性(4)
启动时检查Dubbo 缺省会在启动时检查依赖的服务是否可用,不可用时会抛出异常,阻止 Spring 初始化完成,以便上线时,能及早发现问题,默认check="true"。可以通过check="false" 关闭检查,比如,测试时,有些服务不关心,或者出现了循环依赖,必须有一方先启动。下面我们展示通过xml的配置,Properties和java配置不介绍。关闭某个服务的启动时检查:<...原创 2018-11-21 15:08:09 · 438 阅读 · 0 评论 -
Dubbo——Dubbo配置(3)
XML配置provider.xml 示例:&amp;amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;UTF-8&amp;quot;?&amp;amp;gt;&amp;amp;lt;beans xmlns=&amp;quot;http://www.springframework.org/sche原创 2018-11-21 13:22:56 · 429 阅读 · 0 评论 -
Kafka——安装Kafka
要事先行选择操作系统Kafka 是使用Java 开发的应用程序, 所以它可以运行在Windows 、MacOS 和Linux 等多种操作系统上。本章将着重介绍如何在Linux 上安装和使用Kafka ,因为把Kafka 安装在Linux 系统上是最为常见的。安装Java在学习zookeeper的时候已经安装。安装Zookeeper在昨天的文章里,我们已经安装。不过某些配置需要变化。我...原创 2018-11-16 17:25:12 · 471 阅读 · 0 评论 -
深入ZooKeeper——开始使用ZooKeeper的API
设置ZooKeeper的CLASSPATH我们需要设置正确的classpath,以便运行或编译ZooKeeper的Java代码。除了ZooKeeper的JAR包外,ZooKeeper使用了大量的第三方库。为了简化输入和方便阅读,我们使用环境变量CLASSPATH来表示所有必需的库。ZooKeeper发行包中bin目录下的zkEnv.sh脚本会为我们设置该环境变量。我们需要使用以下方式来编码:...原创 2018-11-16 11:22:29 · 676 阅读 · 0 评论 -
深入ZooKeeper——ZooKeeper的概念和基础
由于Kafka和Duboo都需要在ZooKeeper的基础上运行,所以我们先学习ZooKeeper。ZooKeeper改变了什么ZooKeeper的设计更专注于任务协作,并不提供任何锁的接口或通用存储数据接口。同时,ZooKeeper没有给开发人员强加任何特殊的同步原语,使用起来非常灵活。整个ZooKeeper的服务器集群管理着应用协作的关键数据。ZooKeeper不适合用作海量数据存储。对...原创 2018-11-14 13:30:54 · 530 阅读 · 0 评论 -
Zookeeper——zookeeper基础
在深入了解ZooKeeper的运作之前,让我们来看看ZooKeeper的基本概念。我们将在本章中讨论以下主题:Architecture(架构)Hierarchical namespace(层次命名空间)Session(会话)Watches(监视)ZooKeeper的架构它描述了ZooKeeper的“客户端-服务器架构”。Client(客户端) 客户端,我们的分布式应用集群中...原创 2018-11-13 15:57:22 · 801 阅读 · 0 评论 -
Zookeeper——zookeeper初识
Zookeeper 概述ZooKeeper是一种分布式协调服务,用于管理大型主机。在分布式环境中协调和管理服务是一个复杂的过程。ZooKeeper通过其简单的架构和API解决了这个问题。ZooKeeper允许开发人员专注于核心应用程序逻辑,而不必担心应用程序的分布式特性。分布式应用分布式应用可以在给定时间(同时)在网络中的多个系统上运行,通过协调它们以快速有效的方式完成特定任务。通常来说,对...原创 2018-11-13 15:34:09 · 417 阅读 · 0 评论 -
Dubbo——快速启动(2)
快速启动Dubbo 采用全 Spring 配置方式,透明化接入应用,对应用没有任何 API 侵入,只需用 Spring 加载 Dubbo 的配置即可,Dubbo 基于 Spring 的 Schema 扩展 进行加载。服务提供者定义服务接口:package com.alibaba.dubbo.demo;public interface DemoService { String sa...原创 2018-11-13 13:53:49 · 367 阅读 · 0 评论 -
Dubbo——Dubbo初识(1)
背景随着互联网的发展,网站应用的规模不断扩大,常规的垂直应用架构已无法应对,分布式服务架构以及流动计算架构势在必行,亟需一个治理系统确保架构有条不紊的演进。单一应用架构当网站流量很小时,只需一个应用,将所有功能都部署在一起,以减少部署节点和成本。此时,用于简化增删改查工作量的数据访问框架(ORM)是关键。垂直应用架构当访问量逐渐增大,单一应用增加机器带来的加速度越来越小,将应用拆成互不相...原创 2018-11-13 13:36:12 · 501 阅读 · 1 评论 -
阶段总结
今天汇报阶段总结的时候,有一个致命问题——What,How,Why解释不够清楚。为什么要用这个,这个是什么,怎么使用的?所以下面补充一下:Springhttps://blog.csdn.net/b644ROfP20z37485O35M/article/details/78967361SpringMVChttps://blog.csdn.net/weixin_42248764/ar...原创 2018-12-03 14:58:20 · 390 阅读 · 0 评论 -
Hadoop是小象——Hadoop集群安装配置
所需软件Linux所需软件包括:JavaTM1.5.x,必须安装,建议选择Sun公司发行的Java版本(以前安装过)。ssh 必须安装并且保证 sshd一直运行,以便用Hadoop 脚本管理远端Hadoop守护进程。(一般默认CentOS已经安装了OpenSSH,即使你是最小化安装也是如此,所以不用安装。)另外主机和虚拟机Ping不通的原因如下:https://blog.csdn.n...原创 2019-02-28 16:09:02 · 2235 阅读 · 0 评论 -
云服务器下Spark安装配置
文章目录Spark安装配置安装配置java安装配置hadoop安装配置scala安装配置spark验证是否成功Spark安装配置安装配置javaSpark 本身是用Scala 写的,运行在Java 虚拟机(JVM)上。要在你的电脑或集群上运行Spark,你要做的准备工作只是安装Java 6 或者更新的版本。安装配置hadoop其次需要安装Hadoop,因为Spark需要HDFS(非必要)...原创 2019-03-27 14:09:46 · 3679 阅读 · 0 评论 -
Spark一路火花带闪电——认识Spark
文章目录认识Apache Spark1.1 Spark是一个软件栈1.1.1 Spark Core1.1.2 Spark SQL1.1.3 Spark Streaming1.1.4 MLlib1.1.5 GraphX1.1.6 集群管理器1.2 Spark的用户和用途1.2.1 数据科学任务1.2.2 数据处理应用认识Apache Spark了解Spark 的最好办法莫过于了解相比于它的前辈M...原创 2019-03-27 14:01:33 · 2297 阅读 · 0 评论