分布式协议与算法实战:攻克分布式系统设计的关键难题

分布式协议与算法实战:攻克分布式系统设计的关键难题 PDF 高清版

  • 大小:62.7 MB
  • 类型:分布式算法
  • 格式:PDF
  • 出版:机械工业出版社
  • 作者:韩健
  • 更新:2022-09-14 08:41:37
版权投诉 / 资源反馈(本资源由用户 瞿竹雨 投稿)

我们帮大家精选了分布式算法相关的资料,由机械工业出版社出版,作者是韩健,介绍了关于分布式协议、算法实战方面,格式为PDF,资源大小62.7 MB,目前豆瓣、亚马逊、当当、京东等电子书综合评分为:7.7分。

书籍介绍

编辑推荐

(1)作者背景权威:作者先后就职于Intel、腾讯等互联网大厂,担任重要工作。
(2)作者经验丰富:作者在大规模分布式系统领域有10余年工作经验,曾担任腾讯QQ后端基础设施技术负责人。
(3)理论直指核心:深刻、详细剖析分布式的4大基础理论和10种常用协议和算法,帮助读者透彻理解分布式的本质和精髓。
(4)实战工程落地:通过10余个小案例和3大综合案例,详细演示了如何在工程实践中将分布式的基础理论和协议与算法落地。
(5)12位专家推荐:来自腾讯、华为、阿里等企业的12位专家高度评价并一致推荐。

内容简介

这是一本以实战为导向、系统讲解分布式协议与算法、深刻揭示分布式系统精髓与本质的著作。作者以自己在腾讯和Intel的多年分布式系统工程经验为基础,用图文并茂、通俗易懂的方式详细讲解了分布式的基础理论、协议、算法,以及它们如何在工程实践中落地。

通过本书,你将掌握如下核心知识:

(1)4大分布式基础理论

详细讲解分布式架构设计的核心基础理论,包括拜占庭将军问题、CAP理论、ACID理论、BASE理论,这些理论能指导你在实战中根据场景特点选择合适的分布式算法。

(2)10种常用的分布式协议和算法

详细讲解了Paxos算法、Raft算法、一致哈希算法、ZAB协议、Gossip协议、Quorum NWR协议、MySQL XA规范、TCC、PBFT算法、PoW算法等常用分布式协议和算法的的原理、特点、适用场景和常见误区等。

