您的位置:首页 > 运维架构 > 网站架构

基于Dubbo的分布式系统架构-使用Dubbo进行规模服务化前的工程结构优化

2016-07-03 08:20 866 查看
本笔记学习于:龙果学院(吴水成老师的基于Dubbo的分布式系统架构)。

一、介绍传统的基于MVC模式下的单项目应用架构:

我们刚接触的基于java的web系统开发,都是基于MVC设计模式进行开发。一个应用系统只对应一个工程,我们来看下单工程的目录结构列表。



相信大家对整个工程的目录并不陌生,该工程基于spring+Struts2+mybatis+maven+mysql构建的。

工程列表介绍:

common:一些公用的类包,比如说我们的pageBean,用于分页。

action:控制层,用于接收页面请求,相应输出数据+渲染页面。

base:数据访问dao层的核心,存放baseDao,baseDaoImpl。

biz:业务逻辑层。

dao:数据持久层。

entity:封装实体数据层。

enum:枚举类型

mybatis:mybatis的配置文件,以及mapper配置文件

spring:spring的配置文件,包括spring-mybatis的整合

struts:struts的配置文件

webapp:前端页面jsp,js,css等文件

二、将我们传统的单工程基于MVC设计的思想,进行分层,即分割成多个工程独立部署。就是将我们的业务逻辑层,控制层分离,将业务逻辑层+数据访问层封装为远程服务,供控制层远程访问调用(也就是RPC)。接下来让我们我们一步步来抽取,设计。

1、抽取公共配置(包含4类公共工程结构):

a)、抽取我们的公共配置文件:比如jdbc.properties。

解释:随着服务的增多,我们会将不同模块的服务提取到不同的工程中(每个工程称为服务提供者),而每个服务提供者都需要连接到我们的数据库,为了集中管理数据库配置,我们先抽取公共配置。service.properties中是服务注册中心的地址。服务注册中心我们使用的是Zookeeper,后面会介绍。



b)、抽取核心文件:如下图所示,我们抽取的是BaseDao,BaseDaompl。

解释:因为我们每个工程中的每个数据访问层都需要继承和实现这两个java文件,是数据层的核心文件。



c)、抽取控制层(web端)的公共文件:比如调用ajax后一些状态码配置,session常量类等



d)、所有工程的公共配置:公用的entity实体类,工具类,异常处理类,枚举,pageBean等等都是要应用于所有的工程中。



2、抽取服务实现层,也就是我们常说的业务逻辑层+数据访问层:dao+dao.impl+service.imp+facadeimpl(服务接口层的实现,下面第四点提到)



3、抽取web控制层:action+webapp:



4、抽取服务接口层:该服务下的entity+enmus+定义的服务接口。因为控制层与服务实现层已经不在一个工程中,所以他们之间的依赖调用需要引入一个中间接口层连接两个工程。控制层中需要service提供服务,就会调用服务接口层。拿到接层的某个服务的全限命名后,通过服务的注册中心zookeeper去查找服务,然后再调用该服务层的实现。



除了以上讲解的三大模块中,还有一个公共的maven配置工程。我们所有的工程都是maven构建的,那么为了方面管理,会在一个父maven配置文件管理所有的工程的版本号和其他信息。



至此,我们的工程拆分,使用Dubbo进行规模服务化前的工程结构已经完成了。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: