论传统系统架构模式与Dubbo/Dubbox的区别

传统系统架构

  • 传统应用系统中,我们主要使用了三层架构:

即 表示层、业务层和数据访问层论传统系统架构模式与Dubbo/Dubbox的区别_第1张图片
1:数据访问层:主要是对非原始数据(数据库或者文本文件等存放数据的形式)的操作层,而不是指原始数据,也就是说,是对数据库的操作,而不是数据,具体为业务逻辑层或表示层提供数据服务。
2:业务逻辑层:主要是针对具体的问题的操作,也可以理解成对数据层的操作,对数据业务逻辑处理,如果说数据层是积木,那逻辑层就是对这些积木的搭建。
3:界面层:主要表示WEB方式,也可以表示成WINFORM方式,WEB方式也可以表现成:aspx,如果逻辑层相当强大和完善,无论表现层如何定义和更改,逻辑层都能完善地提供服务。

  • 传统系统架构的不足之处
    单系统的架构模式,在系统业务庞大的情况下,有很多的不足之处:
    1.所有项目都会使用相同的一个代码库,每一个团队成员(UI\前端\程序猿)都会提交维护代码库的内容,当内容逐渐增多,效率就变得低下。
    2.如果采取多模块开发模式,模块间相互依赖,极小的改动都会引起其它开发环境同步更新,如果有已上线运行的产品,那么发布也是个很大的工作量。
    3.单系统的架构模式,虽然采用了三层架构来区分不同层的责任与任务,但是从实际的操作中来看,难免存在责任交叉,因此某些地方的改动可能会带来其它层的同步变动,失去了分层的独立性。
    4.有很多团队分为开发团队和运营支持团队,开发团队只负责开发,在完成后交于运营团队管理,虽然运营团队能很好地处理一些日常问题,但遇到系统危机问题时,也不得不求助于开发团队。
    5.当业务逐渐增长,单系统可能被拆解为多个独立的子系统,但系统间是存在一定业务关联的,这时解决基础服务公用的问题就势在必行,需要开发者将通用服务独立发布以便于其它系统调用。
    基于上述问题 引出了新概念微服务
    微服务即为:
    将产品或项目分解为众多独立的服务,这些服务独立地部署,并且不依赖于其它服务。

  • 微服务的优势

① 单系统只用一种开发语言,但微服务每个服务独立,每个服务可以看成一个项目,因此每个服务可以选择最合适服务特色的技术开发。
② 开发集中在一个服务,业务和代码量都不大,开发人员能很好地把握代码。
③ 服务间进行调用时,可以通过API来进行通讯,如REST(HTTP),也可以使用分布式服务管理框架如Dubbo(rpc) 、SpringCloud(HTTP)等。
存在的问题:
因为每个功能都是独立的服务,因此在一个较大的项目中,监测管理这些服务变得复杂,如果某个服务出现故障,那么调试跟踪比单系统更复杂,因为日志分布在不同的系统中,所以调试起来需要花费更多精力
解决方案:
建立统一的日志管理系统可能是目前解决这一问题的最好方案。

Dubbo/Dubbox

DUBBO是一个分布式服务治理框架,致力于提供高性能和透明化的RPC远程服务调用方案,可以和 Spring框架无缝集成,是阿里巴巴SOA服务化治理方案的核心框架.
Dubbox
Dubbo开源过后,当当网根据自身的需求,为Dubbo实现了一些新的功能,并将其命名为Dubbox(即Dubbo eXtensions)。
dubbox和dubbo 2.x是兼容的,没有改变dubbo的任何已有的功能和配置方式(除了升级了Spring之类的版本)

  • Dubbo主要解决了以下问题:
  • 当服务越来越多时,服务URL配置管理变得非常困难,F5硬件负载均衡器的单点压力也越来越大接着,服务的调用量越来越大,服务的容量问题就暴露出来,这个服务需要多少机器支撑?什么时候该加机器
  • 当进一步发展,服务间依赖关系变得错踪复杂,甚至分不清哪个应用要在哪个应用之前启动,架构师都不能完整的描述应用的架构关系这时,这时,需要自动画出应用间的依赖关系图,以帮助架构师理清理关系。
  • 服务的调用量越来越大,服务的容量问题就暴露出来,这个服务需要多少机器支撑?什么时候该加机器为了解决这些问题,第一步,要将服务现在每天的调用量,响应时间,都统计出来,作为容量规划的参考指标。
    其次,要可以动态调整权重,在线上,将某台机器的权重一直加大,并在加大的过程中记录响应时间的变化,直到响应时间到达阀值,记录此时的访问量,再以此访问量乘以机器数反推总容量。
  • dubbo的核心要点:
    服务定义
    服务注册
    服务监控
    远程通信与信息交互
    服务调用
  • Dubbo的获取(官网hello world)
    阿里巴巴已将Dubbo已发布到Maven中央仓库中:
    http://central.maven.org/maven2/com/alibaba/dubbo。

    
        
            com.alibaba
            dubbo
            2.6.2
        
    

