面向服务的架构 (SOA) 是一个组件模型, 它将应用程序的不同功能单元 (称为服务) 进行拆分, 并通过这些服务之间定义良好的接口和契约联系起来. 接口是采用中立的方式进行定义的, 它应该独立于实现服务的硬件平台, 操作系统和编程语言. 这使得构建在各种各样的系统中的服务可以以一种统一和通用的方式进行交互. 这边文章以淘宝的 SOA 框架 Dubbo 为案例进行分析. 淘宝为什么会应用 SOA 框架 Dubbo 呢? 因为淘宝调用的服务越来越多, 用以前的服务 URL 配置管理非常困难, 并且硬件的压力页越来越大. 这时需要一个服务注册中心, 动态管理服务. 继续发展, 服务之间的关系页越来越复杂, 描述服务之间的架构也越来越难. 并且服务的调用越来越多, 承载服务的机器越来越多. 在这样的情况下, 淘宝应用了 SOA 框架 Dubbo.Dubbo 是一个分布式服务框架, 本质上是用来调用服务的方法, 它能够有序, 科学的调用机器上的服务, 解决了淘宝调用服务越来越复杂的问题.
Dubbo 框架设计一共划分了 10 个层:
(1)服务接口层(Service): 该层是与实际业务逻辑相关的, 根据服务提供方和服务消费方的业务设计对应的接口和实现.
(2)配置层(Config): 对外配置接口, 以 ServiceConfig 和 ReferenceConfig 为中心, 可以直接 new 配置类, 也可以通过 spring 解析配置生成配置类.
(3)服务代理层(Proxy): 服务接口透明代理, 生成服务的客户端 Stub 和服务器端 Skeleton, 以 ServiceProxy 为中心, 扩展接口为 ProxyFactory.
(4)服务注册层(Registry): 封装服务地址的注册与发现, 以服务 URL 为中心, 扩展接口为 RegistryFactory,Registry 和 RegistryService. 可能没有服务注册中心, 此时服务提供方直接暴露服务.
(5)集群层(Cluster): 封装多个提供者的路由及负载均衡, 并桥接注册中心, 以 Invoker 为中心, 扩展接口为 Cluster,Directory,Router 和 LoadBalance. 将多个服务提供方组合为一个服务提供方, 实现对服务消费方来透明, 只需要与一个服务提供方进行交互.
(6)监控层(Monitor):RPC 调用次数和调用时间监控, 以 Statistics 为中心, 扩展接口为 MonitorFactory,Monitor 和 MonitorService.
(7)远程调用层(Protocol): 封将 RPC 调用, 以 Invocation 和 Result 为中心, 扩展接口为 Protocol,Invoker 和 Exporter.Protocol 是服务域, 它是 Invoker 暴露和引用的主功能入口, 它负责 Invoker 的生命周期管理. Invoker 是实体域, 它是 Dubbo 的核心模型, 其它模型都向它靠扰, 或转换成它, 它代表一个可执行体, 可向它发起 invoke 调用, 它有可能是一个本地的实现, 也可能是一个远程的实现, 也可能一个集群实现.
(8)信息交换层(Exchange): 封装请求响应模式, 同步转异步, 以 Request 和 Response 为中心, 扩展接口为 Exchanger,ExchangeChannel,ExchangeClient 和 ExchangeServer.
(9)网络传输层(Transport): 抽象 mina 和 netty 为统一接口, 以 Message 为中心, 扩展接口为 Channel,Transporter,Client,Server 和 Codec.
(10)数据序列化层(Serialize): 可复用的一些工具, 扩展接口为 Serialization, ObjectInput,ObjectOutput 和 ThreadPool.
来源: http://www.bubuko.com/infodetail-3070752.html