高性能架构——多级网关与多级缓存实践
简介
本书特色
前言
章节列表
精彩阅读
下载资源
相关图书
内 容 提 要
“缓存”—在计算机领域中无处不在,几乎在任何项目中都能看到“缓存”的影子。不论是移动互联网、云计算还是大数据领域,“缓存”都可以提供更快速、更可靠、更高效的性能和体验。正因如此,“多级缓存”这样的架构理念在复杂的分布式或微服务系统中也被逐步地演变与应用。
本书依托实际案例,从基础技术开始逐步深入探讨多级缓存架构与多级网关的架构原理与应用,并且最终使用KubeSphere进行云原生的项目部署。本书也会引导读者从基础架构逐步进阶为高级架构,并整体涵盖基础项目架构的搭建、缓存的应用、分布式架构、网关设计与应用、并发优化等方面的相关技术知识,从而使读者对多级架构有更深入的了解。
本书主要分为三大部分。第一部分“基础篇”会搭建基础架构,并且实现本地缓存Caffeine与分布式缓存Redis的应用以及Redis进阶。第二部分“进阶篇”对项目的架构进行演变,结合Lua脚本实现网关业务逻辑,从而构建多级网关与多级缓存架构,以此实现基于网关的高并发操作。第三部分“云原生与DevOps”会对Kubernetes进行介绍,并且围绕KubeSphere来落地,进行项目的流水线发布。
本书适合软件开发工程师、系统架构师、运维工程师、测试工程师以及对构建高性能系统架构感兴趣的读者阅读,不论你是初学者还是经验丰富的专业技术人员,本书都将提供有价值的技术与知识。
本书从全方面的角度剖析了如何构建高性能的微服务系统,对于缓存模块的深度分析给我
留下了深刻的印象,对于一般企业用户来说利用好缓存技术尤为重要。另外,本书也介绍
了如何利用Kubernetes 容器化所有组件实现高可用,内容非常全面。
—— Eric.W 王刚 SHOP.COM 首席架构师
互联网高性能系统的核心设计在于缓存与网关。本书通过将缓存、网关与OpenResty 相
结合,为大规模业务提供全面的防护机制和高性能解决方案。阅读本书,不仅能帮助读者
深入理解分布式多级架构,还能提升架构设计思维。
——石力军(慕课网)技术总监
缓存和网关在现代复杂系统中是不可或缺的核心组件,既是提升性能的关键技术突破口,
也是系统架构的重要支柱。如今多级缓存和多级网关已经广泛应用于各种规模的系统中,
承担着大部分高并发流量,确保系统的稳定与高效。本书系统介绍了多级缓存与多级网关
的架构原理及实现方法,通过详细讲解和实际案例,帮助开发者深入理解并掌握多级架构
的精髓。无论是初学者还是经验丰富的开发者,都能从中获得宝贵的知识和实践指导。
—— 顾佳书(苏州科达)部门总监
本书深入剖析高性能多级网关与多级缓存架构,实战性强,极具指导意义。从业务架构层
面看,它优化了流量管理与数据处理效率;在网络安全层面,通过构建高可用网关集群与
负载均衡,增强了安全防护机制,确保业务安全。阅读本书,可以帮助读者构建高效且安
全的业务系统。
——王世宇 (安信安全)安全服务部经理
前 言
写作缘起
2017年,我们团队的项目在长期运营后遇到了技术瓶颈,不论采购多好的服务器,并发量与性能始终上不来,而采购多台服务器组成集群虽然能提高一定的并发量,但是始终不尽如人意,而且硬件成本相当高。在这样的情况下,我们团队与架构组共同研讨尝试使用多级网关与多级缓存相互结合的方式来为项目提供服务。经过大量的测试与试运行,最终顺利生产发布并获得了很不错的效果,发布一周后,我们的日流水达到了800万,这相当令人兴奋,让老板对我们刮目相看,团队也获得了巨大的成就感。
正因如此,在近几年的在线教育经历中,我也在极力地向学员和身边的公司推荐多级解决方案,以此解决性能与并发的痛点。在目前的互联网大环境下,并发的情况几乎随处可见,所以当有极致并发出现的时候,我们不能仅通过Java后端来优化,而是要对环境和项目来进行全局性、综合性的设计和优化。多级网关与多级缓存架构在如今的互联网领域中起着至关重要的作用,对于高性能、高可扩展、高并发都具有重要的意义。
出于对技术教育的热忱和对知识分享的欲望,我决定撰写本书,也希望通过将多级架构的方案以概念、原理和实践经验融合的方式,为广大读者朋友提供一本系统的且易于理解的参考资料。我也希望通过本书为相关的技术从业者、在校学生、老师以及互联网研究人员提供一个全面而准确的技术参考。
此外,我相信多级架构方案的重要性将会持续增加。随着云计算、大数据、物联网、人工智能、云原生等技术的快速发展,对于高效、高性能的数据读写和处理解决方案的需求也越来越迫切。我希望通过本书,能够帮助读者更好地理解和应用多级网关与多级缓存架构,从而使得大家可以在各自的技术领域中取得竞争优势与技术成果。
最后,我希望本书能够作为技术知识的传递媒介,激发读者的技术思维与技术创造力,并且帮助读者更好地理解和应用这一重要技术架构。我也非常希望读者能够深入研究和动手实践,把本书中的各类方案实操应用到实际项目中。
如何正确阅读本书
为了大家能够充分利用本书的内容,笔者给出如下建议,确保大家可以有更好的阅读以及学习体验。
储备基础知识:本书是面向技术专业人士而编写的,主要方向为Java编程和技术架构。如果读者对多级网关与多级缓存感兴趣,在开始阅读之前,可以了解一些相关的基础知识,这将有助于读者更好地理解和消化本书的相关技术内容。
循序渐进:如果读者对本书大多数的技术都不太了解,那么建议逐章阅读本书,作者会从零讲授,深入浅出地把各个相关技术点的方方面面进行讲解,确保读者获得系统的知识技能。
输入输出并行学习:大家在学习的过程中通过阅读来获取知识,这是“输入性操作”(也就是被动接收);而学习的同时如果能够通过书中的各类实操,以及将代码编写应用到自己的项目中进行实现,那么则是“输出性操作”(也就是主动实践)。只有输入输出相互结合,大家才能更好地学习到多级网关与多级缓存架构的技术理念,而不会过了一个月甚至一周就忘却。如此便能够掌握学习的要点,甚至做出创新性的功能并将其应用到现实中。
结合其他资源阅读:本书可以用来作为大家学习多级网关与多级缓存架构的催化剂,但建议大家阅读本书的同时结合各类专项技术类书籍共同学习,比如RabbitMQ消息队列、MySQL数据库、SpringBoot&MyBatis等,通过多方面的学习,可以更好地促进自己的技术进步。另外,多在技术社区与论坛还有github参与交流以及issue提交,从而获得更全面的学习效果。
按需阅读:如果大家对书中部分章节已经非常熟悉并能熟练运用,那么可以选择性跳过,直接去阅读更有需求的其他章节,以此节约时间并提高阅读效率。
提问交流:如果大家在阅读本书和学习实操的过程中遇到一些问题或有不解之处,可以随时随地向作者提问,不论是通过作者的邮箱、github还是公众号,都可以进行交流和讨论,大家的互动和学习经验也有助于作者对本书进行更好地改进。
期望大家在阅读的过程中可以更好地享受多级网关与多级缓存架构这个技术领域,也期望本书能够为大家打开技术落地的新思路和架构的拓展创新思维。祝大家阅读愉快,并从中获得实质性进步。
如何获取源代码、如何跟作者沟通、读者勘误如何反馈等
欢迎大家对本书勘误,可以关注作者公众号“风间影月”留言,也可以发邮件到leechenxiang@163.com,甚至读者在工作的过程中遇到各类业务方案或者技术相关的难题,也都可以和作者交流相互探讨。
此外,对于书中提及的所有代码片段以及相关配置,笔者都将提交到如下git仓库:https://github.com/leechenxiang/multi-level-architecture,欢迎大家随时浏览。
大家的反馈和意见对于笔者来说将会是非常宝贵的动力和促进。
前言
致谢
基 础 篇
第1章 基础环境与软件配备 2
1.1 Java的历史发展简介 2
1.2 JDK8的安装 2
1.2.1 Java运行时环境JDK 2
1.2.2 Windows系统安装JDK8 3
1.2.3 MacOS(Intel)系统安装JDK8 9
1.2.4 MacOS(arm64)系统安装JDK8 11
1.3 安装Maven,配置项目工程的构建
管理工具 13
1.3.1 Maven概述 13
1.3.2 Windows系统安装Maven 14
1.3.3 MacOS系统安装Maven 16
1.3.4 配置阿里云镜像仓库 16
1.4 开发工具 17
1.5 本章小结 17
第2章 Docker容器化入门 19
2.1 内网互通原则 19
2.2 容器化引擎Docker 20
2.2.1 虚拟化与容器化技术 20
2.2.2 Docker的架构 21
2.2.3 Docker的隔离机制 22
2.2.4 Docker的安装 22
2.2.5 Docker的启动 23
2.2.6 Docker的加速 24
2.3 使用Docker安装数据库 26
2.3.1 使用Docker的pull命令拉取
镜像 26
2.3.2 开启CentOS7的ipv4 27
2.3.3 使用docker run运行镜像 27
2.3.4 可视化数据库工具 29
2.3.5 Docker命令 31
2.4 Docker镜像的提交与推送 34
2.4.1 提交镜像 34
2.4.2 自定义tag标签 35
2.4.3 推送镜像 35
2.5 本章小结 36
第3章 构建Web服务与接口 37
3.1 构建Web项目 37
3.1.1 使用Maven初始化项目 37
3.1.2 搭建SpringBoot工程 40
3.1.3 编写Restful风格接口 45
3.1.4 dev与prod环境切换 47
3.2 集成持久层框架 48
3.2.1 集成数据源 48
3.2.2 整合MyBatis 50
3.2.3 数据构建 52
3.2.4 数据库逆向工具 53
3.2.5 编写service业务层 55
3.2.6 @Junit操作持久层 56
3.2.7 对外暴露接口服务 58
3.3 本章小结 60
第4章 本地缓存Caffeine 61
4.1 进程间与进程外缓存 61
4.1.1 什么是缓存 61
4.1.2 进程内缓存与分类 62
4.1.3 进程外缓存 64
4.2 使用Caffeine本地缓存 65
4.2.1 集成Caffeine 65
4.2.2 使用junit进行Caffeine测试 66
4.2.3 Caffeine的值为空设值操作 67
4.3 SpringBoot整合Caffeine本地缓存 68
4.3.1 集成Caffeine配置 68
4.3.2 使用Caffeine 69
4.4 本章小结 70
第5章 Redis缓存中间件 71
5.1 分布式缓存中间件Redis 71
5.1.1 非关系型数据库的由来 71
5.1.2 分布式缓存Redis与NoSQL 72
5.1.3 Redis的Key-Value键值对 73
5.2 安装Redis 74
5.2.1 安装原生Redis 74
5.2.2 操作Redis的基本命令 76
5.2.3 使用可视化工具Redis Desktop
Manager 77
5.2.4 使用Docker安装Redis 79
5.2.5 在Redis容器内部运行redis-cli 81
5.2.6 容器自动重启 82
5.3 五大数据类型常用操作 82
5.3.1 string字符串类型 83
5.3.2 list数据类型 84
5.3.3 hash哈希数据类型 85
5.3.4 set无序集合数据类型 86
5.3.5 sorted set 可排序集合数据类型 87
5.4 Redis的存储原理 88
5.4.1 Redis是怎么做持久化的 88
5.4.2 RDB持久化机制 88
5.4.3 RDB的自动保存机制 90
5.4.4 AOF持久化机制 92
5.4.5 使用AOF引发的思考 92
5.4.6 AOF的重写配置 92
5.4.7 AOF与RDB的混合持久化 93
5.5 本章小结 95
第6章 分布式缓存的应用方案 96
6.1 SpringBoot与Redis集成 96
6.1.1 构建SpringBoot项目高可用
集群 96
6.1.2 SpringBoot整合Redis 99
6.1.3 Redis的通用工具操作类 102
6.1.4 Redis与本地缓存并肩作战 109
6.2 分布式缓存问题延伸 111
6.2.1 缓存预热 111
6.2.2 Redis缓存穿透 113
6.2.3 Redis缓存击穿 115
6.2.4 Redis缓存雪崩 116
6.3 分布式系统的CAP理论 117
6.3.1 分布式系统 117
6.3.2 CAP是什么 118
6.3.3 CAP定理 119
6.3.4 CAP的组合搭配 121
6.4 缓存数据双写方案 121
6.4.1 存储媒介发生数据不一致 121
6.4.2 数据库与缓存双写不一致 123
6.4.3 数据库与缓存双写一致方案 124
6.5 本章小结 126
第7章 Redis分布式锁 127
7.1 分布式锁 127
7.1.1 分布式锁是什么 127
7.1.2 本地锁是什么 128
7.1.3 分布式锁的原理 129
7.1.4 数据库悲观锁 129
7.1.5 数据库乐观锁 130
7.2 Redis分布式锁 131
7.2.1 setnx锁机制 131
7.2.2 基于setnx的实现 131
7.2.3 锁的自动续期 134
7.3 Redisson客户端 135
7.3.1 Redisson 概述 135
7.3.2 Redisson配置 136
7.3.3 Redisson分布式锁 137
7.3.4 Redisson公平锁 138
7.3.5 Redisson联锁 139
7.4 本章小结 140
第8章 Redis集群高可用 141
8.1 Redis主从架构 141
8.1.1 Redis主从复制原理 141
8.1.2 构建Redis 主从架构 142
8.2 Redis哨兵架构 144
8.2.1 Redis哨兵架构原理 144
8.2.2 构建Redis哨兵形态 146
8.3 Redis高可用集群架构 147
8.3.1 Redis集群原理 147
8.3.2 构建Redis集群形态的准备
工作 149
8.3.3 Redis集群架构 Cluster实操 149
8.3.4 Redis集群的故障转移 152
8.3.5 Redis集群数据存取 153
8.3.6 Redis集群水平扩容 154
8.3.7 Redis集群的十点总结 158
8.4 Redis缓存淘汰机制 158
8.5 本章小结 159
进 阶 篇
第9章 nginx网关中间件 161
9.1 网关中间件nginx 161
9.1.1 nginx是什么 161
9.1.2 服务器的选型 162
9.1.3 反向代理与正向代理 164
9.2 安装nginx与配置 165
9.2.1 下载并安装nginx的依赖环境 165
9.2.2 安装nginx到Linux系统中 166
9.2.3 详解conf配置 168
9.3 nginx的基本应用 171
9.3.1 日志切割(手动) 171
9.3.2 日志切割(自动) 171
9.3.3 location请求的路由规则 172
9.3.4 静态资源服务器 174
9.4 本章小结 176
第10章 集群与负载均衡 177
10.1 集群与分布式 177
10.1.1 集群与分布式的概念 177
10.1.2 负载均衡的概念 178
10.2 实现集群负载均衡 179
10.2.1 配置上游服务集群 179
10.2.2 负载均衡之轮询 180
10.2.3 负载均衡之权重 181
10.2.4 负载均衡之ip_hash 181
10.2.5 负载均衡之url_hash 182
10.3 一致性哈希原理 182
10.4 OSI网络模型原理 183
10.4.1 七层网络模型 183
10.4.2 七层模型的归类与合并 185
10.5 本章小结 187
第11章 Lua脚本语言基础 188
11.1 Lua脚本 188
11.1.1 Lua脚本介绍 188
11.1.2 Lua脚本入门 189
11.2 Lua的数据类型 189
11.2.1 nil类型 189
11.2.2 boolean类型 190
11.2.3 number类型 190
11.2.4 string类型 191
11.2.5 function类型 191
11.2.6 table类型 192
11.3 Lua的循环与控制判断 193
11.3.1 Lua的循环 193
11.3.2 Lua的控制判断 195
11.3.3 Lua语法实操 195
11.4 本章小结 197
第12章 高性能OpenResty平台 198
12.1 OpenResty 198
12.1.1 OpenResty 背景介绍 198
12.1.2 OpenResty与nginx的区别 198
12.1.3 OpenResty 所处架构位置 199
12.2 安装OpenResty 201
12.2.1 OpenResty环境配置与安装
—方式一 201
12.2.2 OpenResty环境配置与安装
—方式二(推荐) 201
12.3 OpenResty的目录结构与运行 202
12.3.1 OpenResty的目录结构 202
12.3.2 测试访问页面 203
12.4 为OpenResty配置nginx的环境变量 203
12.5 本章小结 204
第13章 多级缓存落地 205
13.1 OpenResty结合Lua控制请求
与响应 205
13.1.1 OpenResty结合Lua自定义
数据响应 205
13.1.2 OpenResty结合Lua获得
请求相关参数 207
13.2 Lua自定义请求反向代理 209
13.2.1 封装GET请求 209
13.2.2 封装POST请求 210
13.2.3 Lua控制请求转发 211
13.3 多级缓存架构落地 212
13.3.1 lua-resty-redis 212
13.3.2 封装Redis通用模块 214
13.3.3 完成多级缓存架构闭环 216
13.4 本章小结 217
第14章 多级网关 218
14.1 多级网关集群 218
14.1.1 什么是多级网关 218
14.1.2 nginx构建OpenResty集群 219
14.2 OpenResty的本地缓存 221
14.2.1 定义共享字典(本地缓存) 221
14.2.2 共享字典与多级缓存业务的
结合 221
14.3 ApiPost性能压测 223
14.3.1 压力测试 223
14.3.2 ApiPost介绍 223
14.3.3 使用ApiPost进行接口调试 224
14.3.4 配置ApiPost的压测场景 225
14.3.5 进行接口压测 226
14.4 本章小结 227
第15章 多级缓存数据同步 228
15.1 缓存数据同步方案 228
15.1.1 缓存与数据库不一致的
出现场景 228
15.1.2 消息队列方案 228
15.1.3 Zookeeper方案 230
15.1.4 Canal方案 231
15.2 消息队列 232
15.2.1 什么是消息队列 232
15.2.2 消息队列的技术选型 234
15.2.3 生产者与消费者 234
15.3 安装RabbitMQ 236
15.3.1 Docker安装RabbitMQ 236
15.3.2 RabbitMQ的可视化后台管理 238
15.3.3 RabbitMQ的模型原理 240
15.4 缓存数据的一致性落地 241
15.4.1 缓存数据的同步过程 241
15.4.2 SpringBoot集成RabbitMQ 243
15.4.3 配置交换机与队列 244
15.4.4 构建生产者—发送消息 246
15.4.5 构建消费者—监听队列 249
15.4.6 多节点对同一消息的监听
处理 249
15.4.7 完成并测试缓存数据的同步 250
15.5 本章小结 253
第16章 OpenResty实践 254
16.1 用户请求频率限制与黑名单 254
16.1.1 网关限流需求说明 254
16.1.2 封装请求拦截函数 254
16.1.3 结合业务进行拦截 258
16.2 OpenResty集成MySQL 259
16.2.1 解读lua-resty-mysql示例代码 259
16.2.2 封装MySQL请求函数 261
16.2.3 实现调用MySQL业务 263
16.2.4 转发请求到sql查询的Lua文件 264
16.3 本章小结 264
云原生与DevOps
第17章 云原生与KubeSphere 266
17.1 DevOps与CICD 266
17.1.1 DevOps概述 266
17.1.2 CICD概述 268
17.2 Kubernetes初探 270
17.2.1 Kubernetes概述 270
17.2.2 Kubernetes 可以用来做什么 271
17.2.3 Kubernetes架构原理 272
17.2.4 Kubernetes的Pod容器 274
17.3 KubeSphere的使用与安装 275
17.3.1 KubeSphere 概述 275
17.3.2 KubeSphere环境准备 276
17.3.3 KubeSphere安装 279
17.3.4 KubeSphere启用DevOps 282
17.4 KubeSphere多租户 285
17.4.1 KubeSphere多租户系统 285
17.4.2 KubeSphere多租户角色 285
17.4.3 KubeSphere多租户账号分配 286
17.4.4 KubeSphere 企业空间创建
与账号绑定 288
17.4.5 KubeSphere项目负责人账号
分配 291
17.5 本章小结 294
第18章 KubeSphere部署中间件 295
18.1 应用的状态 295
18.1.1 有状态应用 295
18.1.2 无状态应用 295
18.1.3 KubeSphere项目的存储、服务
与配置 296
18.2 KubeSphere部署中间件MySQL8 299
18.2.1 设置保密字典 299
18.2.2 设置配置字典 300
18.2.3 配置MySQL的持久卷PVC 302
18.2.4 创建MySQL的有状态服务 304
18.2.5 为MySQL创建数据库并导入
数据 309
18.3 部署Redis 312
18.3.1 创建Redis的配置字典
与持久卷 312
18.3.2 创建Redis有状态服务 314
18.4 部署RabbitMQ 317
18.4.1 创建RabbitMQ的持久卷
与配置字典 317
18.4.2 创建RabbitMQ的无状态服务 318
18.4.3 RabbitMQ无状态服务对外
访问 320
18.5 原生安装OpenResty 323
18.6 本章小结 326
第19章 DevOps流水线发布项目 327
19.1 DevOps前置准备工作 327
19.1.1 DevOps部署流程 327
19.1.2 为流水线创建凭证 328
19.1.3 项目的生产配置 330
19.1.4 编写DockerFile 332
19.1.5 编写k8s-YAML部署文件 334
19.2 开始DevOps流程 338
19.2.1 推送代码 338
19.2.2 创建项目流水线 342
19.2.3 拉取代码 344
19.2.4 为流水线构建动态参数 348
19.2.5 流水线打印动态参数 350
19.2.6 为流水线配置环境变量 350
19.2.7 流水线推送镜像到DockerHub 351
19.2.8 推送latest镜像到DockerHub 356
19.2.9 流水线部署项目到KubeSphere
环境中 358
19.2.10 测试生产环境的项目接口
访问 360
19.3 集群与扩容 360
19.3.1 手动扩容 360
19.3.2 自动扩容 362
19.3.3 OpenResty集群配置 363
19.4 构建云负载均衡器 365
19.5 本章小结 369
- 皓月繁星:24位大咖的心理课堂 [主编 林赞歌]
- 系统集成项目管理工程师案例分析一本通(第二版) [王树文 编著]
- 信息安全工程师考前冲刺100题(第二版) [施 游 朱小平 编著]
- 信息系统项目管理师考前冲刺100题(配套第四版大纲) [刘毅 朱小平 编著]
- SQL Server 2019数据库实战教程 [主编 岳付强 曾陈萍 唐承佳]
- 大学生创新创业实践—机械类 [主编 林卿 史洪玮 沈洋]
- 程序思维与C语言实现 [张祎 王俊海 吕波]
- 国际交流英语 [金忍冬]
- 网络组建与互联 [马峰柏 李佼辉]
- 画屏—2023年中央媒体国家水网建设新闻报道汇编 [水利部宣传教育中心 编]
- 大学计算机基础教程(Windows 10+WPS Office 2019) [吴志攀 刘利]
- Python程序设计及实践教程 [肖朝晖]
- MySQL数据库技术项目化教程——基于OBE理念 [主编 刘崇巍 庞金龙]
- 新时代大学生入学教育 [主编 程静 周毅 周世兵]
- 计算机信息素养基础(第二版) [主编 陈艳]
- 计算机基础与应用(第二版) [主编 秦凯]
- 计算机网络技术实训教程(第二版) [主编 高良诚]
- 高职英语语法教程 [主编 汪莉 高小兵 张学仪]
- 绿色生态环保主题口译教程 [主编 江雯 汪学华 李茂彪]
- 大学体育数字化实用教程 [主编 周秀蓉 叶钰海]
- 大学计算机基础教程(Windows 10+WPS Office 2019) [吴志攀 刘利]
- 应用数学 [吴小宁]
- 新时代劳动教育与实践 [鞠向超]
- 信息系统项目管理师真题及冲刺卷精析(适用机考) [主编 薛大龙]
- 系统集成项目管理工程师真题及冲刺卷精析(适用机考) [主编 薛大龙 副主编 唐徽 刘]
- Linux服务器构建与运维管理从基础到实战(基于openEuler) [阮晓龙 冯顺磊 杜宇飞 刘明哲]
- 网络安全原理与应用(第三版) [戚文静 刘学 李国文 王震]
- 信息系统监理师章节习题与考点特训(适用第2版考纲) [薛大龙]
- 大学生创新创业实践——经济管理类 [许忠荣]
- 思考的艺术:让创新成为你的DNA(第二版) [杨璐璐 武 晓]