Dubbo阿里Alibaba开源的分布式服务框架

<h1>
    <span class="link_title"><a href="/xingkong22star/article/details/49684475">
    Dubbo阿里Alibaba开源的分布式服务框架            
    </a></span>
</h1>
    <div class="article_manage clearfix">
    <div class="article_l">
        <span class="link_categories">
        标签:
          <a href="http://www.csdn.net/tag/zookeeper" target="_blank" onclick="_gaq.push(['_trackEvent','function', 'onclick', 'blog_articles_tag']);">zookeeper</a><a href="http://www.csdn.net/tag/%e9%98%bf%e9%87%8c%e5%b7%b4%e5%b7%b4" target="_blank" onclick="_gaq.push(['_trackEvent','function', 'onclick', 'blog_articles_tag']);">阿里巴巴</a><a href="http://www.csdn.net/tag/%e5%88%86%e5%b8%83%e5%bc%8f" target="_blank" onclick="_gaq.push(['_trackEvent','function', 'onclick', 'blog_articles_tag']);">分布式</a><a href="http://www.csdn.net/tag/%e5%bc%80%e6%ba%90" target="_blank" onclick="_gaq.push(['_trackEvent','function', 'onclick', 'blog_articles_tag']);">开源</a><a href="http://www.csdn.net/tag/dubbo" target="_blank" onclick="_gaq.push(['_trackEvent','function', 'onclick', 'blog_articles_tag']);">dubbo</a>
        </span>
    </div>
    <div class="article_r">
        <span class="link_postdate">2015-11-06 16:19</span>
        <span class="link_view" title="阅读次数">488人阅读</span>
        <span class="link_comments" title="评论次数"> <a href="#comments" onclick="_gaq.push(['_trackEvent','function', 'onclick', 'blog_articles_pinglun'])">评论</a>(0)</span>
        <span class="link_collect tracking-ad" data-mod="popu_171"> <a href="javascript:void(0);" onclick="javascript:collectArticle('Dubbo%e9%98%bf%e9%87%8cAlibaba%e5%bc%80%e6%ba%90%e7%9a%84%e5%88%86%e5%b8%83%e5%bc%8f%e6%9c%8d%e5%8a%a1%e6%a1%86%e6%9e%b6','49684475');return false;" title="收藏" target="_blank">收藏</a></span>
         <span class="link_report"> <a href="#report" onclick="javascript:report(49684475,2);return false;" title="举报">举报</a></span>

    </div>
</div>
<div class="embody" style="display:none" id="embody">
    <span class="embody_t">本文章已收录于:</span>
    <div class="embody_c" id="lib" value="{&quot;err&quot;:0,&quot;msg&quot;:&quot;ok&quot;,&quot;data&quot;:[]}"></div>
</div>
<style type="text/css">        
        .embody{
            padding:10px 10px 10px;
            margin:0 -20px;
            border-bottom:solid 1px #ededed;                
        }
        .embody_b{
            margin:0 ;
            padding:10px 0;
        }
        .embody .embody_t,.embody .embody_c{
            display: inline-block;
            margin-right:10px;
        }
        .embody_t{
            font-size: 12px;
            color:#999;
        }
        .embody_c{
            font-size: 12px;
        }
        .embody_c img,.embody_c em{
            display: inline-block;
            vertical-align: middle;               
        }
         .embody_c img{               
            width:30px;
            height:30px;
        }
        .embody_c em{
            margin: 0 20px 0 10px;
            color:#333;
            font-style: normal;
        }
</style>
<script type="text/javascript">
    $(function () {
        try
        {
            var lib = eval("("+$("#lib").attr("value")+")");
            var html = "";
            if (lib.err == 0) {
                $.each(lib.data, function (i) {
                    var obj = lib.data[i];
                    //html += '<img src="' + obj.logo + '"/>' + obj.name + "&nbsp;&nbsp;";
                    html += ' <a href="' + obj.url + '" target="_blank">';
                    html += ' <img src="' + obj.logo + '">';
                    html += ' <em><b>' + obj.name + '</b></em>';
                    html += ' </a>';
                });
                if (html != "") {
                    setTimeout(function () {
                        $("#lib").html(html);                      
                        $("#embody").show();
                    }, 100);
                }
            }      
        } catch (err)
        { }
        
    });
