架构知识入门修炼

阿里巴巴技术专家李智慧

一、架构

强烈的好奇心、敏锐业务嗅觉、扎实技术基础、出色编程能力、深刻领悟主流技术产品和模式

  • 基础
    • 数据结构
    • 操作系统
    • 算法
    • 设计模式
  • 技术
    • 缓存
    • 异步
    • 分布式存储
    • 微服务
  • 架构
    • 高可用
    • 高性能
    • 安全

二、大型架构演进之路 & 系统处理能力提升

性能提升

  • 垂直伸缩(传统企业 银行等)
    • 硬件升级 费用 、硬件有物理极限、操作系统也有限制
  • 水平伸缩(互联网企业)

演进之路

  • 少量用户:单机系统
  • 万级用户:数据库与应用分离
  • 十万级用户:使用缓存改善性能应用服务集群化
  • 百万级用户:使用反向代理和CDN加速响应、数据库读写分离
  • 千万级用户:使用分布式文件系统和分布式数据库系统
  • 亿级用户:使用搜索引擎、NOSQL、消息队列、分布式服务

三、分布式缓存

  • 缓存特点

    • 技术简单
    • 性能提升显著
  • 缓存关键指标

    • 缓存键集合
    • 缓存空间
    • 缓存寿命
  • 缓存类型

    • 代理缓存 (通读缓存 read-through)
    • 反向代理缓存(通读缓存 read-through)
    • cdn缓存(通读缓存 read-through)
    • 对象缓存(旁路缓存cache-aside)
  • 分布式缓存

    • 分布式缓存架构
    • 分布式缓存模型
    • 一致性HASH算法
  • 缓存注意事项

    • 频繁修改的数据
    • 没有热点的数据
    • 数据不一致
    • 缓存雪崩

通读缓存:给客户端返回缓存资源,或在请求未命中缓存 时获取实际数据

旁路缓存:通常是一个独立的键值对存储 key-value

四、分布式消息队列

  • 同步与异步
    • 同步调用
    • 异步调用(2个重要模型)
      • 点对点模型
      • 发布订阅模型
  • 异步架构
    • 异步调用实现架构
    • 消息生产者:消息生产者是客户端的一部份代码,用来初始化异步处理
    • 消息消费者:消息消费者,由应用开发者实现,主要职责是从消息队列中接收并处理消息。
    • 分布式消息队列:消息队列是消息发送的目的地和发给消费者的缓冲。
    • 点对点架构模型
    • 发布订阅模型
  • 消息队列异步架构好处
    • 异步处理
    • 易于伸缩
    • 消峰填谷,使峰值变平缓
    • 隔离失败机器 及自我修复
    • 解耦(发布者视角、消费这视角)
  • 常用消息队列产品
    • RabbitMQ *
    • ActiveMQ
    • RocketMQ
    • Kafka **
  • 消息队列异步架构的反模式
    • 阻塞式调用 (同步)
    • 生产者消费显式依赖 耦合消息生产者和消费者
    • 缺乏坏消息处理机制
  • 消息队列异步架构的挑战
    • 消息无序
    • 消息重入队列
    • 竞态条件
    • 复杂度

五、分布式数据存储

  • mysql复制
    • 主从复制:
      • 一主一从
      • 一主多从:分摊负载、专机专用、便于冷备、高可用
    • 主主复制
  • 数据分片
    • 分片原理
    • 分片方案
    • 分片扩容
  • 数据库部署
    • 单一部署:主从复制实现伸缩
    • 分库:两个web服务器和两个数据库
    • 分片
      • 将数据集切分成较小的分片,以便 于将它们分散存储在多台服务器上,避免一台机器处理整个数据集
      • 数据库之间互相独立,不共享任何信息,通过分片键定位分片
      • 将数据以某种方式切分,以便每台服务器都只存储一部份数据
    • 综合部署都使用以上方案
  • NOSQL
    • CAP原理
      • A数据可用性:任何时候任何应用程序 都可以读写访问
      • P分区耐受性 系统可以跨网络分区线性伸缩
      • C数据一致性 数据的多个备份任何时候都是一致性的
    • 最终一致性的数据存储

六、微服务

  • 单体系统的困难
    • 编译部署困难
    • 数据库连接耗尽
    • 服务复用困难
    • 新增业务困难
  • 微服务框架
    • 架构
      • 服务消费者
      • 服务提供者
      • 注册中心
    • dubbo 阿里
    • spring cloud
  • 微服务最佳实践

  • 微服务模式
    • 事件溯源
    • CQRS 命令与查询职责隔离
    • 断路器:关闭 打开 半开 hystrix
    • 超时

七、高性能系统架构

  • 性能测试(主观视角 使用者体验上的快慢 ;客观视角 性能指标优劣)
    • 性能指标:响应时间、并发数、性能计数器、吞吐量
    • 测试方法:性能测试、负载测试、压力测试、稳定性测试
    • 性能曲线:吞吐量、响应用时间性能特性
  • 硬件优化
    • 机房与骨干网络优化
      • 异地多活的多机房架构
      • 专线网络与自主CDN建设
    • 服务器与硬件配置优化
      • 使用SSD、网卡等
  • 中间件优化
    • 操作系统优化
    • 虚拟机优化:垃圾回收器
    • 基础组件优化:tomcat等
  • 代码优化
    • 多线程:并发编程,多线程与锁
    • 数据结构:数组、链表、HASH表、树、图等
    • 设计模式:遵循编码规范 面向对象 避免烂代码
    • 资源复用:线程池和对象池
  • 架构优化
    • 缓存:缓存结果为对象、优化读操作、减少数据库访问,降低存储设备负载压力
    • 集群
    • 异步:优化写操作,控制消费速度,合适的负载压力,即时响应,更好用户体验

八、高可用系统架构

  • 可用性度量
    • 可用性指标
      • 年度可用性指标 =(1-不可用时间/年度总时间)*100%
      • 通常用N个9来说明互联网应用可用性
    • 故障分
      • 事故级故障:严重故障,整体不可用:权重100
      • A类故障:网站访问不顺畅或核心功能不可用:权重20
      • B类故障:非核心功能不可用或核心功能少数用户不可用:权重5
      • C类故障 :以上故障以外的其它故障:权重1
      • 故障分 = 故障时间 * 故障权重
  • 高可用架构
    • 负载均衡:HTTP、DNS、反向代理、IP层、数据链路层
    • 备份与失效转移
    • 消息队列隔离
    • 限流降级:通过对并发访问进行限流,降低并发的请求数据来保护系统;关闭部份非核心功能,降低对系统的资源消耗,保证系统在高并发的情况下仍然保持可用。
    • 异地多活多机房
  • 高可用运维
    • 自动化部署
    • 自动化监控
    • 自动化测试
    • 预发布测试

九、系统的安全架构

  • WEB攻击
    • XXS攻击
    • SQL注入攻击
    • CSRF攻击
  • WEB防护
    • 过滤消毒
    • SQL参数绑定:防御SQL注入
    • 验证码 :防御CSRF
    • WEB防火墙:modsecurity
  • 加密
    • 单项散列加密:明文转密文 不可以解密的 加密是单项的
    • 对称加密:密钥
    • 非对称加密:公钥、私钥
  • 信息过滤反垃圾
    • 分类算法
    • 布隆过滤器