7 随需应变:网站的可扩展架构
扩展性:指对现有系统影响最小的情况下,系统功能可持续扩展或提升的能力。
伸缩性:指系统能够通过增加(减少)自身资源规模的方式增强(减少)自己计算处理事务的能力。
7.1 构建可扩展的网站架构
设计网站可扩展架构的核心思想是模块化,并在此基础上,降低模块间的耦合性,提高模块的复用性。
模块分布式部署以后具体聚合方式主要由分布式消息队列和分布式服务。
7.2 利用分布式消息队列降低系统耦合性
7.2.1 事件驱动架构
通过在低耦合的模块之间传输事件消息,以保持模块的松散耦合,并借助时间消息的通信完成模块间合作,典型的EDA架构就是操作系统中常见的生产者消费者模式。最常用的是分布式消息队列。
7.2.2 分布式消息队列
7.3 利用分布式服务打造可复用的业务平台
如果说分布式消息队列通过消息对象分解系统耦合性,不同子系统处理同一个消息;那么分布式服务则通过接口分解系统耦合性,不同子系统通过相同接口描述进行服务调用。
巨无霸应用系统问题;
- 编译部署困难
- 代码分支管理困难
- 数据库连接耗尽
- 新增业务困难
解决方案就是拆分,将模块独立部署,降低系统耦合性。拆分开分为:横向拆分和纵向拆分两种。
7.3.1 Web Service与企业级分布式服务
缺点:
- 臃肿的注册与发现机制
- 低效的XML序列化手段
- 开销相对较高的HTTP远程通信
- 复杂的部署与维护手段
7.3.2 大型网站分布式服务的需求与特点
- 负载均衡
- 失效转移
- 高效的远程通信
- 整合异构系统
- 对应用最少侵入
- 版本管理
- 实时监控
7.3.3 分布式服务框架设计
7.4 可扩展的数据结构
例如:NoSQL中的列族
7.5 利用开放平台建设网站生态圈
利用自身庞大的用户群吸引第三方开发者。
- API接口:RESTful、WebService、RPC等各种形式
- 协议转换:将各种API输入转换成内部服务可以识别的形式,并将内部服务的返回封装成API的格式
- 安全
- 审计
- 路由:映射,将开放平台的各种访问路由映射到具体的内部服务。
- 流程:将一组离散的服务组织成一个上下文相关的新服务,隐藏服务细节,提供统一接口供开发者调用