当前位置:主页 > 书籍配套资源 > 核心编程配套资源
《Spring Cloud、Nginx高并发核心编程》源码

《Spring Cloud、Nginx高并发核心编程》源码

  • 更新:2022-01-17
  • 大小:3.07 MB
  • 类别:核心编程
  • 作者:尼恩
  • 出版:机械工业出版社
  • 格式:PDF

  • 资源介绍
  • 相关推荐

本书从动态代理模式、Reactor模式、三大限流策略等知识入手,深入浅出地剖析Spring Cloud+Nginx系统架构的核心原理以及Web高并发开发。全书从基础设计模式和基础原理出发,理论与实战相结合,系统和详尽地介绍Spring Cloud + Nginx高并发核心编程。

本书共10章,前6章剖析Feign高并发RPC的底层原理,解析Hystrix高性能配置的核心选项,阐述Hystrix滑动窗口的核心原理。后4章介绍Nginx的核心原理及其配置,并结合秒杀场景实现Spring Cloud秒杀、Spring Cloud+Nginx Lua秒杀,为广大Java开发者提供一个全面学习高并发开发的实战案例。这些知识为广大的Java工程师解决日常在后台开发中遇到的高并发、高性能问题打下坚实的技术基础。

封面图

目录

  • 前言
  • 第1章 Spring Cloud+Nginx 高并发核心编程的学习准备 ........................ 1
  • 1.1 Spring Cloud+Nginx架构的主要组件 ......................................... 1
  • 1.2 Spring Cloud和Spring Boot的版本选择 .............................................. 3
  • 1.3 Spring Cloud微服务开发所涉及的中间件..................................... 4
  • 1.4 Spring Cloud微服务开发和自验证环境 .................................................... 6
  • 1.4.1 开发和自验证环境的系统选项和环境变量配置.......................................... 6
  • 1.4.2 使用Fiddler工具抓包和查看报文....................................................... 7
  • 1.5 crazy-springcloud微服务开发脚手........................................................ 9
  • 1.6 以秒杀作为Spring Cloud+Nginx的实战案例 ............................................. 10
  • 第2章 Spring Cloud入门实战 ...................................................... 12
  • 2.1 Eureka服务注册与发现 .................................................... 13
  • 2.1.1 什么是服务注册与发现 ......................................................... 13
  • 2.1.2 Eureka Server注册中心 ......................................................... 14
  • 2.1.3 服务提供者的创建和配置 ......................................................... 19
  • 2.1.4 服务提供者的续约(心跳) ....................................................... 22
  • 2.1.5 服务提供者的健康状态 ............................................................ 24
  • 2.1.6 Eureka自我保护模式与失效Provider的快速剔除 .................................... 28
  • 2.2 Config配置中心 ............................................................... 32
  • 2.2.1 config-server服务端组件 .......................................................... 32
  • 2.2.2 config-client客户端组件 .......................................................... 35
  • 2.3 微服务的RPC远程调用 ................................................................ 36
  • 2.3.1 RESTful风格简介 ....................................................... 36
  • 2.3.2 RestTemplate远程调用 ............................................................ 37
  • 2.3.3 Feign远程调用 ................................................................... 38
  • 2.4 Feign+Ribbon实现客户端负载均衡 .................................................... 40
  • 2.4.1 Spring Cloud Ribbon基础 ......................................................... 41
  • 2.4.2 Spring Cloud Ribbon的负载均衡策略 ............................................... 43
  • 2.4.3 Spring Cloud Ribbon的常用配置 ................................................... 45
  • 2.5 Feign+Hystrix实现RPC调用保护 ...................................................... 50
  • 2.5.1 Spring Cloud Hystrix失败回退 ..................................................... 51
  • 2.5.2 分布式系统面临的雪崩难题 ........................................................ 55
  • 2.5.3 Spring Cloud Hystrix熔断器 ...................................................... 56
  • 第3章 Spring Cloud RPC远程调用核心原理 .................................................. 61
  • 3.1 代理模式与RPC客户端实现类 ............................................................ 61
  • 3.1.1 客户端RPC远程调用实现类的职责 ................................................. 61
  • 3.1.2 简单的RPC客户端实现类 ........................................................ 63
  • 3.1.3 从基础原理讲起:代理模式与RPC客户端实现类 ......................................... 67
  • 3.1.4 使用动态代理模式实现RPC客户端类 ............................................. 70
  • 3.1.5 JDK动态代理机制的原理 ........................................ 74
  • 3.2 模拟Feign RPC动态代理的实现 ....................................................... 77
  • 3.2.1 模拟Feign的方法处理器MethodHandler ................................................. 78
  • 3.2.2 模拟Feign的调用处理器InvocationHandler ...................................... 80
  • 3.2.3 模拟Feign的动态代理RPC的执行流程 ................................................. 83
  • 3.2.4 模拟动态代理RPC远程调用的测试 .................................................. 83
  • 3.2.5 Feign弹性RPC客户端实现类 ....................................................... 85
  • 3.3 Feign弹性RPC客户端的重要组件 ................................................... 86
  • 3.3.1 演示用例说明 ................................................................. 86
  • 3.3.2 Feign的动态代理RPC客户端实例 .................................................... 88
  • 3.3.3 Feign的调用处理器InvocationHandler .......................................... 89
  • 3.3.4 Feign的方法处理器MethodHandler ............................................... 91
  • 3.3.5 Feign的客户端组件 ........................................................... 94
  • 3.4 Feign的RPC动态代理实例的创建流程 ........................................ 97
  • 3.4.1 Feign的整体运作流程 ............................................................. 98
  • 3.4.2 RPC动态代理容器实例的FactoryBean工厂类 .......................................... 99
  • 3.4.3 Feign.Builder建造者容器实例 ...................................................... 102
  • 3.4.4 默认的RPC动态代理实例的创建流程 ................................................. 105
  • 3.4.5 Contract远程调用协议规则类 .................................................. 108
  • 3.5 Feign远程调用的执行流程 ............................................................ 110
  • 3.5.1 与FeignInvocationHandler相关的远程调用执行流程 ................................... 110
  • 3.5.2 与HystrixInvocationHandler相关的远程调用执行流程 ................................. 111
  • 3.5.3 Feign远程调用的完整流程及其特性 ............................................. 114
  • 3.6 HystrixFeign动态代理实例的创建流程 ............................................ 115
  • 3.6.1 HystrixFeign.Builder建造者容器实例 .......................................... 115
  • 3.6.2 配置HystrixFeign.Builder建造者容器实例 ...................................... 116
  • 3.7 feign.Client客户端容器实例 ................................................... 117
  • 3.7.1 装配LoadBalancerFeignClient负载均衡容器实例 ................................ 117
  • 3.7.2 装配ApacheHttpClient负载均衡容器实例 .......................................... 119
  • 3.7.3 装配OkHttpClient负载均衡容器实例 ............................................... 121
  • 3.7.4 装配Client.Default负载均衡容器实例 ................................ 122
  • 第4章 RxJava响应式编程框架 ........................................................ 124
  • 4.1 从基础原理讲起:观察者模式 ...................................................... 124
  • 4.1.1 观察者模式的基础原理 ......................................................... 124
  • 4.1.2 观察者模式的经典实现 ....................................................... 125
  • 4.1.3 RxJava中的观察者模式 ....................................................... 127
  • 4.1.4 RxJava的不完整回调.......................................................... 130
  • 4.1.5 RxJava的函数式编程....................................................... 132
  • 4.1.6 RxJava的操作符............................................................ 134
  • 4.2 创建型操作符 ................................................................... 134
  • 4.2.1 just操作符 ............................................................... 135
  • 4.2.2 from操作符 .............................................................. 135
  • 4.2.3 range操作符 ............................................................. 136
  • 4.2.4 interval操作符 .............................................................. 137
  • 4.2.5 defer操作符 .......................................................... 138
  • 4.3 过滤型操作符 ............................................................... 139
  • 4.3.1 filter操作符 ............................................................ 139
  • 4.3.2 distinct操作符 .......................................................... 140
  • 4.4 转换型操作符 ............................................................... 141
  • 4.4.1 map操作符 ................................................................ 141
  • 4.4.2 flatMap操作符 ............................................................ 142
  • 4.4.3 scan操作符 ................................................... 144
  • 4.5 聚合操作符 ..............................................................146
  • 4.5.1 count操作符 .................................................... 146
  • 4.5.2 reduce操作符 ......................................................... 147
  • 4.6 其他操作符 .................................................................. 149
  • 4.6.1 take操作符 ............................................................. 149
  • 4.6.2 window操作符 .................................................................. 150
  • 4.7 RxJava的Scheduler调度器................................................. 153
  • 4.8 背压 ........................................................................ 155
  • 4.8.1 什么是背压问题 ............................................................... 155
  • 4.8.2 背压问题的几种应对模式 ...................................................... 158
  • 第5章 Hystrix RPC保护的原理 ....................................................... 162
  • 5.1 RPC保护的目标 ................................................................. 162
  • 5.2 HystrixCommand简介 ............................................................ 162
  • 5.2.1 HystrixCommand的使用 ........................................................ 163
  • 5.2.2 HystrixCommand的配置内容和方式 .............................................. 166
  • 5.3 HystrixCommand命令的执行方法 ................................................. 168
  • 5.3.1 execute()方法 ................................................................ 168
  • 5.3.2 queue()方法 .................................................................. 170
  • 5.3.3 observe()方法 ........................................................... 172
  • 5.3.4 toObservable()方法 ............................................................. 173
  • 5.3.5 HystrixCommand的执行方法之间的关系 ............................................. 175
  • 5.4 RPC保护之舱壁模式 ............................................................... 176
  • 5.4.1 什么是舱壁模式 ................................................................. 176
  • 5.4.2 Hystrix线程池隔离 .............................................................. 178
  • 5.4.3 Hystrix线程池隔离配置 .......................................................... 182
  • 5.4.4 Hystrix信号量隔离 .............................................................. 184
  • 5.5 RPC保护之熔断器模式 .............................................................. 188
  • 5.5.1 熔断器状态变化的演示实例 ....................................................... 189
  • 5.5.2 熔断器和滑动窗口的配置属性 ..................................................... 193
  • 5.5.3 Hystrix命令的执行流程 .......................................................... 198
  • 5.6 RPC监控之滑动窗口的实现原理 ...................................................... 199
  • 5.6.1 Hystrix健康统计滑动窗口的模拟实现............................................... 200
  • 5.6.2 Hystrix滑动窗口的核心实现原理 ................................................ 205
  • 第6章 微服务网关与用户身份识别 ....................................................... 210
  • 6.1 Zuul的基础使用 .................................................................. 211
  • 6.2 创建Zuul网关服务 .............................................................. 211
  • 6.2.1 Zuul路由规则配置 ............................................................ 212
  • 6.2.2 过滤敏感请求头部 ............................................................ 214
  • 6.2.3 路径前缀的处理 .............................................................. 215
  • 6.3 Zuul过滤器 .................................................................... 216
  • 6.3.1 Zuul网关的过滤器类型 ....................................................... 216
  • 6.3.2 实战:用户的黑名单过滤 ..................................................... 217
  • 6.4 Spring Security原理和实战 ..................................................... 221
  • 6.4.1 Spring Security核心组件 ..................................................... 221
  • 6.4.2 Spring Security的请求认证处理流程 ........................................... 224
  • 6.4.3 基于数据源的认证流程 ........................................................ 231
  • 6.5 JWT+Spring Security进行网关安全认证 .............................................. 237
  • 6.5.1 JWT安全令牌规范详解 ........................................................... 238
  • 6.5.2 JWT+Spring Security认证处理流程 .......................................... 243
  • 6.5.3 Zuul网关与UAA微服务的配合 ................................................ 250
  • 6.5.4 使用Zuul过滤器添加代理请求的用户标识 ................................................... 254
  • 6.6 服务提供者之间的会话共享关系 .................................................... 256
  • 6.6.1 分布式Session的起源和实现方案 ......................................... 257
  • 6.6.2 Spring Session的核心组件和存储细节 .............................................. 258
  • 6.6.3 Spring Session的使用和定制..................................................... 259
  • 6.6.4 通过用户身份标识查找Session ID ..................................... 261
  • 6.6.5 查找或创建分布式Session ....................................................... 263
  • 6.6.6 加载高速访问数据到分布式Session ......................................... 265
  • 第7章 Nginx/OpenResty详解 ...................................................... 268
  • 7.1 Nginx简介 ...................................................................... 268
  • 7.1.1 正向代理与反向代理 ................................................... 269
  • 7.1.2 Nginx的启动与停止 ......................................................... 270
  • 7.1.3 Nginx的启动命令和参数详解 .................................................. 271
  • 7.1.4 Linux下OpenResty的启动、停止脚本 ................................................. 271
  • 7.1.5 Windows下OpenResty的启动、停止脚本 ............................................... 273
  • 7.2 Nginx的核心原理 ............................................................. 274
  • 7.2.1 Reactor模型 ........................................................... 274
  • 7.2.2 Nginx的两类进程 ..................................................................... 275
  • 7.2.3 Nginx的模块化设计 ............................................................. 276
  • 7.2.4 Nginx配置文件上下文结构 ....................................................... 278
  • 7.2.5 Nginx的请求处理流程 ................................................... 280
  • 7.2.6 HTTP请求处理的11个阶段 ................................................. 281
  • 7.3 Nginx的基础配置 ......................................................... 286
  • 7.3.1 events事件驱动配置 ................................................. 286
  • 7.3.2 虚拟主机配置 .............................................................. 287
  • 7.3.3 错误页面配置 ........................................................... 289
  • 7.3.4 长连接相关配置 ............................................................. 290
  • 7.3.5 访问日志配置 .................................................... 290
  • 7.3.6 Nginx核心模块内置变量 ........................................... 291
  • 7.4 location路由规则配置详解 ................................................... 293
  • 7.4.1 location语法详解 ....................................................... 293
  • 7.4.2 常用的location路由配置 ................................................... 296
  • 7.5 Nginx的rewrite模块指令 .......................................................... 297
  • 7.5.1 set指令 .................................................................. 298
  • 7.5.2 rewrite指令 ............................................................... 298
  • 7.5.3 if条件指令 ............................................................ 301
  • 7.5.4 add_header指令 ............................................................... 303
  • 7.5.5 指令的执行顺序 ........................................................... 304
  • 7.6 反向代理与负载均衡配置 ............................................... 305
  • 7.6.1 演示环境说明 ................................................. 305
  • 7.6.2 proxy_pass反向代理指令 ............................................... 306
  • 7.6.3 proxy_set_header请求头设置指令 ................................... 308
  • 7.6.4 upstream上游服务器组 ......................................................... 309
  • 7.6.5 upstream的上游服务器配置 ........................................... 311
  • 7.6.6 upstream的负载分配方式 .................................................... 313
  • 第8章 Nginx Lua编程 ............................................................ 315
  • 8.1 Nginx Lua编程的主要应用场景 ................................................ 315
  • 8.2 Nginx Lua编程简介 ....................................................... 315
  • 8.2.1 ngx_lua简介 ....................................................... 315
  • 8.2.2 Nginx Lua项目的创建 .................................................... 316
  • 8.2.3 Lua项目的工程结构 ....................................................... 317
  • 8.2.4 Lua项目的启动 .......................................................... 318
  • 8.3 Lua开发基础 .............................................................. 319
  • 8.3.1 Lua模块的定义和使用 ........................................................... 319
  • 8.3.2 Lua模块的使用 ................................................................. 320
  • 8.3.3 Lua的数据类型 ................................................................. 322
  • 8.3.4 Lua的字符串 ................................................................. 325
  • 8.3.5 Lua的数组容器 ............................................................. 326
  • 8.3.6 Lua的控制结构 ...................................................... 328
  • 8.3.7 Lua的函数定义 ............................................................ 331
  • 8.3.8 Lua的面向对象编程 ........................................................ 332
  • 8.4 Nginx Lua编程基础 ............................................................ 333
  • 8.4.1 Nginx Lua的执行原理 ................................................. 334
  • 8.4.2 Nginx Lua的配置指令 ...................................................... 335
  • 8.4.3 Nginx Lua的内置常量和变量 .............................................. 339
  • 8.5 Nginx Lua编程实例 ........................................................... 341
  • 8.5.1 Lua脚本获取URL中的参数 ....................................................... 341
  • 8.5.2 Nginx Lua的内置方法 ..................................................... 342
  • 8.5.3 通过ngx.header设置HTTP响应头 ........................................ 344
  • 8.5.4 Lua访问Nginx变量 .......................................................... 347
  • 8.5.5 Lua访问请求上下文变量 ..................................................... 349
  • 8.6 重定向与内部子请求 ................................................................ 350
  • 8.6.1 Nginx Lua内部重定向 ........................................................ 350
  • 8.6.2 Nginx Lua外部重定向 ..................................................... 352
  • 8.6.3 ngx.location.capture子请求 .............................................. 355
  • 8.6.4 ngx.location.capture_multi并发子请求 .......................................359
  • 8.7 Nginx Lua操作Redis .......................................................... 361
  • 8.7.1 Redis的CRUD基本操作 ......................................................... 361
  • 8.7.2 实战:封装一个操作Redis的基础类 ............................................. 364
  • 8.7.3 在Lua中使用Redis连接池 .......................................................... 367
  • 8.8 Nginx Lua编程实战案例 ............................................................... 369
  • 8.8.1 Nginx+Redis进行分布式访问统计 .................................................... 369
  • 8.8.2 Nginx+Redis+Java容器实现高并发访问 ............................................. 370
  • 8.8.3 Nginx+Redis实现黑名单拦截 ...................................................... 375
  • 8.8.4 使用Nginx Lua共享内存 ........................................................ 378
  • 第9章 限流原理与实战 ................................................................. 380
  • 9.1 限流策略原理与参考实现 ................................................... 380
  • 9.1.1 3种限流策略:计数器、漏桶和令牌桶 ........................................... 380
  • 9.1.2 计数器限流原理和Java参考实现 ................................................ 381
  • 9.1.3 漏桶限流原理和Java参考实现 .................................................. 384
  • 9.1.4 令牌桶限流原理和Java参考实现 ................................................ 386
  • 9.2 分布式计数器限流 .............................................................. 390
  • 9.2.1 实战:Nginx Lua分布式计数器限流 ............................................. 390
  • 9.2.2 实战:Redis Lua分布式计数器限流 ........................................... 394
  • 9.3 Nginx漏桶限流详解 .................................................. 397
  • 9.4 实战:分布式令牌桶限流 ....................................................... 399
  • 9.4.1 分布式令牌桶限流Lua脚本 .................................................... 399
  • 9.4.2 Java分布式令牌桶限流 .................................................... 402
  • 9.4.3 Java分布式令牌桶限流的自验证 ......................................... 406
  • 第10章 Spring Cloud+Nginx秒杀实战 ............................................. 409
  • 10.1 秒杀系统的业务功能和技术难点 ............................................. 409
  • 10.1.1 秒杀系统的业务功能 ............................................ 409
  • 10.1.2 秒杀系统面临的技术难题 ............................................... 410
  • 10.2 秒杀系统的系统架构 ................................................. 411
  • 10.2.1 秒杀的分层架构 ..................................................... 411
  • 10.2.2 秒杀的限流架构 ..................................................... 413
  • 10.2.3 秒杀的分布式锁架构 ................................................. 414
  • 10.2.4 秒杀的削峰架构 ................................................... 415
  • 10.3 秒杀业务的参考实现 .............................................. 416
  • 10.3.1 秒杀的功能模块和接口设计 ........................................... 416
  • 10.3.2 数据表和PO实体类设计 .................................................... 420
  • 10.3.3 使用分布式ID生成器 ...................................................... 423
  • 10.3.4 秒杀的控制层设计 ....................................................... 424
  • 10.3.5 service层逻辑:获取秒杀令牌 ........................................... 426
  • 10.3.6 service层逻辑:执行秒杀下单 ........................................... 429
  • 10.3.7 秒杀的Lua脚本设计 ................................................... 434
  • 10.3.8 BusinessException定义 ................................................... 436
  • 10.4 Zuul内部网关实现秒杀限流 ......................................... 439
  • 10.5 Nginx高性能秒杀和限流 ...................................... 444
  • 10.5.1 Lua脚本:获取秒杀令牌 ................................................. 445
  • 10.5.2 Lua脚本:执行令牌桶限流 ........................................... 448

资源下载

资源下载地址1:https://pan.baidu.com/s/11MeUyiAxaLgfoKs9utU5hQ

相关资源

网友留言