《可伸缩服务架构 框架与中间件》PDF下载

  • 购买积分:17 如何计算积分?
  • 作  者:李艳鹏,杨彪,李海亮,贾博岩,刘淏著
  • 出 版 社:北京:电子工业出版社
  • 出版年份:2018
  • ISBN:9787121335723
  • 页数:560 页
图书介绍:本书是《分布式服务架构:原理、设计与实战》的下册,上一本详细介绍了解决线上高并发服务的一致性、高性能、高可用、敏捷等痛点,这本书会延续高可用服务架构的主题,并侧重于高可用架构设计的核心要点:可伸缩和可扩展,从应用层、数据库、缓存、消息队列、大数据查询系统、分布式定时任务系统、分布式配置服务、微服务等层面详细讲解如何设计可伸缩和可扩展的框架,提供了各个领域解决特定问题的方法论和思想总结,与上册结合后完美的阐述了保证线上高并发服务的方方面面:一致性、高性能、高可用、可伸缩、可扩展、敏捷性等,这里面的每个主题就是一个方法论,单独一个主题犹如杨过手中的玄铁重剑,六个主题放在一起就像段誉的六脉神剑,可保线上服务健壮运行,对实现服务稳定性的n个9有着不可估量的作用。

第1章 如何设计一款永不重复的高性能分布式发号器 1

1.1可选方案及技术选型 2

1.1.1为什么不用UUID 2

1.1.2基于数据库的实现方案 2

1.1.3 Snowflake开源项目 3

1.1.4小结 4

1.2分布式系统对发号器的基本需求 4

1.3架构设计与核心要点 6

1.3.1发布模式 6

1.3.2 ID类型 7

1.3.3数据结构 7

1.3.4并发 9

1.3.5机器ID的分配 9

1.3.6时间同步 10

1.3.7设计验证 11

1.4如何根据设计实现多场景的发号器 11

1.4.1项目结构 12

1.4.2服务接口的定义 14

1.4.3服务接口的实现 15

1.4.4 ID元数据与长整型ID的互相转换 22

1.4.5时间操作 25

1.4.6机器ID的生成 27

1.4.7小结 32

1.5如何保证性能需求 32

1.5.1嵌入发布模式的压测结果 33

1.5.2中心服务器发布模式的压测结果 33

1.5.3 REST发布模式(Netty实现)的压测结果 33

1.5.4 REST发布模式(Spring Boot+Tomcat实现)的压测结果 34

1.5.5性能测试总结 34

1.6如何让用户快速使用 35

1.6.1 REST发布模式的使用指南 35

1.6.2服务化模式的使用指南 38

1.6.3嵌入发布模式的使用指南 41

1.7为用户提供API文档 43

1.7.1 RESTful API文档 44

1.7.2 Java API文档 45

第2章 可灵活扩展的消息队列框架的设计与实现 49

2.1背景介绍 50

2.2项目目标 50

2.2.1简单易用 50

2.2.2高性能 51

2.2.3高稳定性 51

2.3架构难点 51

2.3.1线程模型 51

2.3.2异常处理 53

2.3.3优雅关机 53

2.4设计与实现 54

2.4.1项目结构 54

2.4.2项目包的规划 55

2.4.3生产者的设计与实现 57

2.4.4消费者的设计与实现 58

2.4.5启动模块的设计与实现 67

2.4.6消息处理器的体系结构 76

2.4.7反射机制 79

2.4.8模板项目的设计 80

2.5使用指南 82

2.5.1安装步骤 82

2.5.2 Java API 83

2.5.3与Spring环境集成 84

2.5.4对服务源码进行注解 85

2.6 API简介 87

2.6.1 Producer API 87

2.6.2 Consumer API 88

2.6.3消息处理器 88

2.6.4消息处理器定义的注解 90

2.7消息处理机模板项目 91

2.7.1快速开发向导 91

2.7.2后台监控和管理 92

第3章 轻量级的数据库分库分表架构与框架 93

3.1什么是分库分表 94

3.1.1使用数据库的三个阶段 94

3.1.2在什么情况下需要分库分表 95

3.1.3分库分表的典型实例 96

3.2三种分而治之的解决方案 97

3.2.1客户端分片 97

3.2.2代理分片 100

3.2.3支持事务的分布式数据库 101

3.3分库分表的架构设计 102

3.3.1整体的切分方式 102

3.3.2水平切分方式的路由过程和分片维度 106

3.3.3分片后的事务处理机制 107

3.3.4读写分离 119

3.3.5分库分表引起的问题 119

3.4流行代理分片框架Mycat的初体验 123

3.4.1安装Mycat 123

3.4.2配置Mycat 124

3.4.3配置数据库节点 128

3.4.4数据迁移 129

3.4.5 Mycat支持的分片规则 129

3.5流行的客户端分片框架Sharding JDBC的初体验 138

3.5.1 Sharding JDBC简介 138

3.5.2 Sharding JDBC的功能 139

3.5.3 Sharding JDBC的使用 141

3.5.4 Sharding JDBC的使用限制 152

3.6自研客户端分片框架dbsplit的设计、实现与使用 153

3.6.1项目结构 154

3.6.2包结构和执行流程 155

3.6.3切片下标命名策略 159

3.6.4 SQL解析和组装 167

3.6.5 SQL实用程序 168

3.6.6反射实用程序 173

3.6.7分片规则的配置 177

3.6.8支持分片的SplitJdbcTemplate和SimpleSplitJdbcTemplate接口API 179

3.6.9 JdbcTemplate的扩展SimpleJdbcTemplate接口API 184

3.6.10用于创建分库分表数据库的脚本工具 187

3.6.11使用dbsplit的一个简单示例 192

3.6.12使用dbsplit的线上真实示例展示 199

第4章 缓存的本质和缓存使用的优秀实践 201

4.1使用缓存的目的和问题 202

4.2自相似,CPU的缓存和系统架构的缓存 203

4.2.1 CPU缓存的架构及性能 205

4.2.2 CPU缓存的运行过程分析 206

4.2.3缓存行与伪共享 208

4.2.4从CPU的体系架构到分布式的缓存架构 218

4.3常用的分布式缓存解决方案 221

4.3.1常用的分布式缓存的对比 221

4.3.2 Redis初体验 225

4.4分布式缓存的通用方法 229

4.4.1缓存编程的具体方法 229

4.4.2应用层访问缓存的模式 233

4.4.3分布式缓存分片的三种模式 235

4.4.4分布式缓存的迁移方案 238

4.4.5缓存穿透、缓存并发和缓存雪崩 244

4.4.6缓存对事务的支持 246

4.5分布式缓存的设计与案例 248

4.5.1缓存设计的核心要素 248

4.5.2缓存设计的优秀实践 250

4.5.3关于常见的缓存线上问题的案例 253

4.6客户端缓存分片框架redic的设计与实现 257

4.6.1什么时候需要redic 258

4.6.2如何使用redic 258

4.6.3更多的配置 258

4.6.4项目结构 260

4.6.5包结构 261

4.6.6设计与实现的过程 261

第5章 大数据利器之Elasticsearch 268

5.1 Lucene简介 269

5.1.1核心模块 269

5.1.2核心术语 270

5.1.3检索方式 271

5.1.4分段存储 273

5.1.5段合并策略 275

5.1.6 Lucene相似度打分 278

5.2 Elasticsearch简介 286

5.2.1核心概念 286

5.2.2 3C和脑裂 289

5.2.3事务日志 291

5.2.4在集群中写索引 294

5.2.5集群中的查询流程 295

5.3 Elasticsearch实战 298

5.3.1 Elasticsearch的配置说明 298

5.3.2常用的接口 300

5.4性能调优 305

5.4.1写优化 305

5.4.2读优化 308

5.4.3堆大小的设置 313

5.4.4服务器配置的选择 315

5.4.5硬盘的选择和设置 316

5.4.6接入方式 318

