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