内容简介
随着互联网的飞速发展,各行各业对互联网服务的要求也越来越高,互联网系统很多常见的存储类场景都面临着容量和稳定性风险。此时,本地缓存已无法满足需要,分布式缓存由于其高性能、高可用性等优点迅速被广大互联网公司接受并使用。
本书共分3个部分,每个部分都有3章。部分为基本功能的实现,主要介绍基于HTTP的in memory缓存服务、HTTP/REST协议、TCP等。第2部分介绍性能相关的内容,我们将集中全力讲解从各方面提升缓存服务性能的方法,主要包括pipeline的原理、RocksDB批量写入等。很后一个部分则和分布式缓存服务集群有关,主要介绍分布式缓存集群、节点的再平衡功能等。本书选择用来实现分布式缓存的编程语言是当前流行的Go语言。
本书适合从事缓存方面工作的工程师或架构师,也适合想要学习和实现分布式缓存的读者。
作者介绍
胡世杰,上海交通大学硕士,目前在七牛云任职技术专家,是私有云存储服务的负责人。 他是分布式对象存储系统专家,在该领域拥有多年的架构、开发和部署经验,精通C、C++、Perl、Python、Ruby、Go等多种编程语言,熟悉ElasticSearch、RabbitMQ等各种开源软件。之前他还写过一本关于分布式对象存储的图书—《分布式对象存储—原理、架构及Go语言实现》。本书是他的第二部作品。 除了自己写作,他还致力于技术图书的翻译,是《JavaScript面向对象精要》《Python和HDF5大数据应用》《Python高性能编程》等多部著作的译者。
目录
- 第 1部分 基本功能
- 第 1章 基于HTTP的内存缓存服务 3
- 1.1 缓存服务的接口 3
- 1.1.1 REST接口 3
- 1.1.2 缓存Set流程 5
- 1.1.3 缓存Get流程 6
- 1.1.4 缓存Del流程 7
- 1.2 Go语言实现 8
- 1.2.1 main包的实现 8
- 1.2.2 cache包的实现 9
- 1.2.3 HTTP包的实现 14
- 1.3 功能演示 19
- 1.4 与Redis比较 21
- 1.4.1 Redis介绍 21
- 1.4.2 redis-benchmark介绍 23
- 1.4.3 cache-benchmark介绍 24
- 1.4.4 性能对比 26
- 1.5 小结 30
- 第 2章 基于TCP的内存缓存服务 32
- 2.1 基于TCP的缓存协议规范 33
- 2.1.1 协议范式 33
- 2.1.2 缓存Set流程 35
- 2.1.3 缓存Get流程 36
- 2.1.4 缓存Del流程 36
- 2.2 Go语言实现 37
- 2.2.1 main函数的变化 37
- 2.2.2 TCP包的实现 38
- 2.2.3 客户端的实现 44
- 2.3 功能演示 45
- 2.4 性能测试 47
- 2.5 小结 48
- 第3章 数据持久化 50
- 3.1 RocksDB简介 50
- 3.2 RocksDB性能测试 51
- 3.2.1 基本读写性能 52
- 3.2.2 大容量测试 52
- 3.3 用cgo调用C++库函数 55
- 3.4 Go语言实现 58
- 3.4.1 main函数的实现 58
- 3.4.2 cache包的实现 59
- 3.5 功能演示 65
- 3.6 性能测试 67
- 3.7 小结 69
- 第 2部分 性能相关
- 第4章 用pipelining加速性能 73
- 4.1 pipelining原理 73
- 4.2 redis pipelining性能对比 75
- 4.3 Go语言实现 77
- 4.3.1 main包的实现 77
- 4.3.2 cacheClient包的实现 86
- 4.4 性能测试 97
- 4.5 小结 99
- 第5章 批量写入 101
- 5.1 批量写入能够提升写入性能的原理 101
- 5.2 RocksDB批量写入性能测试 102
- 5.3 Go语言实现 103
- 5.4 性能测试 108
- 5.5 小结 112
- 第6章 异步操作 113
- 6.1 异步操作能够提升读取性能的原理 114
- 6.2 Go语言实现 117
- 6.3 性能测试 122
- 6.4 小结 127
- 第3部分 服务集群
- 第7章 分布式缓存 131
- 7.1 为什么我们需要集群服务 131
- 7.2 负载均衡和一致性散列 133
- 7.3 获取节点列表的接口 140
- 7.4 Go语言实现 140
- 7.4.1 main函数的实现 140
- 7.4.2 cluster包的实现 141
- 7.4.3 HTTP包的实现 145
- 7.4.4 TCP包的实现 147
- 7.5 功能演示 149
- 7.6 小结 152
- 第8章 节点再平衡 154
- 8.1 节点再平衡的技术细节 154
- 8.2 节点再平衡的接口 155
- 8.3 Go语言实现 155
- 8.3.1 HTTP包的实现 155
- 8.3.2 cache包的实现 157
- 8.4 功能演示 162
- 8.5 小结 164
- 第9章 缓存生存时间 166
- 9.1 缓存生存时间的作用 166
- 9.2 Go语言实现 167
- 9.2.1 main函数的实现 167
- 9.2.2 cache包的实现 168
- 9.3 功能演示 172
- 9.4 小结 174