Dubbo管理控制台

控制台主要包含: 提供者、 路由 规则 、 动态配置、 访问控制、 权重调节、 负载均衡、 负责人等管理功能,dubbo admin默认使用消息注册中心类型为:zookeeper。

  • Dubbo-admin部署及配置
    ① 解压 dubbo-admin-2.8.4a.war 到任意的目录下。
    ② 复制一份tomcat作为dubbo管理控制台的服务器,并修改对应的端口和Context信息。
    ③ 配置WEB-INF下dubbo.properties
    注意:dubbo.registry.address的值后面有backup代表是集群模式,建议测试取消,保留单机模式。
    dubbo.registry.address=zookeeper://127.0.0.1:2181
    dubbo.admin.root.password=root
    dubbo.admin.guest.password=guest
    ④ 启动管理控制台
    bin/startup.bat
    ⑤ 浏览器访问管理控制台:http://127.0.0.1:端口
    默认用户名及密码: root/root guest/guest

  • dubbo-admin作用

    进行查看,禁用、加权等操作

dubbo的监控中心

监控中心负责为服务的监控运维采集各维度的数据,统计各服务的调用次数、时间等,统计先在服务端和消费端内存中汇总,每隔一分钟发送到监控中心服务器,并以报表的形式展现
特点:
监控中心是独立于服务和管理控制台的,在整个dubbo服务治理环节不是必须的,用户可根据实际情况选择性安装。
监控中心如果出现异常(宕机),并不会影响Provider和Consumer之间的服务调用,但会丢失故障期间的监控数据,再生产环境不会有任何风险。
监控中心可以自定义扩展开发,满足一下需求:
① 个性化运维:服务的健康情况、服务压力及性能分析、告警通知
② 扩展接口:com.alibaba.dubbo.monitor.MonitorFactory
com.alibaba.dubbo.monitor.Monitor
监控小结:
监控中心是监控整个dubbo服务运行的健康情况,同时可为dubbo的服务的调用负载提供数据支撑。

dubbo本地服务化实例

项目搭建(Maven项目管理方式):
① 创建公共项目工程:普通的Maven工程,提供utils、DO、接口的代码。
pom.xml 无任何依赖
② 创建服务提供者项目:普通的Maven工程(依赖Dubbo),提供服务实现、服务启动功能。
pom.xml


				
			com.alibaba
			dubbo
			2.6.2
		
		
			dubbo-api
			dubbo-api
			0.0.1-SNAPSHOT
		
         
    com.github.sgroschupf
    zkclient
    0.1


		
		
			junit
			junit
			4.12
			test
		

		
			org.springframework
			spring-test
			4.3.16.RELEASE
		

		
	

dubbo-provider.xml




	
	
	
	
	
	
	
	
	
	

	
	

启动服务监听器

String configLocation = "classpath*:/dubbo-provider.xml";
ApplicationContext context = new ClassPathXmlApplicationContext(configLocation);
System.out.println("dubbo-server服务正在监听,按任意键退出");
System.in.read();
  • 服务消费者实现
    创建服务消费者项目:普通的Maven工程(依赖Dubbo),完成服务调用功能。
    pom.xml

	
			com.alibaba
			dubbo
			2.6.2
		

			dubbo-api
			dubbo-api
			0.0.1-SNAPSHOT
		
   
    com.github.sgroschupf
    zkclient
    0.1

	

dubbo-consumer.xml




	
	
	
	
		
	
	
	
	
	
	

MAven编译打包:
Pom.xml

cn.itsource.service
	service-user
	${service-user.version}
	jar
		
	
		UTF-8
	

	
	
		
		provder
		
		
			
				${project.build.directory}/classes
				src/main/resources
				true
				
					**/*.xml
					**/*.properties
				
			
			
			
				${project.build.directory}/classes/META-INF/spring
				src/main/resources
				true
				
					applicationContext.xml
				
			
		
		
		
			
				
				
					org.eclipse.m2e
					lifecycle-mapping
					1.0.0
					
						
							
								
									
										org.apache.maven.plugins
										maven-dependency-plugin
										[2.0,)
										
											copy-dependencies
										
									
									
										
									
								
							
						
					
				
			
		
		
			
			
				org.apache.maven.plugins
				maven-jar-plugin
				
					target/classes/
					
						
							com.alibaba.dubbo.container.Main
							
							false
							true
							lib/
						
						
							.
						
					
				
			
			
				org.apache.maven.plugins
				maven-dependency-plugin
				
					
						copy-dependencies
						package
						
							copy-dependencies
						
						
							jar
							jar
							false
							
								${project.build.directory}/lib
							
						
					
				
			
		

	

	
	

dubbo服务jar包运行
Cmd窗口:
① 定位到jar包所在目录
② 输入命令并回车执行:java -jar xxxxx.jar

你可能感兴趣的:(业余一说)