第一部分概述
高并发原则
无状态
拆分
服务化
消息队列
数据异构
缓存银弹
并发化
高可用原则
降级
限流
切流量
可回滚
业务设计原则
防重设计
幂等设计
流程可定义
状态与状态机
后台系统操作可反馈.
后台系统审批化.
文档&注释
备份
第二部分 高可用
负载均衡与反向代理
upstream配置
负载均衡算法
失败重试
健康检查
tcp心跳检查
http心跳检查
其他配置
域名上游服务器
备份上游服务器
不可用上游服务器
长连接
HTTP反向代理示例
HTTP动态负载均衡
Consul+Consul-template
Consul+OpenResty
TCP四层负载均衡
静态负载均衡
动态负载均衡
隔离术
线程隔离
进程隔离
集群隔离
机房隔离
读写隔离
动静隔离
爬虫隔离
热点隔离
资源隔离
使用Hystrix实现隔离
Hystrix简介
隔离示例
基于Servlet3实现请求隔离
请求解析和业务处理线程池分离
业务线程池隔离
业务线程池监控/运维/降级
如何使用Servlet3异步化
限流详解
限流算法
令牌桶算法
漏桶算法
应用级限流
限流总并发/连接/请求数
限流总资源数
限流某个接口的总并发/请求数
限流某个接口的时间窗请求数
平滑限流某个接口的请求数
分布式限流
redis+lua实现
Nginx+Lua实现
接入层限流
ngx_http_limit_conn_module
ngx_http_limit_req_module
lua-resty-limit-traffic
降级特技
降级预案
自动开关降级
超时降级
统计失败次数降级
故障降级
限流降级
人工开关降级
读服务降级
写服务降级
多级降级
配置中心
应用层API封装
配置文件实现开关配置
配置中心实现开关配置
使用Hystrix实现降级
使用Hystrix实现熔断
熔断机制实现
配置示例
采样统计
超时与重试机制
简介
代理层超时与重试
Web容器超时
中间件客户端超时与重试
数据库客户端超时
NoSQL客户端超时
业务超时
前端Ajax超时
回滚机制
事务回滚
代码库回滚
部署版本回滚
数据版本回滚
静态资源版本回滚
压测与预案
系统压测
线下压测
线上压测
系统优化和容灾
应急预案
第三部分 高并发
应用级缓存
缓存简介
缓存命中率
缓存回收策略
基于空间
基于容量
基于时间
基于Java对象引用
回收策略
Java缓存类型
堆缓存
堆外缓存
磁盘缓存
分布式缓存
多级缓存
应用级缓存示例
多级缓存API封装
NULL Cache
强制获取最新数据
失败统计
延迟报警
缓存使用模式实践
Cache-Aside
Cache-As-SoR
Copy Pattern
性能测试
HTTP缓存
简介
HTTP缓存
Last-Modified
ETag
HttpClient客户端缓存
主流程
清除无效缓存
查找缓存
缓存未命中
缓存命中
缓存内容陈旧需重新验证
缓存内容无效需重新执行请求
缓存响应
缓存头总结
Nginx HTTP缓存设置
expires
if-modified-since
nginx proxy expires
Nginx代理层缓存
Nginx代理层缓存配置
清理缓存
一些经验
多级缓存
多级缓存介绍
如何缓存数据
过期与不过期
维度化缓存与增量缓存
分布式缓存与应用负载均衡
缓存分布式
应用负载均衡
热点数据与更新缓存
单机全量缓存+主从
分布式缓存+应用本地热点
更新缓存与原子性
缓存崩溃与快速修复
取模
一致性哈希
快速恢复
连接池线程池详解
数据库连接池
DBCP连接池配置
DBCP配置建议
HttpClient连接池
HttpClient4.5.2配置
HttpClient连接池源码分析
HttpClient4.2.3配置
问题示例
线程池
Java线程池
Tomcat线程池配置
异步并发实战
同步阻塞调用
异步Future
异步Callback
异步编排CompletableFuture
异步Web服务实现
请求缓存
CompletableFuture实现批量查询
请求合并
如何扩容
单体应用垂直扩容
单体应用水平扩容
应用拆分
数据库拆分
数据库分库分表示例
应用层还是中间件层
分库分表策略
使用sharding-jdbc分库分表
使用sharding-jdbc读写分离
数据异构
查询维度异构
聚合数据异构
任务系统扩容
简单任务
分布式任务
Elastic-Job简介
Elastic-Job-Lite功能与架构
Elastic-Job-Lite示例
队列术
应用场景
缓冲队列
任务队列
消息队列
请求队列
数据总线队列
混合队列
其他队列
Disruptor+Redis队列
简介
XML配置
EventWorker
EventPublishThread
EventHandler
EventQueue
下单系统水平可扩展架构
下单服务
同步Worker
基于Canal实现数据异构
mysql主从复制
Canal简介
Canal示例
第四部分 案例
构建需求响应式亿级商品详情页
商品详情页是什么
商品详情页前端结构
我们的性能数据
单品页流量特点
单品页技术架构发展
架构1.0
架构2.0
架构3.0
详情页架构设计原则
数据闭环
数据维度化
拆分系统
Worker无状态化+任务化
异步化+并发化
多级缓存化
动态化
弹性化
降级开关
多机房多活
多种压测方案
遇到的一些坑和问题
SSD性能差
键值存储选型压测
数据量大时JIMDB同步不动
切换主从
分片配置
模板元数据存储HTML
库存接口访问量600w/分钟
微信接口调用量暴增
开启Nginx Proxy Cache性能不升反降
配送至读服务因依赖太多,响应时间偏慢
网络抖动时,返回502错误
机器流量太大
总结
京东商品详情页服务闭环实践
为什么需要统一服务
整体架构
一些架构思路和总结
两种读服务架构模式
本地缓存
多级缓存
统一入口/服务闭环
引入Nginx接入层
数据校验/过滤逻辑前置
缓存前置
业务逻辑前置
降级开关前置
AB测试
灰度发布/流量切换
监控服务质量
限流
前端业务逻辑后置
前端接口服务端聚合
服务隔离
使用OpenResty开发高性能Web应用
OpenResty简介
Nginx优点
Lua的优点
什么是ngx_lua
开发环境
OpenResty生态
场景
基于OpenResty的常用架构模式
负载均衡
单机闭环
分布式闭环
接入网关
核心接入Nginx功能
业务Nginx功能
Web应用
如何使用OpenResty开发Web应用
项目搭建
启停脚本
配置文件
nginx.conf配置文件
nginx.conf项目配置文件
业务代码
模板
公共Lua库
功能开发
基于OpenResty的常用功能总结
一些问题
应用数据静态化架构高性能单页Web应用
整体架构
CMS系统
前端展示系统
控制系统
数据和模板动态化
多版本机制
异常问题
使用OpenResty开发Web服务
架构
单DB架构
DB+Cache/数据库读写分离架构
OpenResty+Local Redis+Mysql集群架构
OpenResty+Redis集群+Mysql集群架构
实现
后台逻辑
前台逻辑
项目搭建
Redis+Twemproxy配置
Mysql+Atlas配置
Java+Tomcat安装
Java+Tomcat逻辑开发
Nginx+Lua逻辑开发
使用OpenResty开发商品详情页
技术选型
核心流程
项目搭建
数据存储实现
商品基本信息SSDB集群配置
商品介绍SSDB集群配置
其他信息Redis配置
集群测试
Twemproxy配置
动态服务实现
项目搭建
项目依赖
核心代码
基本信息服务
商品介绍服务
其他信息服务
辅助工具
web.xml配置
打WAR包
配置Tomcat
测试
nginx配置
绑定hosts测试
前端展示实现
基础组件
商品介绍
nginx配置
前端展示
核心代码
初始化模块
模板html片段
nginx配置
测试
优化