分布式架构


目录
  • 分布式架构
    • 系统架构
      • 垂直项目架构
        • 结构图
      • SOA架构(分布式架构)
    • Dubbo
      • 什么是Dubbo
      • 作用
      • 同类型的技术有哪些
      • 如何使用
    • Dubbo调用流程
      • 示例图
    • Zookeeper
      • 安装
    • Dubbo实例
      • dubbo_service
      • dubbo_consumer
    • 分别配置tomcat

分布式架构

系统架构

垂直项目架构

特点
	不管项目多复杂,有多少个模块,全在一个项目中编写
	项目部署在一个web容器上,适合于 访问量小,用户数不多的业务

缺点
	耦合度比较高
		所有功能模板代码都放到了一起,
	不利于扩展
		写好了, 测试完了,想要加一个模块非常的困难
		如果果某个功能出错有问题,所有的功能都需要再重新打包编译,部署效率极低。
		上线时, 把项目停掉
	不利于团队协作维护
		团队协作难度高,如多人使用SVN/git很可能在同一个功能上,多人同时进行了修改,作为一个大而全的项目,可能个人只是需要开发其中一个小的模块的需求,却需要导入整个项目全量的代码。
优点
	结构简单

结构图

SOA架构(分布式架构)

?

SOA(Service-Oriented Architecture)它是一种支持面向服务的架构。

特点
	将传统项目中的一个模块,拆分成一个一个项目

优点
	降低模块之间的耦合度
	利于扩展
	利于维护
缺点
	结构复杂
	对于小型项目 ,成本比较高
特点
	模块的拆分
		如果某一个系统访问量比较大时, 可以多部署几台tomcat,
		当出现高并发的时候 , 通过nigix负载均衡,进行分配访问
		如果今后, 想要再添加 一个模块, 可以直接在写一个项目,弄台新机器,直接上线
	业务功能的拆分
		除了把对应模块拆成一个系统外, 还可以把我们的三层架构拆成对应的服务,把Controller做为一个系统,Dao和Service做为一个系统
		如果调用多了,一台不够用户了, 可以多部署几台
	存在的问题
		在以前Controller调用Service,通过注入进行调用,注入属于是Spring的
		当Controller在一个服务器中, Service在另一台服务器,是没有办法注入的
		此时, 可以采用一个技术叫Dubbox,可以实现跨tomcat注入 远程调用
		Dubbo是的跨服务器,注入的技术,这么多服务,到底是认认证调用谁,怎么知道的呢
		通过zookeeper注册中心,所有的服务都到zookeeper当中注册一下, 注册后, 
		今后服务之间的调用,就可以通过zookeeper找到对应的服务,通过Dubbo进入注入

Dubbo

什么是Dubbo

概述
	Dubbo是阿里巴巴内部使用的分布式业务框架,2012年由阿里巴巴开源。
	由于Dubbo在阿里内部经过广泛的业务验证,在很短时间内,Dubbo就被许多互联网公司所采用,并产生了许多衍生版本,如网易,京东,新浪,当当等等。
	由于阿里策略变化,2014年10月Dubbo停止维护。随后部分互联网公司公开了自行维护的Dubbo版本,比较著名的如当当DubboX,新浪Motan等。
	经过三年的沉寂,在2017年9月,阿里宣布重启Dubbo项目,并决策在未来对开源进行长期持续的投入。随后Dubbo开始了密集的更新,并将停摆三年以来大量分支上的特性及缺陷修正快速整合。
	2018.2月,阿里将Dubbo捐献给Apache基金会,Dubbo成为Apache孵化器项目。

基于rpc
	rpc远程过程调用协议
	是JDK底层提出的协议,Dubbo只是对这个协议的实现的一个框架技术
	rpc协议就是跨服务器,跨tomcat
	可以从一个项目调用另一个项目中的方法

作用

  • 跨项目调用方法
  • 从一个项目中的Controller可以调用另一个项目中的service方法

同类型的技术有哪些

Dubbo

DubboX
	优点
		传输效率快
	缺点
		Controller和Service两个项目必须都是Java语言实现
		
springCloud

webService技术
	cfx
	使用的soap协议,传输的是xml数据

如何使用

1.服务层注解
	service实现类上写@service注解
	写此注解的时候,注意选包,选的是阿里dubbo下的包
2.Controlle注入
	使用@refrence注解来进行注入
	选择也是dubbo下的
3.pojo传输
	如果Controller和service之间传输pojo实体类,
	那么实体类必须实现Java的序列化接口
	序列化
		网络传输,是通过插在电脑上的网线(双绞线)进行
		网线当中传输入的是模拟信号,波浪形式的信号,有高电位和底电位  可以使用高底电位 代表 0 或 1
		网线是插在电脑网卡上,网卡我们又称数模转换器   数字信号和模拟信息进行转换
			网络传输是模拟信息
			计算机处理时, 数字信号
		转换成数字信号后, 进入操作系统, 再根据相应的端口号找到对应的服务处理
		在Java中只要告诉它,实现序列化接口, JVM就会自动的把实现类转换成对应的信号进行传输

Dubbo调用流程

1.所有的服务都要在Zookeeper注册中心当中进入注册
    每一个服务都有自己的配置文件, 
    在配置文件当中配置好自己端口号和地址
    然后把端口号和地址注册在zookeeper注册中心统一管理
