Dubbo -分布式系统架构解决方案

~ 基础概述

中文文档:https://dubbo.gitbooks.io/dubbo-user-book/content/

>> SOA

SOA(Service-Oriented Architecture):面向服务架构;

SOA是一个组件模型,它将应用程序的不同功能单元(称为服务)进行拆分,并通过这些服务之间定义良好的接口和契约联系起来;接口是采用中立的方式进行定义的,应该独立于实现服务的硬件平台、操作系统、编程语言;这使得构建在各种各样的系统中的服务可以以一种统一的和通用的方式进行交互;

SOA是一种支持面向服务的架构模式,从服务、基于服务开发和服务的结果来看,面向服务是一种思考方式;SOA架构多应用于互联网项目开发;随着互联网的发展,网站应用的规模不断扩大,并发量不断提高,常规的垂直应用架构已经无力应对,分布式服务架构以及流动计算架构势在必行,急需一个治理系统确保架构有条不紊的演进;Dubbo就是分布式架构的解决方案;

  • 单一应用架构:当网站量(并发访问量)很小时,只需要一个应用,将所有代码都写到一个项目中,不需要进行拆分,将所有功能都部署到一起,以减少部署节点和成本;此时用于简化增删改查工作量的数据访问架构(ORM)是关键;

  • 垂直应用架构:当访问量逐渐增大你,单一应用增加机器带来的加速度越来越小,将应用拆分成互不相干的几个应用,以提升效率;此时用于加速前端页面开发的web框架(MVC)是关键;

  • 分布式服务架构:当垂直应用越来越多的时候,应用之间的交互不可避免,将核心业务抽取出来,作为独立的服务,逐渐形成稳定的服务中心,使前端应用能更快速的响应多变的市场需求;此时用于提高业务复用及整合的分布式服务架构(RPC)是关键;
    例如:购物系统拆分为网站前台、网站后台、商品服务、订单服务等;前台、后台都需要访问服务,在调用时需要指定服务所在服务器的IP地址和端口号,应为前台和服务是两个单独的应用,分别部署到不同的服务器;这样就出现分布式服务架构在相互调用时,管理上很麻烦,都得去填写IP地址和端口号;

  • 流动计算架构:当服务越来越多,容量的评估、小服务资源的浪费等问题逐渐显现,此时需要增加一个调度中心,基于访问压力,实时管理集群容量,提高集群利用率;此时,用于提高机器利用率的资源调度和治理中心(SOA)是关键;

>> Dubbo

1、Dubbo是一个分布式服务框架(远程服务调用的分布式框架),应用于分布式系统架构;
Dubbo致力于提供高性能和透明化的RPC远程服务调用方案,以及SOA服务治理方案;

2、Dubbo服务架构的架构模型:有5个节点角色
Dubbo -分布式系统架构解决方案_第1张图片

3、节点角色说明:
(1)Provider:暴露服务的服务提供方,发布服务的一方;
(2)Consumer:调用远程服务的服务消费方,服务调用的一方;
(3)Registry:服务注册与发现的注册中心,服务的提供方把所要发布的服务全都发布到注册中心上,服务的地址全都由注册中心来管理,服务的消费方去注册中心查找服务地址;
注册中心负责注册地址的注册与查找,相当于目录服务,服务提供者和消费者只在启动时与注册中心进行交互,注册中心不转发请求,压力较小;
(4)Monitor:统计服务的调用次数和调用时间的监控中心;
(5)Container:服务运行容器;

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

5、Dubbo架构特点: 连通性、健壮性、伸缩性、向未来架构的升级性;

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

7、Dubbo常用使用方式:注解方式、XML配置方式、属性配置方式、API配置方式;

8、Dubbo注册中心有多种:Multicase注册中心、Zookeeper注册中心(官方推荐)、Redis注册中心、Simple注册中心;

>> Zookeeper

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

要使用Zookeeper作为dubbo的注册中心,就要有一个Zookeeper的一个服务器;

2、Zookeeper安装:
(1)安装brew:/usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"

(2)检查安装环境:brew info zookeeper

(3)安装:brew install zookeeper

(4)在Zookeeper目录下创建data文件夹;