</script>
  <div class="category clearfix">
    <div class="category_l">
       <img src="http://static.blog.csdn.net/images/category_icon.jpg">
        <span>分类:</span>
    </div>
    <div class="category_r">
                <label onclick="GetCategoryArticles('1769941','XingKong22star','top','49684475');">
                    <span onclick="_gaq.push(['_trackEvent','function', 'onclick', 'blog_articles_fenlei']);">Framework<em>(77)</em></span>
                  <img class="arrow-down" src="http://static.blog.csdn.net/images/arrow_triangle _down.jpg" style="display:inline;">
                  <img class="arrow-up" src="http://static.blog.csdn.net/images/arrow_triangle_up.jpg" style="display:none;">
                    <div class="subItem">
                        <div class="subItem_t"><a href="http://blog.csdn.net/XingKong22star/article/category/1769941" target="_blank">作者同类文章</a><i class="J_close">X</i></div>
                        <ul class="subItem_l" id="top_1769941">                            
                        </ul>
                    </div>
                </label>                    
    </div>
</div>
<script type="text/javascript" src="http://static.blog.csdn.net/scripts/category.js"></script>  
    <div class="bog_copyright">         
        <p class="copyright_p">版权声明:本文为博主原创文章,未经博主允许不得转载。</p>
    </div>





Dubbo是什么?

Dubbo是阿里巴巴SOA服务化治理方案的核心框架,每天为2,000+个服务提供3,000,000,000+次访问量支持,并被广泛应用于阿里巴巴集团的各成员站点。

Dubbo是一个分布式服务框架,致力于提供高性能和透明化的RPC远程服务调用方案,以及SOA服务治理方案。





其核心部分包含:

远程通讯: 提供对多种基于长连接的NIO框架抽象封装,包括多种线程模型,序列化,以及“请求-响应”模式的信息交换方式。

集群容错: 提供基于接口方法的透明远程过程调用,包括多协议支持,以及软负载均衡,失败容错,地址路由,动态配置等集群支持。

自动发现: 基于注册中心目录服务,使服务消费方能动态的查找服务提供方,使地址透明,使服务提供方可以平滑增加或减少机器。

Dubbo能做什么?

透明化的远程方法调用,就像调用本地方法一样调用远程方法,只需简单配置,没有任何API侵入。

软负载均衡及容错机制,可在内网替代F5等硬件负载均衡器,降低成本,减少单点。

服务自动注册与发现,不再需要写死服务提供方地址,注册中心基于接口名查询服务提供者的IP地址,并且能够平滑添加或删除服务提供者。


Dubbo总架构

@
Dubbo框架设计一共划分了10个层,而最上面的Service层是留给实际想要使用Dubbo开发分布式服务的开发者实现业务逻辑的接口层。图中左边淡蓝背景的为服务消费方使用的接口,右边淡绿色背景的为服务提供方使用的接口, 位于中轴线上的为双方都用到的接口。
下面,结合Dubbo官方文档,我们分别理解一下框架分层架构中,各个层次的设计要点:

