zoukankan      html  css  js  c++  java
  • dubbo_分布式框架dubbox介绍

    1.Dubbo概述
    Dubbo是阿里巴巴开源出来的一个分布式服务框架,致力于提供高性能和透明化的RPC远程服务调用方案,以及作为SOA服务治理的方案。
    简单的说,dubbo就是个服务框架,如果没有分布式的需求,其实是不需要用的,只有在分布式的时候,才有dubbo这样的分布式服务框架的需求,并且本质上是个服务调用的东东,说白了就是个远程服务调用的分布式框架

    它的核心功能包括:
    #remoting:远程通讯,提供对多种NIO框架抽象封装,包括“同步转异步”和“请求-响应”模式的信息交换方式。
    #Cluster: 服务框架,提供基于接口方法的透明远程过程调用,包括多协议支持,以及软负载均衡,失败容错,地址路由,动态配置等集群支持。
    #registry: 服务注册中心,服务自动发现: 基于注册中心目录服务,使服务消费方能动态的查找服务提供方,使地址透明,使服务提供方可以平滑增加或减少机器。

    2. Dubbo能做什么?
    #.透明化的远程方法调用,就像调用本地方法一样调用远程方法,只需简单配置,没有任何API侵入。
    #.软负载均衡及容错机制,可在内网替代F5等硬件负载均衡器,降低成本,减少单点。
    #. 服务自动注册与发现,不再需要写死服务提供方地址,注册中心基于接口名查询服务提供者的IP地址,并且能够平滑添加或删除服务提供者。
    Dubbo采用全Spring配置方式,透明化接入应用,对应用没有任何API侵入,只需用Spring加载Dubbo的配置即可,Dubbo基于Spring的Schema扩展进行加载。

    3.Dubbox  实现原理

     

     节点角色说明:

           Provider: 暴露服务的服务提供方。

           Consumer: 调用远程服务的服务消费方。

           Registry: 服务注册与发现的注册中心。

           Monitor: 统计服务的调用次调和调用时间的监控中心。

           Container: 服务运行容器。

      调用关系说明:

        0  服务容器负责启动,加载,运行服务提供者。

        1. 服务提供者在启动时,向注册中心注册自己提供的服务。

        2. 服务消费者在启动时,向注册中心订阅自己所需的服务。

        3. 注册中心返回服务提供者地址列表给消费者,如果有变更,注册中心将基于长连接推送变更数据给消费者。

        4. 服务消费者,从提供者地址列表中,基于软负载均衡算法,选一台提供者进行调用,如果调用失败,再选另一台调用。

        5. 服务消费者和提供者,在内存中累计调用次数和调用时间,定时每分钟发送一次统计数据到监控中心。

    4.Doubbox 特性:

      (1) 连通性: 

      注册中心负责服务地址的注册与查找,相当于目录服务,服务提供者和消费者只在启动时与注册中心交互,注册中心不转发请求,压力较小

      监控中心负责统计各服务调用次数,调用时间等,统计先在内存汇总后每分钟一次发送到监控中心服务器,并以报表展示 

      服务提供者向注册中心注册其提供的服务,并汇报调用时间到监控中心,此时间不包含网络开销

      服务消费者向注册中心获取服务提供者地址列表,并根据负载算法直接调用提供者,同时汇报调用时间到监控中心,此时间包含网络开销 

      注册中心,服务提供者,服务消费者三者之间均为长连接,监控中心除外 

      注册中心通过长连接感知服务提供者的存在,服务提供者宕机,注册中心将立即推送事件通知消费者

      注册中心和监控中心全部宕机,不影响已运行的提供者和消费者,消费者在本地缓存了提供者列表 

      注册中心和监控中心都是可选的,服务消费者可以直连服务提供者

     (2) 健状性:

      监控中心宕掉不影响使用,只是丢失部分采样数据

      数据库宕掉后,注册中心仍能通过缓存提供服务列表查询,但不能注册新服务 

      注册中心对等集群,任意一台宕掉后,将自动切换到另一台

      注册中心全部宕掉后,服务提供者和服务消费者仍能通过本地缓存通讯

      服务提供者无状态,任意一台宕掉后,不影响使用 

      服务提供者全部宕掉后,服务消费者应用将无法使用,并无限次重连等待服务提供者恢复

     (3) 伸缩性: 

      注册中心为对等集群,可动态增加机器部署实例,所有客户端将自动发现新的注册中心

      服务提供者无状态,可动态增加机器部署实例,注册中心将推送新的服务提供者信息给消费者 

    (4) 升级性: 

      当服务集群规模进一步扩大,带动IT治理结构进一步升级,需要实现动态部署,进行流动计算,现有分布式服务架构不会带来阻力

    5. Dubbox安装部署

    • 前提背景:JDK1.7,maven 已安装
    • 下载解压一个zookeeper,编辑其conf/zoo.cfg后启动zookeeper用作dubbo注册中心:bin/zkServer.sh start 
    • 下载地址:https://github.com/dangdangdotcom/dubbox
    • 下载dubbo.xsd: http://download.csdn.net/download/he000111/8244449
    • Eclipse: 选择 window --> preferences -->XML --> XML  Catalog --> add   在 location:选择dubbox.xsd本地路径;key:  http://code.alibabatech.com/schema/dubbo/dubbo.xsd
    • 在下载的dubbox目录执行mvn install -Dmaven.test.skip=true来尝试编译一下dubbo(并将dubbo的jar安装到本地maven库)
    • 在dubbox根目录执行mvn idea:idea或者mvn eclipse:eclipse,来创建IDE工程文件
    • 将项目导入IDE
    • 用IDE运行/dubbo-demo/dubbo-demo-provider/…/test目录下的DemoProvider启动dubbo服务端,目前他会分别启动dubbo协议(包括用kryo和FST序列化)和REST协议的服务
    • 用IDE运行/dubbo-demo/dubbo-demo-consumer/…/test目录下的DemoConsumer来启动dubbo客户端调用上面的服务端,直接看console的输出即可
    • 用IDE运行/dubbo-demo/dubbo-demo-consumer/…/test目录下的RestClient来启动rest客户端(模拟非dubbo的rest客户端)调用上面的服务端,直接看console的输出即可
    • 可以在浏览器中直接访问http://localhost:8888/services/users/100.xml或者http://localhost:8888/services/users/101.json之类来测试REST服务
    • 了解tomcat和IDE集成的同事,可以直接在IDE中将/dubbo-demo/dubbo-demo-provider/部署到tomcat上,用tomcat的servlet容器来发布REST服务(要同时修改dubbo-demo-provider.xml,请看那个文件中的注释)。(当然也可以在命令行直接mvn package,然后将生成的war部署到外面的tomcat中做测试)
    • 如果想看服务监控效果,或者避免demo抛出找不到监控的异常警告,用IDE运行/dubbo-simple/dubbo-simple-monitor/…/test目录下的SimpleMonitor来启动监控中心即可。页面访问:    http://localhost:8080/

    6. Dubbox—负载均衡

    在集群负载均衡时,Dubbo提供了多种均衡策略,缺省为random随机调用。 可以自行扩展负载均衡策略,参见:负载均衡扩展 

    • Random LoadBalance 随机,按权重设置随机概率。 在一个截面上碰撞的概率高,但调用量越大分布越均匀,而且按概率使用权重后也比较均匀,有利于动态调整提供者权重。
    • RoundRobin LoadBalance 轮循,按公约后的权重设置轮循比率。存在慢的提供者累积请求问题,比如:第二台机器很慢,但没挂,当请求调到第二台时就卡在那,久而久之,所有请求都卡在调到第二台上。
    • LeastActive LoadBalance最少活跃调用数,相同活跃数的随机,活跃数指调用前后计数差。 使慢的提供者收到更少请求,因为越慢的提供者的调用前后计数差会越大。
    • ConsistentHash LoadBalance 一致性Hash,相同参数的请求总是发到同一提供者。 当某一台提供者挂时,原本发往该提供者的请求,基于虚拟节点,平摊到其它提供者,不会引起剧烈变动。 缺省只对第一个参数Hash,如果要修改,请配置<dubbo:parameter key="hash.arguments" value="0,1" /> 缺省用160份虚拟节点,如果要修改,请配置<dubbo:parameter key="hash.nodes" value="320" />

     配置如: 

     <dubbo:service interface="..."loadbalance="roundrobin"/><dubbo:reference interface="..."loadbalance="roundrobin"/>
    
    或: <dubbo:service interface="..."> 
                     <dubbo:methodname="..."loadbalance="roundrobin"/> 
           </dubbo:service> 
    或: <dubbo:reference interface="..."> 
                    <dubbo:methodname="..."loadbalance="roundrobin"/> 
            </dubbo:reference> 

    7. Dubbox实例 & 应用

     参考dubbox  源码中的 dubbo-demo 模块

    对于外部系统使用dubbox:在工程pom.xml 引入jar :

    <dependency> <groupId>com.alibaba</groupId> 
      <artifactId>dubbo</artifactId> 
      <version>2.8.4</version> 
    </dependency> 
    
    <dependency>
      <groupId>com.caucho</groupId> 
      <artifactId>hessian</artifactId>
       <version>4.0.7</version>
    </dependency>

     Dubbo Home: 
    http://code.alibabatech.com/wiki/display/dubbo/Home 
    http://weibo.com/dubbo 

    Dubbo Download: 
    http://code.alibabatech.com/wiki/display/dubbo/Download 

    Dubbo Example: 
    1. Export a remote service: 

    Xml代码  收藏代码
    1. <bean id="xxxService" class="com.xxx.XxxServiceImpl" />   
    2. <dubbo:service interface="com.xxx.XxxService" ref="xxxService" />  

    2. Reference a remote service: 

    Xml代码  收藏代码
    1. <dubbo:reference id="xxxService" interface="com.xxx.XxxService" />  
    2.     <bean id="xxxAction" class="com.xxx.XxxAction">  
    3.     <property name="xxxService" ref="xxxService" />  
    4. </bean>  
  • 相关阅读:
    2、容器初探
    3、二叉树:先序,中序,后序循环遍历详解
    Hebbian Learning Rule
    论文笔记 Weakly-Supervised Spatial Context Networks
    在Caffe添加Python layer详细步骤
    论文笔记 Learning to Compare Image Patches via Convolutional Neural Networks
    Deconvolution 反卷积理解
    论文笔记 Feature Pyramid Networks for Object Detection
    Caffe2 初识
    论文笔记 Densely Connected Convolutional Networks
  • 原文地址:https://www.cnblogs.com/dengzy/p/5677638.html
Copyright © 2011-2022 走看看