(5)修改Zookeeper配置文件:/usr/local/etc/zookeeper

  • tickTime=2000:ZK中的一个时间单元;ZK中所有时间都是以这个时间单元为基础,进行整数倍配置的;Eg:session的最小超时时间是2*tickTime;
  • initLimit=10:Follower在启动过程中,会从leader同步所有最新数据,然后确定自己能够对外服务的起始状态;leader允许follower在initLimit时间内完成这个工作;若ZK集群的数据量很大,follower在启动时,从leader上同步数据的时间也会相应变长,因此在这种情况下,有必要适当调大这个参数;
  • syncLimit=5:在运行过程中,leader负责与ZK集群中所有机器进行通信,例如通过一些心跳检测机制来检测机器的存活状态,若leader在发出心跳包在syncLimit秒之后,还没有从follower那里收到响应,那么就认为这个follower已经不在线了;注意:这个参数值若设的过大,可能会掩盖一些问题;
  • dataDir=/usr/local/etc/zookeeper/data:指定Zookeeper的数据存放路径(存储快照文件);默认情况下事务日志也会存储在这里,建议同时设置dataLogDir参数,事务日志的写性能直接影响ZK性能;
  • clientPort=2181:客户端连接server的端口号,即对外服务服务的端口,默认使用2181即可;
  • server.x=slavel1:2888:3888:Zookeeper集群时需要添加该配置;
    [server.x]中的x是一个数字,与myid文件中的id是一致的,表示集群中集群编号;
    [slave1]表示集群中机器的域名(可以使用IP地址);
    [2888]表示集群内机器通信的端口,用于leader和follower之间数据同步和其他通信;
    [3888]表示集群选举时使用的端口,用于leader选举过程中投票通信;
    server.x=[hostname]:nnnnn[:nnnnn]server.1=127.0.0.1:2888:3888

(6)添加myid文件:cd /usr/local/var/run/zookeeper/data/zk1(配置文件中的dataDir),vim myid 输入 1 保存,1代表机器编号;

(7)启动Zookeeper服务:cd /usr/local/binzkServer start
zkServer后面可写参数:start(启动)、stop(停止)、status(查看状态)
zkServer status出现这个Mode: standalone,表示服务启动成功;


~ Dubbo 管理端

1、Dubbo 管理端: 是一个可视化界面,通过这个可视化界面可以查看有哪些服务已经发布到注册中心,有哪些消费者调用了服务;
也可以对错误进行定位:若注册中心没有指定服务,说明服务发布失败;若服务发布成功,但是调用时失败,说明消费方出错;

2、官网下载地址: http://dubbo.apache.org/en-us/blog/download.html

3、dubbo-2.6.1以后的版本不再有dubbo-admin; Dubbo在2.6.1及2.6.1以后的版本当中,将一分为二,分为Dubbo-RPCDubbo-Admin,而在2.6.1以前的版本中Dubbo-Admin是包含在Dubbo-RPC当中的;新版本Dubbo-Admin名称改为Dubbo-OPS

参考链接:https://blog.csdn.net/u012627861/article/details/82754027
https://blog.csdn.net/u012627861/article/details/82945068

Dubbo-OPS目录结构:Dubbo-Admin中包含三个子模块;
Dubbo -分布式系统架构解决方案_第2张图片

4、2.6.1以前的版本下载dubbo-admin和部署:

  • 下载2.5.7;
  • 终端进入到dubbo-admin目录,执行mvn package -Dmaven.skip.test=true
  • 在dubbo-admin目录下回出现target文件夹,里面有dubbo-admin-2.5.7.war文件,可以改名为dubbo-admin.war,放到Tomcat的webapps目录下;
  • 最好将管理端的工具放到ZK所在的主机上:若ZK默认端口是2181,则不需要做修改;若不在同一台主机或端口号被修改,需要修改WEB-INF下的dubbo.properties文件:dubbo.registry.address=zookeeper://127.0.0.1:2181,修改后重启Tomcat;
  • 配置修改tomcat的端口8088,到conf下的文件 server.xml,因为zookeeper会用到8080的端口,所以为了不冲突,把Tomcat的端口改一下,记得一定要改!!!
  • 终端启动Tomcat:/Users/zxj/Library/apache-tomcat-9.0.17/bin/startup.sh / sudo sh startup.sh
  • 这儿有个要注意的地方,现在我们还是打包的war文件,我们还需要dubbo-admin包的相应配置,所以我们要先启动tomcat,让其自动解压dubbo-admin包后再关闭tomcat,再删除dubbo-admin.war包后修改dubbo-admin下的\WEB-INF下的dubbo.properties文件,如下图:这里的dubbo.regist ry.address后面对应的IP地址是我们的zookeeper对应的IP与端口地址,一定要一致;一般情况下都是不需要改的,因为初始都是本地的IP地址;
    在这里插入图片描述
  • 一定要先启动zookeeper启动后再去启动tomcat;
  • 浏览器地址栏访问:http://localhost:8088/,用户名/密码:root/root