服务接口层(Service):该层是与实际业务逻辑相关的,根据服务提供方和服务消费方的业务设计对应的接口和实现。
配置层(Config):对外配置接口,以ServiceConfig和ReferenceConfig为中心,可以直接new配置类,也可以通过spring解析配置生成配置类。
服务代理层(Proxy):服务接口透明代理,生成服务的客户端Stub和服务器端Skeleton,以ServiceProxy为中心,扩展接口为ProxyFactory。
服务注册层(Registry):封装服务地址的注册与发现,以服务URL为中心,扩展接口为RegistryFactory、Registry和RegistryService。可能没有服务注册中心,此时服务提供方直接暴露服务。
集群层(Cluster):封装多个提供者的路由及负载均衡,并桥接注册中心,以Invoker为中心,扩展接口为Cluster、Directory、Router和LoadBalance。将多个服务提供方组合为一个服务提供方,实现对服务消费方来透明,只需要与一个服务提供方进行交互。
监控层(Monitor):RPC调用次数和调用时间监控,以Statistics为中心,扩展接口为MonitorFactory、Monitor和MonitorService。
远程调用层(Protocol):封将RPC调用,以Invocation和Result为中心,扩展接口为Protocol、Invoker和Exporter。Protocol是服务域,它是Invoker暴露和引用的主功能入口,它负责Invoker的生命周期管理。Invoker是实体域,它是Dubbo的核心模型,其它模型都向它靠扰,或转换成它,它代表一个可执行体,可向它发起invoke调用,它有可能是一个本地的实现,也可能是一个远程的实现,也可能一个集群实现。
信息交换层(Exchange):封装请求响应模式,同步转异步,以Request和Response为中心,扩展接口为Exchanger、ExchangeChannel、ExchangeClient和ExchangeServer。
网络传输层(Transport):抽象mina和netty为统一接口,以Message为中心,扩展接口为Channel、Transporter、Client、Server和Codec。
数据序列化层(Serialize):可复用的一些工具,扩展接口为Serialization、 ObjectInput、ObjectOutput和ThreadPool。
从上图可以看出,Dubbo对于服务提供方和服务消费方,从框架的10层中分别提供了各自需要关心和扩展的接口,构建整个服务生态系统(服务提供方和服务消费方本身就是一个以服务为中心的)。


服务定义
服务是围绕服务提供方和服务消费方的,服务提供方实现服务,而服务消费方调用服务。


服务注册
对于服务提供方,它需要发布服务,而且由于应用系统的复杂性,服务的数量、类型也不断膨胀;对于服务消费方,它最关心如何获取到它所需要的服务,而面对复杂的应用系统,需要管理大量的服务调用。而且,对于服务提供方和服务消费方来说,他们还有可能兼具这两种角色,即既需要提供服务,有需要消费服务。
通过将服务统一管理起来,可以有效地优化内部应用对服务发布/使用的流程和管理。服务注册中心可以通过特定协议来完成服务对外的统一。Dubbo提供的注册中心有如下几种类型可供选择:
Multicast注册中心
Zookeeper注册中心
Redis注册中心
Simple注册中心


Dubbo服务调用
下面从Dubbo官网直接拿来,看一下基于RPC层,服务提供方和服务消费方之间的调用关系,如图所示:

@
上图中,蓝色的表示与业务有交互,绿色的表示只对Dubbo内部交互。上述图所描述的调用流程如下:
1.服务提供方发布服务到服务注册中心;
2.服务消费方从服务注册中心订阅服务;
3.服务消费方调用已经注册的可用服务



Zookeeper注册中心安装

建议使用dubbo-2.3.3以上版本的zookeeper注册中心客户端。
Zookeeper是Apache Hadoop的子项目,强度相对较好,建议生产环境使用该注册中心。
Dubbo未对Zookeeper服务器端做任何侵入修改,只需安装原生的Zookeeper服务器即可,
所有注册中心逻辑适配都在调用Zookeeper客户端时完成。


第一步安装配置Zookeeper
准备安装包网址
下载Zookeeper-3.4.6.tar.gz  地址http://www.apache.org/dist/zookeeper/
zookeeper-3.4.6.tar  zookeeper安装包




安装步骤:
创建文件夹 mkdir /usr/local/zookeeper
解压: tar zxvf zookeeper-3.4.6.tar.gz -C /usr/local/zookeeper/
授权:chmod 777 /usr/local/zookeeper/
如图1:
@


配置
然后在对应的zookeeper-3.4.6/conf 下有一个文件zoo_sample.cfg的这个文件里面配置了监听客户端连接的端口等一些信息,Zookeeper 在启动时会找zoo.cfg这个文件作为默认配置文件,所以我们复制一个名称为zoo.cfg的文件,
如图2所示:
@




我们查看一下这个文件的里面的一些配置信息,如图3所示:
@