目录

  • 赞誉
  • 前言
  • 理论篇
  • 第1章拜占庭将军问题2
  • 1.1什么是拜占庭将军问题2
  • 1.1.1苏秦的困境3
  • 1.1.2二忠一叛难题3
  • 1.2口信消息,我们该如何处理呢5
  • 1.3如何解决n>(3f +1)的限制8
  • 1.3.1什么是签名消息8
  • 1.3.2签名消息型拜占庭问题之解10
  • 1.4拜占庭容错算法和非拜占庭容错算法,该如何选择呢16
  • 1.5本章小结17
  • 第2章CAP理论19
  • 2.1CAP理论:分布式系统的ph试纸,用它来测酸碱度20
  • 2.1.1CAP三指标20
  • 2.1.2CAP不可能三角24
  • 2.1.3如何使用CAP理论25
  • 2.2ACID理论:CAP的“酸”,追求一致性28
  • 2.2.1二阶段提交协议30
  • 2.2.2TCC32
  • 2.3BASE理论:CAP的“碱”,追求可用性35
  • 2.3.1实现基本可用的4板斧36
  • 2.3.2终一致性37
  • 2.3.3如何使用BASE理论39
  • 2.4本章小结40
  • 协议与算法篇
  • 第3章Paxos算法44
  • 3.1Basic Paxos:如何在多个节点间确定某变量的值45
  • 3.1.1你需要了解的3种角色46
  • 3.1.2如何达成共识48
  • 3.2Multi-Paxos:Multi-Paxos不是一个算法,而是统称52
  • 3.2.1兰伯特关于Multi-Paxos的思考53
  • 3.2.2Chubby是如何实现Multi-Paxos算法的55
  • 3.3本章小结58
  • 第4章Raft算法59
  • 4.1Raft是如何选举领导者的60
  • 4.1.1有哪些成员身份60
  • 4.1.2选举领导者的过程61
  • 4.1.3选举过程四连问64
  • 4.2Raft是如何复制日志的68
  • 4.2.1如何理解日志68
  • 4.2.2如何复制日志69
  • 4.2.3如何实现日志的一致性71
  • 4.3Raft是如何解决成员变更问题的73
  • 4.3.1成员变更问题74
  • 4.3.2如何通过单节点变更解决成员变更问题75
  • 4.4Raft与一致性79
  • 4.5本章小结80
  • 第5章一致哈希算法82
  • 5.1使用哈希算法有什么问题83
  • 5.2如何使用一致哈希算法实现哈希寻址85
  • 5.3本章小结90
  • 第6章ZAB协议92
  • 6.1如何实现操作的顺序性93
  • 6.1.1为什么Multi-Paxos无法保证操作的顺序性93
  • 6.1.2ZAB协议是如何实现操作的顺序性的97
  • 6.2主节点崩溃了,怎么办101
  • 6.2.1ZAB协议是如何选举领导者的101
  • 6.2.2ZooKeeper是如何选举领导者的107
  • 6.3如何从故障中恢复111
  • 6.3.1ZAB集群如何从故障中恢复112
  • 6.3.2ZooKeeper如何从故障中恢复119
  • 6.4ZAB协议:如何处理读写请求125
  • 6.4.1ZooKeeper处理读写请求的原理126
  • 6.4.2ZooKeeper处理读写请求的代码实现127
  • 6.5ZAB协议与Raft算法134
  • 6.6本章小结136
  • 第7章Gossip协议137
  • 7.1Gossip的三板斧138
  • 7.2如何使用反熵实现终一致性141
  • 7.3本章小结144
  • 第8章Quorum NWR算法145
  • 8.1Quorum NWR的三要素146
  • 8.2如何实现Quorum NWR149
  • 8.3本章小结150
  • 第9章MySQL XA151
  • 9.1什么是XA规范152
  • 9.2如何通过MySQL XA实现分布式事务155
  • 9.3本章小结157
  • 第10章TCC158
  • 10.1什么是TCC159
  • 10.2如何通过TCC实现指令执行的原子性161
  • 10.3本章小结163
  • 第11章PBFT算法165
  • 11.1口信消息型拜占庭问题之解的局限166
  • 11.2PBFT算法是如何达成共识的167
  • 11.3如何替换作恶的主节点171
  • 11.3.1主节点作恶会出现什么问题171
  • 11.3.2如何替换作恶的主节点172
  • 11.4PBFT算法的局限、解决办法和应用176
  • 11.5本章小结177
  • 第12章PoW算法178
  • 12.1如何理解工作量证明179
  • 12.2区块链是如何实现PoW算法的181
  • 12.3本章小结183
  • 实战篇
  • 第13章InfluxDB企业版一致性实现剖析186
  • 13.1什么是时序数据库186
  • 13.2如何实现META节点一致性188
  • 13.3如何实现DATA节点一致性188
  • 13.3.1自定义副本数188
  • 13.3.2Hinted-handoff189
  • 13.3.3反熵190
  • 13.3.4Quorum NWR191
  • 13.4本章小结192
  • 第14章Hashicorp Raft194
  • 14.1如何跨过理论和代码之间的鸿沟195
  • 14.1.1Hashicorp Raft如何实现领导者选举195
  • 14.1.2Hashicorp Raft如何复制日志201
  • 14.2如何以集群节点为中心使用API205
  • 14.2.1如何创建Raft节点205
  • 14.2.2如何增加集群节点208
  • 14.2.3如何移除集群节点209
  • 14.2.4如何查看集群节点状态210
  • 14.3本章小结211
  • 第15章基于Raft的分布式KV系统开发实战213
  • 15.1如何设计架构214
  • 15.1.1如何设计接入协议215
  • 15.1.2如何设计KV操作216
  • 15.1.3如何实现分布式集群218
  • 15.2如何实现代码220
  • 15.2.1如何实现接入协议220
  • 15.2.2如何实现KV操作222
  • 15.2.3如何实现分布式集群224
  • 15.3本章小结229

以上就是本次关于书籍资源的介绍和部分内容,我们还整理了以往更新的其它相关电子书资源内容,可以在下方直接下载,关于相关的资源我们在下方做了关联展示,需要的朋友们也可以参考下。

精选笔记:springBoot+dubbo+zookeeper实现分布式开发应用的项目实践

20小时59分钟前回答

环境搭建

项目结构图:

在这里插入图片描述

1.我们首先做好服务端

pom.xml

   <dependencies>
        <!--导入依赖:Dubbo + zookeeper-->
        <dependency>
            <groupId>org.apache.dubbo</groupId>
            <artifactId>dubbo-spring-boot-starter</artifactId>
            <version>2.7.3</version>
        </dependency>
        <!--引入zkclient-->
        <dependency>
            <groupId>com.github.sgroschupf</groupId>
            <artifactId>zkclient</artifactId>
            <version>0.1</version>
        </dependency>
        <!--引入zkclient,可能会日志冲突,还需要剔除日志依赖-->
        <dependency>
            <groupId>org.apache.curator</groupId>
            <artifactId>curator-framework</artifactId>
            <version>2.12.0</version>
        </dependency>
        <dependency>
            <groupId>org.apache.curator</groupId>
            <artifactId>curator-recipes</artifactId>
            <version>2.12.0</version>
        </dependency>
        <dependency>
            <groupId>org.apache.zookeeper</groupId>
            <artifactId>zookeeper</artifactId>
            <version>3.4.14</version>
            <!--排除这个slf4j-log4j12-->
            <exclusions>
                <exclusion>
                    <groupId>org.slf4j</groupId>
                    <artifactId>slf4j-log4j12</artifactId>
                </exclusion>
            </exclusions>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>
    </dependencies>

application.properties

server.port=8001
# 服务应用名字
dubbo.application.name=provider-server
# 注册中心地址
dubbo.registry.address=zookeeper://127.0.0.1:2181
# 哪些服务要被注册
dubbo.scan.base-packages=com.wlm.service

TicketService

package com.wlm.service;

public interface TicketService {
    public String getTicket();
}

TicketServiceImpl.java

package com.wlm.service;

import org.apache.dubbo.config.annotation.Service;
import org.springframework.stereotype.Component;

//zookeeper:服务注册与发现
@Service //可以被扫描到,在项目一启动就自动注册到注册中心
@Component //使用了Dubbo后尽量不要用Service注解
public class TicketServiceImpl implements TicketService {
    @Override
    public String getTicket() {
        return "咸鱼_翻身";
    }
}

2.启动服务端

打开服务端,开启之后不要点掉,让他在后台运行:

在这里插入图片描述

执行服务端的jar包,待会我们要监控服务端:

在这里插入图片描述

运行上面的服务端代码,然后去游览器中查看
http://localhost:7001/

在这里插入图片描述

3.我们再来做客户端

pom.xml

<dependencies>
        <!--导入相关的依赖-->
        <!--导入依赖:Dubbo + zookeeper-->
        <dependency>
            <groupId>org.apache.dubbo</groupId>
            <artifactId>dubbo-spring-boot-starter</artifactId>
            <version>2.7.3</version>
        </dependency>
        <!--引入zkclient-->
        <dependency>
            <groupId>com.github.sgroschupf</groupId>
            <artifactId>zkclient</artifactId>
            <version>0.1</version>
        </dependency>
        <!--引入zkclient,可能会日志冲突,还需要剔除日志依赖-->
        <dependency>
            <groupId>org.apache.curator</groupId>
            <artifactId>curator-framework</artifactId>
            <version>2.12.0</version>
        </dependency>
        <dependency>
            <groupId>org.apache.curator</groupId>
            <artifactId>curator-recipes</artifactId>
            <version>2.12.0</version>
        </dependency>
        <dependency>
            <groupId>org.apache.zookeeper</groupId>
            <artifactId>zookeeper</artifactId>
            <version>3.4.14</version>
            <!--排除这个slf4j-log4j12-->
            <exclusions>
                <exclusion>
                    <groupId>org.slf4j</groupId>
                    <artifactId>slf4j-log4j12</artifactId>
                </exclusion>
            </exclusions>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>
    </dependencies>

application.properties

server.port=8002
# 消费者去哪里拿服务,需要暴露自己的名字
dubbo.application.name=consumer-server
# 注册中心的地址,可以在任何电脑上!
dubbo.registry.address=zookeeper://127.0.0.1:2181

TicketService

package com.wlm.service;

public interface TicketService {
    public String getTicket();
}

UserService.java

package com.wlm.service;

import org.apache.dubbo.config.annotation.Reference;
import org.springframework.stereotype.Service;

@Service //放到容器中,注意区分
public class UserService {
    //想拿到provider-server提供的票,要去注册中心拿到服务
    @Reference //引用, pom坐标,可以定义路径相同的接口名
    TicketService ticketService;

