『大型网站技术架构:核心原理与案例分析』(五)

扩展性和伸缩性:

  • 扩展性(Extensibility): 指对现有系统影响最小的情况下,系统功能可持续扩展或提升的能力。目标是当系统新增功能时,不需要对现有系统的结构和代码进行修改。
  • 伸缩性(Scalability):指系统能够通过增加/减少自身资源规模的方式增强/减少自己计算处理事务的能力。目标是利用集群的方式增加服务器数量,提高系统的整体事务吞吐能力,实现线性伸缩性。

一、构建可扩展的网站架构

终极目标:系统间低耦合。如何分解系统的各个模块、如何定义各个模块接口、如何复用组合不同的模块构造一个完整的系统。

核心思想:模块化,并在此基础上降低模块间耦合性,提高模块复用性。

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

分布式消息队列通过消息对象分解系统耦合性,不同子系统处理同一个消息。

事件驱动架构

定义:事件驱动架构(Event Driven Architecture)通过在低耦合的模块之间传输事件消息,以保持模块的松散耦合,并借助事件消息的通信完成模块间合作。

典型的EDA架构比如生产者消费者模式。利用分布式消息队列的发布-订阅模式工作。生产者只需生产消息到队列,消费者从队列获取消息进行处理。新增业务,只要对某类消息感兴趣,即可订阅该消息,对原有系统和业务没有任何影响。

三、利用分布式服务打造可复用的业务平台

分布式服务通过接口分解系统耦合性,不同子系统通过相同的接口描述进行服务调用。

巨无霸系统带来的问题:

  • 编译、部署困难
  • 代码分支管理困难:多个团队共同维护一份代码。
  • 数据库连接容易耗尽:数据库连接数与应用数量成正比。
  • 新增业务困难:老人不敢碰,新人不能接。

解决方法:拆分、模块独立部署

  • 纵向拆分:将大应用拆分为多个小应用。
  • 横向拆分:将复用业务拆分出来,独立部署为分布式服务,新增业务只需调用这些分布式服务,不需要依赖具体的模块代码。

Web Service与企业级分布式服务

Web Service: 服务提供者通过WSDL描述服务(接口),客户端通过WSDL生成客户端调用代码,通过SOAP协议与服务提供者通信,传输层协议可以是HTTP、SMTP、TCP等。

缺点:

  • 臃肿的注册与发现机制
  • 低效的XML序列化手段
  • 开销相对较高的HTTP远程通信
  • 复杂的部署与维护手段

大型网站分布式服务的需求

  • 服务注册与发现
  • 负载均衡:支持服务请求者使用可配置的负载均衡算法访问服务。
  • 失效转移
  • 高效的远程通信
  • 整合异构系统
  • 对应用最小侵入:适应服务架构的进化和反复(分布式或集中式部署)。
  • 版本管理:支持服务接口的多版本。
  • 实时监控

分布式服务框架设计

  • Thrift(远程服务调用框架):Facebook用它管理其分布式服务(注册、发现和调用),但是未开源基于Thrift的分布式服务框架。
  • Dubbo:阿里开源的分布式服务框架,较为成熟。

四、可扩展的数据结构

NoSQL: 宽列存储模型、ColumnFamily(列族)设计、面向列族的稀疏矩阵存储格式

五、利用开放平台建设网站生态圈

开放平台架构:

  • API接口:RESTful、Web Service、RPC等。
  • 协议转换:将API输入转成内部服务可识别的形式,将内部服务返回值封装成API格式。
  • 安全:身份识别、权限控制。
  • 审计:监控、计费。
  • 路由:将开放平台访问路由映射到具体的内部服务。
  • 流程:将一组离散的服务组织成一个上下文相关的新服务,隐藏服务细节,提供统一接口。

你可能感兴趣的:(『大型网站技术架构:核心原理与案例分析』(五))