zoo.cfg配
置文件说明:
 clientPort:监听客户端连接的端口。
 tickTime:基本事件单元,以毫秒为单位。它用来控制心跳和超时,默认情况下最小的会话超时时间为两倍的 tickTime。
 我们可以对配置文件的端口等或者进行高级配置和集群配置例如:maxClientCnxns:限制连接到 ZooKeeper 的客户端的数量等。

启动Zookeeper 的服务,如图4所示:

@
到此Zookeeper的安装和配置完成。




 第二步:配置dubbo-admin的管理页面,方便我们管理页面
配置dubbo-admin的管理页面之前先安装tomcat请参考http://blog.csdn.net/xingkong22star/article/details/44806887
    (1)下载dubbo-admin-2.5.3.war包,在Linux的tomcat部署,先把dubbo-admin-2.5.3放在tomcat的webapps/ROOT下,然后进行解压解压完成后删除war包:
        cd webapps/ROOT/
jar -xvf dubbo-admin-2.5.3.war
rm dubbo-admin-2.5.3.war 
rm:是否删除普通文件 "dubbo-admin-2.5.3.war"?y


图5所示:

@



    (2)然后到webapps/ROOT/WEB-INF下,有一个dubbo.properties文件,里面指向Zookeeper ,使用的是Zookeeper 的注册中心,如图6所示:

@
    (3)然后启动tomcat服务,用户名和密码:root,并访问服务,显示登陆页面,说明dubbo-admin部署成功,
[root@localhost /]#  /usr/local/zookeeper/zookeeper-3.4.6/bin/zkServer.sh start
JMX enabled by default
Using config: /usr/local/zookeeper/zookeeper-3.4.6/bin/../conf/zoo.cfg
Starting zookeeper ... already running as process 2407.
[root@localhost /]# /usr/local/tomcat/apache-tomcat-7.0.62/bin/startup.sh start
Using CATALINA_BASE:   /usr/local/tomcat/apache-tomcat-7.0.62
Using CATALINA_HOME:   /usr/local/tomcat/apache-tomcat-7.0.62
Using CATALINA_TMPDIR: /usr/local/tomcat/apache-tomcat-7.0.62/temp
Using JRE_HOME:        /usr/local/jdk/jdk1.7.0_79/jre
Using CLASSPATH:       /usr/local/tomcat/apache-tomcat-7.0.62/bin/bootstrap.jar:/usr/local/tomcat/apache-tomcat-7.0.62/bin/tomcat-juli.jar
Tomcat started.
进入浏览器输入127.0.0.1:8080后会出现如图7所示: 

@
登陆完成如图8所示: 

@

如果出现如下错误如图9:
@
原因是因为解压dubbo后忘记删除war包了






注册中心抽象
Dubbo的将注册中心进行抽象,是得它可以外接不同的存储媒介给注册中心提供服务,有ZooKeeper,Memcached,Redis等。
Dubbo抽象后,用户可以进行扩展,我们通过分析ZooKeeper这个实现来了解注册中心的低层。
进过抽象之后,用户 只需要实现对应的Registry和RegistryFactory就可以了,ZooKeeper就是实现了ZookeeperRegistry,和ZookeeperRegistryFactory。
ZookeeperRegistryFactory的实现很简单,就是返回一个ZookeeperRegistry实例,所以主要的东西是在ZookeeperRegistry中实现的,在ZookeeperRegistry用户需要实现注册URL,
注销URL,URL订阅,URL注销订阅和URL查询,在这里面设计到Zookeeper服务端的调用,都被封装到ZookeeperClient中,ZookeeperClient服务进行Server连接,断链;资源的CRUD。


ZooKeeper的价值
由于引入了ZooKeeper作为存储媒介,也就把ZooKeeper的特性引进来。
首先是负载均衡,单注册中心的承载能力是有限的,在流量达到一定程度的时候就需要分流,负载均衡就是为了分流而存在的,一个ZooKeeper群配合相应的Web应用就可以很容易达到负载均衡;
资源同步,单单有负载均衡还不够,节点之间的数据和资源需要同步,ZooKeeper集群就天然具备有这样的功能;
命名服务,将树状结构用于维护全局的服务地址列表,服务提供者在启动的时候,向ZK上的指定节点/dubbo/${serviceName}/providers目录下写入自己的URL地址,这个操作就完成了服务的发布。
其他特性还有Mast选举,分布式锁等。



    <div id="digg" articleid="49684475">
        <dl id="btnDigg" class="digg digg_disable" onclick="btndigga();">
           
             <dt>顶</dt>
            <dd>0</dd>
        </dl>
       
          
        <dl id="btnBury" class="digg digg_disable" onclick="btnburya();">
          
              <dt>踩</dt>
            <dd>0</dd>               
        </dl>
        
    </div>
 <div class="tracking-ad" data-mod="popu_222"><a href="javascript:void(0);" target="_blank">&nbsp;</a>   </div>
<div class="tracking-ad" data-mod="popu_223"> <a href="javascript:void(0);" target="_blank">&nbsp;</a></div>
<script type="text/javascript">
            function btndigga() {
                $(".tracking-ad[data-mod='popu_222'] a").click();
            }
            function btnburya() {
                $(".tracking-ad[data-mod='popu_223'] a").click();
            }
        </script>
<div style="clear:both; height:10px;"></div>


    <div class="similar_article" style="">
            <h4>我的同类文章</h4>
            <div class="similar_c" style="margin:20px 0px 0px 0px">
                <div class="similar_c_t">
                            <label class="similar_cur">
                                <span style="cursor:pointer" onclick="GetCategoryArticles('1769941','XingKong22star','foot','49684475');">Framework<em>(77)</em></span>
                            </label>
                </div>
               
                <div class="similar_wrap tracking-ad" data-mod="popu_141" style="max-height:195px;">
                    <a href="http://blog.csdn.net" style="display:none" target="_blank">http://blog.csdn.net</a>
                    <ul class="similar_list fl"><li><em>•</em><a href="http://blog.csdn.net/XingKong22star/article/details/48968843" id="foot_aritcle_48968843undefined2975364553186852" target="_blank" title="NIO+异步-jetty实现">NIO+异步-jetty实现</a><span>2015-10-08</span><label><i>阅读</i><b>295</b></label></li> <li><em>•</em><a href="http://blog.csdn.net/XingKong22star/article/details/48155839" id="foot_aritcle_48155839undefined8722420283976517" target="_blank" title="java分布式通信系统(J2EE分布式服务器架构)">java分布式通信系统(J2EE分布式服务器架构)</a><span>2015-09-01</span><label><i>阅读</i><b>195</b></label></li> <li><em>•</em><a href="http://blog.csdn.net/XingKong22star/article/details/46532317" id="foot_aritcle_46532317undefined9498799672727782" target="_blank" title="The Apache Tomcat Native library which allows optimal performance in produc">The Apache Tomcat Native library which allows optimal performance in produc</a><span>2015-06-17</span><label><i>阅读</i><b>216</b></label></li> <li><em>•</em><a href="http://blog.csdn.net/XingKong22star/article/details/46426429" id="foot_aritcle_46426429undefined8964905445918501" target="_blank" title="Tomcat启动的时候报 validateJarFile(xxxx) jar not loaded">Tomcat启动的时候报 validateJarFile(xxxx) jar not loaded</a><span>2015-06-09</span><label><i>阅读</i><b>288</b></label></li> <li><em>•</em><a href="http://blog.csdn.net/XingKong22star/article/details/46359079" id="foot_aritcle_46359079undefined0808557115022639" target="_blank" title="JSF注册ManagedBean的流程">JSF注册ManagedBean的流程</a><span>2015-06-04</span><label><i>阅读</i><b>244</b></label></li> </ul>

                    <ul class="similar_list fr"><li><em>•</em><a href="http://blog.csdn.net/XingKong22star/article/details/48292885" id="foot_aritcle_48292885undefined7109971444084244" target="_blank" title="ORM框架Hibernate多对多关联映射的HQL中的in条件查询问题">ORM框架Hibernate多对多关联映射的HQL中的in条件查询问题</a><span>2015-09-08</span><label><i>阅读</i><b>264</b></label></li> <li><em>•</em><a href="http://blog.csdn.net/XingKong22star/article/details/47313093" id="foot_aritcle_47313093undefined5110968245415208" target="_blank" title="Jetty一个开源的servlet容器">Jetty一个开源的servlet容器</a><span>2015-08-06</span><label><i>阅读</i><b>373</b></label></li> <li><em>•</em><a href="http://blog.csdn.net/XingKong22star/article/details/46439581" id="foot_aritcle_46439581undefined07491199646651281" target="_blank" title="IOException while loading persisted sessions">IOException while loading persisted sessions</a><span>2015-06-10</span><label><i>阅读</i><b>260</b></label></li> <li><em>•</em><a href="http://blog.csdn.net/XingKong22star/article/details/46361141" id="foot_aritcle_46361141undefined3313016296536766" target="_blank" title="JSF扩展插件之prettyFaces">JSF扩展插件之prettyFaces</a><span>2015-06-04</span><label><i>阅读</i><b>724</b></label></li> <li><em>•</em><a href="http://blog.csdn.net/XingKong22star/article/details/46359025" id="foot_aritcle_46359025undefined5970938396408068" target="_blank" title="JSF框架">JSF框架</a><span>2015-06-04</span><label><i>阅读</i><b>188</b></label></li> </ul>
                <a href="http://blog.csdn.net/XingKong22star/article/category/1769941" class="MoreArticle">更多文章</a></div>
            </div>
        </div>    
