共计 2212 个字符,预计需要花费 6 分钟才能阅读完成。
Dubbo 是阿里巴巴公司开源的一个基于 Java 的高性能开源 RPC 框架,使得应用可通过高性能的 RPC 实现服务的输出和输入功能,可以和 Spring 框架无缝集成。后来因为某些原因没有维护,于是当当网在这之上推出了自己的 Dubbox。
Dubbox 和 Dubbo 本质上没有区别,名字的含义扩展了 Dubbo 而已,以下扩展出来的功能,也是选择 Dubbox 很重要的考察点。
支持 REST 风格远程调用(HTTP + JSON/XML):基于非常成熟的 JBoss RestEasy 框架,在 dubbo 中实现了 REST 风格(HTTP + JSON/XML)的远程调用,以显著简化企业内部的跨语言交互,同时显著简化企业对外的 Open API、无线 API 甚至 AJAX 服务端等等的开发。事实上,这个 REST 调用也使得 Dubbo 可以对当今特别流行的“微服务”架构提供基础性支持。另外,REST 调用也达到了比较高的性能,在基准测试下,HTTP + JSON 与 Dubbo 2.x 默认的 RPC 协议(即 TCP + Hessian2 二进制序列化)之间只有 1.5 倍左右的差距,详见文档中的基准测试报告。
支持基于 Kryo 和 FST 的 Java 高效序列化实现:基于当今比较知名的 Kryo 和 FST 高性能序列化库,为 Dubbo 默认的 RPC 协议添加新的序列化实现,并优化调整了其序列化体系,比较显著的提高了 Dubbo RPC 的性能,详见文档中的基准测试报告。
支持基于 Jackson 的 JSON 序列化:基于业界应用最广泛的 Jackson 序列化库,为 Dubbo 默认的 RPC 协议添加新的 JSON 序列化实现。
支持基于嵌入式 Tomcat 的 HTTP remoting 体系:基于嵌入式 tomcat 实现 dubbo 的 HTTP remoting 体系(即 dubbo-remoting-http),用以逐步取代 Dubbo 中旧版本的嵌入式 Jetty,可以显著的提高 REST 等的远程调用性能,并将 Servlet API 的支持从 2.5 升级到 3.1。(注:除了 REST,dubbo 中的 WebServices、Hessian、HTTP Invoker 等协议都基于这个 HTTP remoting 体系)。
升级 Spring:将 dubbo 中 Spring 由 2.x 升级到目前最常用的 3.x 版本,减少版本冲突带来的麻烦。
升级 ZooKeeper 客户端:将 dubbo 中的 zookeeper 客户端升级到最新的版本,以修正老版本中包含的 bug。
支持完全基于 Java 代码的 Dubbo 配置:基于 Spring 的 Java Config,实现完全无 XML 的纯 Java 代码方式来配置 dubbo
调整 Demo 应用:暂时将 dubbo 的 demo 应用调整并改写以主要演示 REST 功能、Dubbo 协议的新序列化方式、基于 Java 代码的 Spring 配置等等。
修正了 dubbo 的 bug 包括配置、序列化、管理界面等等的 bug。
注:dubbox 和 dubbo 2.x 是兼容的,没有改变 dubbo 的任何已有的功能和配置方式(除了升级了 spring 之类的版本)
Dubbo 的作用以及介绍
Dubbo 服务治理
特性 描述
透明远程调用 就像调用本地方法一样调用远程方法;只需简单配置,没有任何 API 侵入;
负载均衡机制 Client 端 LB,可在内网替代 F5 等硬件负载均衡器;
容错重试机制 服务 Mock 数据,重试次数、超时机制等;
自动注册发现 注册中心基于接口名查询服务提 供者的 IP 地址,并且能够平滑添加或删除服务提供者;
性能日志监控 Monitor 统计服务的调用次调和调用时间的监控中心;
服务治理中心 路由规则,动态配置,服务降级,访问控制,权重调整,负载均衡,等手动配置。
自动治理中心 无,比如:熔断限流机制、自动权重调整等;
Dubbo 提供三个关键功能,包括基于接口的远程调用,容错和负载平衡,以及自动服务注册和发现。
Duboox 项目中的名词解析
Provider: 暴露服务的服务提供方
Consumer: 调用远程服务的服务消费方
Registry: 提供注册与调用服务的注册中心
Monitor: 统计服务的调用次数和调用时间的监控中心
Container: 服务运行容器
调用关系说明
服务容器负责启动,加载,运行服务提供者。
服务提供者在启动时,向注册中心注册自己提供的服务。
服务消费者在启动时,向注册中心订阅自己所需的服务。
注册中心返回服务提供者地址列表给消费者,如果有变更,注册中心将基于长连接推送变更数据给消费者。
服务消费者,从提供者地址列表中,基于软负载均衡算法,选一台提供者进行调用,如果调用失败,再选另一台调用。
服务消费者和提供者,在内存中累计调用次数和调用时间,定时每分钟发送一次统计数据到监控中心。
通俗的解释下 dubbo 的整个流程,我将服务比喻成房子:
start:dubbo 一启动,房东想好自己准备要租出去的房子
register:房东将房子拿到房产中介那边进行登记,并留下自己的联系方式
subscribe:租户告诉房产中介自己想租一个什么样的房子
notify:房产中介回复给租户符合条件的房子的房东的联系方式
invoke:租户拿着联系方式去找房东租房子
count:房产局全程监控着房东和租户之间的交易
其中:
start、register、subscribe 在 dubbo 服务一启动就完成了
notify、count 是异步执行的
invoke 是同步执行的
Dubbo 的特点
Dubbo 架构具有以下几个特点,分别是连通性、健壮性、伸缩性、以及向未来架构的升级性。