Introduction

  软件架构除了关注系统功能需求外,还需要关注性能、可用性、伸缩性、扩展性和安全性这5个架构要素,架构设计过程中需要平衡这5个要素之间的关系以实现需要和架构目标,也可以通过考察这些架构要素来衡量一个软件架构设计的优劣,判断其是否满足期望。

大型网站架构要素

第三章 大型网站核心架构要素

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

性能

  是网站的一个重要目标,也是网站架构设计的一个重要方面;网站性能问题是网站架构升级优化的触发器。

  1. 客户端:本地缓存(浏览器缓存)、传输数据压缩(页面压缩)、合理页面布局、减少Cookie传输等。
  2. CND,最短访问路径获取数据;反向代理服务器,缓存热点文件,加快请求响应速度,减轻应用服务器负载压力。
  3. 应用服务器:本地缓存(redis)和分布式缓存,热点数据,减轻数据库负载压力。
  4. 异步:请求进入消息队列等待后续处理,直接返回响应给用户。
  5. 集群:多台应用服务器构成集群,提高整体处理能力,改善性能。
  6. 代码:多线程、改善内存管理等优化性能。
  7. 数据库:索引、缓存、SQL优化、NoSQL

  衡量网站性能:响应时间、TPS(QPS)、系统性能计数等


可用性

  99.99%,高可用的主要手段是冗余。

  • 应用服务器:负载均衡组成集群,实现故障切换
  • 存储服务器:实时备份,故障时,数据访问转移
  • 部署控制:预发布验证、自动化测试、自动化发布、灰度发布等

伸缩性

  衡量架构伸缩性的主要标准:是否可以用多台服务器构建集群,是否容易向集群中添加新的服务器。

  • 应用服务器:负载均衡
  • 缓存服务器:注意:加入新的服务器会导致缓存路由失效,进而导致大部分缓存数据无法访问,改进缓存路由算法。
  • 关系数据库:数据复制、主从热备,但大规模集群的可伸缩性较困难;可通过路由分区等手段将部署有多个数据库的服务器组成一个进群。
  • NoSQL:先天支持优势

扩展性

  网站快速发展,功能不断扩展,如何设计网站的架构使其能够快速响应需要变化,是网站可扩展架构主要的目的。

  • 事件驱动架构:消息队列
  • 分布式服务:业务和可服用服务分离,通过分布式服务框架调用。

安全性