<script type="text/javascript">
    $(function () {
        GetCategoryArticles('1769941', 'XingKong22star','foot','49684475');
    });
</script>
 <div>
            <script type="text/javascript">
                /*博客内容页下方Banner1-960*90,创建于2016-12-13*/
                var cpro_id = "u2843955";
            </script>
            <script type="text/javascript" src="http://cpro.baidustatic.com/cpro/ui/c.js"></script><div id="BAIDU_SSP__wrapper_u2843955_0"><iframe id="iframeu2843955_0" src="http://pos.baidu.com/lccm?rdid=2843955&amp;dc=3&amp;di=u2843955&amp;dri=0&amp;dis=0&amp;dai=1&amp;ps=5847x286&amp;dcb=___adblockplus&amp;dtm=HTML_POST&amp;dvi=0.0&amp;dci=-1&amp;dpt=none&amp;tsr=0&amp;tpr=1484539128166&amp;ti=Dubbo%E9%98%BF%E9%87%8CAlibaba%E5%BC%80%E6%BA%90%E7%9A%84%E5%88%86%E5%B8%83%E5%BC%8F%E6%9C%8D%E5%8A%A1%E6%A1%86%E6%9E%B6%20-%20Developer%20of%20XingKong22star%20-%20%E5%8D%9A%E5%AE%A2%E9%A2%91&amp;ari=2&amp;dbv=2&amp;drs=1&amp;pcs=1349x662&amp;pss=1349x5863&amp;cfv=0&amp;cpl=5&amp;chi=1&amp;cce=true&amp;cec=UTF-8&amp;tlm=1484539128&amp;rw=662&amp;ltu=http%3A%2F%2Fblog.csdn.net%2Fxingkong22star%2Farticle%2Fdetails%2F49684475&amp;ltr=https%3A%2F%2Fwww.baidu.com%2Flink%3Furl%3DV5ebxgha-cWcItprWMiAk398Duj7MN-q9DiNmC8nNm9nJoOMzjM9CD1bZUeKjqH3yw2rjpwCssqwEb6NoMcea2i5gg0-kPZ7Wta5GrE3yn_%26wd%3D%26eqid%3Dd62bdc0800035da400000003587c44c0&amp;ecd=1&amp;par=1366x728&amp;pis=-1x-1&amp;ccd=24&amp;cja=false&amp;cmi=7&amp;col=zh-CN&amp;cdo=-1&amp;psr=1366x768&amp;tcn=1484539128&amp;qn=e7443627e9aaced4&amp;tt=1484539128131.38.38.41" width="960" height="90" align="center,center" vspace="0" hspace="0" marginwidth="0" marginheight="0" scrolling="no" frameborder="0" style="border:0; vertical-align:bottom;margin:0;" allowtransparency="true"></iframe></div>
