美年旅游项目自记录Day01

一、技术栈Dubbo学习

 

1.架构演变

  • 软件架构演变,单体架构——>垂直架构——>SOA架构——>微服务架构
  • 单体架构(all in one):一个归档包(war, jar)包含了应用所有功能的应用程序,我们通常称之为单体应用,架构单体应用的方法论,为单体应用架构。 开发成本低,周期短,适合小型项目,但代码耦合度高,代码量逐渐增多(外包屎山警告),扩展难,不易维护。
  • 垂直架构:按照业务的维度进行功能的划分,形成小的单体项目,即单体与单体之间垂直划分, 而单体内又可进行水平划分(表现层,业务逻辑层,持久层),适合于访问量小,用户数不多的业务。但依然是耦合高,功能与数据冗余。
  • SOA架构(面向服务的架构):抽象出服务,使之通用而实现业务的快速复用,ESB(企业服务总线)负责连接各个服务节点,进行不同服务间的消息转化解释和路由工作。服务影响系统,且服务共性的确定及抽取的难度较大
  • 微服务:基于SOA的基础,将服务进行细分,通过服务网关(拦截器)对服务组件进行选择。服务组件越多,维护的成本越大,不同的服务所需的技术不同(成为大牛),挑战难度高。

2.Dubbo初识

socket网络编程

RPC:远程调用

在spring的xml配置文件中,配置zookeeper的服务注册和订阅信息

服务注册代码:



    
    
    
    
    
    
    
    

服务订阅代码:




    
    
    
    
    
    
    
    

服务注册与订阅需要借助zookeeper注册服务器间接交互,也可以二者直接进行交互,zookeeper注册服务器进行集群可解决单机宕机问题。

此过程需要将服务提供模块的服务接口复制一份给服务消费模块,有没有更好的方法?

进行代码重构,将接口单独抽出为一个模块

 通过pom.xml添加此接口模块的dependence即可

可通过Dubbo_Admin控制台可视化提供者与消费者的相关信息

美年旅游项目自记录Day01_第1张图片

 相当于在Tomcat中部署一个管理中心的 war应用

3.Dubbo相关配置说明

  • 包扫描,扫描Dubbo包的@Service注解以及@Reference引用注解
  • 协议

Dubbo支持的协议有:dubbo、rmi、hessian、http、webservice、rest、redis等

dubbo协议采用单一长连接和NIO异步通讯,适用于小数据量高并发的服务调用

可在同一个工程配置多个协议

  • 启动时检查

4.负载均衡

将请求分摊到多个操作单元上进行执行,从而共同完成工作任务,相关算法(随机、轮询、最少活跃调用数、一致性Hash),Dubbo默认随机调用。力求手撕

5.集成事务问题

注解扫描的时候没有扫描到事务切面的代理类(代理类没有加注解),导致服务没有发布成功

解决方法:

在spring配置文件中的事务控制的注解支持标签中,对proxy-target-class属性赋true,采用Cglib代理增加事务切面操作。Cglib代理是基于继承的,翻译成人话为创建的代理类是目标类的子类,并对Service注解的interface属性赋值接口的反射——@Service(接口名.class)

这可理解为一种多态,代理类——>实现的接口

更多详情,请通过官方文档的快速开始,进行教程上手

Dubbo官方中文文档

二、项目环境搭建

所需技术Dubbo(分布式远程调用)、zookeeper、Vue(页面开发)、ElementUI(页面开发)、SpringSecurity(权限框架)、Echart(百度框架-图表)、Redis(缓存)、SSM

1.项目结构

  • 父工程
  • 子工程 工具类
  • 子工程 实体类
  • 子工程 Dao类
  • 子工程 接口方法
  • 子工程 Service类
  • 子工程 表现层
  • 测试

然后可以开始愉快痛苦地进行配置文件的配置

你可能感兴趣的:(微服务,java,架构)