异步回写模式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.7ES+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章SpringCloud+Nginx高并发核心编程的学习准备61
2.1SpringCloud+Nginx架构的主要组件61
2.2SpringCloud+Nginx核心知识的广泛欠缺63
2.3SpringCloud和SpringBoot的版本选择63
2.4SpringCloud微服务开发所涉及的中间件65
2.5SpringCloud微服务开发和自验证环境66
2.5.1开发和自验证环境的系统选项和环境变量配置66
2.5.2使用Fiddler工具抓包和查看报文67
2.6crazy-SpringCloud微服务开发脚手架69
2.7以秒杀作为SpringCloud+Nginx的实战案例70
第3章SpringCloud入门实战72
3.1Eureka服务注册与发现73
3.1.1什么是服务注册与发现73
3.1.2EurekaServer注册中心74
3.1.3微服务提供者Provider的创建和配置79
3.1.4微服务提供者的续约(心跳)82
3.1.5微服务提供者的健康状态84
3.1.6Eureka自我保护模式与失效Provider的快速剔除87
3.2Config配置中心90
3.2.1config-server服务端组件90
3.2.2config-client客户端组件92
3.3微服务的RPC远程调用93
3.3.1RESTfull风格简介94
3.3.2RestTemplate远程调用94
3.3.3Feign远程调用96
3.4Feign+Ribbon实现客户端负载均衡97
3.4.1SpringCloudRibbon基础97
3.4.2SpringCloudRibbon的负载均衡策略100
3.4.3SpringCloudRibbon的常用配置101
3.5Feign+Hystrix实现RPC调用保护105
3.5.1SpringCloudHystrix失败回退106
3.5.2分布式系统面临的雪崩难题109
3.5.3SpringCloudHystrix熔断器111
第4章SpringCloudRPC远程调用核心原理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.5JDK动态代理机制的原理126
4.2模拟的FeignRPC动态代理实现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.5Feign弹性RPC客户端实现类135
4.3Feign弹性RPC客户端的重要组件136
4.3.1演示用例说明136
4.3.2Feign的动态代理RPC客户端实例138
4.3.3Feign的调用处理器InvocationHandler139
4.3.4Feign的方法处理器MethodHandler141
4.3.5Feign的客户端组件143
4.4Feign的RPC动态代理实例的创建流程146
4.4.1Feign的整体运作流程146
4.4.2RPC动态代理容器实例的FactoryBean工厂类147
4.4.3Feign.Builder建造者容器实例150
4.4.4默认的RPC动态代理实例创建流程152
4.4.5Contract远程调用协议规则类155
4.5Feigh远程调用的执行流程156
4.5.1与FeignInvocationHandler相关的远程调用执行流程157
4.5.2与HystrixInvocationHandler相关的远程调用执行流程158
4.5.3Feign远程调用的完整流程及其特性160
4.6HystrixFeign动态代理实例的创建流程161
4.6.1HystrixFeign.Builder建造者容器实例162
4.6.2配置HystrixFeign.Builder建造者容器实例163
4.7feign.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.3Rxjava中的观察者模式172
5.1.4RxJava的不完整回调174
5.1.5RxJava函数式编程176
5.1.6RxJava的Operators操作符177
5.2创建型操作符178
5.2.1just操作符178
5.2.2from操作符179
5.2.3range操作符180
5.2.4interval操作符180
5.2.5defer延迟创建操作符181
5.3过滤型操作符182
5.3.1filter操作符182
5.3.2distinct操作符183
5.4转换型操作符183
5.4.1map操作符183
5.4.2flatMap操作符184
5.4.3scan操作符186
5.5聚合操作符187
5.5.1count操作符187
5.5.2reduce操作符188
5.6其他操作符189
5.6.1take操作符190
5.6.2window操作符190
5.7RxJava的Scheduler调度器193
5.8背压195
5.8.1什么是背压问题195
5.8.2背压问题的几种应对模式197
第6章HystrixRPC保护的原理200
6.1RPC保护的目标200
6.2HystrixCommand简介201
6.2.1HystrixCommand的使用201
6.2.2HystrixCommand的配置内容和方式203
6.3HystrixCommand命令执行的方法205
6.3.1execute()方法205
6.3.2queue()方法206
6.3.3observe()方法208
6.3.4toObservable()方法209
6.3.5HystrixCommand的执行方法之间的关系210
6.4RPC保护之舱壁模式212
6.4.1什么是舱壁模式212
6.4.2Hystrix线程池隔离214
6.4.3Hystrix线程池隔离配置217
6.4.4Hystrix信号量隔离219
6.5RPC保护之熔断器模式222
6.5.1熔断器状态变化的演示实例223
6.5.2熔断器和滑动窗口的配置属性226
6.5.3Hystrix命令的执行流程230
6.6RPC监控之滑动窗口实现原理231
6.6.1Hystrix健康统计滑动窗口模拟实现232
6.6.2Hystrix滑动窗口核心实现原理236
第7章微服务网关与用户身份识别240
7.1Zuul的基础使用241
7.2创建Zuul网关服务241
7.2.1Zuul路由规则配置242
7.2.2过滤敏感请求头部244
7.2.3路径前缀的处理244
7.3Zuul过滤器245
7.3.1Zuul网关的过滤器类型245
7.3.2实战:用户的黑名单过滤247
7.4SpringSecurity原理和实战250
7.4.1SpringSecurity核心组件250
7.4.2SpringSecurity的请求认证处理流程253
7.4.3基于数据源的认证流程258
7.5JWT+SpringSecurity进行网关安全认证263
7.5.1JWT安全令牌规范详解263
7.5.2JWT+SpringSecurity认证处理流程267
7.5.3Zuul网关与UAA微服务的配合272
7.5.4使用Zuul过滤器添加代理请求的用户标识276
7.6微服务提供者之间的会话共享关系277
7.6.1分布式会话的起源和实现方案278
7.6.2SpringSession的核心组件和存储细节279
7.6.3SpringSession的使用和定制280
7.6.4通过用户身份标识查找sessionid282
7.6.5查找或创建分布式会话283
7.6.6加载高速访问数据到分布式会话285
第8章Nginx/OpenResty详解287
8.1Nginx简介287
8.1.1正向代理与反向代理288
8.1.2Nginx的启动与停止289
8.1.3Nginx的启动命令和参数详解289
8.1.4Linux下Openresty的启动、停止脚本290
8.1.5Windows下Openresty的启动、停止脚本291
8.2Nginx的核心原理293
8.2.1Reactor反应器模型293
8.2.2Nginx的两类进程294
8.2.3Nginx的模块化设计295
8.2.4Nginx配置文件上下文结构296
8.2.5Nginx的请求处理流程298
8.2.6HTTP请求处理的11个阶段299
8.3Nginx的基础配置303
8.3.1events事件驱动配置303
8.3.2虚拟主机配置304
8.3.3错误页面配置306
8.3.4长连接相关配置307
8.3.5访问日志配置307
8.3.6Nginx核心模块内置变量308
8.4location路由规则配置详解310
8.4.1location语法详解310
8.4.2常用的location路由配置313
8.5Nginx的rewrite模块指令314
8.5.1set指令314
8.5.2rewrite指令315
8.5.3if条件指令317
8.5.4add_header指令319
8.5.5指令的执行顺序320
8.6反向代理与负载均衡配置321
8.6.1演示环境说明321
8.6.2proxy_pass反向代理指令322
8.6.3proxy_set_header指令323
8.6.4upstream上游服务器组324
8.6.5upstream的上游服务器配置326
8.6.6upstream的负载分配方式327
第9章NginxLua编程329
9.1NginxLua编程主要的应用场景329
9.2NginxLua编程简介329
9.2.1ngx_lua简介330
9.2.2NginxLua项目的创建330
9.2.3Lua项目的工程结构331
9.2.4Lua项目的启动331
9.3Lua开发基础332
9.3.1Lua模块的定义和使用333
9.3.2Lua模块的使用333
9.3.3Lua的数据类型334
9.3.4Lua的字符串337
9.3.5Lua中的数组容器338
9.3.6Lua的控制结构340
9.3.7Lua的函数定义342
9.3.8Lua的面向对象编程344
9.4NginxLua编程基础345
9.4.1NginxLua的执行原理345
9.4.2NginxLua的配置指令346
9.4.3NginxLua的常用配置指令347
9.4.4NginxLua的内置常量和变量350
9.5NginxLua编程实例352
9.5.1Lua脚本获取URL中的参数352
9.5.2NginxLua的内置方法353
9.5.3通过ngx.header设置HTTP响应头355
9.5.4Lua访问Nginx变量358
9.5.5Lua访问请求上下文变量359
9.6重定向与内部子请求360
9.6.1NginxLua内部重定向360
9.6.2NginxLua外部重定向362
9.6.3ngx.location.capture子请求364
9.6.4ngx.location.capture_multi并发子请求367
9.7NginxLua操作Redis369
9.7.1Redis的CRUD基本操作369
9.7.2实战:封装一个操作Redis的基础类371
9.7.3在Lua中使用Redis连接池373
9.8NginxLua编程实战案例375
9.8.1Nginx+Redis进行分布式访问统计375
9.8.2Nginx+Redis+Java容器实现高并发访问376
9.8.3Nginx+Redis实现黑名单拦截380
9.8.4使用NginxLua共享内存382
第10章限流原理与实战384
10.1使用Redis实现简单限流策略384
10.1.13种限流策略:计数器、漏桶、令牌桶384
10.1.2计数器限流原理和Java参考实现385
10.1.3漏桶算法限流原理和Java参考实现387
10.1.4令牌桶限流原理和Java参考实现389
10.2分布式计数器限流391
10.2.1NginxLua分布式计数器限流391
10.2.2RedisLua分布式计数器限流394
10.3Nginx漏桶限流详解397
10.4实战:分布式令牌桶限流399
10.4.1分布式令牌桶限流Lua脚本399
10.4.2Java分布式令牌桶限流401
10.4.3Java分布式令牌桶限流的自验证404
第11章SpringCloudNginx秒杀实战406
11.1秒杀业务特定和技术难点406
11.1.1秒杀系统的业务功能406
11.1.2秒杀系统面临的技术难题407
11.2秒杀系统的系统架构408
11.2.1秒杀的分层架构408
11.2.2秒杀的限流架构410
11.2.3秒杀的分布式锁架构411
11.2.4秒杀的削峰架构412
11.3秒杀业务的参考实现413
11.3.1秒杀的功能模块和接口设计413
11.3.2数据表和PO实体类设计416
11.3.3使用分布式ID生成器418
11.3.4秒杀的controller层设计420
11.3.5service层逻辑:获取秒杀令牌421
11.3.6service层逻辑:执行秒杀下单424
11.3.7秒杀的Lua脚本设计427
11.3.8BusinessException业务异常定义429
11.4Zuul内部网关实现秒杀限流431
11.5Nginx高性能秒杀和限流435
11.5.1Lua脚本:获取秒杀令牌436
11.5.2Lua脚本:执行令牌桶限流438