-
Notifications
You must be signed in to change notification settings - Fork 1.4k
如何对接Foundation基础平台实施收敛集成
Nepxion Discovery组件集成和配置开关的提供方式是开放的
- 插件集成提供组合式的用法,用户可以选择不同的注册中心和配置中心组合,可以选择不同的监控中心,限流熔断等中间件
- 配置开关需要用户根据不同的企业现状或者根据不同的使用场景,予以定制化打开或者关闭
Nepxion Discovery组件集成和配置开关的使用方式需要收敛
上述工作如果直接丢给业务部门,势必会加重他们的负担,企业的基础架构平台需要承担起这个最佳收敛集成的责任
如下文章,通过举例方式阐述如何进行最佳收敛集成
假定企业的基础架构平台名字叫polaris
基础架构平台封装polaris-parent
暴露给业务部门。polaris-parent
维护自身的版本并跟随Nepxion Discovery的版本进行迭代
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<groupId>com.nepxion.polaris</groupId>
<artifactId>polaris-parent</artifactId>
<name>Nepxion Polaris Parent</name>
<packaging>pom</packaging>
<modelVersion>4.0.0</modelVersion>
<version>1.0.0</version>
<description>Nepxion Polaris is an enterprise-level SDK</description>
<url>http://www.nepxion.com</url>
<properties>
<discovery.version>6.17.0</discovery.version>
<!-- Spring Cloud Hoxton compatible versions -->
<spring.cloud.version>Hoxton.SR12</spring.cloud.version>
<spring.cloud.alibaba.version>2.2.9.RELEASE</spring.cloud.alibaba.version>
<spring.boot.version>2.3.12.RELEASE</spring.boot.version>
<java.version>1.8</java.version>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-dependencies</artifactId>
<version>${spring.cloud.version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-alibaba-dependencies</artifactId>
<version>${spring.cloud.alibaba.version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-dependencies</artifactId>
<version>${spring.boot.version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
<dependency>
<groupId>com.nepxion</groupId>
<artifactId>discovery</artifactId>
<version>${discovery.version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
</project>
基础架构平台封装polaris-service
暴露给业务部门。polaris-service
继承引入polaris-parent
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<artifactId>polaris-service</artifactId>
<name>Nepxion Polaris Service</name>
<packaging>jar</packaging>
<modelVersion>4.0.0</modelVersion>
<description>Nepxion Polaris is an enterprise-level SDK</description>
<url>http://www.nepxion.com</url>
<parent>
<groupId>com.nepxion.polaris</groupId>
<artifactId>polaris-parent</artifactId>
<version>1.0.0</version>
</parent>
<dependencies>
<!-- 1.注册中心插件 -->
<dependency>
<groupId>com.nepxion</groupId>
<artifactId>discovery-plugin-register-center-starter-nacos</artifactId>
</dependency>
<!-- 2.配置中心插件 -->
<dependency>
<groupId>com.nepxion</groupId>
<artifactId>discovery-plugin-config-center-starter-nacos</artifactId>
</dependency>
<!-- 3.管理中心插件 -->
<dependency>
<groupId>com.nepxion</groupId>
<artifactId>discovery-plugin-admin-center-starter</artifactId>
</dependency>
<!-- 4.服务策略编排插件 -->
<dependency>
<groupId>com.nepxion</groupId>
<artifactId>discovery-plugin-strategy-starter-service</artifactId>
</dependency>
</dependencies>
</project>
基础架构平台封装polaris-gateway
暴露给业务部门。polaris-gateway
继承引入polaris-parent
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<artifactId>polaris-gateway</artifactId>
<name>Nepxion Polaris Gateway</name>
<packaging>jar</packaging>
<modelVersion>4.0.0</modelVersion>
<description>Nepxion Polaris is an enterprise-level SDK</description>
<url>http://www.nepxion.com</url>
<parent>
<groupId>com.nepxion.polaris</groupId>
<artifactId>polaris-parent</artifactId>
<version>1.0.0</version>
</parent>
<dependencies>
<!-- 1.注册中心插件 -->
<dependency>
<groupId>com.nepxion</groupId>
<artifactId>discovery-plugin-register-center-starter-nacos</artifactId>
</dependency>
<!-- 2.配置中心插件 -->
<dependency>
<groupId>com.nepxion</groupId>
<artifactId>discovery-plugin-config-center-starter-nacos</artifactId>
</dependency>
<!-- 3.管理中心插件 -->
<dependency>
<groupId>com.nepxion</groupId>
<artifactId>discovery-plugin-admin-center-starter</artifactId>
</dependency>
<!-- 4.网关策略编排插件 -->
<dependency>
<groupId>com.nepxion</groupId>
<artifactId>discovery-plugin-strategy-starter-gateway</artifactId>
</dependency>
</dependencies>
</project>
业务部门引入可以选择如下两种方式之一
- 业务部门
parent
pom先继承引入polaris-parent
pom并指定它的版本,再引入polaris-service
和parent-gateway
两个pom,不需要指定它们的版本 - 业务部门直接引入
polaris-service
和parent-gateway
两个pom,需要分别指定它们的版本
<dependency>
<groupId>com.nepxion.polaris</groupId>
<artifactId>polaris-service</artifactId>
<version>1.0.0</version>
</dependency>
<dependency>
<groupId>com.nepxion.polaris</groupId>
<artifactId>polaris-gateway</artifactId>
<version>1.0.0</version>
</dependency>
假定基础架构平台需要对版本故障转移的功能进行封装处理
对于版本故障转移的功能,默认是关闭的,但有些企业希望能开启,有些企业可能不希望。基础架构平台需要结合企业现状,决策这个方案,把开关封装内置进去,形成一种默认行为,不需要业务部门再自行决策和配置
收敛集成有两种方式,基础架构平台可以根据实际情况,使用如下之一
在src/main/resources/目录下创建spring-application-default.properties,填入
spring.application.strategy.version.failover.enabled=true
比ApplicationContextInitializer收敛集成更灵活,比如,可以灵活控制哪些配置必须以基础架构平台设置为准,业务部门再配置也不会生效;哪些可以被业务部门自行配置覆盖
在工程的src/main/resources/META-INF/目录下创建spring.factories
org.springframework.boot.env.EnvironmentPostProcessor=\
com.nepxion.polaris.service.context.PolarisServiceEnvironmentPostProcessor
PolarisServiceEnvironmentPostProcessor继承EnvironmentPostProcessor
,它在不同的Spring Cloud版本下,技术实现细节稍微有所区别,如下
① Spring Cloud 2020版(含)以下
package com.nepxion.polaris.service.context;
import org.apache.commons.lang3.StringUtils;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.env.EnvironmentPostProcessor;
import org.springframework.core.Ordered;
import org.springframework.core.env.ConfigurableEnvironment;
import org.springframework.core.env.StandardEnvironment;
public class PolarisServiceEnvironmentPostProcessor implements EnvironmentPostProcessor, Ordered {
@Override
public void postProcessEnvironment(ConfigurableEnvironment environment, SpringApplication application) {
if (StringUtils.equals(environment.getClass().getName(), StandardEnvironment.class.getName())) {
String versionFailoverEnabled = "spring.application.strategy.version.failover.enabled";
if (!environment.containsProperty(versionFailoverEnabled)) {
System.setProperty(versionFailoverEnabled , "true");
}
}
}
@Override
public int getOrder() {
return Ordered.HIGHEST_PRECEDENCE;
}
}
② Spring Cloud 2021版(含)以上
package com.nepxion.polaris.service.context;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.env.EnvironmentPostProcessor;
import org.springframework.core.Ordered;
import org.springframework.core.env.ConfigurableEnvironment;
public class PolarisServiceEnvironmentPostProcessor implements EnvironmentPostProcessor, Ordered {
@Override
public void postProcessEnvironment(ConfigurableEnvironment environment, SpringApplication application) {
if (environment.getClass().getName().contains("BootstrapApplicationListener")) {
String versionFailoverEnabled = "spring.application.strategy.version.failover.enabled";
if (!environment.containsProperty(versionFailoverEnabled)) {
System.setProperty(versionFailoverEnabled , "true");
}
}
}
@Override
public int getOrder() {
return Ordered.HIGHEST_PRECEDENCE;
}
}
企业内可能出现99%的业务部门都希望开启这个开关,就直接会启用基础架构平台内置的默认行为,但极少数业务部门希望关闭这个开关。在这样情况下,决策权交给这极少数业务部门,由他们自行配置
启动和关闭版本故障转移。缺失则默认为false
spring.application.strategy.version.failover.enabled=false
上述阐述的方式,商业版Nepxion Polaris悲剧更完整更具特色的企业级解决方案,功能也更加强大,稍微举两个小例子
- 支持在不同的环境下,开关的开启和关闭。例如,在生产环境打开版本故障转移功能,在测试环境关闭版本故障转移功能,由Nepxion Polaris内置,不需要业务部门去额外配置
- 支持在不同的环境下,连接不同的中间件服务器。例如,在生产环境连接10.10.10.1的Nacos地址,在测试环境连接11.11.11.1的Nacos地址,由Nepxion Polaris内置,不需要业务部门去额外配置
最终呈现在业务部门开发人员面前的几乎是零配置(当然不包括业务部门服务本身的业务配置)
参考如下链接
① 解决方案
② 框架源码
③ 指南示例源码
2017-2050 ©Nepxion Studio Apache License
- 如何对接Foundation基础平台实施收敛集成
- 如何对接DevOps运维平台实施流量管控
- 如何部署对接DevOps运维平台的控制台
- 如何对接DevOps运维平台执行半自动化蓝绿灰度发布
- 如何使用DevOps运维平台对接的公共接口
- 如何设计全链路智能编排高级蓝绿灰度发布界面
- 如何实现Windows10下GraalVM本地镜像化
- 蓝绿灰度发布
- 流量染色
- 隔离路由
- 故障转移
- 多活单元化
- 限流熔断降级权限
- 网关动态路由
- 可观测监控
- 如何操作配置中心
- 如何理解框架开关配置
- 如何理解规则策略里内容格式配置
- 如何操作网关和服务的蓝绿灰度发布规则策略配置
- 如何操作网关动态路由规则策略配置
- 如何操作Sentinel规则策略配置
- 如何实施规则策略配置和业务配置在配置中心的合并和分离
- 如何理解自动扫描目录
- 如何自定义流量管控
- 如何自定义实现组合式的防护
- 如何自定义高级配置订阅功能
- 如何自定义订阅框架事件
- 如何自定义解决业务自身跨线程上下文切换的问题
- 如何自定义重用框架内置的Swagger模块
- 如何自定义Header全链路传递
- 如何遵循Nepxion Discovery网关标准实现对其它网关全链路流量管控的二次开发
- 如何遵循Nepxion Discovery服务标准实现对消息队列等其它中间件全链路流量管控的二次开发