</div>

参考知识库

img

Hadoop知识库

img

.NET知识库

img

Linux知识库

img

Redis知识库

img

Java EE知识库

img

大型网站架构知识库

 <dt><span>猜你在找</span></dt>    





<div id="adCollege" style="width: 42%;float: left;"> 
    <script src="http://csdnimg.cn/jobreco/job_reco.js" type="text/javascript"></script> 
    <script type="text/javascript">
        csdn.position.showEdu({
            sourceType: "blog",
            searchType: "detail",
            searchKey: "49684475",
            username: "",
            recordcount: "5",
            containerId: "adCollege" //容器DIV的id。 
        });
    </script> 
<div class="tracking-ad" data-mod="popu_84"><dd style="background:url(http://static.blog.csdn.net/skin/default/images/blog-dot-red3.gif) no-repeat 0 10px; white-space: nowrap;"><a href="http://edu.csdn.net/course/detail/2555" title="分布式资源管理系统的前世今生,深入剖析YARN资源调度架构" strategy="v4:content" target="_blank">分布式资源管理系统的前世今生,深入剖析YARN资源调度架构</a></dd><dd style="background:url(http://static.blog.csdn.net/skin/default/images/blog-dot-red3.gif) no-repeat 0 10px; white-space: nowrap;"><a href="http://edu.csdn.net/course/detail/3474" title="微服务架构下的分布式Session管理" strategy="v4:content" target="_blank">微服务架构下的分布式Session管理</a></dd><dd style="background:url(http://static.blog.csdn.net/skin/default/images/blog-dot-red3.gif) no-repeat 0 10px; white-space: nowrap;"><a href="http://edu.csdn.net/course/detail/676" title="【直通华为HCNA/HCNP系列R篇3】路由器接口配置与管理" strategy="v4:content" target="_blank">【直通华为HCNA/HCNP系列R篇3】路由器接口配置与管理</a></dd><dd style="background:url(http://static.blog.csdn.net/skin/default/images/blog-dot-red3.gif) no-repeat 0 10px; white-space: nowrap;"><a href="http://edu.csdn.net/course/detail/1398" title="Docker集群管理三剑客" strategy="v4:content" target="_blank">Docker集群管理三剑客</a></dd><dd style="background:url(http://static.blog.csdn.net/skin/default/images/blog-dot-red3.gif) no-repeat 0 10px; white-space: nowrap;"><a href="http://edu.csdn.net/course/detail/2484" title="Qconf-配置管理服务" strategy="v4:content" target="_blank">Qconf-配置管理服务</a></dd></div></div>  


 <div id="res" data-mod="popu_36" class="tracking-ad" style="width: 42%; float: left; margin-right: 30px; display: block;"><dd style="background:url(http://static.blog.csdn.net/skin/default/images/blog-dot-red3.gif) no-repeat 0 10px;"><a href="http://blog.csdn.net/cxzhq2002/article/details/50462422" title="团队成员梁飞专访阿里巴巴分布式服务框架Dubbo" strategy="SearchAlgorithm" target="_blank">团队成员梁飞专访阿里巴巴分布式服务框架Dubbo</a></dd><dd style="background:url(http://static.blog.csdn.net/skin/default/images/blog-dot-red3.gif) no-repeat 0 10px;"><a href="http://blog.csdn.net/jacky_2015/article/details/51878955" title="阿里巴巴分布式服务框架 Dubbo 团队成员梁飞专访" strategy="SearchAlgorithm" target="_blank">阿里巴巴分布式服务框架 Dubbo 团队成员梁飞专访</a></dd><dd style="background:url(http://static.blog.csdn.net/skin/default/images/blog-dot-red3.gif) no-repeat 0 10px;"><a href="http://blog.csdn.net/rainyear/article/details/8855509" title="阿里巴巴分布式服务框架 Dubbo 团队成员梁飞专访" strategy="SearchAlgorithm" target="_blank">阿里巴巴分布式服务框架 Dubbo 团队成员梁飞专访</a></dd><dd style="background:url(http://static.blog.csdn.net/skin/default/images/blog-dot-red3.gif) no-repeat 0 10px;"><a href="http://blog.csdn.net/asdz1989253jm/article/details/47006977" title="" 阿里巴巴分布式服务框架="" dubbo"="" strategy="SearchAlgorithm" target="_blank">"阿里巴巴分布式服务框架 Dubbo</a></dd><dd style="background:url(http://static.blog.csdn.net/skin/default/images/blog-dot-red3.gif) no-repeat 0 10px;"><a href="http://blog.csdn.net/u013322876/article/details/52886808" title="分布式服务框架--dubbo+zookpeer" strategy="SearchAlgorithm" target="_blank">分布式服务框架--dubbo+zookpeer</a></dd></div>
