使用Dubbo对传统项目工程进行服务化改造
1.使用Dubbo进行规模服务化前的工程结构优化
1.1 使用Dubbo是为了实现系统的分布式服务化
1.2 分布式服务架构的项目特点:
(1)多个服务
(2)多种类型的工程
(3)工程间需要相互调用
(4)如何实现工程间解耦?(高内聚、低耦合)
(5)工程该怎样拆分?
(6)如何对大量的工程进行合理有效管理?(高级篇:持续集成)
1.3原单工程项目:样例工程:传统的单工程项目(edu-demo)
使用技术:Maven,J-UI,Struts2,Spring3,MyBatis3,Druid,MySQL5.6
只有一个用户信息表(增、删除、查、改)
1.4改造后工程结构:
edu-common-parent(Maven父配置)
edu-common (公共工程)
edu-common-config (公共配置工程)
edu-common-core (公共core工程)
edu-common-web (公共web工程)
edu-facade-user(用户服务接口)
edu-service-user(用户服务实现)
edu-web-boss(服务消费者)
1.5 dubbo开发技术的使用
2.架构
• 节点角色说明:
•Provider: 暴露服务的服务提供方
•Consumer: 调用远程服务的服务消费方
•Registry: 服务注册与发现的注册中心
•Monitor: 统计服务的调用次数和调用时间的监控中心
•Container: 服务运行容器
调用关系说明:
0. 服务容器负责启动,加载,运行服务提供者。
1. 服务提供者在启动时,向注册中心注册自己提供的服务。
2. 服务消费者在启动时,向注册中心订阅自己所需的服务。
3. 注册中心返回服务提供者地址列表给消费者,如果有变更,注册中心将基于长连接推送变更数据给消费者。
4. 服务消费者,从提供者地址列表中,基于软负载均衡算法,选一台提供者进行调用,如果调用失败,再选另一台调用。
5. 服务消费者和提供者,在内存中累计调用次数和调用时间,定时每分钟发送一次统计数据到监控中心。
注册中心:可选方案:zookeeper、Redis
1、建议使用dubbo-2.3.3以上版本的使用zookeeper注册中心客户端
2、Zookeeper是Apache Hadoop的子项目,强度相对较好,建议生产环境使用该注册中心。
3、Dubbo未对Zookeeper服务器端做任何侵入修改,只需安装原生的Zookeeper服务器即可,
所有注册中心逻辑适配都在调用Zookeeper客户端时完成。
3.部署环境规划
组件 |
说明 |
IP |
port |
edu-web-boss |
consumer |
192.168.1.111+192.168.1.112 |
8081 |
edu-service-user |
provider |
192.168.1.111+192.168.1.112 |
8082 |
zookeeper-3.4.6 |
注册中心 |
192.168.1.106/107/108 |
2181-2182-2183 |
MySQL5.6 |
数据库 |
192.168.1.122 |
3306 |
这里把未分布式前的tomcat7变成:tomcat7-server1 tomcat7-server2
[root@edu-web-01 src]# mv tomcat7 tomcat7-server1
[root@edu-web-01 src]# cp -r tomcat7-server1 tomcat7-server2
修改tomcat7-server2的相关端口:
shutdown 端口:8005 主要负责启动关闭.
ajp端口:8009 主要负责通过ajp均衡(常用于apache和tomcat整合)
http端口:8081 可以通过web页面直接访问(nginx+tomcata整合)
#注* 如果tomcat1三个端口分别为:8005 8009 8081 ,那么tomcat2端口在此基础上都+1,即为:8006 8010 8082
4.安装Zookeeper单体/集群
Zookeeper单体、集群安装配置使用
注册中心集群/dubbo配置:<dubbo:registry address="zookeeper://192.168.1.106:2181?backup=192.168.1.107:2182,192.168.1.108:2183" />
5.安装Dubbo管控台
注:Dubbo管控台可以对注册到 zookeeper 注册中心的服务或服务消费者进行管理,但管控台是否正常对Dubbo服务没有影响,管控台也不需要高可用,因此可以单节点部署。
环境:
IP: 192.168.1.111 部署容器:dubbo-admin-tomcat 端口:8090
操作步骤:
(1) 下载(或上传)最新版的 Tomcat7(apache-tomcat-7.0.57.tar.gz)到 /usr/local/
(2)解压:$ tar -zxvf apache-tomcat-7.0.57.tar.gz
$ mv apache-tomcat-7.0.57 dubbo-admin-tomcat
注:这里因为共用服务器的的原因,修改端口信息:
#注* 如果tomcat1三个端口分别为:8005 8009 8080 ,那么tomcat2端口在此基础上都+10,即为:8015 8019 8090
(3) 移除/usr/local/tools/dubbo-admin-tomcat/webapps 目录下的所有文件:$ rm -rf *
(4)上传 Dubbo 管理控制台程序 dubbo-admin-2.5.3.war到/usr/local/dubbo-admin-tomcat/webapps
(5)解压并把目录命名为 ROOT:$ unzip dubbo-admin-2.5.3.war -d ROOT ,把 dubbo-admin-2.5.3.war 移到/home/wusc/tools 目录备份 $ mv dubbo-admin-2.5.3.war /home/wusc/tools
(6)配置 dubbo.properties:$ vi ROOT/WEB-INF/dubbo.properties
dubbo.registry.address=zookeeper://192.168.1.106:2181?backup=192.168.1.107:2182,192.168.1.108:2183
dubbo.admin.root.password=wusc.123
dubbo.admin.guest.password=wusc.123
这里意思是: root 密码 wusc.123 ; guest 密码 wusc.123
(以上密码在正式上生产前要修改)(7)防火墙开启 8090 端口,用 root 用户修改/etc/sysconfig/iptables,
# vi /etc/sysconfig/iptables
增加:
# Firewall configuration written by system-config-securitylevel
# Manual customization of this file is not recommended.
*filter
## zookeeper
## dubbo-admin-tomcat:8090
-A INPUT -m state --state NEW -m tcp -p tcp --dport 8090 -j ACCEPT
COMMIT
重启防火墙:# service iptables restart
(8) 启动 Tomat7-测试
$ /usr/local/src/dubbo-admin-tomcat/bin/startup.sh
浏览 http://192.168.1.111:8090/
(9)配置部署了 Dubbo 管控台的 Tomcat 开机启动:
在虚拟主机中编辑/etc/rc.local 文件,加入:
su - root -c '/usr/local/dubbo-admin-tomcat/bin/startup.sh'
11、应用链接到注册中心群集的测试。 (请看视频)12、注册中心高可用集群的测试。 (请看视频)提 示: 下 一节,注册中心集群的 链接 测试, 多 注册中心 集 群的 升级迁移。 多 注册中心 集 群的 升级迁移:从单节点迁移到集群上 !!!!!!!!!!!!!!!!!!!可能需要部署高可用的服务,才能演示,所以先看MQ集群!!!!!!!!!!!!!!!!!!!!!!!!!
6.使用Servlet 容器运行(Tomcat 、Jetty 等)
按照环境的设置部署项目,并测试
可以 Tomat 内存设置:
$ vi /usr/local/src/tomcat7-server1/bin/catalina.sh
#!/bin/sh
JAVA_OPTS='-Xms128m -Xmx512m -XX:PermSize=128m'
#启动
/usr/local/src/tomcat7-server2/bin/startup.sh & tail -f /usr/local/src/tomcat7-server2/logs/catalina.out
/usr/local/src/tomcat7-server1/bin/startup.sh & tail -f /usr/local/src/tomcat7-server1/logs/catalina.out
#停止
/usr/local/src/tomcat7-server2/bin/shutdown.sh & tail -f /usr/local/src/tomcat7-server2/logs/catalina.out
/usr/local/src/tomcat7-server1/bin/shutdown.sh & tail -f /usr/local/src/tomcat7-server1/logs/catalina.out
注:这个存在问题;
7.使用Maven构建Dubbo服务的可执行jar包 / 在Linux操作系统上手工部署Dubbo服务
不建议使用的Dubbo 服务的运行方式:
1 、使用Servlet 容器运行(Tomcat 、Jetty 等) 缺点:增加复杂性(端口、管理) 浪费资源(内存)
2 、自建Main 方法类来运行(Spring 容器) 缺点: Dobbo 本身提供的高级特性没用上,自已编写启动类可能会有缺陷
建议使用的Dubbo服务运行方式
3 、使用Dubbo 框架提供的Main 方法类来运行(Spring 容器)
( 优点:框架本身提供(com.alibaba.dubbo.container.Main) )
( 可实现优雅关机(ShutdownHook) )
注意点: spring-context.xml <import resource="classpath:spring/spring-xxx.xml" />
打包要点:
pom.xml 集合dubbo官方文档SpringContainer自动加载/META-INF/spring下的配置,需要转移配置文件
<!-- 结合com.alibaba.dubbo.container.Main -->
<resource>
<targetPath>${project.build.directory}/classes/META-INF/spring</targetPath>
<directory>src/main/resources/spring</directory>
<filtering>true</filtering>
<includes>
<include>spring-context.xml</include>
</includes>
</resource>
<!-- 打包jar文件时,配置manifest文件,加入lib包的jar依赖 -->
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-jar-plugin</artifactId>
<configuration>
<classesDirectory>target/classes/</classesDirectory>
<archive>
<manifest>
<mainClass>com.alibaba.dubbo.container.Main</mainClass>
<!-- 打包时 MANIFEST.MF文件不记录的时间戳版本 -->
<useUniqueVersions>false</useUniqueVersions>
<addClasspath>true</addClasspath>
<classpathPrefix>lib/</classpathPrefix>
</manifest>
<manifestEntries>
<Class-Path>.</Class-Path>
</manifestEntries>
</archive>
</configuration>
</plugin>
分别先构建:1.edu-common-paret 2.edu-common 3.edu-common-config 4.edu-common-core 5.edu-facade-user 6.edu-service-user
可以将edu-service-user.jar和lib包放到一个目录下,在本地CMD切换到目录 java -jar edu-service-user.jar可启动
部署要点:
IP:同tomcat的环境设置一样,选择部署目录:/usr/server
1.部署目录规范:
# mkdir -p /usr/server/edu/service/user
当然其他分布式服务,可以有:
# mkdir -p /usr/server/edu/service/account
# mkdir -p /usr/server/edu/service/order
# mkdir -p /usr/server/edu/service/queue
2.手工维护Dubbo服务:上传文件启动
# cd /usr/server/edu/service/user
# 上传
# 启动
java -jar edu-service-user.jar &
kill PID
kill -9 PID
3.自定义Dubbo服务维护的Shell脚本
脚本命名规范:
/usr/server/edu/service/xxx/service-xxx.sh
例如:/usr/server/edu/service/user/service-user.sh
#上传文件到 /usr/server/edu/service/user/
#设置启动权限:chmod 755 ./service-user.sh
效果:
cd /usr/server/edu/service/user/
./service-user.sh start
./service-user.sh stop
./service-user.sh restart
配置文件见附件 service-user.sh
4.服务维护注意事项(结合自定义的Shell脚本)
(1) 脚本规范---------尽可能通用
(2) 守护进程
(3) 内存调优设置-----按需调整
(4) 日志处理---------只保留应用Log4j输出的日志
(5) 避免服务冲突 ----进程名、端口
(6) 避免进程误杀-----全匹配
8.Tomcat 中 部署 web应用
见第6点
9.Dubbo 监控中心的介绍与简易监控中心的安装
Dubbo 监控中心的介绍
作用:负责统计各服务的调用次数,调用时间等,统计先在内存汇总后每分钟一次发送到监控中心服务器,并报表展示,为服务的运维采集数据。
监控中心是可选的:不是必须的,对提供者和调用者不影响
监控中心可自定义扩展:(1)个性化运维监控的需求:服务健康状态,服务的压力和性能状况,告警通知以便及时处理 (2)接口:到官方文档上具体看
简易监控中心的安装
作用:可以看到服务访问记录,成功次数,失败次数等等
安装包:
dubbo-monitor-simple-2.5.3-assembly.tar.gz
dubbo-monitor-simple-2.5.3-sources.jar
安装在:192.168.1.111:8091
安装步骤:
1.上传dubbo-monitor-simple-2.5.3-assembly.tar.gz到/root
2. 解压文件并修改文件名称:
# tar -zxvf ./dubbo-monitor-simple-2.5.3-assembly.tar.gz ;
# mv dubbo-monitor-simple-2.5.3 dubbo-monitor
# cd dubbo-monitor
3.编辑 dubbo.properties
# vi conf/dubbo.properties
dubbo-monitor 的配置文件内容如下:
dubbo.container=log4j,spring,registry,jetty
dubbo.application.name=simple-monitor
dubbo.application.owner=
#dubbo.registry.address=multicast://224.5.6.7:1234
dubbo.registry.address=zookeeper://192.168.1.106:2181?backup=192.168.1.107:2182,192.168.1.108:2183
#dubbo.registry.address=redis://127.0.0.1:6379
#dubbo.registry.address=dubbo://127.0.0.1:9090
dubbo.protocol.port=7070
dubbo.jetty.port=8091
dubbo.jetty.directory=${user.home}/monitor
dubbo.charts.directory=${dubbo.jetty.directory}/charts
dubbo.statistics.directory=${user.home}/monitor/statistics
dubbo.log4j.file=logs/dubbo-monitor-simple.log
dubbo.log4j.level=WARN
关于${user.home}的解释
操作系统用户为 wusc,系统用户目录为/home/wusc
dubbo-monitor 的安装目录为:/home/wusc/dubbo-monitor
dubbo-monitor 的配置文件为:/home/wusc/dubbo-monitor/conf/dubbo.properties
我用的root用户则:
dubbo-monitor 的安装目录为:/root/dubbo-monitor
dubbo-monitor 的配置文件为:/root/dubbo-monitor/conf/dubbo.properties
看上面配置文件中标红的的 3 行内容:
理解${user.home}这个变量的意思则可,${user.home}指的就是启动 dubbo-monitor 程序的操作系统用户目录。我们这里用的是 wusc 用户,那么就是/home/wusc 目录(如果是 root 用户启动,那就是/root)。
此时,配置中 3 个目录的绝对路径为:
dubbo.jetty.directory=/home/wusc/monitor
dubbo.charts.directory=/home/wusc/monitor/charts
dubbo.statistics.directory=/home/wusc/monitor/statistics
我用的root用户,则:
dubbo.jetty.directory=/root/monitor
dubbo.charts.directory=/root/monitor/charts
dubbo.statistics.directory=/root/monitor/statistics
4.打开防火墙,配置文件中8091和7070端口
# vi /etc/sysconfig/iptables
增加:
# Firewall configuration written by system-config-securitylevel
# Manual customization of this file is not recommended.
*filter
## zookeeper
## dubbo-admin-tomcat:8090
-A INPUT -m state --state NEW -m tcp -p tcp --dport 8091 -j ACCEPT
-A INPUT -m state --state NEW -m tcp -p tcp --dport 7070 -j ACCEPT
COMMIT
重启防火墙:# service iptables restart
5.启动
# cd /root/dubbo-monitor/bin
# ./start.sh &
注:启动时当内存不足时无法启动
在 Dubbo 服务提供者和服务消费者中的 spring 配置文件中增加以下配置:
<!-- 监控中心配置 -->
<!-- 监控中心协议,如果为protocol="registry",表示从注册中心发现监控中心地址,否则直连监控中心 -->
<!-- 直连监控中心服务器地址,如:address="192.168.3.71:7070" -->
<dubbo:monitor protocol= "registry" />
2.添加完以上配置后,重新构建部署 Dubbo 服务和服务消费者应用
重新启动 dubbo-monitor 简易监控中心,此时就会看到以上 3 个目录会被创新,并在目录里面有相应的服务接口调用的报表数据。
此时再进入 Dubbo 简易监控中心就能查看到对应的报表数据
分享到:
相关推荐
《Dubbo分布式项目实战——环境搭建详解》 在当今的互联网行业中,分布式系统已经成为大型应用的基础设施,而作为阿里巴巴开源的高性能Java RPC框架,Dubbo更是分布式服务治理的重要选择。本篇文章将深入探讨如何...
"基于Dubbo分布式医疗.zip"文件正是围绕这一主题展开,结合C++11和Java两种编程语言,提供了一种实现方案。本文将深入探讨Dubbo在分布式医疗系统中的应用,以及C++11和Java在此中的角色。 首先,Dubbo是阿里巴巴...
本项目将针对当前企业人事管理的业务流程构建一套基于Dubbo分布式的线上企业人事管理系统,该系统规模偏小,适用于中小企业,软件架构是由BS架构搭建的,对系统的访问也突破了地域的限制、客户端的局限,员工可以...
本资源是基于博客“Dubbo+zookeeper 最简单的分布式搭建”的源码,将帮助我们深入理解如何在实际项目中使用 Dubbo 实现分布式服务。 1. **Dubbo 概述** Dubbo 旨在解决分布式系统中的服务调用问题,通过提供服务...
基于Dubbo分布式架构的商城设计与实现 摘要:该文档介绍了基于Dubbo分布式架构的商城设计与实现,旨在解决电商平台系统面临的并发压力和系统备份问题。该系统具有浏览和购买商品、加入购物车、生成订单等功能,并且...
【Dubbo分布式系统架构视频教程】是一套由吴水成老师主讲的全面解析Dubbo技术的课程,旨在帮助学习者深入理解并掌握基于Dubbo的分布式系统设计与实现。Dubbo是阿里巴巴开源的一款高性能、轻量级的服务治理框架,它...
### 基于Dubbo分布式开发视频教程知识点详解 #### 一、Dubbo简介与应用场景 **1.1 Dubbo概述** Dubbo是一款高性能、轻量级的开源Java RPC框架,它提供了三个核心功能:Service治理、配置中心和服务注册与发现。...
针对这个问题,陈晓栋设计了基于Dubbo分布式框架的信用卡无卡大额分期系统。这一系统旨在简化操作流程,提高业务效率。下面详细解析该系统设计涉及的关键知识点。 首先,了解信用卡无卡大额分期系统的含义。无卡...
Java基于Dubbo构建的分布式简易支付系统是一种常见的技术实践,旨在提高支付服务的可扩展性和容错性。Dubbo是阿里巴巴开源的一款高性能、轻量级的服务治理框架,它主要用于实现微服务架构中的服务间通信。在这个系统...
《Dubbo分布式项目详解——基于Zookeeper、Dubbo、Maven、SpringMVC与MyBatis的集成实践》 在当今互联网技术飞速发展的时代,分布式系统已经成为大型应用的基石,而Dubbo作为阿里巴巴开源的一款高性能、轻量级的...
### Dubbo分布式系统架构视频知识点概述 #### 一、Dubbo简介与基本概念 - **Dubbo**是一款高性能、轻量级的开源Java RPC框架,它提供了三大核心能力:**面向接口的远程方法调用**、智能容错和负载均衡以及服务自动...
根据提供的文档信息,我们可以归纳出以下几个关键的知识点: ### 一、使用Dubbo对传统工程进行服务化改造 #### 1.1 改造思路 ...这对于学习和实践基于Dubbo的分布式系统架构具有重要的指导意义。
【Dubbo分布式监控中心】 Dubbo是一个高性能、轻量级的开源Java RPC框架,由阿里巴巴开发并维护。它提供了一套完整的服务...通过深入理解和熟练使用Dubbo Admin,可以更好地管理和优化基于Dubbo构建的大型分布式应用。
通过下载并解压此文件,开发者可以了解到如何将TCC事务模式集成到基于Dubbo的项目中,以及如何处理各种可能的事务状态和异常情况。 【标签】"java"表明这个项目是使用Java编程语言编写的,Java是企业级应用开发的...
在公司级项目中,分布式Dubbo框架常用于构建微服务架构,将大型的单一应用程序拆分为一组小的、独立的服务,这些服务可以运行在不同的进程中,通过网络进行通信。 在了解分布式Dubbo框架的实际项目使用之前,需要先...
总结来说,Dubbo分布式服务管理是构建大规模分布式系统的基石,通过Maven项目管理和Dubbo的组件机制,可以有效地实现服务的发布、消费、监控,提升系统的可扩展性和稳定性。对于开发者而言,理解和掌握Dubbo的使用,...
【JAVA分布式系列】dubbo 在Java开发领域,分布式服务框架是实现大型系统高可用、可扩展的关键技术。阿里巴巴的Dubbo是一个卓越的开源框架,它致力于提供高性能、透明化的RPC(远程过程调用)服务,使开发者能够...
通过深入学习这个" Dubbo分布式服务框架入门2 ",你将能够掌握如何在实际项目中使用Dubbo来构建可扩展、高可用的分布式服务系统,为企业的微服务架构打下坚实的基础。记得在实践中不断探索和优化,充分利用Dubbo提供...
【基于Dubbo的分布式系统架构】是现代互联网应用中常用的一种设计模式,它旨在通过服务化的方式提升系统的可扩展性和可维护性。本项目是一个【简易版支付系统】的源码实现,它利用了Dubbo作为核心的服务治理框架,为...