1、利用分布式消息队列降低系统耦合性
(1)事件驱动架构
事件驱动架构:通过在低耦合的模块之间传输事件消息,以保持模块的松散耦合,并借助事件消息的通信完成模块间合作。
消息队里利用发布-订阅模式工作,消息发送者发布消息,一个或者多个消息接收者订阅消息。
a、分布式消息队列
队列是一种先进先出的数据结构,分布式消息队列可以看作将这种数据结构部署到独立的服务器上,应用程序可以通过远程访问接口使用分布式消息队列,进行消息存取操作,进而实现分布式的异步调用。基本原理如下:
消息生产者应用程序通过远程访问接口将消息推送给消息队列服务器,消息队列服务器将消息写入本地内存队列后立即返回成功响应给消息生产者。消息队列服务器根据消息订阅列表查找订阅该消息的消息消费者应用程序,将消息队列中的消息按照先进先出的原则将消息通过远程通信接口发送给消息消费者程序。
2、分布式服务框架设计
大型网站需要更简单更高效的分布式服务框架构建其SOA(service Oriented Architecture面向服务的体系架构)。聚成Facebook利用Thrift(一个开源的远程服务调用框架)管理其分布式服务,服务的注册、发现以及调用都通过Thrift完成,但对于一个大型网站可以使用的分布式服务框架,仅有Thrift还远远不够。
目前成功的开源分布式服务框架是阿里巴巴的Dubbo。
服务消费者程序通过服务接口使用服务,而服务接口通过代理加载具体服务,具体服务可以是本地的代码模块,也可以是远程服务,因此对应较少侵入:应用程序只需要调用服务接口,服务框架根据配置自动调用本地或者远程实现。
服务框架客户端模块通过服务注册中心加载服务提供者列表(服务提供者启动后自动向服务注册中心注册自己可提供的服务接口列表),查找需要的服务接口,并根据配置的负载均衡策略将服务调用请求发送到某服务提供者服务器,如果服务调用失败,客户端模块会自动从服务提供者列表选择一个可提供同样服务的另一台服务器重新请求服务,实现服务的自动失效转移,保证服务高可用。