<div id="ad_cen">        
                <script type="text/javascript">
                    /*博客内容页下方Banner-728*90,创建于2014-7-3*/
                    var cpro_id = "u1607657";
                </script>
                <script type="text/javascript" src="http://cpro.baidustatic.com/cpro/ui/c.js"></script><div id="BAIDU_SSP__wrapper_u1607657_0"><iframe id="iframeu1607657_0" src="http://pos.baidu.com/lccm?rdid=1607657&amp;dc=3&amp;di=u1607657&amp;dri=0&amp;dis=0&amp;dai=2&amp;ps=6029x286&amp;dcb=___adblockplus&amp;dtm=HTML_POST&amp;dvi=0.0&amp;dci=-1&amp;dpt=none&amp;tsr=0&amp;tpr=1484539128166&amp;ti=Dubbo%E9%98%BF%E9%87%8CAlibaba%E5%BC%80%E6%BA%90%E7%9A%84%E5%88%86%E5%B8%83%E5%BC%8F%E6%9C%8D%E5%8A%A1%E6%A1%86%E6%9E%B6%20-%20Developer%20of%20XingKong22star%20-%20%E5%8D%9A%E5%AE%A2%E9%A2%91&amp;ari=2&amp;dbv=2&amp;drs=1&amp;pcs=1349x662&amp;pss=1349x6045&amp;cfv=0&amp;cpl=5&amp;chi=1&amp;cce=true&amp;cec=UTF-8&amp;tlm=1484539128&amp;rw=662&amp;ltu=http%3A%2F%2Fblog.csdn.net%2Fxingkong22star%2Farticle%2Fdetails%2F49684475&amp;ltr=https%3A%2F%2Fwww.baidu.com%2Flink%3Furl%3DV5ebxgha-cWcItprWMiAk398Duj7MN-q9DiNmC8nNm9nJoOMzjM9CD1bZUeKjqH3yw2rjpwCssqwEb6NoMcea2i5gg0-kPZ7Wta5GrE3yn_%26wd%3D%26eqid%3Dd62bdc0800035da400000003587c44c0&amp;ecd=1&amp;par=1366x728&amp;pis=-1x-1&amp;ccd=24&amp;cja=false&amp;cmi=7&amp;col=zh-CN&amp;cdo=-1&amp;psr=1366x768&amp;tcn=1484539128&amp;qn=3885608595eb6c17&amp;tt=1484539128131.67.67.68" width="728" height="90" align="center,center" vspace="0" hspace="0" marginwidth="0" marginheight="0" scrolling="no" frameborder="0" style="border:0; vertical-align:bottom;margin:0;" allowtransparency="true"></iframe></div>
</div>  
查看评论

  暂无评论

* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
<div id="ad_bot">
</div>
    <a id="quick-reply" class="btn btn-top q-reply" title="快速回复" style="display:none;">
        <img src="http://static.blog.csdn.net/images/blog-icon-reply.png" alt="快速回复">
    </a>    
<a id="d-top-a" class="btn btn-top backtop" style="display: none;" title="返回顶部" onclick="_gaq.push(['_trackEvent','function', 'onclick', 'blog_articles_huidaodingbu'])">         
     <img src="http://static.blog.csdn.net/images/top.png" alt="TOP">
</a>

                    <div class="clear">
                    </div>
                </div>
posted @ 2017-01-16 16:40  jobs-lgy  阅读(691)  评论(0编辑  收藏  举报