Skip to content

Commit ce6dff2

Browse files
committed
feat:support traffic mirroring. (#623)
1 parent e74f268 commit ce6dff2

File tree

24 files changed

+1055
-145
lines changed

24 files changed

+1055
-145
lines changed

polaris-common/polaris-config-default/src/main/resources/conf/default-config.yml

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -197,6 +197,8 @@ consumer:
197197
- laneRouter
198198
#描述: 服务路由链
199199
chain:
200+
# 流量镜像路由
201+
- trafficMirroringRouter
200202
# 命名空间就近路由
201203
- namespaceRouter
202204
# 元数据路由

polaris-common/polaris-config/src/main/java/com/tencent/polaris/api/config/consumer/ServiceRouterConfig.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -48,6 +48,7 @@ public interface ServiceRouterConfig extends PluginConfig, Verifier {
4848

4949
String DEFAULT_ROUTER_NAMESPACE = "namespaceRouter";
5050

51+
String DEFAULT_ROUTER_TRAFFIC_MIRRORING = "trafficMirroringRouter";
5152

5253
/**
5354
* services.consumer.serviceRouter.beforeChain

polaris-common/polaris-model/src/main/java/com/tencent/polaris/api/pojo/ServiceEventKey.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -52,6 +52,7 @@ public enum EventType {
5252
NEARBY_ROUTE_RULE,
5353
LOSSLESS,
5454
BLOCK_ALLOW_RULE,
55+
TRAFFIC_MIRRORING,
5556
}
5657

5758
private final ServiceKey serviceKey;

polaris-common/polaris-model/src/main/java/com/tencent/polaris/api/utils/StringUtils.java

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -564,4 +564,11 @@ static int indexOf(final CharSequence cs, final CharSequence searchChar, final i
564564
return cs.toString().indexOf(searchChar.toString(), start);
565565
}
566566

567+
568+
public static boolean contains(String str, String searchStr) {
569+
if (str == null || searchStr == null) {
570+
return false;
571+
}
572+
return str.indexOf(searchStr) >= 0;
573+
}
567574
}

polaris-dependencies/pom.xml

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -434,6 +434,11 @@
434434
<artifactId>router-canary</artifactId>
435435
<version>${project.version}</version>
436436
</dependency>
437+
<dependency>
438+
<groupId>com.tencent.polaris</groupId>
439+
<artifactId>router-mirroring</artifactId>
440+
<version>${project.version}</version>
441+
</dependency>
437442

438443
<!-- polaris-plugins-location-->
439444
<dependency>

polaris-discovery/polaris-discovery-client/src/main/java/com/tencent/polaris/discovery/client/stat/InstancesStatisticUpdater.java

Lines changed: 12 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -17,23 +17,20 @@
1717

1818
package com.tencent.polaris.discovery.client.stat;
1919

20-
import static com.tencent.polaris.api.pojo.RetStatus.RetSuccess;
21-
2220
import com.tencent.polaris.api.plugin.registry.LocalRegistry;
2321
import com.tencent.polaris.api.plugin.registry.ResourceFilter;
24-
import com.tencent.polaris.api.pojo.Instance;
25-
import com.tencent.polaris.api.pojo.InstanceGauge;
26-
import com.tencent.polaris.api.pojo.InstanceStatistic;
27-
import com.tencent.polaris.api.pojo.ServiceEventKey;
22+
import com.tencent.polaris.api.pojo.*;
2823
import com.tencent.polaris.api.pojo.ServiceEventKey.EventType;
29-
import com.tencent.polaris.api.pojo.ServiceInstances;
30-
import com.tencent.polaris.api.pojo.ServiceKey;
3124
import com.tencent.polaris.api.utils.CollectionUtils;
25+
import com.tencent.polaris.api.utils.StringUtils;
3226
import com.tencent.polaris.client.pojo.InstanceByProto;
3327
import com.tencent.polaris.logging.LoggerFactory;
34-
import java.util.List;
3528
import org.slf4j.Logger;
3629

30+
import java.util.List;
31+
32+
import static com.tencent.polaris.api.pojo.RetStatus.RetSuccess;
33+
3734
/**
3835
* InstancesStatisticUpdater
3936
*
@@ -53,12 +50,16 @@ public InstancesStatisticUpdater(LocalRegistry localRegistry) {
5350

5451
public void updateInstanceStatistic(InstanceGauge result) {
5552
ServiceKey serviceKey = new ServiceKey(result.getNamespace(), result.getService());
56-
ServiceEventKey serviceEventKey = new ServiceEventKey(serviceKey, EventType.INSTANCE);
57-
ServiceInstances serviceInstances = localRegistry.getInstances(new ResourceFilter(serviceEventKey, true, true));
53+
// 如果服务名或命名空间为空,则不统计
54+
if (StringUtils.isBlank(serviceKey.getNamespace()) || StringUtils.isBlank(serviceKey.getService())) {
55+
return;
56+
}
5857
// 如果调用的是北极星内部的服务,则不统计
5958
if (serviceKey.getNamespace().equals(POLARIS_NAMESPACE)) {
6059
return;
6160
}
61+
ServiceEventKey serviceEventKey = new ServiceEventKey(serviceKey, EventType.INSTANCE);
62+
ServiceInstances serviceInstances = localRegistry.getInstances(new ResourceFilter(serviceEventKey, true, true));
6263
if (serviceInstances == null) {
6364
LOG.warn("[InstanceStatisticUpdater]: " + "service: " + serviceKey.getService() + " in namespace: "
6465
+ serviceKey.getNamespace() + " not found");

polaris-plugins/polaris-plugin-api/src/main/java/com/tencent/polaris/api/plugin/route/RouterConstants.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -29,4 +29,6 @@ public interface RouterConstants {
2929

3030
// 服务路由容错
3131
String ROUTER_FAULT_TOLERANCE_ENABLE = "internal-enable-router-faulttolerance";
32+
33+
String TRAFFIC_MIRRORING_NODE_KEY = "internal-traffic-mirroring-node";
3234
}

polaris-plugins/polaris-plugins-connector/connector-composite/src/main/java/com/tencent/polaris/plugins/connector/composite/CompositeServiceUpdateTask.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -131,7 +131,8 @@ public void execute() {
131131
|| serviceEventKey.getEventType().equals(EventType.CIRCUIT_BREAKING)
132132
|| serviceEventKey.getEventType().equals(EventType.RATE_LIMITING)
133133
|| serviceEventKey.getEventType().equals(EventType.LANE_RULE)
134-
|| serviceEventKey.getEventType().equals(EventType.BLOCK_ALLOW_RULE)))) {
134+
|| serviceEventKey.getEventType().equals(EventType.BLOCK_ALLOW_RULE)
135+
|| serviceEventKey.getEventType().equals(EventType.TRAFFIC_MIRRORING)))) {
135136
return;
136137
}
137138

polaris-plugins/polaris-plugins-connector/connector-consul/src/main/java/com/tencent/polaris/plugins/connector/consul/ConsulAPIConnector.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -56,6 +56,7 @@
5656
import com.tencent.polaris.plugins.connector.consul.service.lane.LaneService;
5757
import com.tencent.polaris.plugins.connector.consul.service.lossless.LosslessService;
5858
import com.tencent.polaris.plugins.connector.consul.service.ratelimiting.RateLimitingService;
59+
import com.tencent.polaris.plugins.connector.consul.service.router.MirroringService;
5960
import com.tencent.polaris.plugins.connector.consul.service.router.NearByRouteRuleService;
6061
import com.tencent.polaris.plugins.connector.consul.service.router.RoutingService;
6162
import org.slf4j.Logger;
@@ -255,6 +256,7 @@ private void initActually(InitContext ctx, ServerConnectorConfig connectorConfig
255256
consulServiceMap.put(ServiceEventKey.EventType.RATE_LIMITING, new RateLimitingService(consulClient, consulRawClient, consulContext, "consul-rate-limiting", mapper));
256257
consulServiceMap.put(ServiceEventKey.EventType.LANE_RULE, new LaneService(consulClient, consulRawClient, consulContext, "consul-lane", mapper));
257258
consulServiceMap.put(ServiceEventKey.EventType.BLOCK_ALLOW_RULE, new AuthorityService(consulClient, consulRawClient, consulContext, "consul-auth", mapper));
259+
consulServiceMap.put(ServiceEventKey.EventType.TRAFFIC_MIRRORING, new MirroringService(consulClient, consulRawClient, consulContext, "consul-mirror", mapper));
258260
initialized = true;
259261
}
260262

0 commit comments

Comments
 (0)