Dubbo基础介绍

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原生的RMIWebService,以及淘宝的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
    • mina与netty都是NIO的框架。
  • 序列化:hessian二、java、json
    • Dubbo默认使用hessian2
  • 容器:jetty、spring
    • Dubbo在容器方面支持像jetty这样的轻量级容器,或者spring这样的IOC容器。
  • 多线程:异步,线程池
    • Dubbo涉及了异步的调用和线程池的管理。
  • 负载均衡: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优缺点

优势:

  1. 透明化的远程方法调用 
    • 像调用本地方法同样调用远程方法;
    • 只需简单配置,没有任何API侵入。
  2. 软负载均衡及容错机制 
    • 可在内网替代nginx lvs等硬件负载均衡器。
  3. 服务注册中心自动注册 & 配置管理 
    • 不须要写死服务提供者地址,注册中心基于接口名自动查询提供者ip。 
    • 使用相似zookeeper等分布式协调服务做为服务注册中心,能够将绝大部分项目配置移入zookeeper集群。
  4. 服务接口监控与治理 
    • Dubbo-admin与Dubbo-monitor提供了完善的服务接口管理与监控功能,
    • 针对不一样应用的不一样接口,能够进行 多版本,多协议,多注册中心管理。

缺点:

  • 只支持JAVA语言
相关文章
相关标签/搜索