5.4.7角色隔离和脑裂 319

第6章 全面揭秘分布式定时任务 321

6.1什么是定时任务 322

6.2分布式定时任务 341

6.2.1定时任务的使用场景 342

6.2.2传统定时任务存在的问题 342

6.2.3分布式定时任务及其原理 344

6.3开源分布式定时任务的用法 347

6.3.1 Quartz的分布式模式 347

6.3.2 TBSchedule 356

6.3.3 Elastic-Job 365

第7章 RPC服务的发展历程和对比分析 377

7.1什么是RPC服务 378

7.2 RPC服务的原理 379

7.2.1 Sokcet套接字 379

7.2.2 RPC的调用过程 380

7.3在程序中使用RPC服务 382

7.4 RPC服务的发展历程 383

7.4.1第一代RPC:以ONC RPC和DCE RPC为代表的函数式RPC 384

7.4.2第二代RPC:支持面对象的编程 388

7.4.3第三代RPC: SOA和微服务 398

7.4.4架构的演进 402

7.5主流的RPC框架 403

7.5.1 Thrift 403

7.5.2 ZeroC Ice 410

7.5.3 gRPC 418

7.5.4 Dubbo 430

第8章 Dubbo实战及源码分析 436

8.1 Dubbo的四种配置方式 437

8.1.1 XML配置 437

8.1.2属性配置 440

8.1.3 API配置 441

8.1.4注解配置 443

8.2服务的注册与发现 446

8.2.1注册中心 446

8.2.2服务暴露 449

8.2.3引用服务 451

8.3 Dubbo通信协议及序列化探讨 455

8.3.1 Dubbo支持的协议 455

8.3.2协议的配置方法 456

8.3.3多协议暴露服务 457

8.3.4 Dubbo协议的使用注意事项 458

8.3.5 Dubbo协议的约束 459

8.4 Dubbo中高效的I/O线程模型 459

8.4.1对Dubbo中I/O模型的分析 459

8.4.2 Dubbo中线程配置的相关参数 460

8.4.3在Dubbo线程方面踩过的坑 461

8.4.4对Dubbo中线程使用的建议 462

8.5集群的容错机制与负载均衡 462

8.5.1集群容错机制的原理 462

8.5.2集群容错模式的配置方法 464

8.5.3六种集群容错模式 464

8.5.4集群的负载均衡 465

8.6监控和运维实践 467

8.6.1日志适配 467

8.6.2监控管理后台 467

8.6.3服务降级 473

8.6.4优雅停机 475

8.6.5灰度发布 475

8.7 Dubbo项目线上案例解析 477

8.7.1线上问题的通用解决方案 477

8.7.2耗时服务耗尽了线程池的案例 480

8.7.3容错重试机制引发服务雪崩的案例 481

8.8深入剖析Dubbo源码及其实现 483

8.8.1 Dubbo的总体架构设计 483

8.8.2配置文件 486

8.8.3 Dubbo的核心RPC 488

8.8.4 Dubbo巧妙的URL总线设计 491

8.8.5 Dubbo的扩展点加载SPI 492

8.8.6 Dubbo服务暴露的过程 493

8.8.7服务引用 502

8.8.8集群容错和负载均衡 503

8.8.9集群容错 504

8.8.10负载均衡 509

第9章 高性能网络中间件 512

9.1 TCP/UDP的核心原理及本质探索 513

9.1.1网络模型 513

9.1.2 UDP、IP及其未解决的问题 515

9.1.3 TCP详解 519

9.1.4是否可以用UDP代替TCP 527

9.1.5网络通信的不可靠性讨论 529

9.2网络测试优秀实践 530

9.2.1网络测试的关键点 530

9.2.2那些必不可少的网络测试工具 532

9.2.3典型的测试报告 539

9.3高性能网络框架的设计与实现 544

9.3.1对代理功能的测试及分析 545

9.3.2网络中间件的使用介绍 549

9.3.3内存和缓存的优化 551

9.3.4快速解析流数据 554