分布式算法

分布式系统知识点

拜拜、爱过 提交于 2019-12-11 07:57:29
2PC 全称二阶段提交(two phase commit), 用于实现分布式事务的原子性. 即对于一个操作, 保证所有节点要么都执行, 要么都不执行. 由于不同节点不能直接获取其他节点的操作执行情况, 因此算法引入一个 协调者 (coordinator), 执行操作的节点称为 参与者 . 由参与者向协调者通知其操作的执行结果, 协调者根据结果通知所有参与者中止/提交操作. 算法分为两个阶段: 准备(Prepare)阶段和提交(Commit)阶段, 又称为投票阶段和执行阶段. 准备阶段 协调者给每个参与者发送 prepare 消息, 通知参与者执行操作. 参与者要么返回失败(例如权限验证失败), 要么写本地的 redo 和 undo 日志, 并执行此操作, 但是不提交, 然后返回成功的消息. 提交阶段 协调者发送完 prepare 消息后, 就进入本阶段, 等待参与者的回复. 如果所有参与者都回复成功, 那么协调者再向每个参与者发送 commit 消息, 通知其 commit 此操作. 否则, 向所有参与者发送 rollback 消息, 通知其回滚此操作. 参与者的回复超时也会导致此结果. 参与者收到 commit 消息后, 就会将操作提交, 并释放操作执行期间占用的资源. 如果参与者收到 rollback 消息, 则会利用 undo 日志回滚操作, 并释放占用的资源. 完成提交

漫谈分布式系统

只愿长相守 提交于 2019-12-11 04:29:50
漫谈分布式系统 1.分布式架构中的相关概念 2.分布式架构的发展过程和历史 3.分布式架构的难点 ==================================== 一. 分布式架构中的相关概念 1.集群 小饭店原来只有一个厨师,切菜洗菜备料炒菜全干。后来客人多了,厨房一个厨师忙不过来,又请了个厨师,两个厨师都能炒一样的菜,这两个厨师的关系是集群 2.分布式 为了让厨师专心炒菜,把菜做到极致,又请了个配菜师负责切菜,备菜,备料,厨师和配菜师的关系是分布式,一个配菜师也忙不过来了,又请了个配菜师,两个配菜师关系是集群 3.节点 节点是指一个可以独立按照分布式协议完成一组逻辑的程序个体。在具体的项目中,一个节点表示的是一个操作系统上的进程。 4.副本 副本(replica/copy)指在分布式系统中为数据或服务提供的冗余。节点的数据丢失时,可以从副本上读取到数据。数据副本是分布式系统中解决数据丢失问题的唯一手段。服务副本表示多个节点提供相同的服务,通过主从关系来实现服务的高可用方案 5.中间件 中间件位于操作系统提供的服务之外,又不属于应用,他是位于应用和系统层之间为开发者方便的处理通信、输入输出的一类软件,能够让用户关心自己应用的部分。 二. 分布式架构的发展过程和历史 一个成熟的大型网站系统架构并不是一开始就设计的非常完美,也不是一开始就具备高性能、高可用、安全性等特性

大数据常用技术栈

