zoukankan      html  css  js  c++  java
  • dubbo

    一、基于soa(微服务)的框架,表现层和服务层是不同的工程。所以需要两个系统之间进行通信。

      如何实现远程通信?

      1.Webservice:效率不高,基于soap(http+xml)协议。项目中不推荐使用。(很少在工程内部使用,常在两个公司间使用,例如淘宝调用物流公司数据);

      2.使用restful(一种风格)形式的服务:http+json。(http协议,响应json数据,json比xml效率高)很多项目中应用。如果服务太多,服务之间调用关系混乱,需要治理服务。

      3.dubbo(阿里巴巴开源的服务中间件)。使用RPC协议进行远程调用,直接使用socket通信(传递二进制的流,比http快;不能跨语言,只能Java工程之间通信)。传输效率高,并且可以统计出系统之间的调用关系、调用次数。

    二、什么是dubbo? --》服务调用(工程之间通信)

      Dubbo是阿里巴巴公司开源的一个高性能优秀的分布式服务框架。使得应用可通过高性能的 RPC(远程调用) 实现服务的输出和输入功能,可以和Spring框架无缝集成。

      随着互联网的发展,网站应用的规模不断扩大,常规的垂直应用架构已无法应对,分布式服务架构以及流动计算架构势在必行,亟需一个治理系统确保架构有条不紊的演进。

      Cluster集群的意思,1-10是在集群中部署的节点的数量

    • 单一应用架构
      • 当网站流量很小时,只需一个应用,将所有功能都部署在一起,以减少部署节点和成本。
      • 此时,用于简化增删改查工作量的 数据访问框架(ORM) 是关键。
    • 垂直应用架构
      • 当访问量逐渐增大,单一应用增加机器带来的加速度越来越小,将应用拆成互不相干的几个应用,以提升效率。
      • 此时,用于加速前端页面开发的 Web框架(MVC) 是关键。
    • 分布式服务架构
      • 当垂直应用越来越多,应用之间交互不可避免,将核心业务抽取出来,作为独立的服务,逐渐形成稳定的服务中心,使前端应用能更快速的响应多变的市场需求。
      • 此时,用于提高业务复用及整合的 分布式服务框架(RPC) 是关键。
    • 流动计算架构
      • 当服务越来越多,容量的评估,小服务资源的浪费等问题逐渐显现,此时需增加一个调度中心基于访问压力实时管理集群容量,提高集群利用率。
      • 此时,用于提高机器利用率的 资源调度和治理中心(SOA) 是关键。

    三、Dubbo的框架

      

    节点角色说明:

    • Provider: 暴露服务的服务提供方。(注册服务)
    • Consumer: 调用远程服务的服务消费方。(订阅服务)
    • Registry: 服务注册与发现的注册中心。(登记服务)(类似房产中介作用)
    • Monitor: 统计服务的调用次调和调用时间的监控中心。(没有这个角色,程序可以照常运行)
    • Container: 服务运行容器。(spring容器)

    调用关系说明:

    • 0. 服务容器负责启动,加载,运行服务提供者。
    • 1. 服务提供者在启动时,向注册中心注册自己提供的服务。
    • 2. 服务消费者在启动时,向注册中心订阅自己所需的服务。
    • 3. 注册中心返回服务提供者地址列表给消费者,如果有变更,注册中心将基于长连接推送变更数据给消费者。
    • 4. 服务消费者,从提供者地址列表中,基于软负载均衡算法,选一台提供者进行invoke调用,如果调用失败,再选另一台调用。
    • 5. 服务消费者和提供者,在内存中累计调用次数和调用时间,定时每分钟发送一次统计数据到监控中心。

    四、使用方法(发布、调用服务)

       Dubbo采用全Spring配置方式,透明化接入应用,对应用没有任何API侵入,只需用Spring加载Dubbo的配置即可,Dubbo基于Spring的Schema扩展进行加载。

      单一工程中spring的配置

    <bean id="xxxService" class="com.xxx.XxxServiceImpl" />
    <bean id="xxxAction" class="com.xxx.XxxAction">
        <property name="xxxService" ref="xxxService" />   //没有拆分之前,调用service,需要注入service
    </bean>

      远程服务:

      在本地服务的基础上,只需做简单配置,即可完成远程化:

      将上面的local.xml配置拆分成两份,将服务定义部分放在服务提供方remote-provider.xml,将服务引用部分放在服务消费方remote-consumer.xml。

      并在提供方增加暴露服务配置<dubbo:service>,在消费方增加引用服务配置<dubbo:reference>。

      发布服务:

    <!-- 和本地服务一样实现远程服务 -->
    <bean id="xxxService" class="com.xxx.XxxServiceImpl" />
    <!-- 增加暴露远程服务配置 -->
    <dubbo:service  interface="com.xxx.XxxService"  ref="xxxService" />   //接口+实现类

      调用服务:

    <!-- 增加引用远程服务配置 -->
    <dubbo:reference  id="xxxService"  interface="com.xxx.XxxService" />  //根据接口调服务(拿到服务接口,创建服务对象)
    <!-- 和本地服务一样使用远程服务 --> //action代码不用改,之前怎么调用,现在还是!!!
    <bean id="xxxAction" class="com.xxx.XxxAction">
        <property name="xxxService" ref="xxxService" />
    </bean>

      要先有注册中心,才可以发布服务(服务层),调用服务(表现层)!!!

    五、注册中心

      zookeeper介绍

      注册中心可以有多种方式来实现,(Multicast、Zookeeper、Redis、Simple注册中心)

      官方推荐使用zookeeper作为注册中心。(大数据用的多zookeeper)(相当于个map,所以redis也可以用)(一个key对应一个value,相当于一个接口对应一个服务 即ip地址端口号,其实一个接口可以对应多个ip地址端口号,就是当访问做集群时)

      注册中心负责服务地址的注册与查找,相当于目录服务,服务提供者和消费者只在启动时与注册中心交互,注册中心不转发请求,压力较小。使用dubbo-2.3.3以上版本,建议使用zookeeper注册中心。

      Zookeeper是Apacahe Hadoop的子项目,是一个树型的目录服务,支持变更推送,适合作为Dubbo服务的注册中心,工业强度较高,可用于生产环境,并推荐使用

      Zookeeper:

        1、可以作为集群的管理工具使用。

        2、可以集中管理配置文件。

  • 相关阅读:
    字符串 CSV解析 表格 逗号分隔值 通讯录 电话簿 MD
    Context Application 使用总结 MD
    RxJava RxPermissions 动态权限 简介 原理 案例 MD
    Luban 鲁班 图片压缩 MD
    FileProvider N 7.0 升级 安装APK 选择文件 拍照 临时权限 MD
    组件化 得到 DDComponent JIMU 模块 插件 MD
    gradlew 命令行 build 调试 构建错误 Manifest merger failed MD
    protobuf Protocol Buffers 简介 案例 MD
    ORM数据库框架 SQLite 常用数据库框架比较 MD
    [工具配置]requirejs 多页面,多入口js文件打包总结
  • 原文地址:https://www.cnblogs.com/zs-notes/p/9328447.html
Copyright © 2011-2022 走看看