什么是SOA架构
soa是分布式架构,主要用于大型项目,它将传统项目的一个个模块变为一个个项目,这样的好处是降低模块间的耦合度,利于项目的扩展和维护。
SOA架构的作用
传统行业项目: 并发低, 数据量小, 不需要高可用, 例如: oa, erp, crm项目, 或者政府项目, 银行项目等(针对特定人群,则同一时间请求少).
互联网项目: 高并发, 大数据量, 高可用 例如: 京东, 百度, 淘宝, 天猫, 饿了么, 美团, 滴滴, ofo, 钉钉(针对所有人,同一时间请求并发高,高可用不可断线)
单台Tomcat极限基本是可以同时抗住500个并发,所以互联网项目不是一两个tomcat就可以解决的;但是如果将互联网大型项目做成一个项目,再每个tomcat都部署同样的内容也不够灵活。所以就需要专门做大型项目的架构。
SOA中将模块项目化,例如将controller和service拆成两个项目,但是spring中并不支持跨项目(跨tomcat)注入,所以需要dubbo和zookeeper
dubbo框架
rpc远程过程调用协议:
是JDK底层提出的协议, dubbo只是对这个协议的实现的一个框架技术.
rpc协议就是跨服务器, 跨tomcat, 从一个项目, 调用另一个项目中的方法.
什么是dubbo:
dubbo是阿里巴巴公司生产的一个rpc实现框架
dubbox是当当网维护的dubbo代码的版本.
dubbo作用:
跨项目调用方法, 例如从A项目中的controller调用B项目中的service方法
dubbo同类型的技术都有哪些:
rpc协议实现框架: dubbo, dubbox, springCloud
优点: 传输效率快, 缺点: controller和service两个项目必须都是Java语言实现
webService技术: 代表框架有cxf
底层使用的协议叫做soap协议, 其实传输的就是xml数据
优点: 可以跨语言跨平台, controller可以是Java语言实现, service可以是.net或者C语言等语言实现
缺点: 传输效率低
dubbo怎么用:
- service实现类上写@Service注解, 注意这个@service注解不是spring包的是阿里的dubbo包下的
- controller注入的时候使用@Refrence注解来进行注入, 也是阿里dubbo包下面的.
- 如果controller和service之间传输pojo实体类, 那么实体类必须实现Java的序列化接口.
Controller项目
/**
* @RestController注解作用: 相当于在类上加上@controller注解, 并且在这个类的所有方法上都加上@ResponseBody注解
*/
@RestController
@RequestMapping("/test")
public class TestController {
//Controller项目也需要放一份Service的接口jar包,不然无法调用
@Reference
private TestService testService;
@RequestMapping("/getName")
public String getName() {
String name = testService.getName();
return name;
}
}
Service项目
@Service
public class TestServiceImpl implements TestService {
@Override
public String getName() {
return "zhangsan";
}
}
Zookeeper 注册中心
注册中心负责服务地址的注册与查找,相当于目录服务,服务提供者和消费者只在启动时与注册中心交互,注册中心不转发请求,压力较小。