网站的可扩展架构

扩展性:指对现有系统影响最小的情况下,系统功能可持续扩展或提升的能力。

伸缩性:指系统能够通过增加(减少)自身资源规模的方式增强(减少)自己的计算处理事务的能力。

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

模块分布式部署以后具体聚合方式主要有:分布式消息队列分布式服务


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

事件驱动架构(EDA)

事件驱动架构:通过在低耦合的模块之间传输事件消息,以保持模块的松散耦合,并借助事件消息的通信完成模块间合作。典型的EDA架构就是生产者-消费者模式。

消息接收者在对消息进行过滤、处理、包装后,构造成一个新的消息类型,将消息继续发送出去,等待其他消息接收者订阅处理该消息。——基于事件驱动的业务架构。

消息发送者不需要等待消息接收者处理数据就可以返回,系统具有更好的响应延迟;在访问高峰期,消息可以暂存在消息队列中等待消息接收者根据自身负载能力控制消息处理速度,减轻数据库等后端存储的负载压力。

分布式消息队列

分布式消息队列将队列部署到独立的服务器上,应用程序可以通过远程访问结构使用分布式消息队列,进行消息存取操作,实现分布式的异步调用。

消息生产者应用程序通过远程访问接口将消息推送到消息队列服务器,消息队列服务器将消息写入本地内存队列后立即返回成功响应给消息生产者。消息队列服务器根据消息订阅列表查找订阅该消息的消息消费者应用程序,将消息队列中的消息按照先进先出的原则将消息通过远程通信接口发送给消息消费者程序。

为了避免消息队列服务器宕机造成消息丢失,会将消息成功发送到消息队列的消息存储在消息生产者服务器,等消息真正被消息消费者服务器处理后才删除消息。消息队列服务器宕机后,生产者服务器会选择分布式消息队列服务器集群中其他的服务器发布消息。

补充:目前有名的分布式消息队列产品有Apache ActiveMQ



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

分布式消息队列通过消息对象分解系统耦合性,不同子系统处理同一个消息;分布式服务通过接口分解系统耦合性,不同子系统通过相同的接口描述进行服务调用。

解决方案——拆分,将模块独立部署,降低系统耦合性。分为:纵向拆分横向拆分

纵向拆分:讲一个大应用拆分成很多小应用,如果新增业务较为独立,就直接将其设计部署为一个独立的Web应用系统。

横向拆分:将复用的业务拆分出来,独立部署为分布式服务,新增业务只需要调用这些分布式业务。

Web Service与企业级分布式服务

服务提供者通过WSDL(Web服务描述语言)向注册中心描述自身提供的服务接口属性,注册中心使用UDDI(统一描述、发现和集成)发布服务提供者提供的服务,服务请求者从注册中心检索到服务信息后,通过SOAP(简单对象访问协议)和服务提供者通信,使用相关服务。

缺点:

1、臃肿的注册和发现机制

2、低效的XML序列化手段

3、开销相对较高的HTTP远程通信

4、复杂的部署与维护手段

分布式服务框架设计

大型网站需要更简单高效的分布式服务框架构建其SOA(面向服务的体系结构)。Facebook利用Thrift(一个开源的远程服务调用框架)管理其分布式服务,服务的注册、发现以及调用;阿里巴巴使用分布式开源框架Dubbo。

Dubbo架构

服务消费者程序通过服务接口使用服务,服务接口通过代理加载具体服务,具体服务可以是本地的代码模块,也可以是远程服务。

服务框架客户端模块通过服务注册中心加载服务提供者列表(服务提供者启动后自动向服务注册中心注册自己可提供的服务接口列表),查找需要的服务接口,并根据配置的负载均衡策略将服务调用请求发送到某台服务提供者服务器。

Dubbo的远程服务通信模块支持多种通信协议和数据序列化协议,使用NIO通信框架,具有较高的网络通信性能。


可扩展的数据结构

一种无需修改修改表结构就可以新增字段的方案:NoSQL数据库使用ColumnFamily(列族),使用支持ColumnFamily结构的NoSQL数据库,创建表时,只需要指定ColumnFamily的名字,无需指定字段,可以在数据写入时再指定,通过这种方式,数据表可以包含数百万的字段,使得应用程序的数据结构可以随意扩展。查询时,可以通过指定任意字段名称和值进行查询。


【参考文献】大型网站技术架构核心原理与案例分析,李智慧,电子工业出版社

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值