架构_Web可拓展架构


零. 核心问题

  1. 什么是可拓展性?
    • 对现有系统影响最小的情况下,系统功能可持续拓展和提升的能力
    • 当系统增加新功能时,不需要对现有系统的结构和代码进行修改
  2. 如何实现可拓展性?
    • 系统架构设计层面的开闭原则

一. 构建可拓展的网站架构

  1. 低耦合
    • 作用
      • 系统更容易拓展
      • 模块更容易复用
      • 让开发过程和维护变得更加轻松和容易管理
    • 将一个大系统切分为N个低耦合的子模块
      • 包含横向的业务模块
      • 包含纵向的基础技术模块
    • 对架构师的要求
      • 专业的技术和经验
      • 对业务场景的理解
      • 对人性的把握、对世界的认知
  2. 模块化
    • 作用
      • 一组功能的集合
      • 提高系统的复用程度

二. 利用分布式消息队列降低系统耦合性

  1. 事件驱动架构
    • 定义:
      • 在低耦合的模块之间传输事件消息,保持模块的松散耦合,并借助事件消息的通信完成模块间合作
    • 典型实例
      • 生产者-消费者模式
    • 在大型网站中的使用
      • 分布式消息队列
  2. 分布式消息队列
    • 定义
      • 先进先出的数据结构
      • 应用程序通过远程访问接口使用分布式消息队列,对消息存取操作
      • 实现分布式的异步调用
    • 作用
      • 伸缩性:类似无状态的服务器,扩容简单
      • 可用性:内存队列、磁盘存储、分布式
    • 具体的方案
      • MySQL
      • ActiveMQ
      • RocketMQ
      • Kafka

三. 利用分布式服务构建可复用的业务平台

  1. 常见问题及方案
    1. 大型系统面临的问题
      1. 编译、部署困难
      2. 代码分支管理困难
      3. 数据库连接耗尽
      4. 新增业务困难
    2. 解决方案
      1. 横向拆分
        • 复用的业务拆分出来,独立部署
          • 新增业务只需要调用分布式服务,不依赖具体的模块代码
          • 模块只要保证接口一致
      2. 纵向拆分
        • 梳理业务
        • 剥离业务
        • 独立Web应用
  2. WebService
    1. Service Broker + UDDI
    2. Service Provider + WSDL
    3. Service Requester + SOAP
    4. 缺点
      1. 臃肿的注册与发现机制
      2. 低效的XML序列化手段
      3. 开销较高的HTTP远程通信
      4. 复杂的部署与维护手段
  3. 大型网站分布式服务的需求与特点
    1. 负载均衡
    2. 失效转移
    3. 高效的远程通信
    4. 整合异构系统
    5. 对应用最少的侵入
    6. 版本控制
    7. 实时监控
  4. 分布式服务框架设计
    • SOA(Service Oriented Architecture)
      • Thrift
    • 开源实例
      • Dubbo

四. 可拓展的数据结构

五. 利用开发平台建设网站生态圈