# 架构五要素

一般在做架构设计时,我们会关注以下五个要素:

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

# 高性能

性能的测试指标主要有:

  • 响应时间:指应用执行一个操作需要的时间
  • 并发数:指系统能够同时处理请求的数目
  • QPS:指单位时间内系统处理的请求量
  • 系统性能计数器:描述服务器或者操作系统性能的一些数据指标

性能优化,根据网站分层架构,可以分为三大类:

  • Web前端性能优化

    • 减少http请求
    • 适用浏览器缓存
    • 启用压缩
    • 减少Cookie传输
  • 应用服务器性能优化:缓存、集群、异步

    • 多线程(设计为无状态,使用局部对象,并发访问资源使用锁)
    • 资源复用(单例,对象池)
    • 数据结构
    • 异步操作(消息队列,削峰作用)
    • 多台应用服务器组成一个集群共同对外服务,提高整体处理能力
    • 使用CDN,将网站静态内容分发至里用户最近的网络服务器机房,使用户通过最短访问路径获取数据。可以在网站机房部署反向代理服务器,缓存热点文件,加快请求响应速度,减轻应用服务器负载压力
    • 应用服务器端,可以使用服务器本地缓存和分布式缓存(网站性能优化第一定律:考虑使用缓存优化性能)
    • 代码层面,通过使用多线程、改善内存管理等手段优化性能
    • 数据库服务器端,索引、缓存、SQL优化等手段优化性能
    • NoSQL数据库通过优化数据模型、存储结构、伸缩特性等
  • 存储服务器性能优化

    • 机械硬盘 vs 固态硬盘
    • B+树 vs LSM树
    • RAID vs HDFS

# 高可用

高可用的网站架构:目的是保证服务器硬件故障时服务依然可用、数据依然保存并能够被访问,主要手段有数据和服务的冗余备份及失效转移。

  • 高可用的应用:

    • 通过负载均衡进行无状态服务的失效转移
    • 应用服务器集群的Session管理
  • 高可用的服务:无状态的服务,可使用类似负载均衡的失效转移策略,此外还有如下策略

    • 超时设置
    • 异步调用
    • 服务降级
    • 限流
  • 高可用的数据:主要手段是数据备份和失效转移机制

    • 失效确认
    • 访问转移
    • 数据恢复
    • 冷备:缺点是不能保证数据最终一致和数据可用性
    • 热备:分为异步热备和同步热备
    • 数据一致性(Consistency)
    • 数据可用性(Availability)
    • 分区容错性(Partition Tolerance)
    • CAP原理
    • 数据备份
  • 软件质量保证

    • 自动化测试
    • 预发布验证
    • 灰度发布
  • 网站实时监控

    • 警报系统
    • 自动优雅降级
    • 用户行为日志采集(服务端和客户端)
    • 服务器性能监控
    • 监控数据采集
    • 监控管理

# 伸缩性

概括起来伸缩性分为如下几个方面:

  • 应用服务器集群的伸缩性设计

    • 轮询(Round Robin,RR)
    • 加权轮询(Weighted Round Robin,WRR)
    • 随机(Random)
    • 最少链接(Least Connections)
    • 源地址散列(Source Hashing)
    • DNS域名解析负载均衡
    • 反向代理负载均衡(在HTTP协议层里,应用层负载均衡)
    • IP负载均衡(在内核进程完成数据分发)
    • 数据链路层负载均衡(数据链路层修改mac地址,三角传输模式,LVS)
  • 分布式缓存集群的伸缩性设计

    • Redis集群
    • 分布式缓存的一致性Hash算法(一致性Hash环,虚拟层)
  • 数据存储服务集群的伸缩性设计

    • 关系数据库集群的伸缩性设计
    • NoSQL数据库的伸缩性设计

# 扩展性

系统架构设计层面的“开闭原则”,构建可扩展的网站架构。

  • 利用分布式消息队列降低耦合性

    • 分布式消息队列
    • 事件驱动架构(Event Driven Architecture)
  • 利用分布式服务打造可复用的业务平台

  • 可扩展的数据结构(如HBase的ColumnFamily设计)

  • 利用开放平台建设网站生态圈

# 安全性

XSS攻击和SQL注入时构成网站应用攻击最主要的两种手段,此外还包括CSRF,Session劫持等手段。

  • 攻击与防御

    • Error Code

    • 表单Token

    • 验证码

    • Jsonp请求的,Referer校验

    • SQL注入

    • html危险字符转义

    • XSS攻击:跨站点脚本攻击(Cross Site Script)

      对js转义,使其失去执行能力,只能作为纯字符串展示

    • CSRF攻击:跨站点请求伪造(Cross Site Request Forgery)

      防范:httpOnly;增加token校验;通过Referer识别。

    • 网站安全漏洞扫描