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>  
  • 相关阅读:
    HDU 4536 XCOM Enemy Unknown ( 状态压缩+搜索)
    HDU 4535 吉哥系列故事——礼尚往来(水题,错排)
    HDU 4541 Ten Googol
    HDU 4544 湫湫系列故事——消灭兔子 (优先队列)
    HDU 4530 小Q系列故事——大笨钟(水题)
    HDU 4505 小Q系列故事——电梯里的爱情 (水题)
    HDU 2197 本原串 (数学)
    HDU 4540 威威猫系列故事——打地鼠 (简单DP)
    oracle数据库恢复
    编程中的命名设计那点事(转)
  • 原文地址:https://www.cnblogs.com/dengzy/p/5677638.html
Copyright © 2011-2022 走看看