大型网站技术架构读书笔记--扩展性

设计网站可扩展架构的核心思想是模块化,并在此基础之上,降低模块间的耦合性,提高模块的复用性。

分层和分割是模块化设计的重要手段,利用分层和分割的方式将软件拆解成若干个低耦合的独立的组件模块,这些组件模块以消息传递和依赖调用的方式聚合成一个完整的系统。将这些模块通过分布式部署的方式独立部署在独立的服务器(集群)上,从物理上分离模块间的耦合关系,进一步降低耦合性提高复用性。

模块化部署之后的聚合方式主要有分布式消息队列和分布式服务。

分布式消息队列

事件驱动架构(Event Driven Architecture)

通过低耦合模块间传输事件消息来保持模块的松散耦合,并借助事件消息的通信完成模块间的合作。

典型EDA架构就是生产消费者模式

大型网站中最常用的是分布式消息队列,消息队列利用发布订阅者模式工作,消息发送者发布消息,一个或多个消息接收者接收并处理消息。

消息发送者是消息源,在对消息进行处理后将消息发送至分布式消息队列,消息接收者从分布式消息队列获取该消息后继续进行处理。

大型网站架构系列:分布式消息队列(一)
大型网站架构系列:消息队列(二)

分布式服务

拆分系统,独立部署模块,横向拆分和纵向拆分。
纵向拆分将大应用拆成小应用。横向拆分提取可复用业务,独立成分布式业务。

WebService


服务提供者通过WSDL(Web Service Description Language)向注册中心(Service Broker)描述自身服务接口属性.注册中心使用UDDI(Universal Description,Discovery,and Integration,统一描述、发现和集成)发布服务提供者提供的服务,服务请求者从注册中心检索到服务信息后,通过SOAP(Simple Object Access Protocol,简单对象访问协议)和服务提供者通信,使用相关服务。

WebService实际上是一组工具,并有多种不同的方法调用之。三种最普遍的手段是:远程过程调用(RPC),服务导向架构(SOA)以及表述性状态转移(REST)。

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

负载均衡、失效转移、高效的远程通信、整合异构系统、对应用最少侵入(支持集中式和分布式部署)、版本管理、实时监控

阿里巴巴开源分布式服务框架Dubbo

可扩展的数据结构

关系型数据库:预置一些冗余中字段。
NoSQL数据库:ColumnFamily(列族),创建表时不用指定Column,只需要指定ColumnFamily的名称。

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

大型网站开放第三方API。