5、2.6.1及2.6.1以后的版本下载dubbo-admin跟部署:

  • 下载地址:http://dubbo.apache.org/en-us/blog/download.html

  • 点击Dubbo-Admin,进入github下载页面 --> 选择master分支
    (必须是master分支才行,因为进入该页面默认会选中develop分支)

  • 下载dubbo-admin
    下载后导入IDE,还有一点需要注意的是2.6.1及以后的版本dubbo-admin工程改为了springboot的工程,在编译和部署的时候,需要按照springboot工程的部署跟运行方式了;

  • dubbo-admin/src/main/resources/application.properties
    Dubbo -分布式系统架构解决方案_第3张图片

  • 进入dubbo-admin目录,打包项目: 执行mvn clean package命令;

  • dubbo-admin目录下出现target文件夹,cd target --> java -jar dubbo-admin-0.0.1-SNAPSHOT.jar
    Dubbo -分布式系统架构解决方案_第4张图片

  • 浏览器访问:http://localhost:7001
    Dubbo -分布式系统架构解决方案_第5张图片


~ 入门案例

1、安装ZK,启动服务;
Dubbo的注册中心ZK已经安装好并启动,接下来编写入门代码,要先编写服务提供方的代码,再编写服务消费放的代码;

2、创建Maven工程 - dubbo-service: 要想对外发布成一个服务,就要打包成war包,因为jar包是可以单独部署的;

3、添加web.xml
Dubbo -分布式系统架构解决方案_第6张图片

4、pom.xml

5、applicationContext-service文件:
Dubbo -分布式系统架构解决方案_第7张图片

6、com.zxj.dubbo.service.HelloService接口:
Dubbo -分布式系统架构解决方案_第8张图片

7、com.zxj.dubbo.service.impl.HelloService实现类: 注意类上的@Service注解使用的是Dubbo注解,不是Spring的注解;
Dubbo -分布式系统架构解决方案_第9张图片

8、创建Maven工程 - dubbo-consumer
pom.xmldubbo-service依赖一样,Tomcat插件处端口号改为8081(与dubbo-service端口号不一样);

9、web.xml
Dubbo -分布式系统架构解决方案_第10张图片
Dubbo -分布式系统架构解决方案_第11张图片

10、springmvc.xml
Dubbo -分布式系统架构解决方案_第12张图片

11、创建com.zxj.dubbo.controller.HelloController.java
Dubbo -分布式系统架构解决方案_第13张图片

12、复制duboo-service中的service接口包到dubbo-consumer项目中;

13、在springmvc.xml中配置dubbo

14、启动dubbo-serviceRun As --> Maven build... --> Goals(Tomcat7:run)

15、启动dubbo-consumer

16、浏览器地址栏:http://localhost:8081/hello/test.action


~ 综合案例

1、需求: 使用SpringMVC+Mybtis+Dubbo实现旅游网的注册功能;

service、dao部署到一个单独的服务器,controller、web层部署到另一个服务中,控制层远程调用业务层的代码;

2、搭建环境:

  • aiyou-parent:Maven Project项目,打包成pom;
  • aiyou-pojoaiyou-daoaiyou-interface:Maven Module项目,打包成jar;
  • aiyou-serviceaiyou-web:Maven Module项目,打包成war;(因为要作为服务对外提供)

你可能感兴趣的:(Dubbo)