中文文档:https://dubbo.gitbooks.io/dubbo-user-book/content/
SOA(Service-Oriented Architecture):面向服务架构;
SOA是一个组件模型,它将应用程序的不同功能单元(称为服务)进行拆分,并通过这些服务之间定义良好的接口和契约联系起来;接口是采用中立的方式进行定义的,应该独立于实现服务的硬件平台、操作系统、编程语言;这使得构建在各种各样的系统中的服务可以以一种统一的和通用的方式进行交互;
SOA是一种支持面向服务的架构模式,从服务、基于服务开发和服务的结果来看,面向服务是一种思考方式;SOA架构多应用于互联网项目开发;随着互联网的发展,网站应用的规模不断扩大,并发量不断提高,常规的垂直应用架构已经无力应对,分布式服务架构以及流动计算架构势在必行,急需一个治理系统确保架构有条不紊的演进;Dubbo就是分布式架构的解决方案;
单一应用架构:当网站量(并发访问量)很小时,只需要一个应用,将所有代码都写到一个项目中,不需要进行拆分,将所有功能都部署到一起,以减少部署节点和成本;此时用于简化增删改查工作量的数据访问架构(ORM)是关键;
垂直应用架构:当访问量逐渐增大你,单一应用增加机器带来的加速度越来越小,将应用拆分成互不相干的几个应用,以提升效率;此时用于加速前端页面开发的web框架(MVC)是关键;
分布式服务架构:当垂直应用越来越多的时候,应用之间的交互不可避免,将核心业务抽取出来,作为独立的服务,逐渐形成稳定的服务中心,使前端应用能更快速的响应多变的市场需求;此时用于提高业务复用及整合的分布式服务架构(RPC)是关键;
例如:购物系统拆分为网站前台、网站后台、商品服务、订单服务等;前台、后台都需要访问服务,在调用时需要指定服务所在服务器的IP地址和端口号,应为前台和服务是两个单独的应用,分别部署到不同的服务器;这样就出现分布式服务架构在相互调用时,管理上很麻烦,都得去填写IP地址和端口号;
流动计算架构:当服务越来越多,容量的评估、小服务资源的浪费等问题逐渐显现,此时需要增加一个调度中心,基于访问压力,实时管理集群容量,提高集群利用率;此时,用于提高机器利用率的资源调度和治理中心(SOA)是关键;
1、Dubbo是一个分布式服务框架(远程服务调用的分布式框架),应用于分布式系统架构;
Dubbo致力于提供高性能和透明化的RPC远程服务调用方案,以及SOA服务治理方案;
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注册中心;
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=[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/bin
,zkServer start
zkServer
后面可写参数:start(启动)、stop(停止)、status(查看状态)
zkServer status
出现这个Mode: standalone
,表示服务启动成功;
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-RPC
和Dubbo-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中包含三个子模块;
4、2.6.1以前的版本下载dubbo-admin
和部署:
mvn package -Dmaven.skip.test=true
dubbo-admin-2.5.7.war
文件,可以改名为dubbo-admin.war
,放到Tomcat的webapps目录下;WEB-INF
下的dubbo.properties
文件:dubbo.registry.address=zookeeper://127.0.0.1:2181
,修改后重启Tomcat;/Users/zxj/Library/apache-tomcat-9.0.17/bin/startup.sh
/ sudo sh startup.sh
http://localhost:8088/
,用户名/密码:root/root5、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
目录,打包项目: 执行mvn clean package
命令;
在dubbo-admin
目录下出现target文件夹,cd target
--> java -jar dubbo-admin-0.0.1-SNAPSHOT.jar
1、安装ZK,启动服务;
Dubbo的注册中心ZK已经安装好并启动,接下来编写入门代码,要先编写服务提供方的代码,再编写服务消费放的代码;
2、创建Maven工程 - dubbo-service: 要想对外发布成一个服务,就要打包成war包,因为jar包是可以单独部署的;
4、pom.xml
:
5、applicationContext-service
文件:
6、com.zxj.dubbo.service.HelloService
接口:
7、com.zxj.dubbo.service.impl.HelloService
实现类: 注意类上的@Service注解使用的是Dubbo注解,不是Spring的注解;
8、创建Maven工程 - dubbo-consumer
:
pom.xml
与dubbo-service
依赖一样,Tomcat插件处端口号改为8081(与dubbo-service端口号不一样);
11、创建com.zxj.dubbo.controller.HelloController.java
12、复制duboo-service
中的service接口包到dubbo-consumer
项目中;
13、在springmvc.xml
中配置dubbo
14、启动dubbo-service
:Run 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-pojo
、aiyou-dao
、aiyou-interface
:Maven Module项目,打包成jar;aiyou-service
、aiyou-web
:Maven Module项目,打包成war;(因为要作为服务对外提供)