写点什么

当当网开源 Dubbox,扩展 Dubbo 服务框架支持 REST 风格远程调用

  • 2014 年 10 月 22 日
  • 本文字数:1520 字

    阅读完需:约 5 分钟

当当网近日开源了 Dubbox 项目,可为 Dubbo 服务框架提供多项扩展功能,包括 REST 风格远程调用、Kryo/FST 序列化等等。

当当网架构部和技术委员会架构师沈理向InfoQ 中文站介绍了Dubbox 项目,开发背景和主要特点描述如下:

Dubbo 是一个被国内很多互联网公司广泛使用的开源分布式服务框架,即使从国际视野来看应该也是一个非常全面的 SOA 基础框架。作为一个重要的技术研究课题,在当当网我们根据自身的需求,为 Dubbo 实现了一些新的功能,并将其命名为 Dubbox (即 Dubbo eXtensions)。

主要的新功能包括:

  • 支持 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 的性能,详见下图和文档中的基准测试报告。

  • 支持基于嵌入式 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。

上面很多功能已在当当网内部稳定的使用,现在开源出来,供大家参考和指正。也希望感兴趣的朋友也来为 Dubbo 贡献更多的改进。

注:dubbox 和 dubbo 2.x 是兼容的,没有改变 dubbo 的任何已有的功能和配置方式(除了升级了 Spring 之类的版本)。另外,dubbox 也严格遵循了 Apache 2.0 许可证的要求。

附:分布式服务框架与 RPC 框架

目前开源领域能找到的分布式服务框架也有不少,比较有代表性的包括 Twitter 的 Finagle (基于 Scala 语言), Flipkart (印度最大的 B2C 网站)的 Phantom (文档较少),Apache 的 Tuscany (有点陈旧,而且不是很适合互联网公司)等等,其实国内也有少数公司提供了开源 Java 服务框架,但 dubbo 在其功能完善性、架构优雅性、使用简便性等方面依然有其相对独特的优势,尽管 dubbo 绝大部分的开发都是 2012 年以前完成的。

另外,业界的开源 RPC 框架更是数量众多,难以计数,但是,一般的 RPC 框架和我们讨论的分布式服务框架还是具有相当大的距离,比如在远程调用的多协议、多序列化支持,完善的服务治理等等方面都有较多的缺失。也正是由于这种缺失,著名的 Apache Thrift 等框架在这里也可归为 RPC 框架,而主要构建在 Thrift 之上的 Finagle、Phantom 等框架更接近于完整的分布式服务框架(当然,Dubbo 其实也支持 Thrift,只是还不太完善)。

有关沈理

沈理,目前在当当网的架构部和技术委员会担任架构师,主要负责当当网的 SOA 实施(即服务化)以及分布式服务框架的开发。以前也有在 BEA、Oracle、Redhat 等外企的长期工作经历,从事过多个不同 SOA 相关框架和容器的开发。

2014 年 10 月 22 日 00:0945532

评论

发布
暂无评论
发现更多内容

自动化测试现状趋势解读,附带近年自动化测试常用工具

程序员阿沐

程序员 软件测试 自动化测试 测试工程师

八大案例带你了解图数据库如何洞察数据间关联价值

Nebula Graph

图数据库 图数据库实战

《Java 面经手册》PDF,全书5章29节,417页11.5万字,完稿&发版!

小傅哥

Java 面试 小傅哥 PDF 面经手册

2021年1月国产数据库排行榜:OceanBase重回前三,TDSQL增长趋势最强劲!

墨天轮

数据库

Elasticsearch和Kibana变更开源许可协议;Facebook利用AI增强为视障人士描述照片能力

京东科技开发者

云计算

牛掰!阿里新产性能优化小册:五角度入手,全新演绎性能优化

程序员小毕

Java 架构 面试 性能优化 高并发

转角遇上Volcano,看HPC如何应用在气象行业

华为云开发者社区

容器 云原生 HPC Volcano 批量计算

使用 async_hooks 模块进行请求追踪

智联大前端

node.js 前端 koa async_hooks

阿里P8大牛亲自教你!实战讲述Flutter跨平台框架应用,安卓系列学习进阶视频

欢喜学安卓

android 程序员 面试 移动开发

红帽架构师:为什么KubeEdge是2020年我最喜欢的开源项目?

华为云原生团队

开源 云原生 边缘计算 边缘技术

区块链养成宠物游戏开发动物世界app系统搭建方案

v16629866266

2021分享三面阿里:Java面试核心手册+Java电子书+技术笔记+学习视频

比伯

Java 编程 架构 面试 程序人生

一文告诉你Java日期时间API到底有多烂

YourBatman

LocalDateTime Date JSR310 Calendar

nacos 配置中心自动化运维之namespace坑

Sky彬

nacos

数据库覆盖式数据导入方法:部分和完全

华为云开发者社区

数据库 sql 数据 DWS 覆盖式导入

并发条件队列之Condition 精讲

伯阳

AQS 多线程 lock Condition 条件队列

PostgreSQL使用clickhousedb_fdw访问ClickHouse

PostgreSQLChina

数据库 postgresql 开源 软件

同事有话说:ThreadPoolExecutor是怎么回收线程的

Java 程序员 面试

kotlin下载!我们究竟还要学习哪些Android知识?Android岗

欢喜学安卓

android 程序员 面试 移动开发

趋势预测:2021年五大流行的编程语言

禅道项目管理

Java php python 爬虫 趋势

甲方日常 90

句子

工作 随笔杂谈 日常

云原生架构下复杂工作负载混合调度的思考与实践

星环科技

云计算

【并发编程的艺术】内存语义分析:volatile、锁与CAS

程序员架构进阶

Java Java内存模型 28天写作 架构·

毫不留情地揭开负载均衡的真面目~

田维常

负载均衡

JDK源码深度学习!阿里P9架构师终于总结出了这份“源码级”的笔记了

Java架构追梦

Java 源码 架构 jdk 面试

面试官:一年跳槽三次,你是怎么做到的?

程序员阿沐

程序员 面试 软件测试 测试工程师

开发的必杀技:Git 的分支管理

华为云开发者社区

git Linux 分支

软件测试在不同应用场景中,我们该如何进行测试呢?

程序员阿沐

编程 程序员 软件测试 教程 测试环境

屏幕共享功能的应用

anyRTC开发者

android 音视频 WebRTC 在线教育 视频会议

不可忽视的PHP数据精度损失问题

架构精进之路

php 七日更 28天写作

一文读懂HTTP协议的昨天,今天与明天

后台技术汇

28天写作

聊聊IO夯的那些事

聊聊IO夯的那些事

当当网开源Dubbox,扩展Dubbo服务框架支持REST风格远程调用-InfoQ