谁说我不能喝 提交于 2019-12-11 02:50:32
提起大数据,不得不提由IBM提出的关于大数据的5V特点:Volume(大量)、Velocity(高速)、Variety(多样)、Value(低价值密度)、Veracity(真实性),而对于大数据领域的从业人员的日常工作也与这5V密切相关。大数据技术在过去的几十年中取得非常迅速的发展,尤以Hadoop和Spark最为突出,已构建起庞大的技术生态体系圈。 首先通过一张图来了解一下目前大数据领域常用的一些技术,当然大数据发展至今所涉及技术远不止这些。 BigData Stack: 下面分不同层介绍各个技术,当然各个层并不是字面意义上的严格划分,如Hive既提供数据处理功能也提供数据存储功能,但此处将其划为数据分析层中 1. 数据采集和传输层 Flume Flume一个分布式、可靠的、高可用的用于数据采集、聚合和传输的系统。常用于日志采集系统中,支持定制各类数据发送方用于收集数据、通过自定义拦截器对数据进行简单的预处理并传输到各种数据接收方如HDFS、HBase、Kafka中。之前由Cloudera开发,后纳入Apache Logstash ELK工作栈的一员,也常用于数据采集,是开源的服务器端数据处理管道 Sqoop Sqoop主要通过一组命令进行数据导入导出的工具,底层引擎依赖于MapReduce,主要用于Hadoop(如HDFS、Hive、HBase)和RDBMS(如mysql

HAZELCAST

情到浓时终转凉″ 提交于 2019-12-10 15:51:06
1.1Hazelcast概述 Hazelcast是基于内存的数据网格开源项目,同时也是该公司的名称。Hazelcast提供弹性可扩展的分布式内存计算,Hazelcast被公认是提高应用程序性能和扩展性最好的方案。Hazelcast通过开放源码的方式提供以上服务。更重要的是,Hazelcast通过提供对开发者友好的Map、Queue、ExecutorService、Lock和JCache接口使分布式计算变得更加简单。例如,Map接口提供了内存中的键值存储,这在开发人员友好性和开发人员生产力方面提供了NoSQL的许多优点。 除了在内存中存储数据外,Hazelcast还提供了一组方便的api来访问集群中的cpu,以获得最大的处理速度。轻量化和简单易用是Hazelcast的设计目标。Hazelcast以Jar包的方式发布,因此除Java语言外Hazelcast没有任何依赖。Hazelcast可以轻松地内嵌已有的项目或应用中,并提供分布式数据结构和分布式计算工具。 Hazelcast 具有高可扩展性和高可用性(100%可用,从不失败)。分布式应用程序可以使用Hazelcast进行分布式缓存、同步、集群、处理、发布/订阅消息等。Hazelcast基于Java实现,并提供C/C++,.NET,REST,Python、Go和Node.js客户端。Hazelcast遵守内存缓存协议

hadoop简介

馋奶兔 提交于 2019-12-08 19:01:47
转: http://baike.baidu.com/link?url=HwhPVuqqWelWIr0TeSBGPZ5SjoaYb5_Givp9-rJN-PYbSTMlwpECSKvjzLBzUE7hn9VvmhDoKb5NNCPw1pCsTa Hadoop 是一个由Apache基金会所开发的 分布式系统 基础架构。 用户可以在不了解分布式底层细节的情况下,开发分布式程序。充分利用集群的威力进行高速运算和存储。 [1] Hadoop实现了一个 分布式文件系统 (Hadoop Distributed File System),简称HDFS。HDFS有高 容错性 的特点,并且设计用来部署在低廉的(low-cost)硬件上;而且它提供高吞吐量(high throughput)来访问 应用程序 的数据,适合那些有着超大数据集(large data set)的应用程序。HDFS放宽了(relax)POSIX的要求,可以以流的形式访问(streaming access)文件系统中的数据。 Hadoop的框架最核心的设计就是:HDFS和MapReduce。HDFS为海量的数据提供了存储,则MapReduce为海量的数据提供了计算。 [2] 中文名 海杜普 外文名 Hadoop 类 别 电脑程序 全 称 Hadoop Distributed File System 目录 1 起源 ▪ 项目起源 ▪

从hadoop框架与MapReduce模式中谈海量数据处理

邮差的信 提交于 2019-12-08 18:20:07
废话不说直接来一张图如下: 从JVM的角度看Map和Reduce Map阶段包括: 第一读数据:从HDFS读取数据 1、问题:读取数据产生多少个Mapper?? Mapper数据过大的话,会产生大量的小文件,由于Mapper是基于虚拟机的,过多的Mapper创建和初始化及关闭虚拟机都会消耗大量的硬件资源; Mapper数太小,并发度过小,Job执行时间过长,无法充分利用分布式硬件资源; 2 、 Mapper 数量由什么决定?? ( 1 ) 输入文件数目 ( 2 ) 输入文件的大小 ( 3 ) 配置参数 这三个因素决定的。 涉及参数: mapreduce.input.fileinputformat.split.minsize //启动map最小的split size大小,默认0 mapreduce.input.fileinputformat.split.maxsize //启动map最大的split size大小,默认256M dfs.block.size//block块大小,默认64M 计算公式:splitSize = Math.max(minSize, Math.min(maxSize, blockSize)); 例如 默认情况下:例如一个文件800M,Block大小是128M,那么Mapper数目就是7个。6个Mapper处理的数据是128M,1个Mapper处理的数据是32M

[转帖]Hyperledger Fabric 学习一:简介

本秂侑毒 提交于 2019-12-08 00:36:28
Hyperledger Fabric 学习一:简介 https://www.jianshu.com/p/f971858b70f3?utm_campaign=maleskine&utm_content=note&utm_medium=seo_notes&utm_source=recommendation 1、Hyperledger简介 Hyperledger:超级账本,是首个面向企业应用场景的分布式账本平台,包括了:IBM、Intel、Cisco、DAH、摩根大通、R3等在内的众多科技和金融巨头的贡献参与,在银行、供应链等领域得到了广泛的关注和发展,目前已经拥有超过200家企业成员。 Hyperledger项目: 2015年12月,由开源世界的旗舰组织Linux基金会牵头,30家初始企业成员共同宣布Hyperledger联合项目成立。 成立之初,IBM贡献了4万多行已有的OpenBlockchain代码,Digital Asset则贡献了企业和开发者相关资源,R3贡献了新的金融交易架构,Inter也贡献了分布式账本相关的代码。 作为一个联合项目,旗下由面向不同的场景的子项目构成:包括Fabric、Sawtooth、Iroha、BlockChain Explorer、Cello、indy、Composer、Burrow等8大顶级项目。 Fabric:是一个带有准入机制的企业级联盟链项目

图解分布式一致性协议Paxos

扶醉桌前 提交于 2019-12-05 18:52:05
图解分布式一致性协议Paxos https://www.cnblogs.com/hugb/p/8955505.html Paxos协议/算法是分布式系统中比较重要的协议,它有多重要呢? <分布式系统的事务处理> : Google Chubby的作者Mike Burrows说过这个世界上只有一种一致性算法,那就是Paxos,其它的算法都是残次品。 <大规模分布式存储系统> : 理解了这两个分布式协议之后(Paxos/2PC),学习其他分布式协议会变得相当容易。 学习Paxos算法有两部分:a) 算法的原理/证明;b) 算法的理解/运作。 理解这个算法的运作过程其实基本就可以用于工程实践。而且理解这个过程相对来说也容易得多。 网上我觉得讲Paxos讲的好的属于这篇: paxos图解 及 Paxos算法详解 ,我这里就结合 wiki上的实例 进一步阐述。一些paxos基础通过这里提到的两篇文章,以及wiki上的内容基本可以理解。 算法内容 Paxos在原作者的《Paxos Made Simple》中内容是比较精简的: Phase 1 (a) A proposer selects a proposal number n and sends a prepare request with number n to a majority of acceptors. (b) If an

redis分布式映射算法

夙愿已清 提交于 2019-12-05 16:47:02
redis分布式映射算法 一致性Hash算法的原理和实现 为了解决分布式系统中的负载均衡的问题 背景问题 有N台服务器提供缓存服务,需要对服务器进行负载均衡,将请求平均发到每台服务器上,每台服务器负载1/N的服务 硬Hash映射: 将每台服务器结点进行编号,0到N-1,Key%N就是映射到的服务器结点编号 硬Hash映射存在的问题 当分布式系统中服务器结点个数N变化的时候,每个Key对应的服务器结点的映射关系都要被改变,这会导致大量的Key会被重定向到不同的服务器结点上从而造成大量的缓存不命中,这种情况在分布式系统中是非常糟糕的,这个就是所谓的缓存雪崩,当这种情况发生时,服务器的数据库会存在非常大的压力,很可能会直接宕机 怎么解决硬Hash映射存在的问题? 一致性Hash算法 一致性Hash算法 原理: 将整个Hash空间组织2成一个虚拟的圆环,假设某个哈希函数H的值的空间为0到2的32次方减一,即hash值是一个32位的无符号整型数,整个Hash空间环如下: 下一步将各个服务器结点使用H哈希函数进行哈希映射,具体可以选择服务器的IP或者主机名作为关键字进行映射,这样每台服务器就能确定其在Hash空间上的位置,比如下图: 接下来我们将数据对象映射到Hash空间环上,假设我们有A,B,C,D四个数据对象,他们的Hash空间环上的位置如下:

分布式服务框架之服务化最佳实践

不羁岁月 提交于 2019-12-05 06:07:00
在服务化之前,业务通常都是本地API调用,本地方法调用性能损耗较小。服务化之后,服务提供者和消费者之间采用远程网络通信,增加了额外的性能损耗,业务调用的时延将增大,同时由于网络闪断等原因,分布式调用失败的风险也增大。如果服务框架没有足够的容错能力,业务失败率将会大幅提升。 除了性能、可靠性等问题,跨节点的事务一致性问题、分布式调用带来的故障定界困难、海量微服务运维成本增加等也是分布式服务框架必须要解决的难题。本章节我们将对服务化之后面临的挑战进行分析,并给出解决方案和业务最佳实践。 1. 性能和时延问题 在服务化之前,业务通常都是本地API调用,本地方法调用性能损耗较小。服务化之后,服务提供者和消费者之间采用远程网络通信,增加了额外的性能损耗: 1) 客户端需要对消息进行序列化,主要占用CPU计算资源。 2) 序列化时需要创建二进制数组,耗费JVM堆内存或者堆外内存。 3) 客户端需要将序列化之后的二进制数组发送给服务端,占用网络带宽资源。 4) 服务端读取到码流之后,需要将请求数据报反序列化成请求对象,占用CPU计算资源。 5) 服务端通过反射的方式调用服务提供者实现类,反射本身对性能影响就比较大。 6) 服务端将响应结果序列化,占用CPU计算资源。 7) 服务端将应答码流发送给客户端,占用网络带宽资源。 8) 客户端读取应答码流,反序列化成响应消息,占用CPU资源。