和传统行业相比,互联网系统的特点
- 高并发、大流量
- 高可用
- 海量数据
- 用户分布广泛,网络情况复杂
- 安全环境恶劣
- 需求快速变更,发布频繁
- 渐进式发展
应对高并发挑战的两个方向
- 垂直伸缩
- 更强大的服务器
- 特点
- 优点
- 软件及架构不需要变更
- 早期效果更明显
- 缺点
- 达到某个临界点后,增加计算能力需要更多的花费
- 有物理极限
- 软件有极限,操作系统、应用程序的设计限制
- 优点
- 水平伸缩
- 通过增加服务器提升计算能力的一类架构方法
垂直伸缩和水平伸缩之间存在一个临界点,垂直伸缩到今天仍然是一个有效的可选项。
互联网架构演化
0. 最简单的互联网架构
1. 应用数据分离
2. 通过缓存改善系统性能
3. 使用应用服务器集群改善系统的并发处理能力
4. 数据库读写分离
5. 使用反向代理和CDN加速网站响应
6. 使用分布式文件系统和分布式数据库系统
解决写数据的瓶颈
7. 使用NoSQL和搜索引擎
8. 业务拆分
9. 微服务及中台化
10. 大数据和智能化
互联网系统架构模式
架构模式
- 分层和分割
- 分层是横向切分;分割是纵向切分。
- 每个部分实现单一职责,通过依赖调用的方式实现系统功能
- 解决系统耦合性强,不利于维护和部署的问题,并能提高系统的并发处理能力和功能扩展能力。
- 分布式
- 协调切分后的模块
- 通过远程调用
- 解决单机性能瓶颈的问题,可以使用更多的计算资源,实现横向扩展
- 集群
- 作为多个部署相同应用的入口
- 实现负载均衡和路由
- 缓存
- 将数据存放在距离计算最近的位置以加快处理速度;
- 是改善软件性能的第一手段,复杂的软件设计中几乎无处不在
- 常用的缓存手段:
- CDN
- 反向代理
- 本地缓存
- 远程缓存
- 异步
- 用于实现系统解耦的手段,减少各个模块之间的直接联系。
- 常用于以下场景:
- 提高系统可用性
- 加快网站响应速度
- 消除并发访问高峰
- 冗余
- 即备份。
- 应对部分设备出现故障时的方案
- 自动化
- devops
- 在运维工作中使用较多,为了减少人工工作
- 安全
- 互联网开放性带来的安全挑战
互联网系统架构核心要素
如何衡量一个系统的架构设计
- 高性能
- 高可用
- 可伸缩
- 可扩展
- 安全
互联网架构技术一览
前端架构
- App及web开发技术
- 浏览器及HTTP优化技术
- CDN
- 动静分离
- 图片服务
- 反向代理
- DNS
网关及应用层架构
- 网关架构
- 负载均衡
- 动态页面静态化
- 业务拆分
服务层架构
- 微服务框架
- 分布式消息队列
- 分布式缓存
- 分布式一致性(锁)服务
存储架构
- 分布式文件
- 分布式关系数据库
- NoSQL数据库
后台架构
- 大数据平台
- 搜索引擎
- 推荐引擎
- 数据仓库
四个系统的进化历程
- 维基百科
- 非营利性的
- 访问量世界排名第六的网站,十几人维护
- 三个数据中心:澳大利亚,韩国,欧洲
- php开发
- 淘宝网
- 宅米
- 业务量比较集中
- 微博