`
jameswxx
  • 浏览: 778729 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

dubbo服务化实施整理

 
阅读更多

原创文章,转载请注明出处:http://jameswxx.iteye.com/blog/2096425

 

随着快的业务的快速发展,我们逐步按照业务垂直划分,抽象出基础服务层。

一 服务化目标

  • 基础业务的服务为上游业务的灵活发展提供支持
  • 服务应用本身无状态化,可以随着系统的负荷灵活伸缩来提供服务能
  • 服务的稳定性,可用性达到99%

 

二 dubbo架构

dubbo来作为服务化中间件,dubbo作为一个RPC框架,大致的原理如下图

         

 

  • Registry: 注册中心;和服务的消费者,和服务提供者都建立长连接。服务提供者注册服务到注册中心;服务消费者从注册中心获取服务提供者列表;
  • Consumer: 服务消费端;服务消费者从注册中心获取到服务提供者列表后,根据负载均衡算法,选择一个服务提供者,和服务提供者直接建立连接,开始调用服务;
  • Provider:服务提供者;服务提供者提供RPC服务;
  • Monitor: 监控服务的调用情况统计;
  • 注册中心为N+1对等集群,一台挂掉后,会自动切换到另外一台注册中心
  • 注册中心全部挂掉后,消息消费者本地会缓存服务提供者列表,所以不影响当时的服务调用。
  • 服务提供者为集群,一台挂掉后,通过心跳过程,注册中心会立即刷到服务消费者告知;

 

三 工程分类

总体来说,服务化工程类型分为两种
standalong工程
以独立的应用形式提供远程服务,不依赖web容器,这是比较标准的服务提供形式,有3个子工程:
api
描述:业务域对外提供的服务接口,参数类型
输出:独立jar,例如user-api.jar
core
描述:业务域的模型,包括数据和行为,只关心领域内的数据和模型,不关心外部服务
输出:独立jar,例如user-core.jar,外部业务不能依赖该jar
impl
描述:业务域的远程服务实现,负责服务启动停止,内部业务组装,参数转换
输出:***-assembly.tar.gz,输出是一个压缩包
web工程
已有的web应用暴露服务,最好对原有的工程结构无侵入,只是再增加2个子工程:
api
描述:业务域对外提供的服务接口,参数类型
输出:独立jar,例如user-api.jar
impl
描述:业务域的远程服务实现,负责服务启动停止,内部业务组装,参数转换
无论是否服务化,某个业务域内部的数据和行为是不变的,服务化只是将业务域内的逻辑做一些裁剪或聚合,然后供外部调用。业务域的内部模型和提供的外部服务要划分一个边界,各自专注于自己的职责。以下是服务角色和子工程的对应关系:

  

 

 

四 standalong工程 

依赖关系
服务内部工程间的依赖都通过本地jar依赖,impl依赖api和core,没有其他依赖关系,严禁core依赖api。关系如下

 

工程结构

浅蓝色是目录,浅绿色是文件。assembly.xml不能修改,dubbo.properties和dubbo-provider.xml都可以修改,dubbo.properties描述服务公共配置,如注册中心,超时等;dubbo-provider.xml通过spring描述具体服务信息

 

 

 

部署结构

standalong型的应用启动停止都必须有对应的脚本,这些脚本文件不需要每个standalong型应用自己写,只需要工程结构遵循规范,执行mvn package/install后,会在target自动输出最后的部署包,部署包结构如下图:

浅蓝色是目录,浅绿色是文件。

lib目录:存放依赖的jar包,工程里java代码都会输出为jar包到lib里

start.sh:启动服务

restart.sh:重启服务

stop.sh:停止服务

server.sh:命令入口,如server.sh start

dump.sh:dump应用的线程栈,内存,GC;供排查问题用

 

 

 

 

 

五 web工程

依赖关系

web应用大致分为两层:biz和web,实际上biz可能由内部多个工程组成,这里biz只是一个抽象概念。impl依赖api和biz,web依赖impl和biz,没有其他依赖关系,严禁biz依赖api。关系如下

 

 

 

工程结构和部署结构

web应用的服务只需要配置在spring配置文件里,服务的启动停止依赖web容器的启动停止。所以web工程的服务化不需要调整原有工程结构,只是要增加两个子工程:api和impl。 这样做是希望某个已存在的web应用要做服务化,不会对原有工程发生改动。

 
 

六 svn目录结构

对应工程结构,svn目录也做相应的划分,每个业务域是个大目录,然后该目录内部又分为3个目录:api,core,impl。以会员为例,svn目录结构为,以会员为例:
user
trunk
api
core
impl
branch

 

 

七 一些注意事项

  • 所有服务接口都以"RemoteService"结尾
  • 不要传输超大对象
  • 服务化接口涉及的入参类型和返回类型都必须实现序列化接口,并且必须放到api包
  • 子类和父类不允许有同名同类型的属性,序列化容易出问题
  • 所有类型都应该有序列化id
  • 外部参数和内部参数必须做隔离,简单来说就是core里面的东西不能被透传到外部
以会员为例,假设core里存在UserService;有方法addUser(UserDO user);现在要将addUser(UserDO user)作为服务开放出去,则在api里加入UserRemoteService,UserRemoteService有对应的方法:
addUser(UserDTO user),该方法内部操作数据通过UserService.addUser实现。大概代码如下:
UserRemoteService{
  private UserService userService;
  public void addUser(UserDTO userDTO){
        UserDO userDO=***Converter.convert(userDTO);
        userService.addUser(userDO);
  }
}
  • 大小: 24.9 KB
  • 大小: 11.2 KB
  • 大小: 44.3 KB
  • 大小: 38.3 KB
  • 大小: 22.3 KB
  • 大小: 18.8 KB
分享到:
评论
4 楼 vae_in_zdsoft 2016-04-01  
能问下最后一点 是处于什么考虑么,不能透传
3 楼 spike88 2015-10-30  
请问 standalong工程结构图, 是core的结构图,还是impl的结构图
2 楼 kucoll 2015-02-12  
楼主,能给出示例代码的下载吗,我们最近你也在实践dubbo,但不知道怎么整合比较灵活。
1 楼 xian_hf 2015-01-12  
楼主,你好!
请问一下我现在想通过assembly的插件打成tar包,其中想有bin目录包含如您所说的start.sh之类的启动文件,还需要有logs来记录日志,lib用来存放jar包,我想通过standalong的方式打包,启动是通过一个main方法的,我现在不知道pom和assembly.xml怎么写,请楼主指导下,好吗?

相关推荐

    dubbo admin dubbo可视化工具

    dubbo可视化工具

    dubbo自动化测试

    在IT行业中,Dubbo是一款非常知名的高性能、轻量级的Java RPC框架,它极大地促进了服务化时代的进程。本文将深入探讨“dubbo自动化测试”的主题,帮助开发者理解如何有效地进行Dubbo服务的自动化测试,提高代码质量...

    基于zookeeper 监控dubbo provider 下线,提供dubbo 服务下线 邮箱预警

    `Dubbo` 是一款高性能、轻量级的Java服务框架,而`Zookeeper` 则是Apache的一个分布式协调服务,常用于服务治理、配置管理等领域。本项目结合两者,实现了一个针对`Dubbo`服务提供者(`Provider`)下线的监控系统,并...

    dubbo服务可视化war包

    《Dubbo服务可视化:Web端监控与管理》 在现代微服务架构中,服务治理扮演着至关重要的角色,而Dubbo作为阿里巴巴开源的一款高性能、轻量级的服务框架,深受开发者们的喜爱。它提供了丰富的服务治理功能,其中包括...

    使用Dubbo对传统工程进行服务化改造后的服务调用测试--源码.zip

    本篇文章将深入探讨如何使用Dubbo对传统非服务化工程进行改造重构,以及服务化改造后的服务调用测试。 首先,让我们了解Dubbo的核心功能。Dubbo提供了服务注册与发现、远程调用、负载均衡、容错、监控等关键特性,...

    dubbo-admin:dubbo服务监控

    它提供了一整套服务治理方案,而dubbo-admin就是这套方案中的重要部分,用于可视化地展示和管理服务的运行状态。 【dubbo-admin】是Dubbo的服务治理平台,它允许开发者监控服务的调用情况、查看服务接口的元数据、...

    dubbo 服务提供方 服务消费方

    - **协议与序列化**:Dubbo支持多种通信协议(如RPC、HTTP等)和序列化方式(如Hessian、Java原生序列化、protobuf等),这些都会影响服务的性能和兼容性。 - **服务治理**:Dubbo提供了诸如熔断、降级、限流、...

    Dubbo和微店的服务化历程分享.pdf

    2018-05-12,dubbo meetup北京在车库咖啡举行,我作为企业用户在大会进行了演讲:《Dubbo和微店的服务化实践历程》 主要讲了公司用dubbo实施服务化过程中,遇到的一些问题和自研的相关组件

    dubbo服务注册到eureka.zip

    Dubbo 和 Eureka 分别是阿里巴巴与 Netflix 公司推出的两款著名的服务治理框架。本教程将详细阐述如何将 Dubbo 服务注册到 Eureka 平台上,以实现服务的发现与治理。 Dubbo 是一个高性能、轻量级的开源 Java RPC ...

    自定实现dubbo服务导出

    在我们的场景下,我们可以利用`@PostConstruct`和`@PreDestroy`注解,或者自定义初始化和销毁方法,来实现Dubbo服务的注册和注销。当Spring容器启动时,服务提供者的Bean会被初始化,此时执行服务注册;当容器关闭时...

    Dubbo服务注册与发现.doc

    本文档旨在讲解 Dubbo 服务注册与发现的相关知识点,涵盖了分布式系统的基本理论、Dubbo 理论简介、Dubbo 环境搭建等方面。 一、分布式基本理论 分布式系统是由若干独立计算机的集合,这些计算机对于用户来说就像...

    dubbo服务提供demo

    Dubbo服务提供方示例详解 在分布式系统中,Dubbo作为一个高性能、轻量级的服务治理框架,被广泛应用于服务的发布与消费。本篇将深入解析如何创建一个基于Dubbo的服务提供方(Provider)的Demo,以帮助理解其核心...

    dubbo 服务提供者

    【标题】:“Dubbo服务提供者” Dubbo是一款高性能、轻量级的开源Java RPC框架,它提供了丰富的服务治理功能,使得服务调用变得简单且可靠。在标题中提到的“dubbo服务提供者”,指的是将一个应用暴露为Dubbo服务,...

    使用Dubbo进行规模服务化前的工程结构优化--源码.rar

    【标签】:“Dubbo”、“Dubbo服务化”、“Dubbo重构”、“Dubbo服务化改造”、“Dubbo工程代码”这些标签明确了主题,涵盖了使用Dubbo进行服务化改造的各个方面,包括Dubbo框架本身,以及基于Dubbo进行的代码重构和...

    Dubbo视频教程--基础篇--第02节--使用Dubbo对传统工程进行服务化改造.rar

    在本节"Dubbo视频教程--基础篇--第02节--使用Dubbo对传统工程进行服务化改造"中,我们将深入探讨如何利用Dubbo这一强大的Java开源框架来重构和优化传统的软件工程项目,使其具备微服务架构的优势。Dubbo是阿里巴巴...

    Dubbo面试题答案整理1

    【Dubbo面试题答案整理1】 1. 为什么使用Dubbo? 在现代软件开发中,随着业务的复杂性增加,服务化成为一种常见的架构模式,SOA(面向服务架构)应运而生。Dubbo作为一款高性能、轻量级的Java服务治理框架,能够...

    maven打包dubbo服务接口(maven-assembly-plugin)

    在Java开发领域,Dubbo是一个广泛使用的高性能RPC框架,它使得服务间的调用变得简单而高效。Maven作为项目管理和构建工具,可以帮助我们自动化构建、打包和依赖管理。本篇文章将详细探讨如何使用Maven的`maven-...

    dubbo-admin可视化管理平台工具包.rar

    【标题】"dubbo-admin可视化管理平台工具包.rar" 提供的是Dubbo管理工具的可视化版本,这使得Dubbo服务的监控与管理变得更加直观和便捷。Dubbo是阿里巴巴开源的一款高性能、轻量级的Java服务治理框架,它专注于服务...

    服务治理工具dubbo

    2. **微服务改造**:在进行微服务化改造时,Dubbo作为服务治理工具,能够有效管理和协调各个独立服务。 3. **跨语言通信**:通过与其他语言的RPC框架集成,如gRPC,Dubbo可以支持多语言环境下的服务交互。 **四、...

    dubbo拆分服务实例.rar

    本实例将深入探讨如何利用Dubbo进行服务的拆分,通过"用户服务"(dubbo-user)和"订单服务"(dubbo-order)两个具体的示例,揭示服务拆分的实施步骤和关键点。 1. 服务拆分原则 服务拆分的目标是提高系统的可扩展性...

Global site tag (gtag.js) - Google Analytics