dubbo服务化实施整理

标签: dubbo 服务 | 发表时间:2014-07-25 15:49 | 作者:jameswxx
出处:http://www.iteye.com

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

一 服务化目标

  • 基础业务的服务为上游业务的灵活发展提供支持
  • 服务应用本身无状态化,可以随着系统的负荷灵活伸缩来提供服务能
  • 服务的稳定性,可用性达到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);
  }
}


已有 0 人发表留言,猛击->> 这里<<-参与讨论


ITeye推荐



相关 [dubbo 服务] 推荐:

dubbo服务降级实现dubbo-plus/circuitbreaker at master · dubboclub/dubbo-plus · GitHub

- -
向注册中心写入动态配置覆盖规则:(通过由监控中心或治理中心的页面完成). 表示消费方对该服务的方法调用都直接返回null值,不发起远程调用. 屏蔽不重要服务不可用时对调用方的影响. 表示消费方对该服务的方法调用在失败后,再返回null值,不抛异常. 容忍不重要服务不稳定时对调用方的影响. Dubbo支持服务降级,并且支持当服务出现异常的时候进行服务降级处理,但是存在一下几个缺陷.

谈Dubbo服务框架

- - 人月神话的BLOG
Dubbo 是阿里巴巴公司开源的一个高性能优秀的服务框架,使得应用可通过高性能的 RPC 实现服务的输出和输入功能,可以和 Spring框架无缝集成. 它最大的特点是按照分层的方式来架构,使用这种方式可以使各个层之间解耦合(或者最大限度地松耦合). 从服务模型的角度来看,Dubbo采用的是一种非常简单的模型,要么是提供方提供服务,要么是消费方消费服务,所以基于这一点可以抽象出服务提供方(Provider)和服务消费方(Consumer)两个角色.

dubbo服务化实施整理

- - 企业架构 - ITeye博客
随着快的业务的快速发展,我们逐步按照业务垂直划分,抽象出基础服务层. 基础业务的服务为上游业务的灵活发展提供支持. 服务应用本身无状态化,可以随着系统的负荷灵活伸缩来提供服务能. 服务的稳定性,可用性达到99%. dubbo来作为服务化中间件,dubbo作为一个RPC框架,大致的原理如下图. Registry: 注册中心;和服务的消费者,和服务提供者都建立长连接.

dubbo服务telnet命令 - 秦鹏飞

- - 博客园_首页
dubbo服务发布之后,我们可以利用telnet命令进行调试、管理. Dubbo2.0.5以上版本服务提供端口支持telnet命令,下面我以 Windows为例抛砖引玉一下:.     测试对应IP和端口下的dubbo服务是否连通,cmd命令如下.     正常情况下,进入telnet窗口,键入回车进入dubbo命令模式.

dubbo服务治理(一)降级

- - 企业架构 - ITeye博客
在线网站一般都会有服务器压力剧增的时候,比如说网上商城的促销,这个时候常用的手段就是服务降级,根据当前业务情况及流量对一些服务和页面有策略的降级,以此缓解了服务器资源压力,以保证核心任务的正常运行,同时也保证了部分甚至大部分客户得到正确响应. 页面拒绝服务:页面提示由于服务繁忙此服务暂停. 跳转到varnish或nginx的一个静态页面.

阿里巴巴Dubbo分布式服务框架已开源

- tangfl - ITeye论坛最新精华讨论帖
Serving services with invocations everyday, Dubbo becomes the key part of Alibaba's SOA solution and has been deployed to the whole alibaba.com family:.

Dubbo:来自于阿里巴巴的分布式服务框架

- - 标点符
Dubbo是阿里巴巴SOA服务化治理方案的核心框架,每天为2,000+个服务提供3,000,000,000+次访问量支持,并被广泛应用于阿里巴巴集团的各成员站点. Dubbo是一个阿里巴巴开源出来的一个分布式服务框架,致力于提供高性能和透明化的RPC远程服务调用方案,以及SOA服务治理方案. 远程通讯: 提供对多种基于长连接的NIO框架抽象封装,包括多种线程模型,序列化,以及“请求-响应”模式的信息交换方式.

浅谈SOA面向服务化编程架构(dubbo)

- - ITeye博客
并非淘宝系的技术啦,淘宝系的分布式服务治理框架式HSF啦 ,只闻其声,不能见其物. 而dubbo是阿里开源的一个SOA服务治理解决方案,dubbo本身 集成了监控中心,注册中心,负载集群...等等. 代码和整体的框架还是很优雅滴呀. github地址 https://github.com/alibaba/dubbo.

阿里巴巴分布式服务框架-Dubbo问与答

- - Arccode's blog
Dubbo是阿里巴巴内部的SOA服务化治理方案的核心框架,每天为2000+ 个服务提供3,000,000,000+ 次访问量支持,并被广泛应用于阿里巴巴集团的各成员站点. Dubbo自2011年开源后,已被许多非阿里系公司使用. 项目主页: http://dubbo.io/Home-zh.htm.

基于Dubbo框架构建分布式服务

- - 简单之美
有关Dubbo服务框架的简单使用,可以参考我的其他两篇文章(《基于Dubbo的Hessian协议实现远程调用》,《基于Dubbo的Hessian协议实现远程调用》,后面参考链接中已给出链接),这里主要围绕Dubbo分布式服务相关配置的使用来说明与实践. 首先,根据Dubbo文档,我们引用文档提供的一个架构图以及各组件关系说明,如下所示:.