零. 核心问题
  - 什么是可拓展性?
    
      - 对现有系统影响最小的情况下,系统功能可持续拓展和提升的能力
- 当系统增加新功能时,不需要对现有系统的结构和代码进行修改
 
- 如何实现可拓展性?
    
  
一. 构建可拓展的网站架构
  - 低耦合
    
      - 作用
        
          - 系统更容易拓展
- 模块更容易复用
- 让开发过程和维护变得更加轻松和容易管理
 
- 将一个大系统切分为N个低耦合的子模块
        
      
- 对架构师的要求
        
          - 专业的技术和经验
- 对业务场景的理解
- 对人性的把握、对世界的认知
 
 
- 模块化
    
  
二. 利用分布式消息队列降低系统耦合性
  - 事件驱动架构
    
      - 定义:
        
          - 在低耦合的模块之间传输事件消息,保持模块的松散耦合,并借助事件消息的通信完成模块间合作
 
- 典型实例
        
      
- 在大型网站中的使用
        
      
 
- 分布式消息队列
    
      - 定义
        
          - 先进先出的数据结构
- 应用程序通过远程访问接口使用分布式消息队列,对消息存取操作
- 实现分布式的异步调用
 
- 作用
        
          - 伸缩性:类似无状态的服务器,扩容简单
- 可用性:内存队列、磁盘存储、分布式
 
- 具体的方案
        
          - MySQL
- ActiveMQ
- RocketMQ
- Kafka
 
 
三. 利用分布式服务构建可复用的业务平台
  - 常见问题及方案
    
      - 大型系统面临的问题
        
          - 编译、部署困难
- 代码分支管理困难
- 数据库连接耗尽
- 新增业务困难
 
- 解决方案
        
          - 横向拆分
            
              - 复用的业务拆分出来,独立部署
                
                  - 新增业务只需要调用分布式服务,不依赖具体的模块代码
- 模块只要保证接口一致
 
 
- 纵向拆分
            
          
 
 
- WebService
    
      - Service Broker + UDDI
- Service Provider + WSDL
- Service Requester + SOAP
- 缺点
        
          - 臃肿的注册与发现机制
- 低效的XML序列化手段
- 开销较高的HTTP远程通信
- 复杂的部署与维护手段
 
 
- 大型网站分布式服务的需求与特点
    
      - 负载均衡
- 失效转移
- 高效的远程通信
- 整合异构系统
- 对应用最少的侵入
- 版本控制
- 实时监控
 
- 分布式服务框架设计
    
      - SOA(Service Oriented Architecture)
        
      
- 开源实例
        
      
 
四. 可拓展的数据结构
  
五. 利用开发平台建设网站生态圈