    public void buyTicket(){
        String ticket = ticketService.getTicket();
        System.out.println("在注册中心拿到=>"+ticket);
    }
}

ConsumerServerApplicationTests.java

package com.wlm;

import com.wlm.service.UserService;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;

@SpringBootTest
class ConsumerServerApplicationTests {

    @Autowired
    UserService userService;
    @Test
    void contextLoads() {
        userService.buyTicket();
    }

}

运行ConsumerServerApplicationTests.java结果:拿到服务端的”咸鱼_翻身“

在这里插入图片描述

4.总结

前提:zookeeper服务已经开启

1.首先提供者提供服务

  • 导入依赖
  • 配置注册中心的地址,以及服务发现名,和要扫描的包
  • 在想要被注册的服务上面增加一个注解@Service

2.消费者如何消费

  • 导入依赖
  • 配置注册中心的地址,配置自己的服务名
  • 从远程注入服务 @Reference

在这里插入图片描述

到此这篇关于springBoot+dubbo+zookeeper实现分布式开发应用的项目实践的文章就介绍到这了,更多相关springBoot dubbo zookeeper分布式 内容请搜索码农之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持码农之家!

分布式算法相关资源

  • 分布式系统常用技术及案例分析

    分布式系统常用技术及案例分析

    《分布式系统常用技术及案例分析》 全面介绍在设计分布式系统时所要考虑的技术方案,内容丰富、案例新颖,相关理论与技术实践较为前瞻。《分布式系统常用技术及案例分析》不仅仅介绍

    大小:180.9 MB分布式系统

  • 大数据:互联网大规模数据挖掘与分布式处理

    大数据:互联网大规模数据挖掘与分布式处理

    大数据-互联网大规模数据挖掘与分布式处理(第2版) 由斯坦福大学Web 挖掘课程的内容总结而成,主要关注极大规模数据的挖掘。主要内容包括分布式文件系统、相似性搜索、搜索引擎技术、频

    大小:34 MB数据挖掘

  • 高伸缩性系统:Erlang/OTP大型分布式容错设计

    高伸缩性系统:Erlang/OTP大型分布式容错设计

    《高伸缩性系统:Erlang/OTP大型分布式容错设计》 是一本罕见的站在核心设计者而非普通开发者角度介绍 Erlang/OTP系统的权威书籍。两位作者均是深耕分布式计算领域超过20年的专家。《高伸缩

    大小:275 MB可靠性设计

  • 分布式任务调度平台XXL-JOB应用

    XXL-JOB是一个轻量级分布式任务调度平台,其核心设计目标是开发快捷,学习简单,轻量级,易于扩展。现在开放源代码,访问多家公司的在线产品线,开箱即用。 目前,许多公司已经访问了xxl-job,包括著名的公众评论、JD.COM、优信二手车、北京尚德、360金融(360)、联想集团(联想)、易信(网易)等。 2.quartz不足。 问题1:调用API操作任务,不人性化; 第二个问题:需要持久的业务QuartzJobBean到底层数据表,系统的侵入性非常严重。 第三个问题:调度逻辑与

    大小:493 KB分布式应用

  • Zabbix企业级分布式监控系统

    Zabbix企业级分布式监控系统

    《Zabbix企业级分布式监控系统》 从运维(OPS)角度对Zabbix的各项功能进行了详细介绍,以自动化运维视角为出发点,对Zabbix的安装配置、自动化功能、监控告警、性能调优、Zabbix API、Zabbix协议

    大小:65.8 MBZabbix

  • Ceph分布式存储实战

    Ceph分布式存储实战

    大小:14 MB分布式存储

  • 分布式对象存储

    分布式对象存储

    本书从云存储的需求出发讲述对象存储的原理,循序渐进地建立起一个分布式对象存储的架构,并且将软件实现出来,本书选择用来实现分布式对象存储软件的编程语言是当前流行的Go语言

    大小:160 MBGo语言

  • 分布式服务框架:原理与实践

    分布式服务框架:原理与实践

    大小:27.8 MB分布式框架

  • ZooKeeper分布式过程协同技术详解

    ZooKeeper分布式过程协同技术详解

    本书分三部分,共10章。第一部分(第1~2章)阐述ApacheZooKeeper这类系统的设计目的和动机,并介绍分布式系统的一些必要背景知识。第1章介绍ZooKeeper可以做什么,以及其设计如何支撑这些任务

    大小:4.51 MBZooKeeper

  • 《Excel会计实务模板应用大全书》配套模板

    《Excel会计实务模板应用大全书》配套模板

    内容简介 《Excel会计实务模板应用大全书》以Excel在会计工作中的具体应用为主线,按照财务会计人员的日常工作特点谋篇布局,通过典型的应用案例,系统介绍了利用Excel的数据计算、管理和分析功能处理会计实务的方法。 《Excel会计实务模板应用大全书》内容分为上、下两篇,上篇(第1章~第4章)主要介绍Excel的操作技巧,包括Excel制表规范及数据录入技巧、高效管理数据、常用函数的使用、打印与输出Excel 表格等内容;下篇(第5章~第11章)主要介绍

    大小:850.87 MBExcel配套资源

  • 《微信公众平台开发最佳实践(第2版)》源代码

    《微信公众平台开发最佳实践(第2版)》源代码

    本书共分10章,程序案例采用广泛流行的PHP、MySQL、XML、CSS、JavaScript、HTML5等程序语言及数据库实现。将案例和相关知识点融合,完整介绍了微信公众平台、微信开发者中心、基础接口、自定义菜单和高级接口、微信支付、微信小店、生活类应用开发、娱乐类应用开发、企业类应用开发和微信开发使用技巧。所有案例均在书中给出了核心实现代码并进行了详细讲解。全书将最新、最前沿的技术融入到开发中,展示了微信更深、更广、更有想象力的另一面。

    大小:6.44 MB微信公众平台开发配套资源

  • 《计算机网络技术与应用》教案

    《计算机网络技术与应用》教案

    本书以TCP/IP体系结构为基本框架,全面系统地介绍计算机网络的基本工作原理与网络应用技术。本书在内容安排上既强调对基本原理和概念的掌握,又突出了网络技术在工程实践中的应用;在写作中力求结构清晰、内容丰富、贴近现实技术。本书主要内容包括网络体系结构、物理层规范和常用网络设备、局域网结构与应用技术、网络地址与路由协议、传输层与网络接口编程、基本服务器软件的工作原理与配置方法、网络安全技术与网络管理技术、网络工

    大小:4.54 MB计算机网络配套资源

  • 《HTML 5网页设计与制作实战从入门到精通》电子资源

    《HTML 5网页设计与制作实战从入门到精通》电子资源

    编辑推荐 (1)精选实际案例,满足实战应用需要。 (2)图书、光盘、手机阅读及视频演示,全方位立体化教学。 (3)利用手机等移动终端即可进行学习。 (4)全彩印刷,重点突出,版式清爽。 (5)随光盘赠送大量辅助学习资料。 内容简介 《HTML5网页设计与制作实战从入门到精通》通过精选案例引导读者深入学习,系统地介绍了利用HTML5进行网页设计与制作的相关知识和操作方法。 全书共16章。第1~3章主要介绍HTML5的基础知识,包括基本概念、语

    大小:3.5 GB网页设计配套资源

  • 《集成电路静态时序分析与建模》资料

    《集成电路静态时序分析与建模》资料

    本书详细介绍整个静态时序分析流程,分为概述,时序建模,时序分析三大部分,本书的系统地介绍整个静态时序分析流程,并同时通过实战环节中的工程应用实例来做进一步的阐述。 封面图 目录 前言 第1章引论1 1.1集成电路发展史简介1 1.2国内集成电路的发展现状2 1.3国际集成电路的发展态势4 1.4静态时序分析技术4 1.4.1静态时序分析简介4 1.4.2静态时序分析背景4 1.4.3静态时序分析的优缺点5 1.5主流静态时序分析与建模工具介绍6 第2章静态时序分析的基础

    大小:13.7 MB集成电路配套资源

参与送书

学习笔记

8小时51分钟前回答

分布式服务Dubbo+Zookeeper安全认证实例

前言 由于之前的服务都是在内网,Zookeeper集群配置都是走的内网IP,外网不开放相关端口。最近由于业务升级,购置了阿里云的服务,需要对外开放Zookeeper服务。 问题 Zookeeper+dubbo,如何设置安全认证?不想让其他服务连接Zookeeper,因为这个Zookeeper服务器在外网。 查询官方文档: Zookeeper 是 Apacahe Hadoop 的子项目,是一个树型的目录服务,支持变更推送,适合作为 Dubbo 服务的注册……