2.Zookeeper注册中心 ,管理服务提供方服务器的ip和端口,并知道哪台机器启动了,哪台机器关闭了
3.服务调用方Controller项目询问ZooKeeper可以提供服务的IP和端口
4.Zookeeper返回可以使用的IP和端口号给Controller
5.Controller使用IP+端口+接口+方法调用,到指定的服务中调用对应的方法
6.服务返回对应的结果

示例图

Zookeeper

概述
	Zookeeper 是 Apacahe Hadoop 的子项目
	是一个树型的目录服务,支持变更推送
	最早是用在大数据当中
	适合作为Dubbox 服务的注册中心
作用
	zookeeper 注册中心
	注册中心负责服务地址的注册与查找,相当于目录服务
	服务提供者和消费者只在启动时与注册中心交互,注册中心不转发请求,压力较小。

安装

?

在Linux环境下安装
1.安装JDK
	rm -f /var/run/yum.pid
	yum -y install java-1.8.0-openjdk.x86_64
	java -version
2.把 zookeeper 的压缩包,上传到Linux系统/usr/local目录下
	cd /usr/local

3.解压缩压缩包
	tar -zxvf zookeeper-3.4.6.tar.gz
	rm -rf zookeeper-3.4.6.tar.gz
4.进入conf目录 ,把 zoo_sample.cfg 改名为 zoo.cfg
	cd conf
	mv zoo_sample.cfg zoo.cfg
5.进入bin目录,启动服务输入命令
	./zkServer.sh start
6.查看状态
	./zkServer.sh status
7.关闭服务
	./zkServer.sh stop
8.关闭防火墙
	systemctl stop firewalld.service

Dubbo实例

dubbo_service

  • 引入pom依赖

	UTF-8
	1.7
	1.7
	5.1.7.RELEASE



	
		junit
		junit
		4.11
		test
	

	
	
		org.springframework
		spring-context
		${spring.version}
	

	
		org.springframework
		spring-beans
		${spring.version}
	

	
		org.springframework
		spring-webmvc
		${spring.version}
	
	
		org.springframework
		spring-jdbc
		${spring.version}
	
	
		org.springframework
		spring-aspects
		${spring.version}
	
	
		org.springframework
		spring-jms
		${spring.version}
	
	
		org.springframework
		spring-context-support
		${spring.version}
	
	
	
		com.alibaba
		dubbo
		2.6.6
	
	
		org.apache.zookeeper
		zookeeper
		3.4.6
	
	
		com.github.sgroschupf
		zkclient
		0.1
	
	
		javassist
		javassist
		3.11.0.GA
	
	
		io.netty
		netty-all
		4.1.32.Final
	
	
		org.apache.curator
		curator-framework
		4.0.1
		bundle
	

	
		org.apache.curator
		curator-recipes
		4.0.1
		bundle
	

  • 添加web.xml配置文件

  Archetype Created Web Application
  
  
    contextConfigLocation
    classpath:applicationContext*.xml
  
  
    org.springframework.web.context.ContextLoaderListener
  

  • 在resouces中添加applicationContext-service.xml配置文件
<?xml version="1.0" encoding="UTF-8"?>


    
    
    
    
    
    

  • 在Java文件夹中, 创建service

dubbo_consumer

  • 引入pom依赖
  
        UTF-8
        1.7
        1.7
        5.1.7.RELEASE
    

    
        
            junit
            junit
            4.11
            test
        
        
        
            org.springframework
            spring-context
            ${spring.version}
        
        
            org.springframework
            spring-beans
            ${spring.version}
        
        
            org.springframework
            spring-webmvc
            ${spring.version}
        
        
            org.springframework
            spring-jdbc
            ${spring.version}
        
        
            org.springframework
            spring-aspects
            ${spring.version}
        
        
            org.springframework
            spring-jms
            ${spring.version}
        
        
            org.springframework
            spring-context-support
            ${spring.version}
        
        
        
            com.alibaba
            dubbo
            2.6.6
        
        
            org.apache.zookeeper
            zookeeper
            3.4.6
        
        
            com.github.sgroschupf
            zkclient
            0.1
        
        
            javassist
            javassist
            3.11.0.GA
        

        
            io.netty
            netty-all
            4.1.32.Final
        
        
            org.apache.curator
            curator-framework
            4.0.1
            bundle
        

        
            org.apache.curator
            curator-recipes
            4.0.1
            bundle
        
    
  • 添加web.xml配置文件



  Archetype Created Web Application
  
  
    CharacterEncodingFilter
    org.springframework.web.filter.CharacterEncodingFilter
    
      encoding
      utf-8
    
    
      forceEncoding
      true
    
  
  
    CharacterEncodingFilter
    /*
  

  
  
    springmvc
    org.springframework.web.servlet.DispatcherServlet
    
    
      contextConfigLocation
      classpath:applicationContext-web.xml
    
    1
  
  
    springmvc
    
    /
  


  • 在resouces中添加applicationContext-web.xml配置文件
<?xml version="1.0" encoding="UTF-8"?>


    
    

    
    
        
        
            
                
            
        
    

    
    
    
    
    
    

  • 在Java文件夹中, 创建Controller,调用Service

分别配置tomcat

  • dubbo_service
  • dubbo_consumer
  • 启动时, 先启动service