前言
在我们的技术生涯中,总是不断针对新的需求去研发新的系统,需要注意的是系统设计是一个不断迭代的过程,满足需求的系统是不断迭代优化出来的,这是一个持续的过程。
虽然系统的构建,面临很多的困难和问题,但是对架构师而言,最重要的是要保证系统可用,无论任何环境、任何压力、任何场景,系统都要可用,这是架构师的第一要务。下面要介绍的这份京东大牛总结文档就最大程度的阐述了分布式系统如何保证高可用性,以及应对高并发这两个大方面。涉及很多技术和细节。
保证高可用:负载均衡和反向代理、隔离、限流、降级、超时与重试等。
处理高并发:应用缓存、多极缓存、连接池、异步并发、队列处理等。
相信大多数人对这些知识点都是久闻其名,而不知其然,更不知其所以然的,相信大家吃透这份文档后这些方面的知识短板也能补缺,还能对构建自己的架构思想起到一定的帮助作用。下面我们先来看一下系统设计的一些原则。
交易系统设计的一些原则
高并发原则
- 无状态
- 拆分
- 服务化
- 消息队列
- 数据异构
- 缓存银弹
- 并发化
高可用原则
- 降级
- 限流
- 切流量
- 可回滚
业务设计原则
- 防重设计
- 幂等设计
- 流程可定义
- 状态与状态机
- 后台系统操作可反馈
- 后台系统审批化
- 文档和注释
以上就是系统设计的一些原则了,下面我们来看一看具体是如何保证系统的高可用与高并发的。
高可用
这一部分可以帮助打击理解高可用的一些原则,如负载均衡、限流、降级、隔离、超时与重试、回滚机制、压测与预案等,并能实际应用到自己的系统中。
- 负载均衡与反向代理
- upstream配置
- 负载均衡算法
- 失败重试
- 健康检查
- 其他配置
- 长连接
- HTTP反向代理示例
- HTTP动态负载均衡
Nginx四层负载均衡
- 隔离术
- 线程隔离
- 进程隔离
- 集群隔离
- 机房隔离
- 读写隔离
- 动静隔离
- 爬虫隔离
- 热点隔离
资源隔离
- 限流详解
- 限流算法
- 应用级限流
- 分布式限流
接入层限流
- 降级特技
- 降级预案
- 自动开关降级
- 人工开关降级
- 读服务降级
- 写服务降级
多级降级
- 超时与重试机制
- 代理层超时与重试
- Web容器超时
- 中间件客户端超时与重试
- 数据库客户端超时
- NoSQL客户端超时
- 业务超时
前端Ajax超时
- 回滚机制
- 事务回滚
- 代码库回滚
- 部署版本回滚
- 数据版本回滚
静态资源版本回滚
- 压测与预案
- 系统压测
- 系统优化和容灾
应急预案
高并发
这一部分介绍了开发高并发系统的一些原则,如缓存、池化、异步化、扩容、队列等,并配合大量案例可以让大家更好地掌握和运用。
- 应用级缓存
- 缓存简介
- 缓存命中率
- 缓存回收策略
- Java缓存类型
- 应用级缓存示例
- 缓存使用模式实践
性能测试
- HTTP缓存
- HTTP缓存
- HTTPCien客户端缓存
- Nginx
- HTTP缓存设置
Nginx代理层缓存
- 多级缓存
- 多级缓存介绍
- 如何缓存数据
- 分布式缓存与应用负载均衡
- 热点数据与更新缓存
- 更新缓存与原子性
缓存崩溃与快速修复
- 连接池线程池详解
- 数据库连接池
- HTTPClient连接池
线程池
- 异步并发实战
- 同步阻塞调用
- 异步Future
- 异步Callback
- 异步编排CompletableFuture
- 异步Web服务实现
- 请求缓存
请求合并
- 如何扩容
- 单体应用垂直扩容
- 单体应用水平扩容
- 应用拆分
- 数据库拆分
- 数据库分库分表示例
- 数据异构
任务系统扩容
- 队列术
- 应用场景
- 缓冲队列
- 任务队列
- 消息队列
- 请求队列
- 数据总线队列
- 混合队列
- 其他队列
- Disruptor+ Redis队列
- 下单系统水平可扩展架构
基于Canal实现数据异构
实际案例
介绍一些的商品详情页、统一服务等系统架构,还有一些静态化架构的思路,可以帮助大家理解前边介绍的一些原则,构建自己商品详情页。
- 商品详情页是什么
- 商品详情页前端结构
- 性能数据
- 单品页流量特点
- 单品页技术架构发展
- 详情页架构设计原则
遇到的一些坑和问题
商品详情页服务闭环实践
- 为什么需要统一服务
- 整体架构
- 一些架构思路和总结
- 引入Nginx接入层
- 前端业务逻辑后置
- 前端接口服务端聚合
服务隔离
使用OpenResty开发高性能Web应用
- OpenResty简介
- 基于OpenResty的常用架构模式
- 如何使用OpenResty开发Web应用
基于OpenResty的常用功能总结
应用数据静态化架构高性能单页Web应用
- 整体架构
- 数据和模板动态化
- 多版本机制
异常问题
使用OpenResty开发Web服务
- 架构
- 单DB架构
实现
使用OpenResty开发商品详情页
- 技术选型
- 核心流程
- 项目搭建
- 数据存储实现
- 动态服务实现
- 前端展示实现
不想成为架构师的程序员不是好程序员,架构师是一种兼有领域/行业业务知识并且具体架构设计、系统分析的复合型人才,要成为一名架构师是一个不断积累的过程。现在还没达到架构师的层次不要紧,俗话说:种一棵树最好的时间是十年前,其次是现在。只有现在不断学习,慢慢形成自己的架构思想,才有成为一个合格的架构师的可能。这份文档涵盖的一些技术以及实际案例相信足以对大家形成自己的架构思想有一定的帮助!