书籍作者:尼恩 | ISBN:9787302621416 |
书籍语言:简体中文 | 连载状态:全集 |
电子书格式:pdf,txt,epub,mobi,azw3 | 下载次数:8900 |
创建日期:2023-05-11 | 发布日期:2023-05-11 |
运行环境:PC/Windows/Linux/Mac/IOS/iPhone/iPad/Kindle/Android/安卓/平板 |
本书从动态代理模式、Reactor模式、三大限流策略等知识入手,深入浅出地剖析Spring Cloud+Nginx系统架构的核心原理以及Web高并发开发技术。全书从基础设计模式和基础原理出发,理论与实战相结合,系统、详尽地介绍Spring Cloud + Nginx高并发核心编程。
本书共10章。前6章剖析Feign高并发RPC的底层原理,解析Hystrix高性能配置的核心选项,阐述Hystrix滑动窗口的核心原理;后4章介绍Nginx的核心原理及其配置,并结合秒杀场景实现Spring Cloud秒杀、Spring Cloud+Nginx Lua秒杀,为广大Java开发者提供一个全面学习高并发开发的实战案例。这些知识会为广大Java工程师解决后台开发中遇到的高并发、高性能问题打下坚实的技术基础。
尼 恩
中南大学硕士,资深系统架构师、IT领域资深作家、著名博主、从业十余年,先后在华为、神州数码等公司从事技术研发、架构工作。长期专注于高性能Web平台、高性能通信、高性能搜索、数据挖掘等领域的3高架构研究、架构实操、核心代码开发工作,以及核心中间件、底层源码研究工作,负责过多个亿级RMB智慧城市平台、大型政务平台、数据中台架构、技术中台架构工作,发起的3高研究社群“疯狂创客圈”目前有研究人员1100多人。
唐 欢
计算机专业硕士,资深系统架构师、资深博主,拥有多年Java开发和系统架构经验,多年敏捷开发的项目管理经验,现在国内科技企业担任系统架构师一职,主持企业软件的系统架构和产品研发工作。
孙精科
南京理工大学计算机专业硕士,上海交通大学EMBA。行业内知名信息化系统专家,具有丰富的大型信息系统的研发及管理经验。近10年来,主持上市公司信息系统建设、三维开发、通信协议转换、数据采集、软硬件一体化产品的研发。具有丰富的国际国内项目咨询经验,担任多项省级项目负责人,主持的多个项目获得省部级奖项;2003—2008年,在东南亚、中东、非洲、南美等地执行国际咨询项目。
朱达华
资深技术总监、美国协会PMI项目管理师、敏捷教练。近10年来在一线主持技术管理工作,擅长系统架构分析和设计,负责过多个大型省市级系统建设,服务数千万的用户。
基于亿级用户的高并发、高可用性和高性能Web应用进行体系化、结构化、清晰化的章节安排。
从Java静态代理、动态代理模式入手,解读Spring Cloud全家桶中RPC的核心原理和执行过程。
从观察者模式入手,解读RxJava、Hystrix的核心思想和使用方法。
从高性能传输模式Reactor模型入手,解读Nginx的核心思想以及各配置项的底层知识和原理。
本书的初衷是为读者奉上一本Spring Cloud和Nginx的“原理级”“思想级”的优秀图书,帮助读者顺利
进入互联网大厂,成为高级Java工程师和核心架构师。
前 言
在平时的开发工作中,大部分小伙伴并不能涉及高并发、高可用、高性能(简称“3高”)的场景,而这些“3高”理论和实操知识又是大家面试必备的核心知识,笔者希望通过本书,基于亿级用户“3高”Web应用的架构分析理论,为大家对“3高”架构系统做一个系统化和清晰化的介绍。
从实操的维度来说,Spring Cloud+Nginx系统架构毫无疑问是当今“3高”Web应用的主流技术之一。分布式Spring Cloud微服务框架和高性能的Nginx反向代理Web服务的优秀组合,满足了各大产品和项目的可扩展、高可用、高性能架构的需求。
本书从基础设计模式、基础原理出发,理论与实战相结合,对“3高”Web应用的基础理论与知识体系,以及Spring Cloud + Nginx高并发编程的核心原理做了非常系统和详尽的介绍。本书旨在帮助初、中、高级开发工程师弥补在“3高”Web应用知识体系、Spring Cloud微服务、Nginx反向代理核心知识方面的短板,为广大开发人员顺利成长为优秀的Java高级工程师、系统架构师提供帮助。
本书内容
本书内容分为11章,分别说明如下:
第1章介绍亿级用户Web应用的架构所涉及的分层架构、扩展架构、缓存架构、数据层架构、异步架构、高可用架构等基础原理,介绍亿级用户量场景下的流量预估方法和实操技巧。
第2章介绍接入层Nginx和服务层Spring Cloud高并发核心编程的学习准备,包括知识背景、开发和自验证环境的准备。
第3章介绍服务层Spring Cloud入门实战,包括注册中心、配置中心、微服务提供者的入门开发和配置。
第4章介绍服务层Spring Cloud RPC远程调用的核心原理,从设计模式的代理模式开始,抽丝剥茧、层层递进地揭秘Spring Cloud Feign的底层RPC远程调用的核心原理。
第5章介绍RxJava响应式编程框架。在Spring Cloud框架中涉及Ribbon和Hystrix两个重要的组件,它们都用到了RxJava响应式编程框架。作为非常重要的编程基础知识,本书特意设立本章对RxJava的原理和使用进行详细介绍。
第6章介绍服务层Hystrix RPC保护的原理,从RxJava响应式编程框架的应用开始,溯本求源、循序渐进地揭秘Spring Cloud Hystrix的底层RPC保护的核心原理。
第7章介绍微服务网关与用户身份识别。微服务网关是微服务架构中不可或缺的部分,它统一解决Provider路由、负载均衡、权限控制等问题。
第8章详解接入层Nginx/OpenResty,从高性能传输模式Reactor模型入手,寻踪觅源、由浅入深地揭秘Nginx反向代理Web服务器的核心知识,包括Reactor模型、Nginx的模块化设计、Nginx的请求处理流程等。
第9章介绍接入层Nginx Lua编程。在高并发场景下,Nginx Lua编程是解决性能问题的利器,本章介绍Nginx Lua编程的基础知识。
第10章介绍限流原理与实战。高并发系统用三把利器——缓存、降级和限流来保护系统,本章介绍计数器、令牌桶、漏桶这三大限流策略的原理和实现。
第11章介绍Spring Cloud+Nginx秒杀实战,通过这个综合性的实战案例说明缓存、降级和限流的应用。
读者对象
1)对Spring Cloud+Nginx系统架构感兴趣的大专院校师生。
2)需要学习Spring Cloud+Nginx分布式高并发技术和高并发架构的初、中、高级Java工程师。
3)生产场景中需要用到Spring Cloud+Nginx组合或者其中某个框架的架构师或工程师。
资源下载
本书的源代码可以通过扫描二维码进行下载,若下载有问题,请发送电子邮件至[email protected]。
秒杀前端 秒杀后台
致谢
首先感谢卞诚君老师在笔者写书过程中给予的指导和帮助。没有他的提议,我不会想到将自己的“疯狂创客圈”社群中高并发方面的博客整理成图书出版。感谢“疯狂创客圈”社群中的小伙伴们,虽然大家在群里抛出的很多技术难题笔者不一定能给出更佳的解决方案,但正是因为一路同行,一直坦诚、纯粹地进行技术交流,才能相互启发技术灵感,进而扩充小伙伴们的技术视野,最终提升编程水平。欢迎大家在“疯狂创客圈”社群提出问题,也欢迎大家多多交流。
写书不仅仅是一种技术活,更是一种工匠活,为了保证书中的知识是全面的、系统化的,笔者需要不断地思考和总结,不断地检查与修正。为了保证书中的每一行代码是正确的,笔者需要反复地编写LLT用例进行验证。尽管如此,还是不能保证书中没有瑕疵,不妥之处希望读者批评指正。
完成一本优质的书需要投入大量的业余时间,这也意味着牺牲了本该陪伴家人的时间,在这里特别感谢我的家人给予的理解、支持和帮助。
尼 恩
2022年9月26日
第1章 亿级用户Web应用的架构与实操 1
1.1 高并发基本原理 1
1.1.1 响应时间 1
1.1.2 吞吐量 2
1.1.3 错误率 4
1.2 提升系统的并发能力 4
1.2.1 纵向扩展 5
1.2.2 横向扩展 6
1.2.3 高并发架构中的分层策略 6
1.3 接入层横向扩展高并发架构 7
1.3.1 硬负载均衡 7
1.3.2 软负载均衡 8
1.3.3 LVS和Nginx的配合使用 10
1.3.4 DNS负载均衡 10
1.4 动静分离与接入层的缓存架构 14
1.4.1 接入层网关缓存 14
1.4.2 CDN加速 15
1.4.3 接入层的缓存架构的原则 17
1.5 服务层的横向扩展高并发架构 18
1.5.1 微服务网关的高并发横向扩展 18
1.5.2 微服务Provider高并发横向扩展 19
1.5.3 微服务Provider的自动伸缩 20
1.6 缓存层的高并发架构 24
1.6.1 旁路缓存模式 24
1.6.2 读/写穿透模式 26
1.6.3 异步回写模式 28
1.6.4 三大缓存使用模式的比较 28
1.6.5 旁路缓存模式如何保证双写的数据一致性 29
1.6.6 本地缓存架构 39
1.6.7 多级、细粒度缓存架构 42
1.7 数据层的横向扩展高并发架构 44
1.7.1 数据库服务器的能力参考数据 44
1.7.2 结构化数据的高并发架构方案:分库分表 45
1.7.3 结构化分库分表:水平拆分与垂直拆分 46
1.7.4 亿级库表规模架构设计 47
1.7.5 百亿级库表架构设计 48
1.7.6 百亿级数据的异构查询 49
1.7.7 ES+HBase组合方案的数据查询过程 50
1.8 亿级用户量场景下的流量预估 50
1.8.1 请求处理模型 50
1.8.2 旧系统的流量架构 52
1.8.3 新系统的流量架构 52
1.8.4 二八定律 52
1.8.5 通过二八定律进行流量预估 53
1.9 高并发架构 56
1.9.1 同步架构 56
1.9.2 异步架构 56
1.10 高可用架构 57
1.10.1 什么是高可用 57
1.10.2 高可用的度量 58
1.10.3 高并发架构中的分层策略 58
1.10.4 分层规避单点瓶颈+自动故障转移 58
1.10.5 其他的高可用策略 59
1.11 高性能架构 59
第2章 Spring Cloud+Nginx高并发核心编程的学习准备 61
2.1 Spring Cloud + Nginx架构的主要组件 61
2.2 Spring Cloud+Nginx核心知识的广泛欠缺 63
2.3 Spring Cloud和Spring Boot的版本选择 63
2.4 Spring Cloud微服务开发所涉及的中间件 65
2.5 Spring Cloud微服务开发和自验证环境 66
2.5.1 开发和自验证环境的系统选项和环境变量配置 66
2.5.2 使用Fiddler工具抓包和查看报文 67
2.6 crazy-Spring Cloud微服务开发脚手架 69
2.7 以秒杀作为Spring Cloud+Nginx的实战案例 70
第3章 Spring Cloud入门实战 72
3.1 Eureka服务注册与发现 73
3.1.1 什么是服务注册与发现 73
3.1.2 Eureka Server注册中心 74
3.1.3 微服务提供者Provider的创建和配置 79
3.1.4 微服务提供者的续约(心跳) 82
3.1.5 微服务提供者的健康状态 84
3.1.6 Eureka自我保护模式与失效Provider的快速剔除 87
3.2 Config配置中心 90
3.2.1 config-server服务端组件 90
3.2.2 config-client客户端组件 92
3.3 微服务的RPC远程调用 93
3.3.1 RESTfull风格简介 94
3.3.2 RestTemplate远程调用 94
3.3.3 Feign远程调用 96
3.4 Feign+Ribbon实现客户端负载均衡 97
3.4.1 Spring Cloud Ribbon基础 97
3.4.2 Spring Cloud Ribbon的负载均衡策略 100
3.4.3 Spring Cloud Ribbon的常用配置 101
3.5 Feign+Hystrix实现RPC调用保护 105
3.5.1 Spring Cloud Hystrix失败回退 106
3.5.2 分布式系统面临的雪崩难题 109
3.5.3 Spring Cloud Hystrix熔断器 111
第4章 Spring Cloud RPC远程调用 核心原理 115
4.1 代理模式与RPC客户端实现类 115
4.1.1 客户端RPC远程调用实现类的职责 115
4.1.2 简单的RPC客户端实现类 117
4.1.3 从基础原理讲起:代理模式与RPC客户端实现类 120
4.1.4 使用动态代理模式实现RPC客户端类 123
4.1.5 JDK动态代理机制的原理 126
4.2 模拟的Feign RPC动态代理实现 128
4.2.1 模拟Feign的MethodHandler方法处理器 129
4.2.2 模拟Feign的InvokeHandler调用处理器 131
4.2.3 模拟Feign动态代理RPC的执行流程 133
4.2.4 模拟动态代理RPC远程调用的测试 134
4.2.5 Feign弹性RPC客户端实现类 135
4.3 Feign弹性RPC客户端的重要组件 136
4.3.1 演示用例说明 136
4.3.2 Feign的动态代理RPC客户端实例 138
4.3.3 Feign的调用处理器InvocationHandler 139
4.3.4 Feign的方法处理器MethodHandler 141
4.3.5 Feign的客户端组件 143
4.4 Feign的RPC动态代理实例的创建流程 146
4.4.1 Feign的整体运作流程 146
4.4.2 RPC动态代理容器实例的FactoryBean工厂类 147
4.4.3 Feign.Builder建造者容器实例 150
4.4.4 默认的RPC动态代理实例创建流程 152
4.4.5 Contract远程调用协议规则类 155
4.5 Feigh远程调用的执行流程 156
4.5.1 与FeignInvocationHandler相关的远程调用执行流程 157
4.5.2 与HystrixInvocationHandler相关的远程调用执行流程 158
4.5.3 Feign远程调用的完整流程及其特性 160
4.6 HystrixFeign动态代理实例的创建流程 161
4.6.1 HystrixFeign.Builder建造者容器实例 162
4.6.2 配置HystrixFeign.Builder建造者容器实例 163
4.7 feign.Client客户端容器实例 163
4.7.1 装配LoadBalancerFeignClient负载均衡容器实例 164
4.7.2 包装ApacheHttpClient实例的负载均衡客户端装配 165
4.7.3 包装OkHttpClient实例的负载均衡客户端实例 167
4.7.4 包装Client.Default实例的负载均衡客户端实例 168
第5章 RxJava响应式编程框架 169
5.1 从基础原理讲起:观察者模式 169
5.1.1 观察者模式的基础原理 169
5.1.2 观察者模式的经典实现 170
5.1.3 Rxjava中的观察者模式 172
5.1.4 RxJava的不完整回调 174
5.1.5 RxJava函数式编程 176
5.1.6 RxJava的Operators操作符 177
5.2 创建型操作符 178
5.2.1 just操作符 178
5.2.2 from操作符 179
5.2.3 range操作符 180
5.2.4 interval操作符 180
5.2.5 defer延迟创建操作符 181
5.3 过滤型操作符 182
5.3.1 filter操作符 182
5.3.2 distinct操作符 183
5.4 转换型操作符 183
5.4.1 map操作符 183
5.4.2 flatMap操作符 184
5.4.3 scan操作符 186
5.5 聚合操作符 187
5.5.1 count操作符 187
5.5.2 reduce操作符 188
5.6 其他操作符 189
5.6.1 take操作符 190
5.6.2 window操作符 190
5.7 RxJava的Scheduler调度器 193
5.8 背压 195
5.8.1 什么是背压问题 195
5.8.2 背压问题的几种应对模式 197
第6章 Hystrix RPC保护的原理 200
6.1 RPC保护的目标 200
6.2 HystrixCommand简介 201
6.2.1 HystrixCommand的使用 201
6.2.2 HystrixCommand的配置内容和方式 203
6.3 HystrixCommand命令执行的方法 205
6.3.1 execute()方法 205
6.3.2 queue()方法 206
6.3.3 observe()方法 208
6.3.4 toObservable()方法 209
6.3.5 HystrixCommand的执行方法之间的关系 210
6.4 RPC保护之舱壁模式 212
6.4.1 什么是舱壁模式 212
6.4.2 Hystrix线程池隔离 214
6.4.3 Hystrix线程池隔离配置 217
6.4.4 Hystrix信号量隔离 219
6.5 RPC保护之熔断器模式 222
6.5.1 熔断器状态变化的演示实例 223
6.5.2 熔断器和滑动窗口的配置属性 226
6.5.3 Hystrix命令的执行流程 230
6.6 RPC监控之滑动窗口实现原理 231
6.6.1 Hystrix健康统计滑动窗口模拟实现 232
6.6.2 Hystrix滑动窗口核心实现原理 236
第7章 微服务网关与用户身份识别 240
7.1 Zuul的基础使用 241
7.2 创建Zuul网关服务 241
7.2.1 Zuul路由规则配置 242
7.2.2 过滤敏感请求头部 244
7.2.3 路径前缀的处理 244
7.3 Zuul过滤器 245
7.3.1 Zuul网关的过滤器类型 245
7.3.2 实战:用户的黑名单过滤 247
7.4 Spring Security原理和实战 250
7.4.1 Spring Security核心组件 250
7.4.2 Spring Security的请求认证处理流程 253
7.4.3 基于数据源的认证流程 258
7.5 JWT+Spring Security进行网关安全认证 263
7.5.1 JWT安全令牌规范详解 263
7.5.2 JWT+Spring Security认证处理流程 267
7.5.3 Zuul网关与UAA微服务的配合 272
7.5.4 使用Zuul过滤器添加代理请求的用户标识 276
7.6 微服务提供者之间的会话共享关系 277
7.6.1 分布式会话的起源和实现方案 278
7.6.2 Spring Session的核心组件和存储细节 279
7.6.3 Spring Session的使用和定制 280
7.6.4 通过用户身份标识查找session id 282
7.6.5 查找或创建分布式会话 283
7.6.6 加载高速访问数据到分布式会话 285
第8章 Nginx/OpenResty详解 287
8.1 Nginx简介 287
8.1.1 正向代理与反向代理 288
8.1.2 Nginx的启动与停止 289
8.1.3 Nginx的启动命令和参数详解 289
8.1.4 Linux下Openresty的启动、停止脚本 290
8.1.5 Windows下Openresty的启动、停止脚本 291
8.2 Nginx的核心原理 293
8.2.1 Reactor反应器模型 293
8.2.2 Nginx的两类进程 294
8.2.3 Nginx的模块化设计 295
8.2.4 Nginx配置文件上下文结构 296
8.2.5 Nginx的请求处理流程 298
8.2.6 HTTP请求处理的11个阶段 299
8.3 Nginx的基础配置 303
8.3.1 events事件驱动配置 303
8.3.2 虚拟主机配置 304
8.3.3 错误页面配置 306
8.3.4 长连接相关配置 307
8.3.5 访问日志配置 307
8.3.6 Nginx核心模块内置变量 308
8.4 location路由规则配置详解 310
8.4.1 location语法详解 310
8.4.2 常用的location路由配置 313
8.5 Nginx的rewrite模块指令 314
8.5.1 set指令 314
8.5.2 rewrite指令 315
8.5.3 if条件指令 317
8.5.4 add_header指令 319
8.5.5 指令的执行顺序 320
8.6 反向代理与负载均衡配置 321
8.6.1 演示环境说明 321
8.6.2 proxy_pass反向代理指令 322
8.6.3 proxy_set_header指令 323
8.6.4 upstream上游服务器组 324
8.6.5 upstream的上游服务器配置 326
8.6.6 upstream的负载分配方式 327
第9章 Nginx Lua编程 329
9.1 Nginx Lua编程主要的应用场景 329
9.2 Nginx Lua编程简介 329
9.3 Lua开发基础 332
9.4 Nginx Lua编程基础 345
9.5 Nginx Lua编程实例 352
9.6 重定向与内部子请求 360
9.7 Nginx Lua操作Redis 369
9.8 Nginx Lua编程实战案例 375
第10章 限流原理与实战 384
10.1 使用Redis实现简单限流策略 384
10.2 分布式计数器限流 391
10.3 Nginx漏桶限流详解 397
10.4 实战:分布式令牌桶限流 399
第11章 Spring Cloud Nginx秒杀实战 406
11.1 秒杀业务特定和技术难点 406
11.2 秒杀系统的系统架构 408
11.3 秒杀业务的参考实现 413
11.4 Zuul内部网关实现秒杀限流 431
11.5 Nginx高性能秒杀和限流 435