和传统行业相比,互联网系统的特点

  • 高并发、大流量
  • 高可用
  • 海量数据
  • 用户分布广泛,网络情况复杂
  • 安全环境恶劣
  • 需求快速变更,发布频繁
  • 渐进式发展

应对高并发挑战的两个方向

  • 垂直伸缩
    • 更强大的服务器
    • 特点
      • 优点
        • 软件及架构不需要变更
        • 早期效果更明显
      • 缺点
        • 达到某个临界点后,增加计算能力需要更多的花费
        • 有物理极限
        • 软件有极限,操作系统、应用程序的设计限制
  • 水平伸缩
    • 通过增加服务器提升计算能力的一类架构方法

垂直伸缩和水平伸缩之间存在一个临界点,垂直伸缩到今天仍然是一个有效的可选项。
image.png

互联网架构演化

0. 最简单的互联网架构

image.png

1. 应用数据分离

image.png

2. 通过缓存改善系统性能

image.png

3. 使用应用服务器集群改善系统的并发处理能力

image.png

4. 数据库读写分离

image.png

5. 使用反向代理和CDN加速网站响应

image.png

6. 使用分布式文件系统和分布式数据库系统

解决写数据的瓶颈
image.png

7. 使用NoSQL和搜索引擎

image.png

8. 业务拆分

image.png

9. 微服务及中台化

image.png

10. 大数据和智能化

互联网系统架构模式

架构模式

  • 分层和分割
    • 分层是横向切分;分割是纵向切分。
    • 每个部分实现单一职责,通过依赖调用的方式实现系统功能
    • 解决系统耦合性强,不利于维护和部署的问题,并能提高系统的并发处理能力和功能扩展能力。
  • 分布式
    • 协调切分后的模块
    • 通过远程调用
    • 解决单机性能瓶颈的问题,可以使用更多的计算资源,实现横向扩展
  • 集群
    • 作为多个部署相同应用的入口
    • 实现负载均衡和路由
  • 缓存
    • 将数据存放在距离计算最近的位置以加快处理速度;
    • 是改善软件性能的第一手段,复杂的软件设计中几乎无处不在
    • 常用的缓存手段:
      • CDN
      • 反向代理
      • 本地缓存
      • 远程缓存
  • 异步
    • 用于实现系统解耦的手段,减少各个模块之间的直接联系。
    • 常用于以下场景:
      • 提高系统可用性
      • 加快网站响应速度
      • 消除并发访问高峰
  • 冗余
    • 即备份。
    • 应对部分设备出现故障时的方案
  • 自动化
    • devops
    • 在运维工作中使用较多,为了减少人工工作
  • 安全
    • 互联网开放性带来的安全挑战

互联网系统架构核心要素

如何衡量一个系统的架构设计

  • 高性能
  • 高可用
  • 可伸缩
  • 可扩展
  • 安全

互联网架构技术一览

image.png

前端架构

  • App及web开发技术
  • 浏览器及HTTP优化技术
  • CDN
  • 动静分离
  • 图片服务
  • 反向代理
  • DNS

网关及应用层架构

  • 网关架构
  • 负载均衡
  • 动态页面静态化
  • 业务拆分

服务层架构

  • 微服务框架
  • 分布式消息队列
  • 分布式缓存
  • 分布式一致性(锁)服务

存储架构

  • 分布式文件
  • 分布式关系数据库
  • NoSQL数据库

后台架构

  • 大数据平台
  • 搜索引擎
  • 推荐引擎
  • 数据仓库

四个系统的进化历程

  • 维基百科
    • 非营利性的
    • 访问量世界排名第六的网站,十几人维护
    • 三个数据中心:澳大利亚,韩国,欧洲
    • php开发
  • 淘宝网
  • 宅米
    • 业务量比较集中
  • 微博