分布式服务
分布式服务通过接口分解系统耦合性,不同子系统通过相同的接口描述进行服务调用。
Web Service
在Web Service中存在三种角色,三种角色的交互组成了一个完整的应用:
服务提供者通过WSDL(Web Services Description Language,Web服务描述语言)向注册中心(Service Broker)描述自身提供的服务接口属性
注册中心使用UDDI(Universal Description,Discovery,and Integration,统一描述、发现和集成)发布服务提供者提供的服务
服务请求者从注册中心检索到服务信息后,通过SOAP(Simple Object Access Protocol,简单对象访问协议)和服务提供者通信,使用相关服务。
Web Service虽然有成熟的技术规范和产品实现,并在企业应用领域有许多成功的案例,但也有如下固有的缺点:
臃肿的注册与发现机制。
低效的XML序列化手段。
开销相对较高的HTTP远程通信。
复杂的部署与维护手段。
这些问题导致Web Service难以满足大型网站对系统高性能、高可用、易部署、易维护的要求。
大型网站分布式服务的需求与特点
对于大型网站,除了Web Service所提供的服务注册与发现,服务调用等标准功能,还需要分布式服务框架能够支持如下特性:
开源框架Dubbo
服务消费者程序通过服务接口使用服务,而服务接口通过代理加载具体服务,具体服务可以是本地的代码模块,也可以是远程的服务,因此对应用较少侵入:应用程序只需要调用服务接口,服务框架根据配置自动调用本地或远程实现。
服务框架客户端模块通过服务注册中心加载服务提供者列表(服务提供者启动后自动向服务注册中心注册自己可提供的服务接口列表),查找需要的服务接口,并根据配置的负载均衡策略将服务调用请求发送到某台服务提供者服务器。如果服务调用失败,客户端模块会自动从服务提供者列表选择一个可提供同样服务的另一台服务器重新请求服务,实现服务的自动失效转移,保证服务高可用。
Dubbo的远程服务通信模块支持多种通信协议和数据序列化协议,使用NIO通信框架,具有较高的网络通信性能。