Dubbo是一个经常使用的分布式服务框架,前端
- 它致力于提供高性能、透明化的RPC远程服务方案。
- 学习Dubbo有助于提升企业级应用的开发效率,以及可经过简单的配置就能够实现负载均衡,提升服务的效率。

单一应用阶段(ORM为主):java
- 对于访问流量小的网站或系统,只须要单一的应用架构便可,也就是只须要一个应用就能将全部的功能都汇集到一块儿,
- 减小部署的成本,这个时候,用于简化增删改查工做量的数据库访问框架(ORM对象关系映射框架,如Hibernate、MyBatis),会提升开发的效率。
垂直应用架构(MVC为主):nginx
- 当访问量稍微增大之后,单一的应用架构就不能知足系统的平常需求,
- 咱们须要将系统之间耦合度较低的模块拆分出来,来减小代码的冗余,提升效率。
- 此时,用于提高前端页面访问效率的Web框架应运而生(如Struts、SpringMVC),
- 与以前的ORM框架结合起来,共同造成了MVC架构的Web应用体系。
分布式服务架构(RPC为主):web
- 当应用愈来愈多,应用和应用之间不断的交互,
- 此时就须要将核心的业务抽取出来,提供独立的服务,造成稳定的服务中心,使前端能够适应多变的市场需求。
- 此时,使用分布式服务框架是一个关键,而咱们的Dubbo就是一个分布式服务框架。
流动计算架构(SOA为主):redis
- 当提供的服务愈来愈多,咱们就须要一个中心,来对不一样服务的负载进行评估,实时的调配资源,提升集群的应用率。
- 此时,资源的调度和治理中心就是关键。而Duboo支持了完整的RPC调用的支持,以及服务治理中心相关的功能。
Dubbo介绍:算法
- Dubbo是一个分布式服务框架,致力于提升性能和透明化的RPC远程服务调用方案,以及SOA服务治理方案。
- 与Dubbo同类型的框架还有Apache的Thrift、Hessian,Java原生的RMI,WebService,以及淘宝的HSF,京东的JSF。
- Apache的Thrift对多语言的支持比较好,可是负载均衡和SOA的治理这一块比较缺少。
- 而Hessian和WebService都是传统的HTTP调用框架,因为HTTP调用时使用的可能是短链接形式,大部分资源都被浪费在服务器的IO上。
- Java的RMI只支持Java语言,并且性能比较通常。
- 淘宝的HSF和京东的JSF都没有开源,
- 那么在开源框架中,Dubbo是一个比较优秀的分布式服务框架。
- Dubbo的线上版本比较稳定,社区文档多,运维方案比较成熟(admin控制台和monte监控平台)。
- Duboo支持拓展,目前,国内有许多家大型生产型应用互联网公司使用了Dubbo框架
Dubbo涉及的知识spring
- 远程调用:RMI、hassion、webService、thrift
- Dubbo都会在底层真正调用的时候,使用这些框架来作远程调用。
- 通讯交互:HTTP、mina、netty
- 序列化:hessian二、java、json
- 容器:jetty、spring
- Dubbo在容器方面支持像jetty这样的轻量级容器,或者spring这样的IOC容器。
- 多线程:异步,线程池
- 负载均衡:zookeeper、redis
- Dubbo大部分使用zookeeper来实现负载均衡。
使用Dubbo能够作什么数据库
- 做为对内提供服务应用的容器
- 开发不少业务处理的应用,而后使用Duboo这种容器来提供服务。
- 拆分复杂Web应用到服务器容器
- 把大量的逻辑放置在服务提供的应用之中,使Web应用调用服务容器。
- 应用负载均衡协调
- 使用Duboo来实现软件的负载均衡和协调,这样不只简化了配置,还大大简化了服务器的利用率。
- 应用服务治理
- 除了负载均衡,还能够作服务的降级、调用统计以及依赖关系的计算等等。
- 使用这些功能咱们能够很清晰了解一个应用的依赖关系,以及不一样应用调用的负载状况,
- 咱们根据这些负载,来分配和计算,以增长对应的机器。

Dubbo架构

Provider: 暴露服务的服务提供方。
Consumer: 调用远程服务的服务消费方。
Registry: 服务注册与发现的注册中心。
Monitor: 统计服务的调用次数和调用时间的监控中心。json
调用流程
0.服务容器负责启动,加载,运行服务提供者。
1.服务提供者在启动时,向注册中心注册本身提供的服务。
2.服务消费者在启动时,向注册中心订阅本身所需的服务。
3.注册中心返回服务提供者地址列表给消费者,若是有变动,注册中心将基于长链接推送变动数据给消费者。
4.服务消费者,从提供者地址列表中,基于软负载均衡算法,选一台提供者进行调用,若是调用失败,再选另外一台调用。
5.服务消费者和提供者,在内存中累计调用次数和调用时间,定时每分钟发送一次统计数据到监控中心服务器
Dubbo注册中心
- 对于服务提供方,它须要发布服务,并且因为应用系统的复杂性,服务的数量、类型也不断膨胀;
- 对于服务消费方,它最关心如何获取到它所须要的服务,而面对复杂的应用系统,须要管理大量的服务调用。
- 并且,对于服务提供方和服务消费方来讲,他们还有可能兼具这两种角色,即既须要提供服务,有须要消费服务。
- 经过将服务统一管理起来,能够有效地优化内部应用对服务发布/使用的流程和管理。
- 服务注册中心能够经过特定协议来完成服务对外的统一。
Dubbo提供的注册中心有以下几种类型可供选择:
- Multicast注册中心
- Zookeeper注册中心
- Redis注册中心
- Simple注册中心
Dubbo优缺点
优势:
- 透明化的远程方法调用
- 像调用本地方法同样调用远程方法;
- 只需简单配置,没有任何API侵入。
- 软负载均衡及容错机制
- 服务注册中心自动注册 & 配置管理
- 不须要写死服务提供者地址,注册中心基于接口名自动查询提供者ip。
- 使用相似zookeeper等分布式协调服务做为服务注册中心,能够将绝大部分项目配置移入zookeeper集群。
- 服务接口监控与治理
- Dubbo-admin与Dubbo-monitor提供了完善的服务接口管理与监控功能,
- 针对不一样应用的不一样接口,能够进行 多版本,多协议,多注册中心管理。
缺点: