本文作为dubbo源码分析的第一章,先从总体上来分析一下dubbo的代码架构、功能及优缺点,注意,本文只分析说明开源版本提供的代码及功能。

1.dubbo的代码架构: 

spring适配层:常规的spring适配方法,内容包括使用dubbo.xsd文件来定义dubbo相关的元素及属性;DubboNamespaceHandler用来向spring容器注册dubbo的元素解析器;DubboBeanDefinitionParser用来解析具体的dubbo元素。

应用协议层:关于thrift,dubbo并没有实现原生态的thrift协议,而是进行了相应的改造,并且thrift的版本是0.8的版本,不建议在生产中使用thrift协议;关于http协议,dubbo使用了spring框架的httpinvoker相关的类及协议,客户端可以脱离dubbo独立调用服务端;关于webservice协议,支持soap协议,客户端可以脱离dubbo独立调用服务端。

注册中心:在实际的测试过程中,多播方式的注册中心不能有效地识别服务端、客户端已经掉线停服的情况,不建议在生产环境中使用。

2.dubbo在服务治理方面提供的功能

负载均衡:dubbo是在服务端配置的负载均衡情况,通过注册中心将信息传递给消费者,消费者使用第一个服务器的负载均衡配置,负载均衡配置可以通过监控中心进行统一的更改。

路由:通过本人对于源码的解读及相关的测试,dubbo应该是不支持跨数据中心的路由。

限流:通过在consumer上添加限流过滤器来实现,没有在服务端做限流。

3.dubbo的优缺点

优点:

a.支持多种应用协议,并且协议方便扩展,例如:如果之前采用了protocolbuffer协议+netty的方式,可以在dubbo的源码上增加适配处理即可

b.支持多种底层tcp容器

c.支持http、webservice这样的跨语言协议,对于其它语言的客户端可以在不访问注册中心的情况下,直接通过跨语言的协议来调用dubbo服务,当然这也失去了服务治理的意义

d.支持多种注册中心,生产环境下,注册中心可以选择redis和zookeeper两种中的一种

e.支持多种cluster的调用方式

f.通过服务端和监控中心来控制负载均衡的方式

缺点:

a.缺少其它语言的支持,对于多语言的应用场景,服务治理比较困难

b.缺少跨数据中心的流量切换功能

c.不能支持thrift的原生协议

d.开源版本的服务治理功能还有待加强

e.对于tcp长连接,没有采用连接池来处理

4.总结

    我听到很多的程序员说,我们要上服务治理,但是各位在选择服务治理框架的过程中,还是要切实的注意以下几点:

a.务必对于现有的服务改动最小,毕竟老板雇佣我们来工作,不是让我们玩各种技术的,最小的投入最大的收获才是我们想要看到的结果,当然系统已经确定重构不在此范畴

b.dubbo不能解决因为代码设计和实现的bug,反而有可能因为引入了我们不熟悉的框架,使得各种异常情况出现,解决生产问题,还是要靠内功

c.对于多语言的情况下,dubbo和motan等服务治理框架并不合适,虽说dubbo可以支持一些标准化的协议(http、webservice等),但是对于非java语言的consumer并不在服务治理的管理范围内,也就失去了服务治理的意义

d.如果选择了dubbo,务必做好深入理解代码的准备,一定有一些情况是需要我们通过改动源码来实现的,毕竟开源的dubbo只是一个停止维护的阉割版。

dubbo源码分析一:整体分析的更多相关文章

  1. dubbo源码分析6-telnet方式的管理实现

    dubbo源码分析1-reference bean创建 dubbo源码分析2-reference bean发起服务方法调用 dubbo源码分析3-service bean的创建与发布 dubbo源码分 ...

  2. dubbo源码分析1-reference bean创建

    dubbo源码分析1-reference bean创建 dubbo源码分析2-reference bean发起服务方法调用 dubbo源码分析3-service bean的创建与发布 dubbo源码分 ...

  3. dubbo源码分析2-reference bean发起服务方法调用

    dubbo源码分析1-reference bean创建 dubbo源码分析2-reference bean发起服务方法调用 dubbo源码分析3-service bean的创建与发布 dubbo源码分 ...

  4. dubbo源码分析3-service bean的创建与发布

    dubbo源码分析1-reference bean创建 dubbo源码分析2-reference bean发起服务方法调用 dubbo源码分析3-service bean的创建与发布 dubbo源码分 ...

  5. dubbo源码分析4-基于netty的dubbo协议的server

    dubbo源码分析1-reference bean创建 dubbo源码分析2-reference bean发起服务方法调用 dubbo源码分析3-service bean的创建与发布 dubbo源码分 ...

  6. dubbo源码分析5-dubbo的扩展点机制

    dubbo源码分析1-reference bean创建 dubbo源码分析2-reference bean发起服务方法调用 dubbo源码分析3-service bean的创建与发布 dubbo源码分 ...

  7. Dubbo 源码分析 - 服务调用过程

    注: 本系列文章已捐赠给 Dubbo 社区,你也可以在 Dubbo 官方文档中阅读本系列文章. 1. 简介 在前面的文章中,我们分析了 Dubbo SPI.服务导出与引入.以及集群容错方面的代码.经过 ...

  8. Dubbo 源码分析 - 集群容错之 LoadBalance

    1.简介 LoadBalance 中文意思为负载均衡,它的职责是将网络请求,或者其他形式的负载"均摊"到不同的机器上.避免集群中部分服务器压力过大,而另一些服务器比较空闲的情况.通 ...

  9. Dubbo 源码分析 - 集群容错之 Cluster

    1.简介 为了避免单点故障,现在的应用至少会部署在两台服务器上.对于一些负载比较高的服务,会部署更多台服务器.这样,同一环境下的服务提供者数量会大于1.对于服务消费者来说,同一环境下出现了多个服务提供 ...

随机推荐

  1. linux指令备份

    ls -a 显示隐藏文件 cd 回到当前用户的目录 /home/ubuntu touch 创建文件 cat Hello.javamore/less Hello.java分页显示 grep root / ...

  2. SGU 144.Meeting

    题目: 两支地区ACM比赛的队伍决定为了国际决赛而在一起集训. 他们约定在某天的 X 时到 Y 时的某一时刻相会. 但由于他们很少按时到 (有的队伍比赛那天都会迟到), 他们没有设定一个确切的相遇时间 ...

  3. codeforces 165D.Beard Graph 解题报告

    题意: 给一棵树,树的每条边有一种颜色,黑色或白色,一开始所有边均为黑色,有两个操作: 操作1:将第i条边变成白色或将第i条边变成黑色. 操作2 :询问u,v两点之间仅经过黑色变的最短距离. 树链剖分 ...

  4. [转] 翻译-高质量JavaScript代码书写基本要点 ---张鑫旭

    by zhangxinxu from http://www.zhangxinxu.com本文地址:http://www.zhangxinxu.com/wordpress/?p=1173 原文作者:St ...

  5. Javascript闭包函数快速上手

    闭包函数是什么?在开始学习的闭包的时候,大家很能都比较难理解.就从他的官方解释来说,都是比较概念化的. 不过我们也还是从闭包的含义出发. 闭包是指函数有自由独立的变量.换句话说,定义在闭包中的函数可以 ...

  6. Html5-Canvas实现简易的抽奖转盘

    ###Html5实现抽奖转盘效果 1.实现的基本效果 2.主要的内容 html5中canvas标签的使用 jQueryRotate.js旋转插件 3.主要html代码 <body> < ...

  7. access_token的获取2

    概述 access_token是公众号的全局唯一票据,公众号调用各接口时都需使用access_token.开发者需要进行妥善保存. access_token的存储至少要保留512个字符空间.acces ...

  8. IE 6最小最大宽度与高度的写法

    最小最大宽度,最小最大高度,这是CSS很常见的一个要求.在现代浏览器中,一个 min-height,min-width 就可以解决问题,但是在IE系列,比如IE6则比较繁琐一点.下面总结一些IE 6下 ...

  9. Python中几种数据结构的整理,列表、字典、元组、集合

    列表:shoplist = ['apple', 'mango', 'carrot', 'banana']字典:di = {'a':123,'b':'something'}集合:jihe = {'app ...

  10. python django 自定义 装饰器

    # -*-coding:utf-8-*- __author__ = "GILANG (pleasurelong@foxmail.com)" """ d ...