系统架构
垂直项目架构
缺点
耦合度太高:所有的功能的模板代码都放在一起。
不利于拓展:某个模块出错会导致项目直接崩溃,所有的功能都需要重新打包编译,部署效率极低,上线时需要停项目。
不利于团队协作维护
优点
结构简单。
SOA架构
面向服务的架构(分布式架构)
特点
它是一种支持面向服务的架构。(分布式架构)
将传统项目中的一个模块,拆分成一个一个项目。
模块的拆分
如果某个系统访问量比较大时,可以多部署几台tomcat。
当出现高并发的时候,通过nginx负载均衡,进行分配访问。
如果需要添加模块,可以直接在写一个项目,弄台新机器,直接上线。
业务功能的拆分
除了把对应模块拆分成一个系统外,还可以把我们的三层架构拆成对应的服务,把Controller作为一个系统,Dao和Service做为一个系统。
如果调用多了,一台不够,可以多部署几台。
存在的问题
在以前Controller调用Service是通过注入进行调用,注入是属于Spring的。
当Controller在一个服务器中,Service在另一台服务器,是没有办法注入的。
此时,可以采用一个技术叫Dubbox,可以实现跨tomcat注入,远程调用
Dubbo是跨服务器,注入的技术,这么多服务,到底是认证调用谁,怎么知道的呢?
通过zookeeper注册中心,所有的服务都到zookeeper当中注册一下,注册后。
今后服务之间的调用,就可以通过zookeeper找到对应的服务,通过Dubbo进入注入。
优点
降低模块之间的耦合度
利于拓展
利于维护
缺点
结构复杂
对于小型项目,成本比较高
Dubbo
实现tomcat(服务)与tomcat(服务)之间的远程调用。
基于rpc远程调用协议。
是JDK底层提出的协议,Dubbo只是对这个协议的实现的一个框架技术。
rpc协议技术跨服务器,跨tomcat。
可以从一个项目调用另一个项目中的方法。
作用
跨项目调用方法。
从一个项目中的Contoller可以调用另一个项目中的service方法。
同类型的技术有哪些
Dubbo
DubboX
优点:传输效率快。
缺点:Controller和Service两个项目必须都是Java实现。
springCloud
webService技术
cfx
使用的soap协议,传输的是xml数据
如何使用
服务层注解
service实现类上写@service注解
写此注解的时候,注意选包,选的是阿里的dubbo下的包
Contoller注入
使用@refrence注解来进行注入
选择也是dubbo下的
pojo传输
如果 Controller和 service之间传输poo实体类
那么实体类必须实现Java的序列化接口
网络传输是通过插在电脑上的网线(双绞线)进行
网线当中传输入的是模拟信号波浪形式的信号有高电位和底电位可以使用高底电位代表0或1
序列化
网线是插在电脑网卡上网卡我们又称数模转换器数字信号和模拟信息进行转换
转换成数字信号后进入操作系统再根据相应的端口号找到对应的服务处理
在Java中只要告诉它实现序列化接口JM就会自动的把实现类转换成对应的信号进行传输
Dubbo调用流程
所有的服务都要在Zookeeper注册中心当中注册
Zookeeper注册中心,管理服务提供方服务器的ip和端口号,并知道哪台机器启动了,哪台机器关闭了。
服务调用方Contoller项目询问Zokkeeper可以提供服务的IP和端口
Zookeeper返回可以使用的ip+端口号给Controller
Contoller使用IP+端口号+方法调用,到指定的服务钟调用对应的方法。
服务返回对应的结果。