服务标识规范

  • 介绍
  • GAV
    • 说明
    • 模板
    • 例子
    • 注意
  • Spring
    • 说明
    • 模板
    • 例子
    • 注意
  • Metadata
    • 说明
    • 使用条件
    • 模板
    • 例子
  • 问题
    • 之后可行的改进
    • 如何快速使用规范
    • 如何保障规范

 

介绍

服务标识,既每个服务全局可辨识的唯一标识,统一和规范的目的是:

  1. 便于所有人员定位服务
  2. 便于服务在各环节自动化


我们将从3个角度去规范'服务标识',分别是 GAV、Spring、Metadata

以下所有[例子]中,假设:

[应用] commonservice
[服务] sms
[模块] server
[版本] 1.0.0

 

注意:

[应用]、[服务]、[模块] 支持的字符为:半角小写英文、半角数字、半角中杠

 

GAV

说明

maven的GAV,细到每个模块,pom.xml中使用:https://maven.apache.org/guides/mini/guide-naming-conventions.html

模板

GAV
groupId=[应用].[服务]
artifactId=[应用]-[服务]-[模块]
version=[版本]

root package = groupId.[模块]

 

例子

groupId=commonservice.sms 
artifactId=commonservice-sms-server 
version=1.0.0

此模块中的代码 root package = commonservice.sms.server

 

注意

  1. groupId 需要将 [应用] 和 [服务] 中的 -(半角中杠)替换为 .(半角句号)
  2. root package 需要将 [模块] 中的 -(半角中杠)替换为 .(半角句号)

 

 

Spring

说明

spring boot 原生配置 application.properties / application-${env}.properties

 

模板

Spring
spring.application.name=[应用]-[服务]
spring.application.version=[版本]

 

例子

spring.application.name=commonservice-sms
spring.application.version=1.0.0

 

注意

  1. 默认情况下,一个服务应该只有一个'可启动服务'模块 - 既 server 模块。当特殊情况有一个以上时,Spring 的 spring.application.name 可以分别是 commonservice-sms-server 和 commonservice-sms-server2
  2. spring.application.name 改造时必须保持之前系统的兼容

 

Metadata

说明

元数据,这里使用 eureka 的 metadata:http://cloud.spring.io/spring-cloud-netflix/spring-cloud-netflix.html

 

使用条件

使用了eureka的项目就能加metadata

但还是推荐使用微服务框架,并且版本 >= 1.5.2 的使用

这样 统一控制中心(uniconsole) 才能收集和使用这些信息

 

模板

说明:红色是必须手动填写,蓝色是有条件性手动填写,黑色是可选填写,绿色是框架自动填写可被覆盖,

eureka.instance.metadataMap.layerId=[层]

eureka.instance.metadataMap.groupId=[应用]

eureka.instance.metadataMap.groupName=[所在应用 api gateway 的 ${spring.application.name},使用 api gateway 的必须加上。容器必填,非容器必不填]

eureka.instance.metadataMap.applicationId=[服务]

eureka.instance.metadataMap.isApiGateway=[当前服务是否 api gateway:true/false],默认false

eureka.instance.metadataMap.owner=[owner域账号]

eureka.instance.metadataMap.owner.fullname=[owner姓名全拼]

eureka.instance.metadataMap.version=[灰度版本,默认填写1.0]

eureka.instance.metadataMap.version.application=[服务版本 ${spring.application.version}]

eureka.instance.metadataMap.version.framework=[框架版本 pom中引入的微服务框架版本]

eureka.instance.metadataMap.type.deploy=[部署方式: docker/ecs,由业务线填写,如果没写则1.5.6及以上版本框架会自动填写,值为 : new File("/.dockerenv").exists() ? "docker" : "ecs"  ,但1.5.6以下的版本还需要手动填写]

eureka.instance.metadataMap.git.url=[git地址]

eureka.instance.metadataMap.git.commitId=[git commit id,不用填写]

eureka.instance.metadataMap.admin.enabled=[是否启动admin:true/false],默认true

eureka.instance.metadataMap.admin.notify.dingding=[通知发送-钉钉url]

eureka.instance.metadataMap.startuptime=[启动时间,不用填写,通过 bootstrap 阶段获取]

eureka.instance.metadataMap.compatible.disconf.app=[兼容: 优先选择这个配置作为本服务在 disconf 里的APP名称]

eureka.instance.metadataMap.compatible.disconf.version=[兼容: 优先选择这个配置作为本服务在 disconf 里的version]

eureka.instance.metadataMap.compatible.restart.app=[兼容: 优先选择这个配置作为本服务在 冷重启里的APP名称]

eureka.instance.metadataMap.compatible.oms.app=[兼容: 优先选择这个配置作为本服务在 oms 里的APP名称]

eureka.instance.metadataMap.static.dependencies=[启动时由server-core自动插入,显示当前服务引入了多少框架api的包](逗号分隔)

eureka.instance.metadataMap.control.port=[1.5.6框架添加,低于1.5.6的框架忽略,默认为64444,用来设置管理端口号](逗号分隔)

eureka.instance.metadataMap.dependencies=[运行时由server-core自动同步,显示当前服务在运行时依赖哪些服务](逗号分隔)

eureka.instance.metadataMap.dependencied=[运行时由server-core自动同步,显示当前服务在运行时被哪些服务依赖](逗号分隔)

 

例子

Metadata 例子
eureka.instance.metadataMap.layerId=common
eureka.instance.metadataMap.groupId=commonservice
eureka.instance.metadataMap.applicationId=sms
eureka.instance.metadataMap.isApiGateway= false
eureka.instance.metadataMap.owner=xxx
eureka.instance.metadataMap.owner.fullname=xxx
eureka.instance.metadataMap.version= 1.0
eureka.instance.metadataMap.version.application= 1.0 . 0
eureka.instance.metadataMap.version.framework= 1.5 . 2
eureka.instance.metadataMap.type.deploy=docker
eureka.instance.metadataMap.git.url=https: //xxx
eureka.instance.metadataMap.git.commitId=[git commit id]
eureka.instance.metadataMap.admin.enabled= true
eureka.instance.metadataMap.admin.notify.dingding=[钉钉机器人url]
eureka.instance.metadataMap.bootstrap.startuptime=[启动时间]
eureka.instance.metadataMap.compatible.disconf.app=[sms]
eureka.instance.metadataMap.compatible.disconf.version=[ 1.0 . 0 ]
eureka.instance.metadataMap.compatible.restart.app=[sms]
eureka.instance.metadataMap. static .dependencies=[启动时由server-core自动插入,显示当前服务引入了多少框架api的包](逗号分隔)
eureka.instance.metadataMap.control.port=[ 1.5 . 6 框架添加,低于 1.5 . 6 的框架忽略,默认为 64444 ,用来设置管理端口号](逗号分隔)
eureka.instance.metadataMap.dependencies=[运行时由server-core自动同步,显示当前服务在运行时依赖哪些服务](逗号分隔)
eureka.instance.metadataMap.dependencied=[运行时由server-core自动同步,显示当前服务在运行时被哪些服务依赖](逗号分隔)

 

 

问题

之后可行的改进

  1. 重复冗余属性框架自动填写并注册到 eureka.instance.metadataMap.*
  2. metadata 采用更纯粹的 META-INF

 

如何快速使用规范

标识规范将由 脚手架服务(Framework Archetype)在创建项目时自动生成

 

如何保障规范

配置检查工具,将在 pipeline 时进行检测,发现不符合规范视情况决定 邮件通知 和/或 build失败



你可能感兴趣的:(微服务实践之路)