转自SOA框架——Dubbo
1.背景
…dubbo框架是流动式计算架构的一种
2.Dubbo是什么
Dubbo是阿里旗下的一个弹性的分布式服务框架,致力于提供高性能和透明化的RPC远程服务调用方案,以及SOA服务治理方案。
3.Dubbo能做什么
3.1. 透明化的远程方法调用
没有API侵入,就能像调用本地方法一样调用远程方法。
在实际项目中,通常会对Provider和Consumer使用的公共部分,抽象为一个通用的一个jar包,内部定义需要的Service、DTO、POJO、工具类等。此时,Provider端实现Service服务,Consumer引入jar包,申明服务。通过此种方法,实现无API侵入,Service对Consumer透明,但最终实现了Consumer对Provider的调用。
3.2. 服务自动注册与发现
服务的注册、发现、更新都是基于注册中心Registry来实现的。
Registry与Provider、Registry与Consumer之间实现了基于Socket长连接的实时心跳检测,每隔几秒钟检测一次,收集Provider、Consumer的服务信息,整理更新服务列表。通过这样的实现,Provider和Consumer均不再需要写死服务提供方地址,只需要配置注册中心地址即可,实现动态化。
3.3. 软负载均衡及容错机制
Dubbo提供了一系列的软负载均衡算法供使用,可替代F5等硬件负载均衡器,降低硬件成本,减少单点。
Consumer通过订阅服务,在本地缓存可调用的服务列表,在实际调用某服务时,基于负载均衡算法,选取某一节点调用。当某服务节点宕机、或网络不可用时,Registry基于心跳检测实时更新可调用者列表,并将更新信息推送到Consumer,由Consumer更新本地缓存,实现容错,实现高可用。
4.Dubbo服务架构及调用流程
Provider: 暴露服务的服务提供方。
Consumer: 调用远程服务的服务消费方。
Registry: 服务注册与发现的注册中心,可选。
Monitor: 统计服务的调用次数和调用时间的监控中心,可选。(Monitor 监控中心和调用中心)
Container: 服务运行容器。
调用流程:
0. 服务容器负责启动、加载,运行Provider。
1. Provider在启动时,向Registry注册自己提供的服务,Registry缓存服务列表,并建立长连接心跳检测。
2. Consumer在启动时,向Registry订阅自己所需的服务,并建立长连接心跳检测。
3. Registry返回服务提供者地址列表给Consumer并缓存,如果服务有变更,Registry将基于长连接推送变更数据给Consumer并更新。
4. Consumer在使用服务时,基于软负载均衡算法,从提供者地址列表中,选一台Provider进行调用,如果调用失败,则切换到另一台调用。
5. Consumer和Provider,在内存中累计调用次数和调用时间,定时每分钟发送一次统计数据到Monitor
5.Dubbo应用搭建
Dubbo采用全Spring配置方式,透明化接入应用,只需用Spring加载Dubbo的配置即可。