Dubbo介绍
介绍
Dubbo|ˈdʌbəʊ| 是阿里巴巴于2011年10月正式开源的一个由Java语言编写的分布式服务框架,致力于提供高性能和透明化的远程服务调用方案和基于服务框架展开的完整SOA服务治理方案。每天为2,000+个服务提供3,000,000,000+次访问量支持,并被广泛应用于阿里巴巴集团的各成员站点,官方首页:
http://dubbo.io/
Dubbo受到很多公司的使用,当当网曾基于dubbo框架做了一些扩展,改名为Dubbox(Dubbo eXtensions)
当当网的扩展dubbox :https://github.com/dangdangdotcom/dubbox
京东的扩展版本jd-hydra: http://www.oschina.net/p/jd-hydra
互联网架构的变迁
单一应用架构
当网站流量很小时,只需一个应用,将所有功能都部署在一起,以减少部署节点和成本。
此时,用于简化增删改查工作量的数据访问框架(ORM) 是关键。
垂直应用架构
当访问量逐渐增大,单一应用增加机器带来的加速度越来越小,将应用拆成互不相干的几个应用,以提升效率。
此时,用于加速前端页面开发的 Web框架(MVC) 是关键。
分布式服务架构
当垂直应用越来越多,应用之间交互不可避免,将核心业务抽取出来,作为独立的服务,逐渐形成稳定的服务中心,使前端应用能更快速的响应多变的市场需求。
此时,用于提高业务复用及整合的 分布式服务框架(RPC) 是关键。
弹性架构
当服务越来越多,容量的评估,小服务资源的浪费等问题逐渐显现,此时需增加一个调度中心基于访问压力实时管理集群容量,提高集群利用率。
此时,用于提高机器利用率的 资源调度和治理中心(SOA) 是关键
SOA介绍
Service-Oriented Architecture,面向服务的体系结构,它可以根据需求通过网络对松散耦合的粗粒度应用组件进行分布式部署、组合和使用。
SOA是一个很宽泛的概念或思想,其特点:
①面向服务,以服务为中心
②服务与服务之间是松耦合的
③服务是可复用的
④服务可以灵活的组装和编排,满足流程整合和业务变化的需要。
而Dubbo/Dubbox就是基于这种理念实现的技术框架(中间件)。
Dubbox介绍
Dubbox介绍
当当根据自身的需求,为Dubbo实现了一些新的功能,包括REST风格远程调用、Kryo/FST序列化等等。并将其命名为Dubbox(即Dubbo eXtensions)。Dubbox主要的新功能包括:
一、支持REST风格远程调用(HTTP + JSON/XML)
dubbo支持多种远程调用方式,但缺乏对当今特别流行的REST风格远程调用的支持。
二、支持基于Kryo和FST的Java高效序列化实现
dubbo RPC是dubbo体系中最核心的一种高性能、高吞吐量的远程调用方式,简单的说:
1.长连接:避免了每次调用新建TCP连接,提高了调用的响应速度
2.多路复用:单个TCP连接可交替传输多个请求和响应的消息,降低了连接的等待闲置时间,从而减少了同样并发数下的网络连接数,提高了系统吞吐量。
dubbo RPC特别适合高并发、小数据的互联网场景。而序列化对于远程调用的响应速度、吞吐量、网络带宽消耗等同样也 起着至关重要的作用,是我们提升分布式系统性能的最关键因素之一。在dubbo RPC中默认采用hessian2序列化。但hessian是一个比较老的序列化实现了,而且它是跨语言的,所以不是单独针对java进行优化的。
所以,dubbox为dubbo引入Kryo和FST这两种高效Java序列化实现,来逐步取代hessian2。其中,Kryo是一种非常成熟的序列化实现,已经在Twitter、Groupon、 Yahoo以及多个著名开源项目(如Hive、Storm)中广泛的使用。而FST是一种较新的序列化实现,目前还缺乏足够多的成熟使用案例,但它还是非常有前途的。
Dubbo RPC中不同序列化响应时间和吞吐量对比
三、其他新功特性
升级Spring:将dubbo中Spring由x升级到目前最常用的3.x版本,减少项目中版本冲突带来的麻烦。
升级ZooKeeper客户端:将dubbo中的zookeeper客户端升级到最新的版本,以修正老版本中包含的bug。更多信息可参见Dubbox的github主页。
补充:目前阿里最新的dubbo已集成以上的特性,并恢复了对dubbo的维护,所以我们目前使用的还是阿