zoukankan      html  css  js  c++  java
  • ~随笔A017~分布式开发-dubbo

      一、dubbo项目搭建

      dubbo项目需要有个注册中心,而注册中心可以使用很多技术来进行数据保存,但从常规的使用来讲,zookeeper工具是首选。所以在进行dubbo项目搭建就需要首先搭建zookeeper,而zookeeper是单实例即可,无需进行集群。

      zookeeper可以运行在Linux下或者window中,但考虑到项目最终应用,我们需基于Linux进行搭建。

      zookeeper下载地址:http://zookeeper.apache.org/

      在许多开源项目中,zookeeper都有其非常重要的作用,而dubbo会将远程接口的服务注册到zookeeper之中。(测试时,只需zookeeper采用单节点)

      详细参考~随笔A014~

      二、dubbo项目

      在开发之中,如果要实现dubbo项目的编写,需要有3个项目

      远程接口、业务实现、客户端,为了保证项目的整体风格一致,以及所有开发包的统一版本管理,我们需要定义一个父项目(目的:定义基础插件、版本属性信息,同时其他项目里都要求继承这个项目)

      所有的项目搭建使用maven进行管理,所以保证eclipse中已配置好maven的setting.xml文件。

      1.创建parent项目,此项目作为整个公共项目约束出现

      2.远程调用接口(业务接口),但由于整个项目里考虑到开发版本的问题,所以对于业务接口也需要继承父项(parent项目中的相关约定)。修改pom.xml配置文件,让其去继承parent/pom.xml文件

      3.创建dubbo业务中心(配置项目依赖库)

      业务中心是整个dubbo搭建的核心所在,而进行业务中心的搭建,需要配置许多开发包。

      a)环境搭建

      b)业务实现

      c)dubbo服务启动

      

       d)dubbo项目监控

      为了监控dubbo程序的执行状态,专门提供了一个监控的程序端,

      提醒:dubbo的监控里默认集成web服务器(jetty)

      三、dubbo深入配置

      1.dubbo集群搭建

      dubbo都是有一个单独的RPC服务端,随后再使用一个客户端来进行服务的调用,但如果此时RPC服务端出现了问题(无法再提供服务),此时必须有容错机制(使用备份主机进行操作处理)。

      2.dubbo负载均衡

      如果说现在提供dubbo服务的有多台机器,采用负载均衡的算法,将用户的请求均衡的分配到不同的节点上来执行,在整个负载均衡的处理中,有个权重的概念(权重大则分配服务多)。

      3.dubbo线程模型

      在许多的开发之中都会提供有线程池的概念,利用线程池可以有效的提高操作性能,而dubbo本身支持线程池的配置。观察下dubbo的线程模型

      

      简言之,所有具体的业务实现的子类的对象都保存在线程池中,这样如果在使用某个dubbo服务时就可以不再进行临时的对象创建,以提升操作性能。

      针对于dubbo线程模型中有2个默认配置

      

      4.dubbo直连

      默认情况下如想使用dubbo的服务,那么必须通过注册中心才可以进行访问,但是在dubbo里可以绕过注册中心进行地址直连。

      之前dubbo服务启动时会在zookeeper里配置相应的节点数据(使用的远程接口名称)

      5.Token令牌

      dubbo里存在直连操作,那一定存在安全隐患,这里提供令牌的处理操作,避免直连操作(所有服务通过注册中心来完成)。

      服务的提供者需生成一个令牌,而后注册中心要负责管理这个令牌操作。随后对令牌进行检查,检测之后将令牌交给消费者,而后进行令牌的访问,访问提供者的时候需要对令牌进行验证。

      也就是说,令牌的操作在于服务提供者(Provider)的配置上。

      6.服务降级

      在庞大的系统中,有了RPC定义的业务中心之后理论上可实现吞吐量很大的高性能项目,但在很多情况下,有可能某些服务特别消耗资源(12306抢票会消耗主机大量性能,如果继续维持其他的RPC服务,就可能造成核心业务的耗损,所有此时就必须考虑让系统进行降级处理)

      所谓降级就是指系统暂停提供服务。在dubbo里针对服务的降级,提供2种解决方案:

      

      a)当某个服务不可用时使用null来进行数据返回

       

      四.SSO整合处理

      1.功能说明与集群定义

      从实际的项目开发来讲,授权检测是个非常重要的环节,在Shiro的开发框架里有关于授权操作的问题。而现在有了dubbo之后,依然需要将业务中心的授权进行处理。

      对于整个安全性操作来讲,由于dubbo工作在Linux下,所以可直接利用最简单的iptables进行安全的白名单配置,只需要这样的配置就可实现端口的服务安全,(即:只允许有特定的服务器地址才可进行连接)但这种层次的安全并不是业务层次的安全,还需要使用Shiro来进行处理。

      既然dubbo已经牵扯到了分布式的集群开发,那么在实际的工作之中就可能运行多个web端

      2.定义用户授权业务中心

      对于Shiro与Dubbo的结合主要是需要用户自己来定义授权操作,所以授权操作就必须使用MyBatis和spring一起完成业务开发,为了开发方便,是需要建立专门的业务层的

      3.sso与dubbo整合

      当前的sso有自己用户的认证处理,所以本次要做事为将之前编写的授权业务与Shiro中的Realm进行整合处理即可

      4.dubbo业务授权检测

      五、dubbo与消息中间件

      1.dubbo与消息组件整合简介

      对于dubbo的使用,大部分情况下就是一个RPC服务端,但是一般RPC服务端都需web端才能进行调用,这样是很不方便的(如:现在很多智能设备进行手机连接,也有部分数据会通过其他设备:手环-统计心跳、脉搏、步数)那么对于这些数据的采集,不可能每动一次,进行一次数据申报,一般都是在连接到手机之后,有手机进行消息的发送,只需发送即可,无需关心返回结果。这种情况下往往会利用消息组件来进行消息的接收,同时要知道如果使用的是队列消息,还可方便的进行缓冲作用。

      2.配置ActiveMQ组件

      a).ActiveMQ组件取得:http://activemq.apache.org:

      3.dubbo消费端

      消息组件建立完成之后就需要建立dubbo消费端

      4.定义消息提供者

      消息的消费者定义完成了,还需定义一个消息的发送操作,也要有个专门的接口完成处理。

      六、dubbo与springBoot集成

      实际上dubbo严格来讲算得上是一种微架构的产物,而在现在流行的微服务的创建之中,springBoot是一种很好的手段,所以将dubbo与springBoot进行整合处理。

      1.搭建springBoot

      如果想开发springBoot,所有项目的文件需要去继承springBoot的配置项,可是在整体的项目里已存在一个父的pom.xml文件,所以为了解决这样的问题,需要对parent/pom.xml进行修改。

      完成springboot的环境搭建后,就需要将dubbo的服务引进来

      a).修改parent/pom.xml文件,进行springboot配置

      2.调用dubbo业务

      a).修改springboot/pom.xml

      b).建立源代码目录

        src/main/resoures/META-INF/spring:保存一个之前定义的spring-dubbo-consumer.xml

        src/main/profiles/{dev.beta.product}/config:保存dubbo.properties文件。

  • 相关阅读:
    Vue内置指令
    Vue计算属性
    Ubuntu下编译Bilibili/ijkplayer
    自毁程序
    Android最大可运行内存
    Android ListView onItemClick Not Work
    Java/Android 二进制数据与String互转
    JAVA/Android Map与String的转换方法
    java中打印变量地址
    Win7 关闭Window update
  • 原文地址:https://www.cnblogs.com/gaojl/p/8522877.html
Copyright © 2011-2022 走看看