You are viewing a plain text version of this content. The canonical link for it is here.
Posted to notifications@skywalking.apache.org by wu...@apache.org on 2020/03/25 04:07:21 UTC

[skywalking] 01/01: Finish step one, source and entity changed.

This is an automated email from the ASF dual-hosted git repository.

wusheng pushed a commit to branch remove-endpoint-register
in repository https://gitbox.apache.org/repos/asf/skywalking.git

commit 675c0b02a206be0965f173db6126a6b592bdff19
Author: Wu Sheng <wu...@foxmail.com>
AuthorDate: Wed Mar 25 12:06:44 2020 +0800

    Finish step one, source and entity changed.
---
 .../server/core/alarm/provider/NotifyHandler.java  |  24 ++---
 .../core/alarm/provider/NotifyHandlerTest.java     |   8 +-
 .../apache/skywalking/oap/server/core/Const.java   |   3 +-
 .../skywalking/oap/server/core/CoreModule.java     |   4 -
 .../oap/server/core/CoreModuleProvider.java        |  15 +--
 .../oap/server/core/analysis/Stream.java           |   5 +
 .../core/analysis/manual/RelationDefineUtil.java   |  53 +++++++++-
 .../manual/endpoint/EndpointTraffic.java}          |  96 ++++++++++++------
 .../endpoint/EndpointTrafficDispatcher.java}       |  24 +++--
 .../EndpointCallRelationDispatcher.java            |   6 +-
 .../EndpointRelationServerSideMetrics.java         |  68 ++++++-------
 .../analysis/manual/log/AbstractLogRecord.java     |  10 +-
 .../service/ServiceRelationClientSideMetrics.java  |   6 +-
 .../service/ServiceRelationServerSideMetrics.java  |   9 +-
 .../analysis/worker/MetricsStreamProcessor.java    |  37 +++----
 .../server/core/cache/EndpointInventoryCache.java  | 108 ---------------------
 .../server/core/query/AggregationQueryService.java |  77 ++++++++-------
 .../oap/server/core/query/LogQueryService.java     |  32 +++---
 .../server/core/query/MetadataQueryService.java    |  32 +++---
 .../server/core/query/ProfileTaskQueryService.java |  38 ++------
 .../server/core/query/TopologyQueryService.java    |  19 +---
 .../oap/server/core/query/TraceQueryService.java   |  55 +++++------
 .../oap/server/core/query/entity/Call.java         |  12 +--
 .../oap/server/core/query/entity/EndpointInfo.java |   2 +-
 .../oap/server/core/query/entity/Log.java          |   1 -
 .../oap/server/core/query/entity/Node.java         |   2 +-
 .../service/EndpointInventoryRegister.java         |  87 -----------------
 .../oap/server/core/source/DefaultScopeDefine.java |   2 +-
 .../oap/server/core/source/Endpoint.java           |  15 +--
 .../oap/server/core/source/EndpointRelation.java   |  19 ++--
 .../storage/cache/IEndpointInventoryCacheDAO.java  |   4 +-
 .../oap/query/graphql/resolver/MetadataQuery.java  |  10 +-
 .../src/main/resources/query-protocol              |   2 +-
 .../server/receiver/jaeger/JaegerGRPCHandler.java  |   2 +-
 .../mesh/ServiceMeshMetricDataDecorator.java       |  11 ---
 .../receiver/mesh/TelemetryDataDispatcher.java     |   1 -
 .../handler/v6/grpc/RegisterServiceHandler.java    |   8 +-
 .../sharing/server/CoreRegisterLinker.java         |   8 +-
 .../parser/decorator/ReferenceDecorator.java       |  44 ---------
 .../provider/parser/decorator/SpanDecorator.java   |  15 ---
 .../listener/endpoint/MultiScopesSpanListener.java |  34 ++-----
 .../parser/listener/endpoint/SourceBuilder.java    |   9 --
 .../standardization/ReferenceIdExchanger.java      |   8 +-
 .../parser/standardization/SpanExchanger.java      |   8 +-
 .../server/receiver/zipkin/trace/SpanForward.java  |   2 +-
 .../cache/EndpointInventoryCacheEsDAO.java         |  14 +--
 .../elasticsearch/query/AggregationQueryEsDAO.java |   4 +-
 .../plugin/elasticsearch/query/LogQueryEsDAO.java  |  18 ++--
 .../elasticsearch/query/MetadataQueryEsDAO.java    |  18 ++--
 .../elasticsearch/query/TopologyQueryEsDAO.java    |  11 ++-
 .../cache/EndpointInventoryCacheEs7DAO.java        |   8 +-
 .../elasticsearch7/query/LogQueryEs7DAO.java       |  23 +++--
 .../elasticsearch7/query/MetadataQueryEs7DAO.java  |   6 +-
 .../plugin/influxdb/query/AggregationQuery.java    |   4 +-
 .../storage/plugin/influxdb/query/LogQuery.java    |   8 +-
 .../plugin/influxdb/query/TopologyQuery.java       |  19 ++--
 .../plugin/jdbc/h2/dao/H2AggregationQueryDAO.java  |   4 +-
 .../jdbc/h2/dao/H2EndpointInventoryCacheDAO.java   |  10 +-
 .../storage/plugin/jdbc/h2/dao/H2LogQueryDAO.java  |   6 +-
 .../plugin/jdbc/h2/dao/H2MetadataQueryDAO.java     |  18 ++--
 .../plugin/jdbc/h2/dao/H2TopologyQueryDAO.java     |  11 ++-
 .../plugin/jdbc/mysql/MySQLTableInstaller.java     |   4 +-
 .../tool/profile/core/MockCoreModuleProvider.java  |   6 +-
 63 files changed, 497 insertions(+), 730 deletions(-)

diff --git a/oap-server/server-alarm-plugin/src/main/java/org/apache/skywalking/oap/server/core/alarm/provider/NotifyHandler.java b/oap-server/server-alarm-plugin/src/main/java/org/apache/skywalking/oap/server/core/alarm/provider/NotifyHandler.java
index 2b4b547..ba7a594 100644
--- a/oap-server/server-alarm-plugin/src/main/java/org/apache/skywalking/oap/server/core/alarm/provider/NotifyHandler.java
+++ b/oap-server/server-alarm-plugin/src/main/java/org/apache/skywalking/oap/server/core/alarm/provider/NotifyHandler.java
@@ -21,6 +21,8 @@ package org.apache.skywalking.oap.server.core.alarm.provider;
 import java.util.ArrayList;
 import java.util.Arrays;
 import java.util.List;
+import lombok.extern.slf4j.Slf4j;
+import org.apache.skywalking.oap.server.core.Const;
 import org.apache.skywalking.oap.server.core.CoreModule;
 import org.apache.skywalking.oap.server.core.alarm.AlarmCallback;
 import org.apache.skywalking.oap.server.core.alarm.EndpointMetaInAlarm;
@@ -32,19 +34,17 @@ import org.apache.skywalking.oap.server.core.alarm.provider.grpc.GRPCCallback;
 import org.apache.skywalking.oap.server.core.analysis.metrics.Metrics;
 import org.apache.skywalking.oap.server.core.analysis.metrics.MetricsMetaInfo;
 import org.apache.skywalking.oap.server.core.analysis.metrics.WithMetadata;
-import org.apache.skywalking.oap.server.core.cache.EndpointInventoryCache;
 import org.apache.skywalking.oap.server.core.cache.ServiceInstanceInventoryCache;
 import org.apache.skywalking.oap.server.core.cache.ServiceInventoryCache;
-import org.apache.skywalking.oap.server.core.register.EndpointInventory;
 import org.apache.skywalking.oap.server.core.register.ServiceInstanceInventory;
 import org.apache.skywalking.oap.server.core.register.ServiceInventory;
 import org.apache.skywalking.oap.server.core.source.DefaultScopeDefine;
 import org.apache.skywalking.oap.server.library.module.ModuleManager;
 
+@Slf4j
 public class NotifyHandler implements MetricsNotify {
     private ServiceInventoryCache serviceInventoryCache;
     private ServiceInstanceInventoryCache serviceInstanceInventoryCache;
-    private EndpointInventoryCache endpointInventoryCache;
 
     private final AlarmCore core;
     private final AlarmRulesWatcher alarmRulesWatcher;
@@ -60,7 +60,8 @@ public class NotifyHandler implements MetricsNotify {
         MetricsMetaInfo meta = withMetadata.getMeta();
         int scope = meta.getScope();
 
-        if (!DefaultScopeDefine.inServiceCatalog(scope) && !DefaultScopeDefine.inServiceInstanceCatalog(scope) && !DefaultScopeDefine
+        if (!DefaultScopeDefine.inServiceCatalog(scope) && !DefaultScopeDefine.inServiceInstanceCatalog(
+            scope) && !DefaultScopeDefine
             .inEndpointCatalog(scope)) {
             return;
         }
@@ -83,16 +84,18 @@ public class NotifyHandler implements MetricsNotify {
             instanceMetaInAlarm.setName(serviceInstanceInventory.getName());
             metaInAlarm = instanceMetaInAlarm;
         } else if (DefaultScopeDefine.inEndpointCatalog(scope)) {
-            int endpointId = Integer.parseInt(meta.getId());
-            EndpointInventory endpointInventory = endpointInventoryCache.get(endpointId);
             EndpointMetaInAlarm endpointMetaInAlarm = new EndpointMetaInAlarm();
             endpointMetaInAlarm.setMetricsName(meta.getMetricsName());
-            endpointMetaInAlarm.setId(endpointId);
 
-            int serviceId = endpointInventory.getServiceId();
+            final String[] serviceIdAndEndpointName = meta.getId().split(Const.ID_PARSER_SPLIT);
+            if (serviceIdAndEndpointName.length != 2) {
+                log.warn("Can't endpoint ID {} into two parts.", meta);
+            }
+
+            int serviceId = Integer.parseInt(serviceIdAndEndpointName[0]);
             ServiceInventory serviceInventory = serviceInventoryCache.get(serviceId);
 
-            String textName = endpointInventory.getName() + " in " + serviceInventory.getName();
+            String textName = serviceIdAndEndpointName[1] + " in " + serviceInventory.getName();
 
             endpointMetaInAlarm.setName(textName);
             metaInAlarm = endpointMetaInAlarm;
@@ -120,8 +123,5 @@ public class NotifyHandler implements MetricsNotify {
         serviceInstanceInventoryCache = moduleManager.find(CoreModule.NAME)
                                                      .provider()
                                                      .getService(ServiceInstanceInventoryCache.class);
-        endpointInventoryCache = moduleManager.find(CoreModule.NAME)
-                                              .provider()
-                                              .getService(EndpointInventoryCache.class);
     }
 }
diff --git a/oap-server/server-alarm-plugin/src/test/java/org/apache/skywalking/oap/server/core/alarm/provider/NotifyHandlerTest.java b/oap-server/server-alarm-plugin/src/test/java/org/apache/skywalking/oap/server/core/alarm/provider/NotifyHandlerTest.java
index cd211f4..0150e7a 100644
--- a/oap-server/server-alarm-plugin/src/test/java/org/apache/skywalking/oap/server/core/alarm/provider/NotifyHandlerTest.java
+++ b/oap-server/server-alarm-plugin/src/test/java/org/apache/skywalking/oap/server/core/alarm/provider/NotifyHandlerTest.java
@@ -31,7 +31,7 @@ import org.apache.skywalking.oap.server.core.analysis.metrics.WithMetadata;
 import org.apache.skywalking.oap.server.core.cache.EndpointInventoryCache;
 import org.apache.skywalking.oap.server.core.cache.ServiceInstanceInventoryCache;
 import org.apache.skywalking.oap.server.core.cache.ServiceInventoryCache;
-import org.apache.skywalking.oap.server.core.register.EndpointInventory;
+import org.apache.skywalking.oap.server.core.analysis.manual.endpoint.EndpointTraffic;
 import org.apache.skywalking.oap.server.core.register.ServiceInstanceInventory;
 import org.apache.skywalking.oap.server.core.register.ServiceInventory;
 import org.apache.skywalking.oap.server.core.source.DefaultScopeDefine;
@@ -96,8 +96,8 @@ public class NotifyHandlerTest {
         when(DefaultScopeDefine.inEndpointCatalog(0)).thenReturn(true);
 
         String endpointInventoryName = "endpoint-inventory-name";
-        EndpointInventory endpointInventory = mock(EndpointInventory.class);
-        when(endpointInventory.getName()).thenReturn(endpointInventoryName);
+        EndpointTraffic endpointTraffic = mock(EndpointTraffic.class);
+        when(endpointTraffic.getName()).thenReturn(endpointInventoryName);
 
         String serviceInventoryName = "service-inventory-name";
         ServiceInventory serviceInventory = mock(ServiceInventory.class);
@@ -105,7 +105,7 @@ public class NotifyHandlerTest {
 
         when(serviceInventoryCache.get(anyInt())).thenReturn(serviceInventory);
 
-        when(endpointInventoryCache.get(anyInt())).thenReturn(endpointInventory);
+        when(endpointInventoryCache.get(anyInt())).thenReturn(endpointTraffic);
 
         ArgumentCaptor<MetaInAlarm> metaCaptor = ArgumentCaptor.forClass(MetaInAlarm.class);
 
diff --git a/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/Const.java b/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/Const.java
index 213f482..cc1f2c8 100644
--- a/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/Const.java
+++ b/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/Const.java
@@ -21,6 +21,7 @@ package org.apache.skywalking.oap.server.core;
 public class Const {
     public static final int NONE = 0;
     public static final String ID_SPLIT = "_";
+    public static final String ID_PARSER_SPLIT = "\\_";
     public static final String LINE = "-";
     public static final String SPACE = " ";
     public static final String KEY_VALUE_SPLIT = ",";
@@ -28,7 +29,7 @@ public class Const {
     public static final String ARRAY_PARSER_SPLIT = "\\|";
     public static final int USER_SERVICE_ID = 1;
     public static final int USER_INSTANCE_ID = 1;
-    public static final int USER_ENDPOINT_ID = 1;
+    public static final String USER_ENDPOINT_NAME = "User";
     public static final int INEXISTENCE_ENDPOINT_ID = -1;
     public static final String USER_CODE = "User";
     public static final String SEGMENT_SPAN_SPLIT = "S";
diff --git a/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/CoreModule.java b/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/CoreModule.java
index e7fa4af..1260903 100755
--- a/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/CoreModule.java
+++ b/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/CoreModule.java
@@ -20,7 +20,6 @@ package org.apache.skywalking.oap.server.core;
 
 import java.util.ArrayList;
 import java.util.List;
-import org.apache.skywalking.oap.server.core.cache.EndpointInventoryCache;
 import org.apache.skywalking.oap.server.core.cache.NetworkAddressInventoryCache;
 import org.apache.skywalking.oap.server.core.cache.ProfileTaskCache;
 import org.apache.skywalking.oap.server.core.cache.ServiceInstanceInventoryCache;
@@ -39,7 +38,6 @@ import org.apache.skywalking.oap.server.core.query.ProfileTaskQueryService;
 import org.apache.skywalking.oap.server.core.query.TopNRecordsQueryService;
 import org.apache.skywalking.oap.server.core.query.TopologyQueryService;
 import org.apache.skywalking.oap.server.core.query.TraceQueryService;
-import org.apache.skywalking.oap.server.core.register.service.IEndpointInventoryRegister;
 import org.apache.skywalking.oap.server.core.register.service.INetworkAddressInventoryRegister;
 import org.apache.skywalking.oap.server.core.register.service.IServiceInstanceInventoryRegister;
 import org.apache.skywalking.oap.server.core.register.service.IServiceInventoryRegister;
@@ -122,14 +120,12 @@ public class CoreModule extends ModuleDefine {
     private void addRegisterService(List<Class> classes) {
         classes.add(IServiceInventoryRegister.class);
         classes.add(IServiceInstanceInventoryRegister.class);
-        classes.add(IEndpointInventoryRegister.class);
         classes.add(INetworkAddressInventoryRegister.class);
     }
 
     private void addCacheService(List<Class> classes) {
         classes.add(ServiceInventoryCache.class);
         classes.add(ServiceInstanceInventoryCache.class);
-        classes.add(EndpointInventoryCache.class);
         classes.add(NetworkAddressInventoryCache.class);
     }
 
diff --git a/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/CoreModuleProvider.java b/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/CoreModuleProvider.java
index cd4c639..b7d0fa5 100755
--- a/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/CoreModuleProvider.java
+++ b/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/CoreModuleProvider.java
@@ -30,7 +30,6 @@ import org.apache.skywalking.oap.server.core.analysis.worker.MetricsStreamProces
 import org.apache.skywalking.oap.server.core.analysis.worker.TopNStreamProcessor;
 import org.apache.skywalking.oap.server.core.annotation.AnnotationScan;
 import org.apache.skywalking.oap.server.core.cache.CacheUpdateTimer;
-import org.apache.skywalking.oap.server.core.cache.EndpointInventoryCache;
 import org.apache.skywalking.oap.server.core.cache.NetworkAddressInventoryCache;
 import org.apache.skywalking.oap.server.core.cache.ProfileTaskCache;
 import org.apache.skywalking.oap.server.core.cache.ServiceInstanceInventoryCache;
@@ -55,8 +54,6 @@ import org.apache.skywalking.oap.server.core.query.ProfileTaskQueryService;
 import org.apache.skywalking.oap.server.core.query.TopNRecordsQueryService;
 import org.apache.skywalking.oap.server.core.query.TopologyQueryService;
 import org.apache.skywalking.oap.server.core.query.TraceQueryService;
-import org.apache.skywalking.oap.server.core.register.service.EndpointInventoryRegister;
-import org.apache.skywalking.oap.server.core.register.service.IEndpointInventoryRegister;
 import org.apache.skywalking.oap.server.core.register.service.INetworkAddressInventoryRegister;
 import org.apache.skywalking.oap.server.core.register.service.IServiceInstanceInventoryRegister;
 import org.apache.skywalking.oap.server.core.register.service.IServiceInventoryRegister;
@@ -170,7 +167,8 @@ public class CoreModuleProvider extends ModuleProvider {
         if (moduleConfig.isGRPCSslEnabled()) {
             grpcServer = new GRPCServer(moduleConfig.getGRPCHost(), moduleConfig.getGRPCPort(),
                                         Paths.get(moduleConfig.getGRPCSslCertChainPath()).toFile(),
-                                        Paths.get(moduleConfig.getGRPCSslKeyPath()).toFile());
+                                        Paths.get(moduleConfig.getGRPCSslKeyPath()).toFile()
+            );
         } else {
             grpcServer = new GRPCServer(moduleConfig.getGRPCHost(), moduleConfig.getGRPCPort());
         }
@@ -223,11 +221,6 @@ public class CoreModuleProvider extends ModuleProvider {
             IServiceInstanceInventoryRegister.class, new ServiceInstanceInventoryRegister(getManager()));
 
         this.registerServiceImplementation(
-            EndpointInventoryCache.class, new EndpointInventoryCache(getManager(), moduleConfig));
-        this.registerServiceImplementation(
-            IEndpointInventoryRegister.class, new EndpointInventoryRegister(getManager()));
-
-        this.registerServiceImplementation(
             NetworkAddressInventoryCache.class, new NetworkAddressInventoryCache(getManager(), moduleConfig));
         this.registerServiceImplementation(
             INetworkAddressInventoryRegister.class, new NetworkAddressInventoryRegister(getManager()));
@@ -254,7 +247,9 @@ public class CoreModuleProvider extends ModuleProvider {
 
         if (moduleConfig.isGRPCSslEnabled()) {
             this.remoteClientManager = new RemoteClientManager(getManager(), moduleConfig.getRemoteTimeout(),
-                                                               Paths.get(moduleConfig.getGRPCSslTrustedCAPath()).toFile());
+                                                               Paths.get(moduleConfig.getGRPCSslTrustedCAPath())
+                                                                    .toFile()
+            );
         } else {
             this.remoteClientManager = new RemoteClientManager(getManager(), moduleConfig.getRemoteTimeout());
         }
diff --git a/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/analysis/Stream.java b/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/analysis/Stream.java
index 0cf0f38..35fd888 100644
--- a/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/analysis/Stream.java
+++ b/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/analysis/Stream.java
@@ -59,4 +59,9 @@ public @interface Stream {
      * InventoryStreamProcessor}, {@link TopNStreamProcessor} and {@link NoneStreamingProcessor} for more details.
      */
     Class<? extends StreamProcessor> processor();
+
+    /**
+     * @return true if this metrics stream support down sampling.
+     */
+    boolean supportDownSampling() default true;
 }
diff --git a/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/analysis/manual/RelationDefineUtil.java b/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/analysis/manual/RelationDefineUtil.java
index 9aa698e..7c9c6ef 100644
--- a/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/analysis/manual/RelationDefineUtil.java
+++ b/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/analysis/manual/RelationDefineUtil.java
@@ -18,12 +18,16 @@
 
 package org.apache.skywalking.oap.server.core.analysis.manual;
 
+import java.nio.charset.StandardCharsets;
+import java.util.Base64;
 import lombok.Getter;
 import org.apache.skywalking.oap.server.core.Const;
+import org.apache.skywalking.oap.server.core.UnexpectedException;
 
 public class RelationDefineUtil {
     public static String buildEntityId(RelationDefine define) {
-        return String.valueOf(define.source) + Const.ID_SPLIT + String.valueOf(define.dest) + Const.ID_SPLIT + String.valueOf(define.componentId);
+        return String.valueOf(define.source) + Const.ID_SPLIT + String.valueOf(
+            define.dest) + Const.ID_SPLIT + String.valueOf(define.componentId);
     }
 
     /**
@@ -37,6 +41,32 @@ public class RelationDefineUtil {
         return new RelationDefine(Integer.parseInt(parts[0]), Integer.parseInt(parts[1]), Integer.parseInt(parts[2]));
     }
 
+    public static String buildEndpointEntityId(EndpointRelationDefine define) {
+        return define.sourceServiceId
+            + Const.ID_SPLIT
+            + Base64.getEncoder().encode(define.source.getBytes(StandardCharsets.UTF_8))
+            + Const.ID_SPLIT
+            + define.destServiceId
+            + Const.ID_SPLIT
+            + Base64.getEncoder().encode(define.dest.getBytes(StandardCharsets.UTF_8))
+            + Const.ID_SPLIT
+            + define.componentId;
+    }
+
+    public static EndpointRelationDefine splitEndpointEntityId(String entityId) {
+        String[] parts = entityId.split(Const.ID_SPLIT);
+        if (parts.length != 5) {
+            throw new UnexpectedException("Illegal Service/Endpoint Relation entity id, " + entityId);
+        }
+        return new EndpointRelationDefine(
+            Integer.parseInt(parts[0]),
+            new String(Base64.getDecoder().decode(parts[1]), StandardCharsets.UTF_8),
+            Integer.parseInt(parts[2]),
+            new String(Base64.getDecoder().decode(parts[3]), StandardCharsets.UTF_8),
+            Integer.parseInt(parts[4])
+        );
+    }
+
     @Getter
     public static class RelationDefine {
         private int source;
@@ -49,4 +79,25 @@ public class RelationDefineUtil {
             this.componentId = componentId;
         }
     }
+
+    @Getter
+    public static class EndpointRelationDefine {
+        private int sourceServiceId;
+        private String source;
+        private int destServiceId;
+        private String dest;
+        private int componentId;
+
+        public EndpointRelationDefine(final int sourceServiceId,
+                                      final String source,
+                                      final int destServiceId,
+                                      final String dest,
+                                      final int componentId) {
+            this.sourceServiceId = sourceServiceId;
+            this.source = source;
+            this.destServiceId = destServiceId;
+            this.dest = dest;
+            this.componentId = componentId;
+        }
+    }
 }
diff --git a/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/register/EndpointInventory.java b/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/analysis/manual/endpoint/EndpointTraffic.java
similarity index 64%
rename from oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/register/EndpointInventory.java
rename to oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/analysis/manual/endpoint/EndpointTraffic.java
index d4ad3fe..3286e41 100644
--- a/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/register/EndpointInventory.java
+++ b/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/analysis/manual/endpoint/EndpointTraffic.java
@@ -16,7 +16,7 @@
  *
  */
 
-package org.apache.skywalking.oap.server.core.register;
+package org.apache.skywalking.oap.server.core.analysis.manual.endpoint;
 
 import com.google.common.base.Strings;
 import java.util.HashMap;
@@ -24,21 +24,23 @@ import java.util.Map;
 import lombok.Getter;
 import lombok.Setter;
 import org.apache.skywalking.oap.server.core.Const;
+import org.apache.skywalking.oap.server.core.UnexpectedException;
 import org.apache.skywalking.oap.server.core.analysis.Stream;
-import org.apache.skywalking.oap.server.core.register.worker.InventoryStreamProcessor;
+import org.apache.skywalking.oap.server.core.analysis.metrics.Metrics;
+import org.apache.skywalking.oap.server.core.analysis.worker.MetricsStreamProcessor;
 import org.apache.skywalking.oap.server.core.remote.grpc.proto.RemoteData;
 import org.apache.skywalking.oap.server.core.source.DefaultScopeDefine;
 import org.apache.skywalking.oap.server.core.source.ScopeDeclaration;
 import org.apache.skywalking.oap.server.core.storage.StorageBuilder;
 import org.apache.skywalking.oap.server.core.storage.annotation.Column;
 
-import static org.apache.skywalking.oap.server.core.source.DefaultScopeDefine.ENDPOINT_INVENTORY;
+import static org.apache.skywalking.oap.server.core.source.DefaultScopeDefine.ENDPOINT_TRAFFIC;
 
-@ScopeDeclaration(id = ENDPOINT_INVENTORY, name = "EndpointInventory")
-@Stream(name = EndpointInventory.INDEX_NAME, scopeId = DefaultScopeDefine.ENDPOINT_INVENTORY, builder = EndpointInventory.Builder.class, processor = InventoryStreamProcessor.class)
-public class EndpointInventory extends RegisterSource {
+@ScopeDeclaration(id = ENDPOINT_TRAFFIC, name = "EndpointTraffic")
+@Stream(name = EndpointTraffic.INDEX_NAME, scopeId = DefaultScopeDefine.ENDPOINT_TRAFFIC, builder = EndpointTraffic.Builder.class, processor = MetricsStreamProcessor.class)
+public class EndpointTraffic extends Metrics {
 
-    public static final String INDEX_NAME = "endpoint_inventory";
+    public static final String INDEX_NAME = "endpoint_traffic";
 
     public static final String SERVICE_ID = "service_id";
     public static final String NAME = "name";
@@ -46,6 +48,9 @@ public class EndpointInventory extends RegisterSource {
 
     @Setter
     @Getter
+    private String entityId;
+    @Setter
+    @Getter
     @Column(columnName = SERVICE_ID)
     private int serviceId;
     @Setter
@@ -61,6 +66,18 @@ public class EndpointInventory extends RegisterSource {
         return serviceId + Const.ID_SPLIT + endpointName + Const.ID_SPLIT + detectPoint;
     }
 
+    /**
+     * @param id in the storage of endpoint traffic
+     * @return [serviceId, endpointName, detectPoint]
+     */
+    public static String[] splitID(String id) {
+        final String[] strings = id.split(Const.ID_PARSER_SPLIT);
+        if (strings.length != 3) {
+            throw new UnexpectedException("Can't split endpoint id into 3 parts, " + id);
+        }
+        return strings;
+    }
+
     @Override
     public String id() {
         return buildId(serviceId, name, detectPoint);
@@ -84,7 +101,7 @@ public class EndpointInventory extends RegisterSource {
         if (getClass() != obj.getClass())
             return false;
 
-        EndpointInventory source = (EndpointInventory) obj;
+        EndpointTraffic source = (EndpointTraffic) obj;
         if (serviceId != source.getServiceId())
             return false;
         if (!name.equals(source.getName()))
@@ -95,13 +112,10 @@ public class EndpointInventory extends RegisterSource {
     @Override
     public RemoteData.Builder serialize() {
         RemoteData.Builder remoteBuilder = RemoteData.newBuilder();
-        remoteBuilder.addDataIntegers(getSequence());
         remoteBuilder.addDataIntegers(serviceId);
         remoteBuilder.addDataIntegers(detectPoint);
 
-        remoteBuilder.addDataLongs(getRegisterTime());
-        remoteBuilder.addDataLongs(getHeartbeatTime());
-        remoteBuilder.addDataLongs(getLastUpdateTime());
+        remoteBuilder.addDataLongs(getTimeBucket());
 
         remoteBuilder.addDataStrings(Strings.isNullOrEmpty(name) ? Const.EMPTY_STRING : name);
         return remoteBuilder;
@@ -109,47 +123,67 @@ public class EndpointInventory extends RegisterSource {
 
     @Override
     public void deserialize(RemoteData remoteData) {
-        setSequence(remoteData.getDataIntegers(0));
-        setServiceId(remoteData.getDataIntegers(1));
-        setDetectPoint(remoteData.getDataIntegers(2));
+        setServiceId(remoteData.getDataIntegers(0));
+        setDetectPoint(remoteData.getDataIntegers(1));
 
-        setRegisterTime(remoteData.getDataLongs(0));
-        setHeartbeatTime(remoteData.getDataLongs(1));
-        setLastUpdateTime(remoteData.getDataLongs(2));
+        setTimeBucket(remoteData.getDataLongs(0));
 
         setName(remoteData.getDataStrings(0));
     }
 
     @Override
     public int remoteHashCode() {
-        return 0;
+        int result = 17;
+        result = 31 * result + serviceId;
+        result = 31 * result + name.hashCode();
+        result = 31 * result + detectPoint;
+        return result;
+    }
+
+    @Override
+    public void combine(final Metrics metrics) {
+
+    }
+
+    @Override
+    public void calculate() {
+
+    }
+
+    @Override
+    public Metrics toHour() {
+        return null;
+    }
+
+    @Override
+    public Metrics toDay() {
+        return null;
+    }
+
+    @Override
+    public Metrics toMonth() {
+        return null;
     }
 
-    public static class Builder implements StorageBuilder<EndpointInventory> {
+    public static class Builder implements StorageBuilder<EndpointTraffic> {
 
         @Override
-        public EndpointInventory map2Data(Map<String, Object> dbMap) {
-            EndpointInventory inventory = new EndpointInventory();
-            inventory.setSequence(((Number) dbMap.get(SEQUENCE)).intValue());
+        public EndpointTraffic map2Data(Map<String, Object> dbMap) {
+            EndpointTraffic inventory = new EndpointTraffic();
             inventory.setServiceId(((Number) dbMap.get(SERVICE_ID)).intValue());
             inventory.setName((String) dbMap.get(NAME));
             inventory.setDetectPoint(((Number) dbMap.get(DETECT_POINT)).intValue());
-            inventory.setRegisterTime(((Number) dbMap.get(REGISTER_TIME)).longValue());
-            inventory.setHeartbeatTime(((Number) dbMap.get(HEARTBEAT_TIME)).longValue());
-            inventory.setLastUpdateTime(((Number) dbMap.get(LAST_UPDATE_TIME)).longValue());
+            inventory.setTimeBucket(((Number) dbMap.get(TIME_BUCKET)).longValue());
             return inventory;
         }
 
         @Override
-        public Map<String, Object> data2Map(EndpointInventory storageData) {
+        public Map<String, Object> data2Map(EndpointTraffic storageData) {
             Map<String, Object> map = new HashMap<>();
-            map.put(SEQUENCE, storageData.getSequence());
             map.put(SERVICE_ID, storageData.getServiceId());
             map.put(NAME, storageData.getName());
             map.put(DETECT_POINT, storageData.getDetectPoint());
-            map.put(REGISTER_TIME, storageData.getRegisterTime());
-            map.put(HEARTBEAT_TIME, storageData.getHeartbeatTime());
-            map.put(LAST_UPDATE_TIME, storageData.getLastUpdateTime());
+            map.put(TIME_BUCKET, storageData.getTimeBucket());
             return map;
         }
     }
diff --git a/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/register/service/IEndpointInventoryRegister.java b/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/analysis/manual/endpoint/EndpointTrafficDispatcher.java
similarity index 50%
rename from oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/register/service/IEndpointInventoryRegister.java
rename to oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/analysis/manual/endpoint/EndpointTrafficDispatcher.java
index 581f8d0..1bb0378 100644
--- a/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/register/service/IEndpointInventoryRegister.java
+++ b/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/analysis/manual/endpoint/EndpointTrafficDispatcher.java
@@ -16,16 +16,26 @@
  *
  */
 
-package org.apache.skywalking.oap.server.core.register.service;
+package org.apache.skywalking.oap.server.core.analysis.manual.endpoint;
 
+import org.apache.skywalking.oap.server.core.analysis.SourceDispatcher;
+import org.apache.skywalking.oap.server.core.analysis.worker.MetricsStreamProcessor;
 import org.apache.skywalking.oap.server.core.source.DetectPoint;
-import org.apache.skywalking.oap.server.library.module.Service;
+import org.apache.skywalking.oap.server.core.source.Endpoint;
 
-public interface IEndpointInventoryRegister extends Service {
+public class EndpointTrafficDispatcher implements SourceDispatcher<Endpoint> {
 
-    int getOrCreate(int serviceId, String endpointName, DetectPoint detectPoint);
+    @Override
+    public void dispatch(final Endpoint source) {
+        generateTraffic(source);
+    }
 
-    int get(int serviceId, String endpointName, DetectPoint detectPoint);
-
-    void heartbeat(int endpointId, long heartBeatTime);
+    public void generateTraffic(final Endpoint source) {
+        EndpointTraffic traffic = new EndpointTraffic();
+        traffic.setName(source.getName());
+        traffic.setServiceId(source.getServiceId());
+        traffic.setDetectPoint(DetectPoint.SERVER.ordinal());
+        traffic.setEntityId(source.getEntityId());
+        MetricsStreamProcessor.getInstance().in(traffic);
+    }
 }
diff --git a/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/analysis/manual/endpointrelation/EndpointCallRelationDispatcher.java b/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/analysis/manual/endpointrelation/EndpointCallRelationDispatcher.java
index f72e948..c018b91 100644
--- a/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/analysis/manual/endpointrelation/EndpointCallRelationDispatcher.java
+++ b/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/analysis/manual/endpointrelation/EndpointCallRelationDispatcher.java
@@ -36,10 +36,10 @@ public class EndpointCallRelationDispatcher implements SourceDispatcher<Endpoint
     private void serverSide(EndpointRelation source) {
         EndpointRelationServerSideMetrics metrics = new EndpointRelationServerSideMetrics();
         metrics.setTimeBucket(source.getTimeBucket());
-        metrics.setSourceEndpointId(source.getEndpointId());
-        metrics.setDestEndpointId(source.getChildEndpointId());
+        metrics.setSourceEndpoint(source.getEndpoint());
+        metrics.setDestEndpoint(source.getChildEndpoint());
         metrics.setComponentId(source.getComponentId());
-        metrics.buildEntityId();
+        metrics.setEntityId(source.getEntityId());
         MetricsStreamProcessor.getInstance().in(metrics);
     }
 }
diff --git a/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/analysis/manual/endpointrelation/EndpointRelationServerSideMetrics.java b/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/analysis/manual/endpointrelation/EndpointRelationServerSideMetrics.java
index a467bb2..85081b3 100644
--- a/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/analysis/manual/endpointrelation/EndpointRelationServerSideMetrics.java
+++ b/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/analysis/manual/endpointrelation/EndpointRelationServerSideMetrics.java
@@ -25,6 +25,7 @@ import lombok.Getter;
 import lombok.Setter;
 import org.apache.skywalking.oap.server.core.Const;
 import org.apache.skywalking.oap.server.core.analysis.Stream;
+import org.apache.skywalking.oap.server.core.analysis.manual.RelationDefineUtil;
 import org.apache.skywalking.oap.server.core.analysis.metrics.Metrics;
 import org.apache.skywalking.oap.server.core.analysis.worker.MetricsStreamProcessor;
 import org.apache.skywalking.oap.server.core.remote.grpc.proto.RemoteData;
@@ -37,26 +38,26 @@ import org.apache.skywalking.oap.server.core.storage.annotation.IDColumn;
 public class EndpointRelationServerSideMetrics extends Metrics {
 
     public static final String INDEX_NAME = "endpoint_relation_server_side";
-    public static final String SOURCE_ENDPOINT_ID = "source_endpoint_id";
-    public static final String DEST_ENDPOINT_ID = "dest_endpoint_id";
+    public static final String SOURCE_ENDPOINT = "source_endpoint";
+    public static final String DEST_ENDPOINT = "dest_endpoint";
     public static final String COMPONENT_ID = "component_id";
 
     @Setter
     @Getter
-    @Column(columnName = SOURCE_ENDPOINT_ID)
+    @Column(columnName = SOURCE_ENDPOINT)
     @IDColumn
-    private int sourceEndpointId;
+    private String sourceEndpoint;
     @Setter
     @Getter
-    @Column(columnName = DEST_ENDPOINT_ID)
+    @Column(columnName = DEST_ENDPOINT)
     @IDColumn
-    private int destEndpointId;
+    private String destEndpoint;
     @Setter
     @Getter
     @Column(columnName = COMPONENT_ID)
     @IDColumn
     private int componentId;
-    @Setter(AccessLevel.PRIVATE)
+    @Setter
     @Getter
     @Column(columnName = ENTITY_ID)
     @IDColumn
@@ -65,19 +66,10 @@ public class EndpointRelationServerSideMetrics extends Metrics {
     @Override
     public String id() {
         String splitJointId = String.valueOf(getTimeBucket());
-        splitJointId += Const.ID_SPLIT + sourceEndpointId;
-        splitJointId += Const.ID_SPLIT + destEndpointId;
-        splitJointId += Const.ID_SPLIT + componentId;
+        splitJointId += Const.ID_SPLIT + entityId;
         return splitJointId;
     }
 
-    public void buildEntityId() {
-        String splitJointId = String.valueOf(sourceEndpointId);
-        splitJointId += Const.ID_SPLIT + String.valueOf(destEndpointId);
-        splitJointId += Const.ID_SPLIT + String.valueOf(componentId);
-        entityId = splitJointId;
-    }
-
     @Override
     public void combine(Metrics metrics) {
 
@@ -92,8 +84,8 @@ public class EndpointRelationServerSideMetrics extends Metrics {
     public Metrics toHour() {
         EndpointRelationServerSideMetrics metrics = new EndpointRelationServerSideMetrics();
         metrics.setTimeBucket(toTimeBucketInHour());
-        metrics.setSourceEndpointId(getSourceEndpointId());
-        metrics.setDestEndpointId(getDestEndpointId());
+        metrics.setSourceEndpoint(getSourceEndpoint());
+        metrics.setDestEndpoint(getDestEndpoint());
         metrics.setComponentId(getComponentId());
         metrics.setEntityId(getEntityId());
         return metrics;
@@ -103,8 +95,8 @@ public class EndpointRelationServerSideMetrics extends Metrics {
     public Metrics toDay() {
         EndpointRelationServerSideMetrics metrics = new EndpointRelationServerSideMetrics();
         metrics.setTimeBucket(toTimeBucketInDay());
-        metrics.setSourceEndpointId(getSourceEndpointId());
-        metrics.setDestEndpointId(getDestEndpointId());
+        metrics.setSourceEndpoint(getSourceEndpoint());
+        metrics.setDestEndpoint(getDestEndpoint());
         metrics.setComponentId(getComponentId());
         metrics.setEntityId(getEntityId());
         return metrics;
@@ -114,8 +106,8 @@ public class EndpointRelationServerSideMetrics extends Metrics {
     public Metrics toMonth() {
         EndpointRelationServerSideMetrics metrics = new EndpointRelationServerSideMetrics();
         metrics.setTimeBucket(toTimeBucketInMonth());
-        metrics.setSourceEndpointId(getSourceEndpointId());
-        metrics.setDestEndpointId(getDestEndpointId());
+        metrics.setSourceEndpoint(getSourceEndpoint());
+        metrics.setDestEndpoint(getDestEndpoint());
         metrics.setComponentId(getComponentId());
         metrics.setEntityId(getEntityId());
         return metrics;
@@ -124,42 +116,42 @@ public class EndpointRelationServerSideMetrics extends Metrics {
     @Override
     public int remoteHashCode() {
         int result = 17;
-        result = 31 * result + sourceEndpointId;
-        result = 31 * result + destEndpointId;
+        result = 31 * result + sourceEndpoint.hashCode();
+        result = 31 * result + destEndpoint.hashCode();
         result = 31 * result + componentId;
         return result;
     }
 
     @Override
     public void deserialize(RemoteData remoteData) {
-        setSourceEndpointId(remoteData.getDataIntegers(0));
-        setDestEndpointId(remoteData.getDataIntegers(1));
-        setComponentId(remoteData.getDataIntegers(2));
+        setComponentId(remoteData.getDataIntegers(0));
 
         setTimeBucket(remoteData.getDataLongs(0));
 
         setEntityId(remoteData.getDataStrings(0));
+        setSourceEndpoint(remoteData.getDataStrings(1));
+        setDestEndpoint(remoteData.getDataStrings(2));
     }
 
     @Override
     public RemoteData.Builder serialize() {
         RemoteData.Builder remoteBuilder = RemoteData.newBuilder();
 
-        remoteBuilder.addDataIntegers(getSourceEndpointId());
-        remoteBuilder.addDataIntegers(getDestEndpointId());
         remoteBuilder.addDataIntegers(getComponentId());
 
         remoteBuilder.addDataLongs(getTimeBucket());
 
         remoteBuilder.addDataStrings(getEntityId());
+        remoteBuilder.addDataStrings(getSourceEndpoint());
+        remoteBuilder.addDataStrings(getDestEndpoint());
         return remoteBuilder;
     }
 
     @Override
     public int hashCode() {
         int result = 17;
-        result = 31 * result + sourceEndpointId;
-        result = 31 * result + destEndpointId;
+        result = 31 * result + sourceEndpoint.hashCode();
+        result = 31 * result + destEndpoint.hashCode();
         result = 31 * result + componentId;
         result = 31 * result + (int) getTimeBucket();
         return result;
@@ -175,9 +167,9 @@ public class EndpointRelationServerSideMetrics extends Metrics {
             return false;
 
         EndpointRelationServerSideMetrics metrics = (EndpointRelationServerSideMetrics) obj;
-        if (sourceEndpointId != metrics.sourceEndpointId)
+        if (sourceEndpoint != metrics.sourceEndpoint)
             return false;
-        if (destEndpointId != metrics.destEndpointId)
+        if (destEndpoint != metrics.destEndpoint)
             return false;
         if (componentId != metrics.componentId)
             return false;
@@ -190,8 +182,8 @@ public class EndpointRelationServerSideMetrics extends Metrics {
         @Override
         public EndpointRelationServerSideMetrics map2Data(Map<String, Object> dbMap) {
             EndpointRelationServerSideMetrics metrics = new EndpointRelationServerSideMetrics();
-            metrics.setSourceEndpointId(((Number) dbMap.get(SOURCE_ENDPOINT_ID)).intValue());
-            metrics.setDestEndpointId(((Number) dbMap.get(DEST_ENDPOINT_ID)).intValue());
+            metrics.setSourceEndpoint((String) dbMap.get(SOURCE_ENDPOINT));
+            metrics.setDestEndpoint((String) dbMap.get(DEST_ENDPOINT));
             metrics.setComponentId(((Number) dbMap.get(COMPONENT_ID)).intValue());
             metrics.setTimeBucket(((Number) dbMap.get(TIME_BUCKET)).longValue());
             metrics.setEntityId((String) dbMap.get(ENTITY_ID));
@@ -201,8 +193,8 @@ public class EndpointRelationServerSideMetrics extends Metrics {
         @Override
         public Map<String, Object> data2Map(EndpointRelationServerSideMetrics storageData) {
             Map<String, Object> map = new HashMap<>();
-            map.put(SOURCE_ENDPOINT_ID, storageData.getSourceEndpointId());
-            map.put(DEST_ENDPOINT_ID, storageData.getDestEndpointId());
+            map.put(SOURCE_ENDPOINT, storageData.getSourceEndpoint());
+            map.put(DEST_ENDPOINT, storageData.getDestEndpoint());
             map.put(COMPONENT_ID, storageData.getComponentId());
             map.put(TIME_BUCKET, storageData.getTimeBucket());
             map.put(ENTITY_ID, storageData.getEntityId());
diff --git a/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/analysis/manual/log/AbstractLogRecord.java b/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/analysis/manual/log/AbstractLogRecord.java
index a11b53e..e7eb0ba 100644
--- a/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/analysis/manual/log/AbstractLogRecord.java
+++ b/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/analysis/manual/log/AbstractLogRecord.java
@@ -32,7 +32,7 @@ public abstract class AbstractLogRecord extends Record {
 
     public static final String SERVICE_ID = "service_id";
     public static final String SERVICE_INSTANCE_ID = "service_instance_id";
-    public static final String ENDPOINT_ID = "endpoint_id";
+    public static final String ENDPOINT_NAME = "endpoint_name";
     public static final String TRACE_ID = "trace_id";
     public static final String IS_ERROR = "is_error";
     public static final String STATUS_CODE = "status_code";
@@ -50,8 +50,8 @@ public abstract class AbstractLogRecord extends Record {
     private int serviceInstanceId;
     @Setter
     @Getter
-    @Column(columnName = ENDPOINT_ID)
-    private int endpointId;
+    @Column(columnName = ENDPOINT_NAME)
+    private String endpointName;
     @Setter
     @Getter
     @Column(columnName = TRACE_ID)
@@ -86,7 +86,7 @@ public abstract class AbstractLogRecord extends Record {
         protected void map2Data(T record, Map<String, Object> dbMap) {
             record.setServiceId(((Number) dbMap.get(SERVICE_ID)).intValue());
             record.setServiceInstanceId(((Number) dbMap.get(SERVICE_INSTANCE_ID)).intValue());
-            record.setEndpointId(((Number) dbMap.get(ENDPOINT_ID)).intValue());
+            record.setEndpointName((String) dbMap.get(ENDPOINT_NAME));
             record.setIsError(((Number) dbMap.get(IS_ERROR)).intValue());
             record.setTraceId((String) dbMap.get(TRACE_ID));
             record.setStatusCode((String) dbMap.get(STATUS_CODE));
@@ -101,7 +101,7 @@ public abstract class AbstractLogRecord extends Record {
             Map<String, Object> map = new HashMap<>();
             map.put(SERVICE_ID, record.getServiceId());
             map.put(SERVICE_INSTANCE_ID, record.getServiceInstanceId());
-            map.put(ENDPOINT_ID, record.getEndpointId());
+            map.put(ENDPOINT_NAME, record.getEndpointName());
             map.put(TRACE_ID, record.getTraceId());
             map.put(IS_ERROR, record.getIsError());
             map.put(STATUS_CODE, record.getStatusCode());
diff --git a/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/analysis/manual/relation/service/ServiceRelationClientSideMetrics.java b/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/analysis/manual/relation/service/ServiceRelationClientSideMetrics.java
index 7782d59..cee1d36 100644
--- a/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/analysis/manual/relation/service/ServiceRelationClientSideMetrics.java
+++ b/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/analysis/manual/relation/service/ServiceRelationClientSideMetrics.java
@@ -71,10 +71,8 @@ public class ServiceRelationClientSideMetrics extends Metrics {
     }
 
     public void buildEntityId() {
-        String splitJointId = String.valueOf(sourceServiceId);
-        splitJointId += Const.ID_SPLIT + String.valueOf(destServiceId);
-        splitJointId += Const.ID_SPLIT + String.valueOf(componentId);
-        entityId = splitJointId;
+        entityId = RelationDefineUtil.buildEntityId(
+            new RelationDefineUtil.RelationDefine(sourceServiceId, destServiceId, componentId));
     }
 
     @Override
diff --git a/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/analysis/manual/relation/service/ServiceRelationServerSideMetrics.java b/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/analysis/manual/relation/service/ServiceRelationServerSideMetrics.java
index bb2a562..52c175b 100644
--- a/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/analysis/manual/relation/service/ServiceRelationServerSideMetrics.java
+++ b/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/analysis/manual/relation/service/ServiceRelationServerSideMetrics.java
@@ -66,15 +66,14 @@ public class ServiceRelationServerSideMetrics extends Metrics {
     @Override
     public String id() {
         String splitJointId = String.valueOf(getTimeBucket());
-        splitJointId += Const.ID_SPLIT + RelationDefineUtil.buildEntityId(new RelationDefineUtil.RelationDefine(sourceServiceId, destServiceId, componentId));
+        splitJointId += Const.ID_SPLIT + RelationDefineUtil.buildEntityId(
+            new RelationDefineUtil.RelationDefine(sourceServiceId, destServiceId, componentId));
         return splitJointId;
     }
 
     public void buildEntityId() {
-        String splitJointId = String.valueOf(sourceServiceId);
-        splitJointId += Const.ID_SPLIT + String.valueOf(destServiceId);
-        splitJointId += Const.ID_SPLIT + String.valueOf(componentId);
-        entityId = splitJointId;
+        entityId = RelationDefineUtil.buildEntityId(
+            new RelationDefineUtil.RelationDefine(sourceServiceId, destServiceId, componentId));
     }
 
     @Override
diff --git a/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/analysis/worker/MetricsStreamProcessor.java b/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/analysis/worker/MetricsStreamProcessor.java
index 54c2861..6f4f608 100644
--- a/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/analysis/worker/MetricsStreamProcessor.java
+++ b/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/analysis/worker/MetricsStreamProcessor.java
@@ -113,24 +113,27 @@ public class MetricsStreamProcessor implements StreamProcessor<Metrics> {
         MetricsPersistentWorker dayPersistentWorker = null;
         MetricsPersistentWorker monthPersistentWorker = null;
 
-        if (configService.shouldToHour()) {
-            Model model = modelSetter.putIfAbsent(
-                metricsClass, stream.scopeId(), new Storage(stream.name(), true, true, Downsampling.Hour), false);
-            hourPersistentWorker = worker(moduleDefineHolder, metricsDAO, model);
+        MetricsTransWorker transWorker = null;
+        if (stream.supportDownSampling()) {
+            if (configService.shouldToHour()) {
+                Model model = modelSetter.putIfAbsent(
+                    metricsClass, stream.scopeId(), new Storage(stream.name(), true, true, Downsampling.Hour), false);
+                hourPersistentWorker = worker(moduleDefineHolder, metricsDAO, model);
+            }
+            if (configService.shouldToDay()) {
+                Model model = modelSetter.putIfAbsent(
+                    metricsClass, stream.scopeId(), new Storage(stream.name(), true, true, Downsampling.Day), false);
+                dayPersistentWorker = worker(moduleDefineHolder, metricsDAO, model);
+            }
+            if (configService.shouldToMonth()) {
+                Model model = modelSetter.putIfAbsent(
+                    metricsClass, stream.scopeId(), new Storage(stream.name(), true, true, Downsampling.Month), false);
+                monthPersistentWorker = worker(moduleDefineHolder, metricsDAO, model);
+            }
+            
+            transWorker = new MetricsTransWorker(
+                moduleDefineHolder, stream.name(), hourPersistentWorker, dayPersistentWorker, monthPersistentWorker);
         }
-        if (configService.shouldToDay()) {
-            Model model = modelSetter.putIfAbsent(
-                metricsClass, stream.scopeId(), new Storage(stream.name(), true, true, Downsampling.Day), false);
-            dayPersistentWorker = worker(moduleDefineHolder, metricsDAO, model);
-        }
-        if (configService.shouldToMonth()) {
-            Model model = modelSetter.putIfAbsent(
-                metricsClass, stream.scopeId(), new Storage(stream.name(), true, true, Downsampling.Month), false);
-            monthPersistentWorker = worker(moduleDefineHolder, metricsDAO, model);
-        }
-
-        MetricsTransWorker transWorker = new MetricsTransWorker(
-            moduleDefineHolder, stream.name(), hourPersistentWorker, dayPersistentWorker, monthPersistentWorker);
 
         Model model = modelSetter.putIfAbsent(
             metricsClass, stream.scopeId(), new Storage(stream.name(), true, true, Downsampling.Minute), false);
diff --git a/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/cache/EndpointInventoryCache.java b/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/cache/EndpointInventoryCache.java
deleted file mode 100644
index 4181a51..0000000
--- a/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/cache/EndpointInventoryCache.java
+++ /dev/null
@@ -1,108 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- *
- */
-
-package org.apache.skywalking.oap.server.core.cache;
-
-import com.google.common.cache.Cache;
-import com.google.common.cache.CacheBuilder;
-import java.util.Objects;
-import org.apache.skywalking.oap.server.core.Const;
-import org.apache.skywalking.oap.server.core.CoreModuleConfig;
-import org.apache.skywalking.oap.server.core.register.EndpointInventory;
-import org.apache.skywalking.oap.server.core.storage.StorageModule;
-import org.apache.skywalking.oap.server.core.storage.cache.IEndpointInventoryCacheDAO;
-import org.apache.skywalking.oap.server.library.module.ModuleManager;
-import org.apache.skywalking.oap.server.library.module.Service;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-import static java.util.Objects.isNull;
-import static java.util.Objects.nonNull;
-
-public class EndpointInventoryCache implements Service {
-
-    private static final Logger logger = LoggerFactory.getLogger(EndpointInventoryCache.class);
-
-    private final ModuleManager moduleManager;
-    private final EndpointInventory userEndpoint;
-    private final Cache<String, Integer> endpointNameCache;
-    private final Cache<Integer, EndpointInventory> endpointIdCache;
-
-    private IEndpointInventoryCacheDAO cacheDAO;
-
-    public EndpointInventoryCache(ModuleManager moduleManager, CoreModuleConfig moduleConfig) {
-        this.moduleManager = moduleManager;
-
-        this.userEndpoint = new EndpointInventory();
-        this.userEndpoint.setSequence(Const.USER_ENDPOINT_ID);
-        this.userEndpoint.setName(Const.USER_CODE);
-        this.userEndpoint.setServiceId(Const.USER_SERVICE_ID);
-
-        long initialSize = moduleConfig.getMaxSizeOfEndpointInventory() / 10L;
-        int initialCapacitySize = (int) (initialSize > Integer.MAX_VALUE ? Integer.MAX_VALUE : initialSize);
-
-        endpointNameCache = CacheBuilder.newBuilder()
-                                        .initialCapacity(initialCapacitySize)
-                                        .maximumSize(moduleConfig.getMaxSizeOfEndpointInventory())
-                                        .build();
-        endpointIdCache = CacheBuilder.newBuilder()
-                                      .initialCapacity(initialCapacitySize)
-                                      .maximumSize(moduleConfig.getMaxSizeOfEndpointInventory())
-                                      .build();
-    }
-
-    private IEndpointInventoryCacheDAO getCacheDAO() {
-        if (isNull(cacheDAO)) {
-            cacheDAO = moduleManager.find(StorageModule.NAME).provider().getService(IEndpointInventoryCacheDAO.class);
-        }
-        return cacheDAO;
-    }
-
-    public int getEndpointId(int serviceId, String endpointName, int detectPoint) {
-        String id = EndpointInventory.buildId(serviceId, endpointName, detectPoint);
-
-        Integer endpointId = endpointNameCache.getIfPresent(id);
-
-        if (Objects.isNull(endpointId) || endpointId == Const.NONE) {
-            endpointId = getCacheDAO().getEndpointId(serviceId, endpointName, detectPoint);
-            if (endpointId != Const.NONE) {
-                endpointNameCache.put(id, endpointId);
-            }
-        }
-        return endpointId;
-    }
-
-    public EndpointInventory get(int endpointId) {
-        if (Const.USER_ENDPOINT_ID == endpointId) {
-            return userEndpoint;
-        }
-
-        EndpointInventory endpointInventory = endpointIdCache.getIfPresent(endpointId);
-
-        if (isNull(endpointInventory)) {
-            endpointInventory = getCacheDAO().get(endpointId);
-            if (nonNull(endpointInventory)) {
-                endpointIdCache.put(endpointId, endpointInventory);
-            } else {
-                logger.warn("EndpointInventory id {} is not in cache and persistent storage.", endpointId);
-            }
-        }
-
-        return endpointInventory;
-    }
-}
diff --git a/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/query/AggregationQueryService.java b/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/query/AggregationQueryService.java
index 7c8d644..9154f7b 100644
--- a/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/query/AggregationQueryService.java
+++ b/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/query/AggregationQueryService.java
@@ -22,12 +22,11 @@ import java.io.IOException;
 import java.util.List;
 import org.apache.skywalking.oap.server.core.CoreModule;
 import org.apache.skywalking.oap.server.core.analysis.Downsampling;
-import org.apache.skywalking.oap.server.core.cache.EndpointInventoryCache;
+import org.apache.skywalking.oap.server.core.analysis.manual.endpoint.EndpointTraffic;
 import org.apache.skywalking.oap.server.core.cache.ServiceInstanceInventoryCache;
 import org.apache.skywalking.oap.server.core.cache.ServiceInventoryCache;
 import org.apache.skywalking.oap.server.core.query.entity.Order;
 import org.apache.skywalking.oap.server.core.query.entity.TopNEntity;
-import org.apache.skywalking.oap.server.core.register.EndpointInventory;
 import org.apache.skywalking.oap.server.core.register.ServiceInstanceInventory;
 import org.apache.skywalking.oap.server.core.register.ServiceInventory;
 import org.apache.skywalking.oap.server.core.storage.StorageModule;
@@ -55,8 +54,9 @@ public class AggregationQueryService implements Service {
     }
 
     public List<TopNEntity> getServiceTopN(final String indName, final int topN, final Downsampling downsampling,
-        final long startTB, final long endTB, final Order order) throws IOException {
-        List<TopNEntity> topNEntities = getAggregationQueryDAO().getServiceTopN(indName, ValueColumnMetadata.INSTANCE.getValueCName(indName), topN, downsampling, startTB, endTB, order);
+                                           final long startTB, final long endTB, final Order order) throws IOException {
+        List<TopNEntity> topNEntities = getAggregationQueryDAO().getServiceTopN(
+            indName, ValueColumnMetadata.INSTANCE.getValueCName(indName), topN, downsampling, startTB, endTB, order);
         for (TopNEntity entity : topNEntities) {
             ServiceInventory inventory = moduleManager.find(CoreModule.NAME)
                                                       .provider()
@@ -69,10 +69,15 @@ public class AggregationQueryService implements Service {
         return topNEntities;
     }
 
-    public List<TopNEntity> getAllServiceInstanceTopN(final String indName, final int topN,
-        final Downsampling downsampling, final long startTB, final long endTB, final Order order) throws IOException {
-        List<TopNEntity> topNEntities = getAggregationQueryDAO().getAllServiceInstanceTopN(indName, ValueColumnMetadata.INSTANCE
-            .getValueCName(indName), topN, downsampling, startTB, endTB, order);
+    public List<TopNEntity> getAllServiceInstanceTopN(final String indName,
+                                                      final int topN,
+                                                      final Downsampling downsampling,
+                                                      final long startTB,
+                                                      final long endTB,
+                                                      final Order order) throws IOException {
+        List<TopNEntity> topNEntities = getAggregationQueryDAO().getAllServiceInstanceTopN(
+            indName, ValueColumnMetadata.INSTANCE
+                .getValueCName(indName), topN, downsampling, startTB, endTB, order);
         for (TopNEntity entity : topNEntities) {
             ServiceInstanceInventory inventory = moduleManager.find(CoreModule.NAME)
                                                               .provider()
@@ -85,10 +90,16 @@ public class AggregationQueryService implements Service {
         return topNEntities;
     }
 
-    public List<TopNEntity> getServiceInstanceTopN(final int serviceId, final String indName, final int topN,
-        final Downsampling downsampling, final long startTB, final long endTB, final Order order) throws IOException {
-        List<TopNEntity> topNEntities = getAggregationQueryDAO().getServiceInstanceTopN(serviceId, indName, ValueColumnMetadata.INSTANCE
-            .getValueCName(indName), topN, downsampling, startTB, endTB, order);
+    public List<TopNEntity> getServiceInstanceTopN(final int serviceId,
+                                                   final String indName,
+                                                   final int topN,
+                                                   final Downsampling downsampling,
+                                                   final long startTB,
+                                                   final long endTB,
+                                                   final Order order) throws IOException {
+        List<TopNEntity> topNEntities = getAggregationQueryDAO().getServiceInstanceTopN(
+            serviceId, indName, ValueColumnMetadata.INSTANCE
+                .getValueCName(indName), topN, downsampling, startTB, endTB, order);
         for (TopNEntity entity : topNEntities) {
             ServiceInstanceInventory inventory = moduleManager.find(CoreModule.NAME)
                                                               .provider()
@@ -101,33 +112,33 @@ public class AggregationQueryService implements Service {
         return topNEntities;
     }
 
-    public List<TopNEntity> getAllEndpointTopN(final String indName, final int topN, final Downsampling downsampling,
-        final long startTB, final long endTB, final Order order) throws IOException {
-        List<TopNEntity> topNEntities = getAggregationQueryDAO().getAllEndpointTopN(indName, ValueColumnMetadata.INSTANCE.getValueCName(indName), topN, downsampling, startTB, endTB, order);
+    public List<TopNEntity> getAllEndpointTopN(final String indName,
+                                               final int topN,
+                                               final Downsampling downsampling,
+                                               final long startTB,
+                                               final long endTB,
+                                               final Order order) throws IOException {
+        List<TopNEntity> topNEntities = getAggregationQueryDAO().getAllEndpointTopN(
+            indName, ValueColumnMetadata.INSTANCE.getValueCName(indName), topN, downsampling, startTB, endTB, order);
+
         for (TopNEntity entity : topNEntities) {
-            EndpointInventory inventory = moduleManager.find(CoreModule.NAME)
-                                                       .provider()
-                                                       .getService(EndpointInventoryCache.class)
-                                                       .get(Integer.parseInt(entity.getId()));
-            if (inventory != null) {
-                entity.setName(inventory.getName());
-            }
+            entity.setName(EndpointTraffic.splitID(entity.getId())[1]);
         }
         return topNEntities;
     }
 
-    public List<TopNEntity> getEndpointTopN(final int serviceId, final String indName, final int topN,
-        final Downsampling downsampling, final long startTB, final long endTB, final Order order) throws IOException {
-        List<TopNEntity> topNEntities = getAggregationQueryDAO().getEndpointTopN(serviceId, indName, ValueColumnMetadata.INSTANCE
-            .getValueCName(indName), topN, downsampling, startTB, endTB, order);
+    public List<TopNEntity> getEndpointTopN(final int serviceId,
+                                            final String indName,
+                                            final int topN,
+                                            final Downsampling downsampling,
+                                            final long startTB,
+                                            final long endTB,
+                                            final Order order) throws IOException {
+        List<TopNEntity> topNEntities = getAggregationQueryDAO().getEndpointTopN(
+            serviceId, indName, ValueColumnMetadata.INSTANCE
+                .getValueCName(indName), topN, downsampling, startTB, endTB, order);
         for (TopNEntity entity : topNEntities) {
-            EndpointInventory inventory = moduleManager.find(CoreModule.NAME)
-                                                       .provider()
-                                                       .getService(EndpointInventoryCache.class)
-                                                       .get(Integer.parseInt(entity.getId()));
-            if (inventory != null) {
-                entity.setName(inventory.getName());
-            }
+            entity.setName(EndpointTraffic.splitID(entity.getId())[1]);
         }
         return topNEntities;
     }
diff --git a/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/query/LogQueryService.java b/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/query/LogQueryService.java
index 13b8631..fe58e7f 100644
--- a/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/query/LogQueryService.java
+++ b/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/query/LogQueryService.java
@@ -21,7 +21,6 @@ package org.apache.skywalking.oap.server.core.query;
 import java.io.IOException;
 import org.apache.skywalking.oap.server.core.Const;
 import org.apache.skywalking.oap.server.core.CoreModule;
-import org.apache.skywalking.oap.server.core.cache.EndpointInventoryCache;
 import org.apache.skywalking.oap.server.core.cache.ServiceInstanceInventoryCache;
 import org.apache.skywalking.oap.server.core.cache.ServiceInventoryCache;
 import org.apache.skywalking.oap.server.core.query.entity.LogState;
@@ -38,7 +37,6 @@ public class LogQueryService implements Service {
     private ILogQueryDAO logQueryDAO;
     private ServiceInventoryCache serviceInventoryCache;
     private ServiceInstanceInventoryCache serviceInstanceInventoryCache;
-    private EndpointInventoryCache endpointInventoryCache;
 
     public LogQueryService(ModuleManager moduleManager) {
         this.moduleManager = moduleManager;
@@ -69,21 +67,21 @@ public class LogQueryService implements Service {
         return serviceInstanceInventoryCache;
     }
 
-    private EndpointInventoryCache getEndpointInventoryCache() {
-        if (endpointInventoryCache == null) {
-            this.endpointInventoryCache = moduleManager.find(CoreModule.NAME)
-                                                       .provider()
-                                                       .getService(EndpointInventoryCache.class);
-        }
-        return endpointInventoryCache;
-    }
-
-    public Logs queryLogs(final String metricName, int serviceId, int serviceInstanceId, int endpointId, String traceId,
-        LogState state, String stateCode, Pagination paging, final long startTB, final long endTB) throws IOException {
+    public Logs queryLogs(final String metricName,
+                          int serviceId,
+                          int serviceInstanceId,
+                          int endpointId,
+                          String traceId,
+                          LogState state,
+                          String stateCode,
+                          Pagination paging,
+                          final long startTB,
+                          final long endTB) throws IOException {
         PaginationUtils.Page page = PaginationUtils.INSTANCE.exchange(paging);
 
-        Logs logs = getLogQueryDAO().queryLogs(metricName, serviceId, serviceInstanceId, endpointId, traceId, state, stateCode, paging, page
-            .getFrom(), page.getLimit(), startTB, endTB);
+        Logs logs = getLogQueryDAO().queryLogs(
+            metricName, serviceId, serviceInstanceId, endpointId, traceId, state, stateCode, paging, page
+                .getFrom(), page.getLimit(), startTB, endTB);
         logs.getLogs().forEach(log -> {
             if (log.getServiceId() != Const.NONE) {
                 log.setServiceName(getServiceInventoryCache().get(log.getServiceId()).getName());
@@ -92,9 +90,7 @@ public class LogQueryService implements Service {
                 log.setServiceInstanceName(getServiceInstanceInventoryCache().get(log.getServiceInstanceId())
                                                                              .getName());
             }
-            if (log.getEndpointId() != Const.NONE) {
-                log.setEndpointName(getEndpointInventoryCache().get(log.getEndpointId()).getName());
-            }
+            log.setEndpointName(log.getEndpointName());
         });
         return logs;
     }
diff --git a/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/query/MetadataQueryService.java b/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/query/MetadataQueryService.java
index bae70a7..7b9454e 100644
--- a/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/query/MetadataQueryService.java
+++ b/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/query/MetadataQueryService.java
@@ -21,7 +21,7 @@ package org.apache.skywalking.oap.server.core.query;
 import java.io.IOException;
 import java.util.List;
 import org.apache.skywalking.oap.server.core.CoreModule;
-import org.apache.skywalking.oap.server.core.cache.EndpointInventoryCache;
+import org.apache.skywalking.oap.server.core.analysis.manual.endpoint.EndpointTraffic;
 import org.apache.skywalking.oap.server.core.cache.ServiceInventoryCache;
 import org.apache.skywalking.oap.server.core.query.entity.ClusterBrief;
 import org.apache.skywalking.oap.server.core.query.entity.Database;
@@ -29,7 +29,6 @@ import org.apache.skywalking.oap.server.core.query.entity.Endpoint;
 import org.apache.skywalking.oap.server.core.query.entity.EndpointInfo;
 import org.apache.skywalking.oap.server.core.query.entity.Service;
 import org.apache.skywalking.oap.server.core.query.entity.ServiceInstance;
-import org.apache.skywalking.oap.server.core.register.EndpointInventory;
 import org.apache.skywalking.oap.server.core.register.NodeType;
 import org.apache.skywalking.oap.server.core.storage.StorageModule;
 import org.apache.skywalking.oap.server.core.storage.query.IMetadataQueryDAO;
@@ -40,7 +39,6 @@ public class MetadataQueryService implements org.apache.skywalking.oap.server.li
     private final ModuleManager moduleManager;
     private IMetadataQueryDAO metadataQueryDAO;
     private ServiceInventoryCache serviceInventoryCache;
-    private EndpointInventoryCache endpointInventoryCache;
 
     public MetadataQueryService(ModuleManager moduleManager) {
         this.moduleManager = moduleManager;
@@ -62,15 +60,6 @@ public class MetadataQueryService implements org.apache.skywalking.oap.server.li
         return serviceInventoryCache;
     }
 
-    private EndpointInventoryCache getEndpointInventoryCache() {
-        if (endpointInventoryCache == null) {
-            endpointInventoryCache = moduleManager.find(CoreModule.NAME)
-                                                  .provider()
-                                                  .getService(EndpointInventoryCache.class);
-        }
-        return endpointInventoryCache;
-    }
-
     public ClusterBrief getGlobalBrief(final long startTimestamp, final long endTimestamp) throws IOException {
         ClusterBrief clusterBrief = new ClusterBrief();
         clusterBrief.setNumOfService(getMetadataQueryDAO().numOfService(startTimestamp, endTimestamp));
@@ -94,17 +83,17 @@ public class MetadataQueryService implements org.apache.skywalking.oap.server.li
     }
 
     public List<Service> searchServices(final long startTimestamp, final long endTimestamp,
-        final String keyword) throws IOException {
+                                        final String keyword) throws IOException {
         return getMetadataQueryDAO().searchServices(startTimestamp, endTimestamp, keyword);
     }
 
     public List<ServiceInstance> getServiceInstances(final long startTimestamp, final long endTimestamp,
-        final String serviceId) throws IOException {
+                                                     final String serviceId) throws IOException {
         return getMetadataQueryDAO().getServiceInstances(startTimestamp, endTimestamp, serviceId);
     }
 
     public List<Endpoint> searchEndpoint(final String keyword, final String serviceId,
-        final int limit) throws IOException {
+                                         final int limit) throws IOException {
         return getMetadataQueryDAO().searchEndpoint(keyword, serviceId, limit);
     }
 
@@ -112,14 +101,15 @@ public class MetadataQueryService implements org.apache.skywalking.oap.server.li
         return getMetadataQueryDAO().searchService(serviceCode);
     }
 
-    public EndpointInfo getEndpointInfo(final int endpointId) throws IOException {
-        EndpointInventory endpointInventory = getEndpointInventoryCache().get(endpointId);
+    public EndpointInfo getEndpointInfo(final String endpointId) throws IOException {
+        final String[] strings = EndpointTraffic.splitID(endpointId);
+        int serviceId = Integer.parseInt(strings[0]);
 
         EndpointInfo endpointInfo = new EndpointInfo();
-        endpointInfo.setId(endpointInventory.getSequence());
-        endpointInfo.setName(endpointInventory.getName());
-        endpointInfo.setServiceId(endpointInventory.getServiceId());
-        endpointInfo.setServiceName(getServiceInventoryCache().get(endpointInventory.getServiceId()).getName());
+        endpointInfo.setId(endpointId);
+        endpointInfo.setName(strings[1]);
+        endpointInfo.setServiceId(serviceId);
+        endpointInfo.setServiceName(getServiceInventoryCache().get(serviceId).getName());
         return endpointInfo;
     }
 }
diff --git a/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/query/ProfileTaskQueryService.java b/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/query/ProfileTaskQueryService.java
index 156e88f..dcc10e8 100644
--- a/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/query/ProfileTaskQueryService.java
+++ b/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/query/ProfileTaskQueryService.java
@@ -24,13 +24,10 @@ import java.util.ArrayList;
 import java.util.Collections;
 import java.util.List;
 import java.util.stream.Collectors;
-
 import org.apache.skywalking.apm.network.language.agent.v2.SegmentObject;
-import org.apache.skywalking.oap.server.core.Const;
 import org.apache.skywalking.oap.server.core.CoreModule;
 import org.apache.skywalking.oap.server.core.CoreModuleConfig;
 import org.apache.skywalking.oap.server.core.analysis.manual.segment.SegmentRecord;
-import org.apache.skywalking.oap.server.core.cache.EndpointInventoryCache;
 import org.apache.skywalking.oap.server.core.cache.NetworkAddressInventoryCache;
 import org.apache.skywalking.oap.server.core.cache.ServiceInstanceInventoryCache;
 import org.apache.skywalking.oap.server.core.cache.ServiceInventoryCache;
@@ -45,7 +42,6 @@ import org.apache.skywalking.oap.server.core.query.entity.ProfileTask;
 import org.apache.skywalking.oap.server.core.query.entity.ProfileTaskLog;
 import org.apache.skywalking.oap.server.core.query.entity.ProfiledSegment;
 import org.apache.skywalking.oap.server.core.query.entity.ProfiledSpan;
-import org.apache.skywalking.oap.server.core.register.EndpointInventory;
 import org.apache.skywalking.oap.server.core.register.ServiceInstanceInventory;
 import org.apache.skywalking.oap.server.core.register.ServiceInventory;
 import org.apache.skywalking.oap.server.core.storage.StorageModule;
@@ -57,7 +53,6 @@ import org.apache.skywalking.oap.server.library.module.Service;
 import org.apache.skywalking.oap.server.library.util.CollectionUtils;
 
 import static java.util.Objects.isNull;
-import static java.util.Objects.nonNull;
 
 /**
  * handle profile task queries
@@ -71,13 +66,15 @@ public class ProfileTaskQueryService implements Service {
     private ServiceInstanceInventoryCache serviceInstanceInventoryCache;
     private NetworkAddressInventoryCache networkAddressInventoryCache;
     private IComponentLibraryCatalogService componentLibraryCatalogService;
-    private EndpointInventoryCache endpointInventoryCache;
 
     private final ProfileAnalyzer profileAnalyzer;
 
     public ProfileTaskQueryService(ModuleManager moduleManager, CoreModuleConfig moduleConfig) {
         this.moduleManager = moduleManager;
-        this.profileAnalyzer = new ProfileAnalyzer(moduleManager, moduleConfig.getMaxPageSizeOfQueryProfileSnapshot(), moduleConfig.getMaxSizeOfAnalyzeProfileSnapshot());
+        this.profileAnalyzer = new ProfileAnalyzer(
+            moduleManager, moduleConfig.getMaxPageSizeOfQueryProfileSnapshot(),
+            moduleConfig.getMaxSizeOfAnalyzeProfileSnapshot()
+        );
     }
 
     private IProfileTaskQueryDAO getProfileTaskDAO() {
@@ -143,15 +140,6 @@ public class ProfileTaskQueryService implements Service {
         return componentLibraryCatalogService;
     }
 
-    private EndpointInventoryCache getEndpointInventoryCache() {
-        if (endpointInventoryCache == null) {
-            this.endpointInventoryCache = moduleManager.find(CoreModule.NAME)
-                                                       .provider()
-                                                       .getService(EndpointInventoryCache.class);
-        }
-        return endpointInventoryCache;
-    }
-
     /**
      * search profile task list
      *
@@ -180,7 +168,8 @@ public class ProfileTaskQueryService implements Service {
                 // filter all task logs
                 task.setLogs(taskLogList.stream().filter(l -> Objects.equal(l.getTaskId(), task.getId())).map(l -> {
                     // get instance name from cache
-                    final ServiceInstanceInventory instanceInventory = serviceInstanceInventoryCache.get(l.getInstanceId());
+                    final ServiceInstanceInventory instanceInventory = serviceInstanceInventoryCache.get(
+                        l.getInstanceId());
                     if (instanceInventory != null) {
                         l.setInstanceName(instanceInventory.getName());
                     }
@@ -199,7 +188,8 @@ public class ProfileTaskQueryService implements Service {
         return getProfileThreadSnapshotQueryDAO().queryProfiledSegments(taskId);
     }
 
-    public ProfileAnalyzation getProfileAnalyze(final String segmentId, final List<ProfileAnalyzeTimeRange> timeRanges) throws IOException {
+    public ProfileAnalyzation getProfileAnalyze(final String segmentId,
+                                                final List<ProfileAnalyzeTimeRange> timeRanges) throws IOException {
         return profileAnalyzer.analyze(segmentId, timeRanges);
     }
 
@@ -228,6 +218,7 @@ public class ProfileTaskQueryService implements Service {
             span.setError(spanObject.getIsError());
             span.setLayer(spanObject.getSpanLayer().name());
             span.setType(spanObject.getSpanType().name());
+            span.setEndpointName(spanObject.getOperationName());
 
             if (spanObject.getPeerId() == 0) {
                 span.setPeer(spanObject.getPeer());
@@ -235,17 +226,6 @@ public class ProfileTaskQueryService implements Service {
                 span.setPeer(getNetworkAddressInventoryCache().get(spanObject.getPeerId()).getName());
             }
 
-            String endpointName = spanObject.getOperationName();
-            if (spanObject.getOperationNameId() != 0) {
-                EndpointInventory endpointInventory = getEndpointInventoryCache().get(spanObject.getOperationNameId());
-                if (nonNull(endpointInventory)) {
-                    endpointName = endpointInventory.getName();
-                } else {
-                    endpointName = Const.EMPTY_STRING;
-                }
-            }
-            span.setEndpointName(endpointName);
-
             final ServiceInventory serviceInventory = getServiceInventoryCache().get(segmentObject.getServiceId());
             if (serviceInventory != null) {
                 span.setServiceCode(serviceInventory.getName());
diff --git a/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/query/TopologyQueryService.java b/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/query/TopologyQueryService.java
index 980a577..858d612 100644
--- a/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/query/TopologyQueryService.java
+++ b/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/query/TopologyQueryService.java
@@ -27,7 +27,6 @@ import java.util.Set;
 import org.apache.skywalking.oap.server.core.Const;
 import org.apache.skywalking.oap.server.core.CoreModule;
 import org.apache.skywalking.oap.server.core.analysis.Downsampling;
-import org.apache.skywalking.oap.server.core.cache.EndpointInventoryCache;
 import org.apache.skywalking.oap.server.core.config.IComponentLibraryCatalogService;
 import org.apache.skywalking.oap.server.core.query.entity.Call;
 import org.apache.skywalking.oap.server.core.query.entity.Node;
@@ -50,7 +49,6 @@ public class TopologyQueryService implements Service {
     private final ModuleManager moduleManager;
     private ITopologyQueryDAO topologyQueryDAO;
     private IMetadataQueryDAO metadataQueryDAO;
-    private EndpointInventoryCache endpointInventoryCache;
     private IComponentLibraryCatalogService componentLibraryCatalogService;
 
     public TopologyQueryService(ModuleManager moduleManager) {
@@ -80,15 +78,6 @@ public class TopologyQueryService implements Service {
         return componentLibraryCatalogService;
     }
 
-    private EndpointInventoryCache getEndpointInventoryCache() {
-        if (endpointInventoryCache == null) {
-            endpointInventoryCache = moduleManager.find(CoreModule.NAME)
-                                                  .provider()
-                                                  .getService(EndpointInventoryCache.class);
-        }
-        return endpointInventoryCache;
-    }
-
     public Topology getGlobalTopology(final Downsampling downsampling, final long startTB,
                                       final long endTB) throws IOException {
         logger.debug("Downsampling: {}, startTimeBucket: {}, endTimeBucket: {}", downsampling, startTB, endTB);
@@ -121,7 +110,7 @@ public class TopologyQueryService implements Service {
             // Client side relationships exclude the given services(#serviceIds)
             // The given services(#serviceIds)'s component names have been included inside `serviceRelationServerCalls`
             if (!serviceIds.contains(call.getSource())) {
-                outScopeSourceServiceIds.add(call.getSource());
+                outScopeSourceServiceIds.add(Integer.parseInt(call.getSource()));
             }
         });
         if (CollectionUtils.isNotEmpty(outScopeSourceServiceIds)) {
@@ -131,7 +120,7 @@ public class TopologyQueryService implements Service {
             topology.getNodes().forEach(node -> {
                 if (Strings.isNullOrEmpty(node.getType())) {
                     for (Call.CallDetail call : sourceCalls) {
-                        if (node.getId() == call.getTarget()) {
+                        if (node.getId().equals(call.getTarget())) {
                             node.setType(getComponentLibraryCatalogService().getComponentName(call.getComponentId()));
                             break;
                         }
@@ -177,7 +166,7 @@ public class TopologyQueryService implements Service {
             topology.getCalls().add(call);
         });
 
-        Set<Integer> nodeIds = new HashSet<>();
+        Set<String> nodeIds = new HashSet<>();
         serverSideCalls.forEach(call -> {
             if (!nodeIds.contains(call.getSource())) {
                 topology.getNodes().add(buildEndpointNode(call.getSource()));
@@ -192,7 +181,7 @@ public class TopologyQueryService implements Service {
         return topology;
     }
 
-    private Node buildEndpointNode(int endpointId) {
+    private Node buildEndpointNode(String endpointId) {
         Node node = new Node();
         node.setId(endpointId);
         node.setName(getEndpointInventoryCache().get(endpointId).getName());
diff --git a/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/query/TraceQueryService.java b/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/query/TraceQueryService.java
index a04347c..1ffdcc5 100644
--- a/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/query/TraceQueryService.java
+++ b/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/query/TraceQueryService.java
@@ -30,7 +30,6 @@ import org.apache.skywalking.apm.network.language.agent.v2.SpanObjectV2;
 import org.apache.skywalking.oap.server.core.Const;
 import org.apache.skywalking.oap.server.core.CoreModule;
 import org.apache.skywalking.oap.server.core.analysis.manual.segment.SegmentRecord;
-import org.apache.skywalking.oap.server.core.cache.EndpointInventoryCache;
 import org.apache.skywalking.oap.server.core.cache.NetworkAddressInventoryCache;
 import org.apache.skywalking.oap.server.core.cache.ServiceInventoryCache;
 import org.apache.skywalking.oap.server.core.config.IComponentLibraryCatalogService;
@@ -44,7 +43,6 @@ import org.apache.skywalking.oap.server.core.query.entity.Span;
 import org.apache.skywalking.oap.server.core.query.entity.Trace;
 import org.apache.skywalking.oap.server.core.query.entity.TraceBrief;
 import org.apache.skywalking.oap.server.core.query.entity.TraceState;
-import org.apache.skywalking.oap.server.core.register.EndpointInventory;
 import org.apache.skywalking.oap.server.core.register.ServiceInventory;
 import org.apache.skywalking.oap.server.core.storage.StorageModule;
 import org.apache.skywalking.oap.server.core.storage.query.ITraceQueryDAO;
@@ -59,7 +57,6 @@ public class TraceQueryService implements Service {
     private final ModuleManager moduleManager;
     private ITraceQueryDAO traceQueryDAO;
     private ServiceInventoryCache serviceInventoryCache;
-    private EndpointInventoryCache endpointInventoryCache;
     private NetworkAddressInventoryCache networkAddressInventoryCache;
     private IComponentLibraryCatalogService componentLibraryCatalogService;
 
@@ -83,15 +80,6 @@ public class TraceQueryService implements Service {
         return serviceInventoryCache;
     }
 
-    private EndpointInventoryCache getEndpointInventoryCache() {
-        if (endpointInventoryCache == null) {
-            this.endpointInventoryCache = moduleManager.find(CoreModule.NAME)
-                                                       .provider()
-                                                       .getService(EndpointInventoryCache.class);
-        }
-        return endpointInventoryCache;
-    }
-
     private NetworkAddressInventoryCache getNetworkAddressInventoryCache() {
         if (networkAddressInventoryCache == null) {
             this.networkAddressInventoryCache = moduleManager.find(CoreModule.NAME)
@@ -110,14 +98,25 @@ public class TraceQueryService implements Service {
         return componentLibraryCatalogService;
     }
 
-    public TraceBrief queryBasicTraces(final int serviceId, final int serviceInstanceId, final int endpointId,
-        final String traceId, final String endpointName, final int minTraceDuration, int maxTraceDuration,
-        final TraceState traceState, final QueryOrder queryOrder, final Pagination paging, final long startTB,
-        final long endTB) throws IOException {
+    public TraceBrief queryBasicTraces(final int serviceId,
+                                       final int serviceInstanceId,
+                                       final int endpointId,
+                                       final String traceId,
+                                       final String endpointName,
+                                       final int minTraceDuration,
+                                       int maxTraceDuration,
+                                       final TraceState traceState,
+                                       final QueryOrder queryOrder,
+                                       final Pagination paging,
+                                       final long startTB,
+                                       final long endTB) throws IOException {
         PaginationUtils.Page page = PaginationUtils.INSTANCE.exchange(paging);
 
-        return getTraceQueryDAO().queryBasicTraces(startTB, endTB, minTraceDuration, maxTraceDuration, endpointName, serviceId, serviceInstanceId, endpointId, traceId, page
-            .getLimit(), page.getFrom(), traceState, queryOrder);
+        return getTraceQueryDAO().queryBasicTraces(
+            startTB, endTB, minTraceDuration, maxTraceDuration, endpointName, serviceId, serviceInstanceId, endpointId,
+            traceId, page
+                .getLimit(), page.getFrom(), traceState, queryOrder
+        );
     }
 
     public Trace queryTrace(final String traceId) throws IOException {
@@ -131,7 +130,9 @@ public class TraceQueryService implements Service {
                 if (nonNull(segment)) {
                     SegmentObject segmentObject = SegmentObject.parseFrom(segment.getDataBinary());
                     trace.getSpans()
-                         .addAll(buildSpanV2List(traceId, segment.getSegmentId(), segment.getServiceId(), segmentObject.getSpansList()));
+                         .addAll(buildSpanV2List(traceId, segment.getSegmentId(), segment.getServiceId(),
+                                                 segmentObject.getSpansList()
+                         ));
                 }
             }
         }
@@ -156,7 +157,7 @@ public class TraceQueryService implements Service {
     }
 
     private List<Span> buildSpanV2List(String traceId, String segmentId, int serviceId,
-        List<SpanObjectV2> spanObjects) {
+                                       List<SpanObjectV2> spanObjects) {
         List<Span> spans = new ArrayList<>();
 
         spanObjects.forEach(spanObject -> {
@@ -183,16 +184,7 @@ public class TraceQueryService implements Service {
                 span.setPeer(getNetworkAddressInventoryCache().get(spanObject.getPeerId()).getName());
             }
 
-            String endpointName = spanObject.getOperationName();
-            if (spanObject.getOperationNameId() != 0) {
-                EndpointInventory endpointInventory = getEndpointInventoryCache().get(spanObject.getOperationNameId());
-                if (nonNull(endpointInventory)) {
-                    endpointName = endpointInventory.getName();
-                } else {
-                    endpointName = Const.EMPTY_STRING;
-                }
-            }
-            span.setEndpointName(endpointName);
+            span.setEndpointName(spanObject.getOperationName());
 
             final ServiceInventory serviceInventory = getServiceInventoryCache().get(serviceId);
             if (serviceInventory != null) {
@@ -228,7 +220,8 @@ public class TraceQueryService implements Service {
                                                        .collect(Collectors.joining("."));
                 ref.setParentSegmentId(parentSegmentId);
 
-                span.setSegmentParentSpanId(ref.getParentSegmentId() + Const.SEGMENT_SPAN_SPLIT + ref.getParentSpanId());
+                span.setSegmentParentSpanId(
+                    ref.getParentSegmentId() + Const.SEGMENT_SPAN_SPLIT + ref.getParentSpanId());
 
                 span.getRefs().add(ref);
             });
diff --git a/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/query/entity/Call.java b/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/query/entity/Call.java
index e54f9a5..4f1da3d 100644
--- a/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/query/entity/Call.java
+++ b/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/query/entity/Call.java
@@ -29,8 +29,8 @@ import org.apache.skywalking.oap.server.core.source.DetectPoint;
 @Getter
 @Setter
 public class Call {
-    private Integer source;
-    private Integer target;
+    private String source;
+    private String target;
     private List<String> sourceComponents;
     private List<String> targetComponents;
     private String id;
@@ -45,11 +45,11 @@ public class Call {
         detectPoints = new ArrayList<>();
     }
 
-    public void setSource(int source) {
+    public void setSource(String source) {
         this.source = source;
     }
 
-    public void setTarget(int target) {
+    public void setTarget(String target) {
         this.target = target;
     }
 
@@ -84,8 +84,8 @@ public class Call {
     public static class CallDetail {
         @Setter(AccessLevel.PRIVATE)
         private String id;
-        private Integer source;
-        private Integer target;
+        private String source;
+        private String target;
         private DetectPoint detectPoint;
         private Integer componentId;
 
diff --git a/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/query/entity/EndpointInfo.java b/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/query/entity/EndpointInfo.java
index e9981f5..4554dde 100644
--- a/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/query/entity/EndpointInfo.java
+++ b/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/query/entity/EndpointInfo.java
@@ -24,7 +24,7 @@ import lombok.Setter;
 @Getter
 @Setter
 public class EndpointInfo {
-    private int id;
+    private String id;
     private String name;
     private int serviceId;
     private String serviceName;
diff --git a/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/query/entity/Log.java b/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/query/entity/Log.java
index a0192f6..cf774a5 100644
--- a/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/query/entity/Log.java
+++ b/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/query/entity/Log.java
@@ -29,7 +29,6 @@ public class Log {
     private String serviceInstanceName;
     private int serviceInstanceId;
     private String endpointName;
-    private int endpointId;
     private String traceId;
     private String timestamp;
     private boolean isError;
diff --git a/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/query/entity/Node.java b/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/query/entity/Node.java
index 4ee3afe..906a063 100644
--- a/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/query/entity/Node.java
+++ b/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/query/entity/Node.java
@@ -24,7 +24,7 @@ import lombok.Setter;
 @Getter
 @Setter
 public class Node {
-    private int id;
+    private String id;
     private String name;
     private String type;
     private boolean isReal;
diff --git a/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/register/service/EndpointInventoryRegister.java b/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/register/service/EndpointInventoryRegister.java
deleted file mode 100644
index 330ee65..0000000
--- a/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/register/service/EndpointInventoryRegister.java
+++ /dev/null
@@ -1,87 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- *
- */
-
-package org.apache.skywalking.oap.server.core.register.service;
-
-import java.util.Objects;
-import org.apache.skywalking.oap.server.core.Const;
-import org.apache.skywalking.oap.server.core.CoreModule;
-import org.apache.skywalking.oap.server.core.cache.EndpointInventoryCache;
-import org.apache.skywalking.oap.server.core.register.EndpointInventory;
-import org.apache.skywalking.oap.server.core.register.worker.InventoryStreamProcessor;
-import org.apache.skywalking.oap.server.core.source.DetectPoint;
-import org.apache.skywalking.oap.server.library.module.ModuleDefineHolder;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-import static java.util.Objects.isNull;
-
-public class EndpointInventoryRegister implements IEndpointInventoryRegister {
-
-    private static final Logger logger = LoggerFactory.getLogger(EndpointInventoryRegister.class);
-
-    private final ModuleDefineHolder moduleDefineHolder;
-    private EndpointInventoryCache cacheService;
-
-    public EndpointInventoryRegister(ModuleDefineHolder moduleDefineHolder) {
-        this.moduleDefineHolder = moduleDefineHolder;
-    }
-
-    private EndpointInventoryCache getCacheService() {
-        if (isNull(cacheService)) {
-            cacheService = moduleDefineHolder.find(CoreModule.NAME).provider().getService(EndpointInventoryCache.class);
-        }
-        return cacheService;
-    }
-
-    @Override
-    public int getOrCreate(int serviceId, String endpointName, DetectPoint detectPoint) {
-        int endpointId = getCacheService().getEndpointId(serviceId, endpointName, detectPoint.ordinal());
-
-        if (endpointId == Const.NONE) {
-            EndpointInventory endpointInventory = new EndpointInventory();
-            endpointInventory.setServiceId(serviceId);
-            endpointInventory.setName(endpointName);
-            endpointInventory.setDetectPoint(detectPoint.ordinal());
-
-            long now = System.currentTimeMillis();
-            endpointInventory.setRegisterTime(now);
-            endpointInventory.setHeartbeatTime(now);
-
-            InventoryStreamProcessor.getInstance().in(endpointInventory);
-        }
-        return endpointId;
-    }
-
-    @Override
-    public int get(int serviceId, String endpointName, DetectPoint detectPoint) {
-        return getCacheService().getEndpointId(serviceId, endpointName, detectPoint.ordinal());
-    }
-
-    @Override
-    public void heartbeat(int endpointId, long heartBeatTime) {
-        EndpointInventory endpointInventory = getCacheService().get(endpointId);
-        if (Objects.nonNull(endpointInventory)) {
-            endpointInventory.setHeartbeatTime(heartBeatTime);
-
-            InventoryStreamProcessor.getInstance().in(endpointInventory);
-        } else {
-            logger.warn("Endpoint {} heartbeat, but not found in storage.", endpointId);
-        }
-    }
-}
diff --git a/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/source/DefaultScopeDefine.java b/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/source/DefaultScopeDefine.java
index f6314b2..bfc8f5d 100644
--- a/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/source/DefaultScopeDefine.java
+++ b/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/source/DefaultScopeDefine.java
@@ -54,7 +54,7 @@ public class DefaultScopeDefine {
     public static final int ALARM = 13;
     public static final int SERVICE_INVENTORY = 14;
     public static final int SERVICE_INSTANCE_INVENTORY = 15;
-    public static final int ENDPOINT_INVENTORY = 16;
+    public static final int ENDPOINT_TRAFFIC = 16;
     public static final int DATABASE_ACCESS = 17;
     public static final int DATABASE_SLOW_STATEMENT = 18;
     public static final int SERVICE_INSTANCE_CLR_CPU = 19;
diff --git a/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/source/Endpoint.java b/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/source/Endpoint.java
index 370907b..a3b56ba 100644
--- a/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/source/Endpoint.java
+++ b/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/source/Endpoint.java
@@ -18,8 +18,11 @@
 
 package org.apache.skywalking.oap.server.core.source;
 
+import java.nio.charset.StandardCharsets;
+import java.util.Base64;
 import lombok.Getter;
 import lombok.Setter;
+import org.apache.skywalking.oap.server.core.Const;
 
 import static org.apache.skywalking.oap.server.core.source.DefaultScopeDefine.ENDPOINT;
 import static org.apache.skywalking.oap.server.core.source.DefaultScopeDefine.ENDPOINT_CATALOG_NAME;
@@ -32,17 +35,17 @@ public class Endpoint extends Source {
         return DefaultScopeDefine.ENDPOINT;
     }
 
+    /**
+     * @since 7.1.0 SkyWalking doesn't do endpoint register. Use name directly.
+     */
     @Override
     public String getEntityId() {
-        return String.valueOf(id);
+        return serviceId + Const.ID_SPLIT + Base64.getEncoder().encode(name.getBytes(StandardCharsets.UTF_8));
     }
 
     @Getter
     @Setter
-    private int id;
-    @Getter
-    @Setter
-    @ScopeDefaultColumn.DefinedByField(columnName = "name", requireDynamicActive = true)
+    @ScopeDefaultColumn.DefinedByField(columnName = "name")
     private String name;
     @Getter
     @Setter
@@ -50,7 +53,7 @@ public class Endpoint extends Source {
     private int serviceId;
     @Getter
     @Setter
-    @ScopeDefaultColumn.DefinedByField(columnName = "service_name", requireDynamicActive = true)
+    @ScopeDefaultColumn.DefinedByField(columnName = "service_name")
     private String serviceName;
     @Getter
     @Setter
diff --git a/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/source/EndpointRelation.java b/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/source/EndpointRelation.java
index 5a87d30..3416721 100644
--- a/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/source/EndpointRelation.java
+++ b/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/source/EndpointRelation.java
@@ -20,7 +20,7 @@ package org.apache.skywalking.oap.server.core.source;
 
 import lombok.Getter;
 import lombok.Setter;
-import org.apache.skywalking.oap.server.core.Const;
+import org.apache.skywalking.oap.server.core.analysis.manual.RelationDefineUtil;
 
 import static org.apache.skywalking.oap.server.core.source.DefaultScopeDefine.ENDPOINT_RELATION;
 
@@ -33,17 +33,19 @@ public class EndpointRelation extends Source {
         return DefaultScopeDefine.ENDPOINT_RELATION;
     }
 
+    /**
+     * @since 7.1.0 SkyWalking doesn't do endpoint register. Use name directly.
+     */
     @Override
     public String getEntityId() {
-        return String.valueOf(endpointId) + Const.ID_SPLIT + String.valueOf(childEndpointId);
+        return RelationDefineUtil.buildEndpointEntityId(new RelationDefineUtil.EndpointRelationDefine(
+            serviceId, endpoint, childServiceId, childEndpoint, componentId
+        ));
     }
 
     @Getter
     @Setter
-    private int endpointId;
-    @Getter
-    @Setter
-    @ScopeDefaultColumn.DefinedByField(columnName = "source_endpoint_name", requireDynamicActive = true)
+    @ScopeDefaultColumn.DefinedByField(columnName = "source_endpoint_name")
     private String endpoint;
     @Getter
     @Setter
@@ -62,10 +64,7 @@ public class EndpointRelation extends Source {
 
     @Getter
     @Setter
-    private int childEndpointId;
-    @Getter
-    @Setter
-    @ScopeDefaultColumn.DefinedByField(columnName = "child_endpoint_name", requireDynamicActive = true)
+    @ScopeDefaultColumn.DefinedByField(columnName = "child_endpoint_name")
     private String childEndpoint;
     @Getter
     @Setter
diff --git a/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/storage/cache/IEndpointInventoryCacheDAO.java b/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/storage/cache/IEndpointInventoryCacheDAO.java
index 6afa34a..00d41e2 100644
--- a/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/storage/cache/IEndpointInventoryCacheDAO.java
+++ b/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/storage/cache/IEndpointInventoryCacheDAO.java
@@ -18,12 +18,12 @@
 
 package org.apache.skywalking.oap.server.core.storage.cache;
 
-import org.apache.skywalking.oap.server.core.register.EndpointInventory;
+import org.apache.skywalking.oap.server.core.analysis.manual.endpoint.EndpointTraffic;
 import org.apache.skywalking.oap.server.core.storage.DAO;
 
 public interface IEndpointInventoryCacheDAO extends DAO {
 
     int getEndpointId(int serviceId, String endpointName, int detectPoint);
 
-    EndpointInventory get(int endpointId);
+    EndpointTraffic get(int endpointId);
 }
diff --git a/oap-server/server-query-plugin/query-graphql-plugin/src/main/java/org/apache/skywalking/oap/query/graphql/resolver/MetadataQuery.java b/oap-server/server-query-plugin/query-graphql-plugin/src/main/java/org/apache/skywalking/oap/query/graphql/resolver/MetadataQuery.java
index bfe4adf..8a143b7 100644
--- a/oap-server/server-query-plugin/query-graphql-plugin/src/main/java/org/apache/skywalking/oap/query/graphql/resolver/MetadataQuery.java
+++ b/oap-server/server-query-plugin/query-graphql-plugin/src/main/java/org/apache/skywalking/oap/query/graphql/resolver/MetadataQuery.java
@@ -27,6 +27,7 @@ import java.util.List;
 import org.apache.skywalking.oap.query.graphql.type.Duration;
 import org.apache.skywalking.oap.query.graphql.type.TimeInfo;
 import org.apache.skywalking.oap.server.core.CoreModule;
+import org.apache.skywalking.oap.server.core.analysis.manual.endpoint.EndpointTraffic;
 import org.apache.skywalking.oap.server.core.query.DurationUtils;
 import org.apache.skywalking.oap.server.core.query.MetadataQueryService;
 import org.apache.skywalking.oap.server.core.query.entity.ClusterBrief;
@@ -77,7 +78,7 @@ public class MetadataQuery implements GraphQLQueryResolver {
     }
 
     public List<Service> searchServices(final Duration duration,
-        final String keyword) throws IOException, ParseException {
+                                        final String keyword) throws IOException, ParseException {
         long startTimestamp = DurationUtils.INSTANCE.startTimeToTimestamp(duration.getStep(), duration.getStart());
         long endTimestamp = DurationUtils.INSTANCE.endTimeToTimestamp(duration.getStep(), duration.getEnd());
 
@@ -89,7 +90,7 @@ public class MetadataQuery implements GraphQLQueryResolver {
     }
 
     public List<ServiceInstance> getServiceInstances(final Duration duration,
-        final String serviceId) throws IOException, ParseException {
+                                                     final String serviceId) throws IOException, ParseException {
         long startTimestamp = DurationUtils.INSTANCE.startTimeToTimestamp(duration.getStep(), duration.getStart());
         long endTimestamp = DurationUtils.INSTANCE.endTimeToTimestamp(duration.getStep(), duration.getEnd());
 
@@ -97,11 +98,12 @@ public class MetadataQuery implements GraphQLQueryResolver {
     }
 
     public List<Endpoint> searchEndpoint(final String keyword, final String serviceId,
-        final int limit) throws IOException {
+                                         final int limit) throws IOException {
         return getMetadataQueryService().searchEndpoint(keyword, serviceId, limit);
     }
 
-    public EndpointInfo getEndpointInfo(final int endpointId) throws IOException {
+
+    public EndpointInfo getEndpointInfo(final String endpointId) throws IOException {
         return getMetadataQueryService().getEndpointInfo(endpointId);
     }
 
diff --git a/oap-server/server-query-plugin/query-graphql-plugin/src/main/resources/query-protocol b/oap-server/server-query-plugin/query-graphql-plugin/src/main/resources/query-protocol
index 28f18ae..3bd7111 160000
--- a/oap-server/server-query-plugin/query-graphql-plugin/src/main/resources/query-protocol
+++ b/oap-server/server-query-plugin/query-graphql-plugin/src/main/resources/query-protocol
@@ -1 +1 @@
-Subproject commit 28f18ae8dab49e60eb3d2e5cfd1a5c884a897ad0
+Subproject commit 3bd7111b9363033752d38982551ca7324a8dd74c
diff --git a/oap-server/server-receiver-plugin/jaeger-receiver-plugin/src/main/java/org/apache/skywalking/aop/server/receiver/jaeger/JaegerGRPCHandler.java b/oap-server/server-receiver-plugin/jaeger-receiver-plugin/src/main/java/org/apache/skywalking/aop/server/receiver/jaeger/JaegerGRPCHandler.java
index b18ebf8..f12b549 100644
--- a/oap-server/server-receiver-plugin/jaeger-receiver-plugin/src/main/java/org/apache/skywalking/aop/server/receiver/jaeger/JaegerGRPCHandler.java
+++ b/oap-server/server-receiver-plugin/jaeger-receiver-plugin/src/main/java/org/apache/skywalking/aop/server/receiver/jaeger/JaegerGRPCHandler.java
@@ -124,7 +124,7 @@ public class JaegerGRPCHandler extends CollectorServiceGrpc.CollectorServiceImpl
                                                                    .ordinal());
                             if (endpointId != Const.NONE) {
                                 CoreRegisterLinker.getEndpointInventoryRegister()
-                                                  .getOrCreate(finalServiceId, endpointName, DetectPoint.SERVER);
+                                                  .generate(finalServiceId, endpointName, DetectPoint.SERVER);
                             }
                         }
                     }
diff --git a/oap-server/server-receiver-plugin/skywalking-mesh-receiver-plugin/src/main/java/org/apache/skywalking/aop/server/receiver/mesh/ServiceMeshMetricDataDecorator.java b/oap-server/server-receiver-plugin/skywalking-mesh-receiver-plugin/src/main/java/org/apache/skywalking/aop/server/receiver/mesh/ServiceMeshMetricDataDecorator.java
index 0e1d5f7..f3e3e19 100644
--- a/oap-server/server-receiver-plugin/skywalking-mesh-receiver-plugin/src/main/java/org/apache/skywalking/aop/server/receiver/mesh/ServiceMeshMetricDataDecorator.java
+++ b/oap-server/server-receiver-plugin/skywalking-mesh-receiver-plugin/src/main/java/org/apache/skywalking/aop/server/receiver/mesh/ServiceMeshMetricDataDecorator.java
@@ -91,17 +91,6 @@ public class ServiceMeshMetricDataDecorator {
                 isRegistered = false;
             }
         }
-        String endpoint = origin.getEndpoint();
-
-        // Service mesh doesn't register client side endpoint.
-        DetectPoint point = origin.getDetectPoint();
-        if (DetectPoint.server.equals(point)) {
-            if (destServiceId != Const.NONE) {
-                endpointId = CoreRegisterLinker.getEndpointInventoryRegister()
-                                               .getOrCreate(destServiceId, endpoint, org.apache.skywalking.oap.server.core.source.DetectPoint
-                                                   .fromNetworkProtocolDetectPoint(point));
-            }
-        }
 
         return isRegistered;
     }
diff --git a/oap-server/server-receiver-plugin/skywalking-mesh-receiver-plugin/src/main/java/org/apache/skywalking/aop/server/receiver/mesh/TelemetryDataDispatcher.java b/oap-server/server-receiver-plugin/skywalking-mesh-receiver-plugin/src/main/java/org/apache/skywalking/aop/server/receiver/mesh/TelemetryDataDispatcher.java
index 1023162..d61c6e6 100644
--- a/oap-server/server-receiver-plugin/skywalking-mesh-receiver-plugin/src/main/java/org/apache/skywalking/aop/server/receiver/mesh/TelemetryDataDispatcher.java
+++ b/oap-server/server-receiver-plugin/skywalking-mesh-receiver-plugin/src/main/java/org/apache/skywalking/aop/server/receiver/mesh/TelemetryDataDispatcher.java
@@ -262,7 +262,6 @@ public class TelemetryDataDispatcher {
         ServiceMeshMetric metrics = decorator.getMetric();
         Endpoint endpoint = new Endpoint();
         endpoint.setTimeBucket(minuteTimeBucket);
-        endpoint.setId(decorator.getEndpointId());
         endpoint.setName(metrics.getEndpoint());
         endpoint.setServiceId(metrics.getDestServiceId());
         endpoint.setServiceName(getServiceName(metrics.getDestServiceId(), metrics.getDestServiceName()));
diff --git a/oap-server/server-receiver-plugin/skywalking-register-receiver-plugin/src/main/java/org/apache/skywalking/oap/server/receiver/register/provider/handler/v6/grpc/RegisterServiceHandler.java b/oap-server/server-receiver-plugin/skywalking-register-receiver-plugin/src/main/java/org/apache/skywalking/oap/server/receiver/register/provider/handler/v6/grpc/RegisterServiceHandler.java
index 798ac67..90f798e 100644
--- a/oap-server/server-receiver-plugin/skywalking-register-receiver-plugin/src/main/java/org/apache/skywalking/oap/server/receiver/register/provider/handler/v6/grpc/RegisterServiceHandler.java
+++ b/oap-server/server-receiver-plugin/skywalking-register-receiver-plugin/src/main/java/org/apache/skywalking/oap/server/receiver/register/provider/handler/v6/grpc/RegisterServiceHandler.java
@@ -45,7 +45,7 @@ import org.apache.skywalking.oap.server.core.cache.ServiceInventoryCache;
 import org.apache.skywalking.oap.server.core.register.NodeType;
 import org.apache.skywalking.oap.server.core.register.ServiceInstanceInventory;
 import org.apache.skywalking.oap.server.core.register.ServiceInventory;
-import org.apache.skywalking.oap.server.core.register.service.IEndpointInventoryRegister;
+import org.apache.skywalking.oap.server.core.register.service.IEndpointTrafficGenerator;
 import org.apache.skywalking.oap.server.core.register.service.INetworkAddressInventoryRegister;
 import org.apache.skywalking.oap.server.core.register.service.IServiceInstanceInventoryRegister;
 import org.apache.skywalking.oap.server.core.register.service.IServiceInventoryRegister;
@@ -76,7 +76,7 @@ public class RegisterServiceHandler extends RegisterGrpc.RegisterImplBase implem
     private final ServiceInstanceInventoryCache serviceInstanceInventoryCache;
     private final IServiceInventoryRegister serviceInventoryRegister;
     private final IServiceInstanceInventoryRegister serviceInstanceInventoryRegister;
-    private final IEndpointInventoryRegister inventoryService;
+    private final IEndpointTrafficGenerator inventoryService;
     private final INetworkAddressInventoryRegister networkAddressInventoryRegister;
 
     public RegisterServiceHandler(ModuleManager moduleManager) {
@@ -94,7 +94,7 @@ public class RegisterServiceHandler extends RegisterGrpc.RegisterImplBase implem
                                                              .getService(IServiceInstanceInventoryRegister.class);
         this.inventoryService = moduleManager.find(CoreModule.NAME)
                                              .provider()
-                                             .getService(IEndpointInventoryRegister.class);
+                                             .getService(IEndpointTrafficGenerator.class);
         this.networkAddressInventoryRegister = moduleManager.find(CoreModule.NAME)
                                                             .provider()
                                                             .getService(INetworkAddressInventoryRegister.class);
@@ -209,7 +209,7 @@ public class RegisterServiceHandler extends RegisterGrpc.RegisterImplBase implem
 
             DetectPoint detectPoint = DetectPoint.fromNetworkProtocolDetectPoint(endpoint.getFrom());
             if (DetectPoint.SERVER.equals(detectPoint)) {
-                int endpointId = inventoryService.getOrCreate(serviceId, endpointName, detectPoint);
+                int endpointId = inventoryService.generate(serviceId, endpointName, detectPoint);
 
                 if (endpointId != Const.NONE) {
                     builder.addElements(EndpointMappingElement.newBuilder()
diff --git a/oap-server/server-receiver-plugin/skywalking-sharing-server-plugin/src/main/java/org/apache/skywalking/oap/server/receiver/sharing/server/CoreRegisterLinker.java b/oap-server/server-receiver-plugin/skywalking-sharing-server-plugin/src/main/java/org/apache/skywalking/oap/server/receiver/sharing/server/CoreRegisterLinker.java
index 98316fb..843d425 100644
--- a/oap-server/server-receiver-plugin/skywalking-sharing-server-plugin/src/main/java/org/apache/skywalking/oap/server/receiver/sharing/server/CoreRegisterLinker.java
+++ b/oap-server/server-receiver-plugin/skywalking-sharing-server-plugin/src/main/java/org/apache/skywalking/oap/server/receiver/sharing/server/CoreRegisterLinker.java
@@ -21,7 +21,7 @@ package org.apache.skywalking.oap.server.receiver.sharing.server;
 import org.apache.skywalking.oap.server.core.CoreModule;
 import org.apache.skywalking.oap.server.core.cache.EndpointInventoryCache;
 import org.apache.skywalking.oap.server.core.cache.ServiceInventoryCache;
-import org.apache.skywalking.oap.server.core.register.service.IEndpointInventoryRegister;
+import org.apache.skywalking.oap.server.core.register.service.IEndpointTrafficGenerator;
 import org.apache.skywalking.oap.server.core.register.service.IServiceInstanceInventoryRegister;
 import org.apache.skywalking.oap.server.core.register.service.IServiceInventoryRegister;
 import org.apache.skywalking.oap.server.library.module.ModuleManager;
@@ -30,7 +30,7 @@ public class CoreRegisterLinker {
     private static volatile ModuleManager MODULE_MANAGER;
     private static volatile IServiceInventoryRegister SERVICE_INVENTORY_REGISTER;
     private static volatile IServiceInstanceInventoryRegister SERVICE_INSTANCE_INVENTORY_REGISTER;
-    private static volatile IEndpointInventoryRegister ENDPOINT_INVENTORY_REGISTER;
+    private static volatile IEndpointTrafficGenerator ENDPOINT_INVENTORY_REGISTER;
     private static volatile ServiceInventoryCache SERVICE_INVENTORY_CACHE;
     private static volatile EndpointInventoryCache ENDPOINT_INVENTORY_CACHE;
 
@@ -56,11 +56,11 @@ public class CoreRegisterLinker {
         return SERVICE_INSTANCE_INVENTORY_REGISTER;
     }
 
-    public static IEndpointInventoryRegister getEndpointInventoryRegister() {
+    public static IEndpointTrafficGenerator getEndpointInventoryRegister() {
         if (ENDPOINT_INVENTORY_REGISTER == null) {
             ENDPOINT_INVENTORY_REGISTER = MODULE_MANAGER.find(CoreModule.NAME)
                                                         .provider()
-                                                        .getService(IEndpointInventoryRegister.class);
+                                                        .getService(IEndpointTrafficGenerator.class);
         }
         return ENDPOINT_INVENTORY_REGISTER;
     }
diff --git a/oap-server/server-receiver-plugin/skywalking-trace-receiver-plugin/src/main/java/org/apache/skywalking/oap/server/receiver/trace/provider/parser/decorator/ReferenceDecorator.java b/oap-server/server-receiver-plugin/skywalking-trace-receiver-plugin/src/main/java/org/apache/skywalking/oap/server/receiver/trace/provider/parser/decorator/ReferenceDecorator.java
index 8ebfa21..05c7156 100644
--- a/oap-server/server-receiver-plugin/skywalking-trace-receiver-plugin/src/main/java/org/apache/skywalking/oap/server/receiver/trace/provider/parser/decorator/ReferenceDecorator.java
+++ b/oap-server/server-receiver-plugin/skywalking-trace-receiver-plugin/src/main/java/org/apache/skywalking/oap/server/receiver/trace/provider/parser/decorator/ReferenceDecorator.java
@@ -38,21 +38,6 @@ public class ReferenceDecorator implements StandardBuilder {
         this.isOrigin = false;
     }
 
-    public int getEntryEndpointId() {
-        if (isOrigin) {
-            return referenceObjectV2.getEntryEndpointId();
-        } else {
-            return referenceBuilderV2.getEntryEndpointId();
-        }
-    }
-
-    public void setEntryEndpointId(int value) {
-        if (isOrigin) {
-            toBuilder();
-        }
-        referenceBuilderV2.setEntryEndpointId(value);
-    }
-
     public String getEntryEndpointName() {
         if (isOrigin) {
             return referenceObjectV2.getEntryEndpoint();
@@ -61,13 +46,6 @@ public class ReferenceDecorator implements StandardBuilder {
         }
     }
 
-    public void setEntryEndpointName(String value) {
-        if (isOrigin) {
-            toBuilder();
-        }
-        referenceBuilderV2.setEntryEndpoint(value);
-    }
-
     public int getEntryServiceInstanceId() {
         if (isOrigin) {
             return referenceObjectV2.getEntryServiceInstanceId();
@@ -84,21 +62,6 @@ public class ReferenceDecorator implements StandardBuilder {
         }
     }
 
-    public int getParentEndpointId() {
-        if (isOrigin) {
-            return referenceObjectV2.getParentEndpointId();
-        } else {
-            return referenceBuilderV2.getParentEndpointId();
-        }
-    }
-
-    public void setParentEndpointId(int value) {
-        if (isOrigin) {
-            toBuilder();
-        }
-        referenceBuilderV2.setParentEndpointId(value);
-    }
-
     public String getParentEndpointName() {
         if (isOrigin) {
             return referenceObjectV2.getParentEndpoint();
@@ -107,13 +70,6 @@ public class ReferenceDecorator implements StandardBuilder {
         }
     }
 
-    public void setParentEndpointName(String value) {
-        if (isOrigin) {
-            toBuilder();
-        }
-        referenceBuilderV2.setParentEndpoint(value);
-    }
-
     public int getNetworkAddressId() {
         if (isOrigin) {
             return referenceObjectV2.getNetworkAddressId();
diff --git a/oap-server/server-receiver-plugin/skywalking-trace-receiver-plugin/src/main/java/org/apache/skywalking/oap/server/receiver/trace/provider/parser/decorator/SpanDecorator.java b/oap-server/server-receiver-plugin/skywalking-trace-receiver-plugin/src/main/java/org/apache/skywalking/oap/server/receiver/trace/provider/parser/decorator/SpanDecorator.java
index 8632ba6..620ca78 100644
--- a/oap-server/server-receiver-plugin/skywalking-trace-receiver-plugin/src/main/java/org/apache/skywalking/oap/server/receiver/trace/provider/parser/decorator/SpanDecorator.java
+++ b/oap-server/server-receiver-plugin/skywalking-trace-receiver-plugin/src/main/java/org/apache/skywalking/oap/server/receiver/trace/provider/parser/decorator/SpanDecorator.java
@@ -158,21 +158,6 @@ public class SpanDecorator implements StandardBuilder {
         spanBuilderV2.setPeer(peer);
     }
 
-    public int getOperationNameId() {
-        if (isOrigin) {
-            return spanObjectV2.getOperationNameId();
-        } else {
-            return spanBuilderV2.getOperationNameId();
-        }
-    }
-
-    public void setOperationNameId(int value) {
-        if (isOrigin) {
-            toBuilder();
-        }
-        spanBuilderV2.setOperationNameId(value);
-    }
-
     public String getOperationName() {
         if (isOrigin) {
             return spanObjectV2.getOperationName();
diff --git a/oap-server/server-receiver-plugin/skywalking-trace-receiver-plugin/src/main/java/org/apache/skywalking/oap/server/receiver/trace/provider/parser/listener/endpoint/MultiScopesSpanListener.java b/oap-server/server-receiver-plugin/skywalking-trace-receiver-plugin/src/main/java/org/apache/skywalking/oap/server/receiver/trace/provider/parser/listener/endpoint/MultiScopesSpanListener.java
index 68f9deb..ec70398 100755
--- a/oap-server/server-receiver-plugin/skywalking-trace-receiver-plugin/src/main/java/org/apache/skywalking/oap/server/receiver/trace/provider/parser/listener/endpoint/MultiScopesSpanListener.java
+++ b/oap-server/server-receiver-plugin/skywalking-trace-receiver-plugin/src/main/java/org/apache/skywalking/oap/server/receiver/trace/provider/parser/listener/endpoint/MultiScopesSpanListener.java
@@ -22,7 +22,6 @@ import java.util.ArrayList;
 import java.util.LinkedList;
 import java.util.List;
 import java.util.stream.Collectors;
-
 import lombok.extern.slf4j.Slf4j;
 import org.apache.skywalking.apm.network.common.KeyStringValuePair;
 import org.apache.skywalking.apm.network.language.agent.SpanLayer;
@@ -31,7 +30,6 @@ import org.apache.skywalking.apm.util.StringUtil;
 import org.apache.skywalking.oap.server.core.Const;
 import org.apache.skywalking.oap.server.core.CoreModule;
 import org.apache.skywalking.oap.server.core.analysis.TimeBucket;
-import org.apache.skywalking.oap.server.core.cache.EndpointInventoryCache;
 import org.apache.skywalking.oap.server.core.cache.NetworkAddressInventoryCache;
 import org.apache.skywalking.oap.server.core.cache.ServiceInstanceInventoryCache;
 import org.apache.skywalking.oap.server.core.cache.ServiceInventoryCache;
@@ -66,7 +64,6 @@ public class MultiScopesSpanListener implements EntrySpanListener, ExitSpanListe
     private final SourceReceiver sourceReceiver;
     private final ServiceInstanceInventoryCache instanceInventoryCache;
     private final ServiceInventoryCache serviceInventoryCache;
-    private final EndpointInventoryCache endpointInventoryCache;
 
     private final List<SourceBuilder> entrySourceBuilders;
     private final List<SourceBuilder> exitSourceBuilders;
@@ -88,9 +85,6 @@ public class MultiScopesSpanListener implements EntrySpanListener, ExitSpanListe
         this.serviceInventoryCache = moduleManager.find(CoreModule.NAME)
                                                   .provider()
                                                   .getService(ServiceInventoryCache.class);
-        this.endpointInventoryCache = moduleManager.find(CoreModule.NAME)
-                                                   .provider()
-                                                   .getService(EndpointInventoryCache.class);
         this.networkAddressInventoryCache = moduleManager.find(CoreModule.NAME)
                                                          .provider()
                                                          .getService(NetworkAddressInventoryCache.class);
@@ -121,10 +115,10 @@ public class MultiScopesSpanListener implements EntrySpanListener, ExitSpanListe
             for (int i = 0; i < spanDecorator.getRefsCount(); i++) {
                 ReferenceDecorator reference = spanDecorator.getRefs(i);
                 SourceBuilder sourceBuilder = new SourceBuilder();
-                if (reference.getParentEndpointId() == Const.INEXISTENCE_ENDPOINT_ID) {
-                    sourceBuilder.setSourceEndpointId(Const.USER_ENDPOINT_ID);
+                if (StringUtil.isEmpty(reference.getParentEndpointName())) {
+                    sourceBuilder.setSourceEndpointName(Const.USER_ENDPOINT_NAME);
                 } else {
-                    sourceBuilder.setSourceEndpointId(reference.getParentEndpointId());
+                    sourceBuilder.setSourceEndpointName(reference.getParentEndpointName());
                 }
 
                 final int networkAddressId = reference.getNetworkAddressId();
@@ -142,7 +136,7 @@ public class MultiScopesSpanListener implements EntrySpanListener, ExitSpanListe
                     sourceBuilder.setSourceServiceId(instanceInventoryCache.get(reference.getParentServiceInstanceId())
                                                                            .getServiceId());
                 }
-                sourceBuilder.setDestEndpointId(spanDecorator.getOperationNameId());
+                sourceBuilder.setDestEndpointName(spanDecorator.getOperationName());
                 sourceBuilder.setDestServiceInstanceId(segmentCoreInfo.getServiceInstanceId());
                 sourceBuilder.setDestServiceId(segmentCoreInfo.getServiceId());
                 sourceBuilder.setDetectPoint(DetectPoint.SERVER);
@@ -152,10 +146,10 @@ public class MultiScopesSpanListener implements EntrySpanListener, ExitSpanListe
             }
         } else {
             SourceBuilder sourceBuilder = new SourceBuilder();
-            sourceBuilder.setSourceEndpointId(Const.USER_ENDPOINT_ID);
+            sourceBuilder.setSourceEndpointName(Const.USER_ENDPOINT_NAME);
             sourceBuilder.setSourceServiceInstanceId(Const.USER_INSTANCE_ID);
             sourceBuilder.setSourceServiceId(Const.USER_SERVICE_ID);
-            sourceBuilder.setDestEndpointId(spanDecorator.getOperationNameId());
+            sourceBuilder.setDestEndpointName(spanDecorator.getOperationName());
             sourceBuilder.setDestServiceInstanceId(segmentCoreInfo.getServiceInstanceId());
             sourceBuilder.setDestServiceId(segmentCoreInfo.getServiceId());
             sourceBuilder.setDetectPoint(DetectPoint.SERVER);
@@ -262,16 +256,9 @@ public class MultiScopesSpanListener implements EntrySpanListener, ExitSpanListe
         sourceBuilder.setSourceServiceInstanceName(
             instanceInventoryCache.get(sourceBuilder.getSourceServiceInstanceId())
                                   .getName());
-        if (sourceBuilder.getSourceEndpointId() != Const.NONE) {
-            sourceBuilder.setSourceEndpointName(endpointInventoryCache.get(sourceBuilder.getSourceEndpointId())
-                                                                      .getName());
-        }
         sourceBuilder.setDestServiceName(serviceInventoryCache.get(sourceBuilder.getDestServiceId()).getName());
         sourceBuilder.setDestServiceInstanceName(instanceInventoryCache.get(sourceBuilder.getDestServiceInstanceId())
                                                                        .getName());
-        if (sourceBuilder.getDestEndpointId() != Const.NONE) {
-            sourceBuilder.setDestEndpointName(endpointInventoryCache.get(sourceBuilder.getDestEndpointId()).getName());
-        }
     }
 
     @Override
@@ -300,12 +287,10 @@ public class MultiScopesSpanListener implements EntrySpanListener, ExitSpanListe
 
         exitSourceBuilders.forEach(exitSourceBuilder -> {
             if (nonNull(entrySpanDecorator)) {
-                exitSourceBuilder.setSourceEndpointId(entrySpanDecorator.getOperationNameId());
+                exitSourceBuilder.setSourceEndpointName(entrySpanDecorator.getOperationName());
             } else {
-                exitSourceBuilder.setSourceEndpointId(Const.USER_ENDPOINT_ID);
+                exitSourceBuilder.setSourceEndpointName(Const.USER_ENDPOINT_NAME);
             }
-            exitSourceBuilder.setSourceEndpointName(endpointInventoryCache.get(exitSourceBuilder.getSourceEndpointId())
-                                                                          .getName());
 
             exitSourceBuilder.setTimeBucket(minuteTimeBucket);
             sourceReceiver.receive(exitSourceBuilder.toServiceRelation());
@@ -313,7 +298,8 @@ public class MultiScopesSpanListener implements EntrySpanListener, ExitSpanListe
             /*
              * Some of the agent can not have the upstream real network address, such as https://github.com/apache/skywalking-nginx-lua.
              */
-            String sourceLanguage = instanceInventoryCache.getServiceInstanceLanguage(exitSourceBuilder.getSourceServiceInstanceId());
+            String sourceLanguage = instanceInventoryCache.getServiceInstanceLanguage(
+                exitSourceBuilder.getSourceServiceInstanceId());
             if (!config.getNoUpstreamRealAddressAgents().contains(sourceLanguage)) {
                 sourceReceiver.receive(exitSourceBuilder.toServiceInstanceRelation());
             }
diff --git a/oap-server/server-receiver-plugin/skywalking-trace-receiver-plugin/src/main/java/org/apache/skywalking/oap/server/receiver/trace/provider/parser/listener/endpoint/SourceBuilder.java b/oap-server/server-receiver-plugin/skywalking-trace-receiver-plugin/src/main/java/org/apache/skywalking/oap/server/receiver/trace/provider/parser/listener/endpoint/SourceBuilder.java
index f6483be..ff2ebb2 100644
--- a/oap-server/server-receiver-plugin/skywalking-trace-receiver-plugin/src/main/java/org/apache/skywalking/oap/server/receiver/trace/provider/parser/listener/endpoint/SourceBuilder.java
+++ b/oap-server/server-receiver-plugin/skywalking-trace-receiver-plugin/src/main/java/org/apache/skywalking/oap/server/receiver/trace/provider/parser/listener/endpoint/SourceBuilder.java
@@ -48,9 +48,6 @@ class SourceBuilder {
     private String sourceServiceInstanceName;
     @Getter
     @Setter
-    private int sourceEndpointId;
-    @Getter
-    @Setter
     private String sourceEndpointName;
     @Getter
     @Setter
@@ -66,9 +63,6 @@ class SourceBuilder {
     private String destServiceInstanceName;
     @Getter
     @Setter
-    private int destEndpointId;
-    @Getter
-    @Setter
     private String destEndpointName;
     @Getter
     @Setter
@@ -176,7 +170,6 @@ class SourceBuilder {
 
     Endpoint toEndpoint() {
         Endpoint endpoint = new Endpoint();
-        endpoint.setId(destEndpointId);
         endpoint.setName(destEndpointName);
         endpoint.setServiceId(destServiceId);
         endpoint.setServiceName(destServiceName);
@@ -195,13 +188,11 @@ class SourceBuilder {
             return null;
         }
         EndpointRelation endpointRelation = new EndpointRelation();
-        endpointRelation.setEndpointId(sourceEndpointId);
         endpointRelation.setEndpoint(sourceEndpointName);
         endpointRelation.setServiceId(sourceServiceId);
         endpointRelation.setServiceName(sourceServiceName);
         endpointRelation.setServiceInstanceId(sourceServiceInstanceId);
         endpointRelation.setServiceInstanceName(sourceServiceInstanceName);
-        endpointRelation.setChildEndpointId(destEndpointId);
         endpointRelation.setChildEndpoint(destEndpointName);
         endpointRelation.setChildServiceId(destServiceId);
         endpointRelation.setChildServiceName(destServiceName);
diff --git a/oap-server/server-receiver-plugin/skywalking-trace-receiver-plugin/src/main/java/org/apache/skywalking/oap/server/receiver/trace/provider/parser/standardization/ReferenceIdExchanger.java b/oap-server/server-receiver-plugin/skywalking-trace-receiver-plugin/src/main/java/org/apache/skywalking/oap/server/receiver/trace/provider/parser/standardization/ReferenceIdExchanger.java
index 5203b86..5932fa0 100644
--- a/oap-server/server-receiver-plugin/skywalking-trace-receiver-plugin/src/main/java/org/apache/skywalking/oap/server/receiver/trace/provider/parser/standardization/ReferenceIdExchanger.java
+++ b/oap-server/server-receiver-plugin/skywalking-trace-receiver-plugin/src/main/java/org/apache/skywalking/oap/server/receiver/trace/provider/parser/standardization/ReferenceIdExchanger.java
@@ -23,7 +23,7 @@ import lombok.extern.slf4j.Slf4j;
 import org.apache.skywalking.oap.server.core.Const;
 import org.apache.skywalking.oap.server.core.CoreModule;
 import org.apache.skywalking.oap.server.core.cache.ServiceInstanceInventoryCache;
-import org.apache.skywalking.oap.server.core.register.service.IEndpointInventoryRegister;
+import org.apache.skywalking.oap.server.core.register.service.IEndpointTrafficGenerator;
 import org.apache.skywalking.oap.server.core.register.service.INetworkAddressInventoryRegister;
 import org.apache.skywalking.oap.server.core.source.DetectPoint;
 import org.apache.skywalking.oap.server.library.module.ModuleManager;
@@ -39,7 +39,7 @@ import org.apache.skywalking.oap.server.receiver.trace.provider.parser.decorator
 @Slf4j
 public class ReferenceIdExchanger implements IdExchanger<ReferenceDecorator> {
     private static ReferenceIdExchanger EXCHANGER;
-    private final IEndpointInventoryRegister endpointInventoryRegister;
+    private final IEndpointTrafficGenerator endpointInventoryRegister;
     private final ServiceInstanceInventoryCache serviceInstanceInventoryCache;
     private final INetworkAddressInventoryRegister networkAddressInventoryRegister;
 
@@ -53,7 +53,7 @@ public class ReferenceIdExchanger implements IdExchanger<ReferenceDecorator> {
     private ReferenceIdExchanger(ModuleManager moduleManager) {
         this.endpointInventoryRegister = moduleManager.find(CoreModule.NAME)
                                                       .provider()
-                                                      .getService(IEndpointInventoryRegister.class);
+                                                      .getService(IEndpointTrafficGenerator.class);
         this.networkAddressInventoryRegister = moduleManager.find(CoreModule.NAME)
                                                             .provider()
                                                             .getService(INetworkAddressInventoryRegister.class);
@@ -152,6 +152,6 @@ public class ReferenceIdExchanger implements IdExchanger<ReferenceDecorator> {
      * agent does the exchange, then always use endpoint id.
      */
     private int getEndpointId(int serviceId, String endpointName) {
-        return endpointInventoryRegister.getOrCreate(serviceId, endpointName, DetectPoint.SERVER);
+        return endpointInventoryRegister.generate(serviceId, endpointName, DetectPoint.SERVER);
     }
 }
diff --git a/oap-server/server-receiver-plugin/skywalking-trace-receiver-plugin/src/main/java/org/apache/skywalking/oap/server/receiver/trace/provider/parser/standardization/SpanExchanger.java b/oap-server/server-receiver-plugin/skywalking-trace-receiver-plugin/src/main/java/org/apache/skywalking/oap/server/receiver/trace/provider/parser/standardization/SpanExchanger.java
index c0383b2..9a12d28 100644
--- a/oap-server/server-receiver-plugin/skywalking-trace-receiver-plugin/src/main/java/org/apache/skywalking/oap/server/receiver/trace/provider/parser/standardization/SpanExchanger.java
+++ b/oap-server/server-receiver-plugin/skywalking-trace-receiver-plugin/src/main/java/org/apache/skywalking/oap/server/receiver/trace/provider/parser/standardization/SpanExchanger.java
@@ -33,7 +33,7 @@ import org.apache.skywalking.oap.server.core.config.IComponentLibraryCatalogServ
 import org.apache.skywalking.oap.server.core.register.NodeType;
 import org.apache.skywalking.oap.server.core.register.ServiceInstanceInventory;
 import org.apache.skywalking.oap.server.core.register.ServiceInventory;
-import org.apache.skywalking.oap.server.core.register.service.IEndpointInventoryRegister;
+import org.apache.skywalking.oap.server.core.register.service.IEndpointTrafficGenerator;
 import org.apache.skywalking.oap.server.core.register.service.INetworkAddressInventoryRegister;
 import org.apache.skywalking.oap.server.core.register.service.IServiceInstanceInventoryRegister;
 import org.apache.skywalking.oap.server.core.register.service.IServiceInventoryRegister;
@@ -54,7 +54,7 @@ public class SpanExchanger implements IdExchanger<SpanDecorator> {
     private final IServiceInventoryRegister serviceInventoryRegister;
     private final ServiceInstanceInventoryCache serviceInstanceInventoryCacheDAO;
     private final IServiceInstanceInventoryRegister serviceInstanceInventoryRegister;
-    private final IEndpointInventoryRegister endpointInventoryRegister;
+    private final IEndpointTrafficGenerator endpointInventoryRegister;
     private final INetworkAddressInventoryRegister networkAddressInventoryRegister;
     private final IComponentLibraryCatalogService componentLibraryCatalogService;
 
@@ -80,7 +80,7 @@ public class SpanExchanger implements IdExchanger<SpanDecorator> {
                                                              .getService(IServiceInstanceInventoryRegister.class);
         this.endpointInventoryRegister = moduleManager.find(CoreModule.NAME)
                                                       .provider()
-                                                      .getService(IEndpointInventoryRegister.class);
+                                                      .getService(IEndpointTrafficGenerator.class);
         this.networkAddressInventoryRegister = moduleManager.find(CoreModule.NAME)
                                                             .provider()
                                                             .getService(INetworkAddressInventoryRegister.class);
@@ -163,7 +163,7 @@ public class SpanExchanger implements IdExchanger<SpanDecorator> {
                 String endpointName = Strings.isNullOrEmpty(
                     standardBuilder.getOperationName()) ? Const.DOMAIN_OPERATION_NAME : standardBuilder
                     .getOperationName();
-                int endpointId = endpointInventoryRegister.getOrCreate(
+                int endpointId = endpointInventoryRegister.generate(
                     serviceId, endpointName, DetectPoint.fromSpanType(standardBuilder
                                                                           .getSpanType()));
 
diff --git a/oap-server/server-receiver-plugin/zipkin-receiver-plugin/src/main/java/org/apache/skywalking/oap/server/receiver/zipkin/trace/SpanForward.java b/oap-server/server-receiver-plugin/zipkin-receiver-plugin/src/main/java/org/apache/skywalking/oap/server/receiver/zipkin/trace/SpanForward.java
index 5d39bf9..27a48d4 100644
--- a/oap-server/server-receiver-plugin/zipkin-receiver-plugin/src/main/java/org/apache/skywalking/oap/server/receiver/zipkin/trace/SpanForward.java
+++ b/oap-server/server-receiver-plugin/zipkin-receiver-plugin/src/main/java/org/apache/skywalking/oap/server/receiver/zipkin/trace/SpanForward.java
@@ -81,7 +81,7 @@ public class SpanForward {
                             zipkinSpan.setEndpointId(endpointId);
                         } else if (config.isRegisterZipkinEndpoint()) {
                             CoreRegisterLinker.getEndpointInventoryRegister()
-                                              .getOrCreate(serviceId, spanName, DetectPoint.SERVER);
+                                              .generate(serviceId, spanName, DetectPoint.SERVER);
                         }
                     }
             }
diff --git a/oap-server/server-storage-plugin/storage-elasticsearch-plugin/src/main/java/org/apache/skywalking/oap/server/storage/plugin/elasticsearch/cache/EndpointInventoryCacheEsDAO.java b/oap-server/server-storage-plugin/storage-elasticsearch-plugin/src/main/java/org/apache/skywalking/oap/server/storage/plugin/elasticsearch/cache/EndpointInventoryCacheEsDAO.java
index c41a623..0e35acc 100644
--- a/oap-server/server-storage-plugin/storage-elasticsearch-plugin/src/main/java/org/apache/skywalking/oap/server/storage/plugin/elasticsearch/cache/EndpointInventoryCacheEsDAO.java
+++ b/oap-server/server-storage-plugin/storage-elasticsearch-plugin/src/main/java/org/apache/skywalking/oap/server/storage/plugin/elasticsearch/cache/EndpointInventoryCacheEsDAO.java
@@ -19,7 +19,7 @@
 package org.apache.skywalking.oap.server.storage.plugin.elasticsearch.cache;
 
 import org.apache.skywalking.oap.server.core.Const;
-import org.apache.skywalking.oap.server.core.register.EndpointInventory;
+import org.apache.skywalking.oap.server.core.analysis.manual.endpoint.EndpointTraffic;
 import org.apache.skywalking.oap.server.core.register.RegisterSource;
 import org.apache.skywalking.oap.server.core.storage.cache.IEndpointInventoryCacheDAO;
 import org.apache.skywalking.oap.server.library.client.elasticsearch.ElasticSearchClient;
@@ -36,7 +36,7 @@ public class EndpointInventoryCacheEsDAO extends EsDAO implements IEndpointInven
 
     private static final Logger logger = LoggerFactory.getLogger(EndpointInventoryCacheEsDAO.class);
 
-    protected final EndpointInventory.Builder builder = new EndpointInventory.Builder();
+    protected final EndpointTraffic.Builder builder = new EndpointTraffic.Builder();
 
     public EndpointInventoryCacheEsDAO(ElasticSearchClient client) {
         super(client);
@@ -45,8 +45,8 @@ public class EndpointInventoryCacheEsDAO extends EsDAO implements IEndpointInven
     @Override
     public int getEndpointId(int serviceId, String endpointName, int detectPoint) {
         try {
-            String id = EndpointInventory.buildId(serviceId, endpointName, detectPoint);
-            GetResponse response = getClient().get(EndpointInventory.INDEX_NAME, id);
+            String id = EndpointTraffic.buildId(serviceId, endpointName, detectPoint);
+            GetResponse response = getClient().get(EndpointTraffic.INDEX_NAME, id);
             if (response.isExists()) {
                 return (int) response.getSource().getOrDefault(RegisterSource.SEQUENCE, 0);
             } else {
@@ -59,13 +59,13 @@ public class EndpointInventoryCacheEsDAO extends EsDAO implements IEndpointInven
     }
 
     @Override
-    public EndpointInventory get(int endpointId) {
+    public EndpointTraffic get(int endpointId) {
         try {
             SearchSourceBuilder searchSourceBuilder = new SearchSourceBuilder();
-            searchSourceBuilder.query(QueryBuilders.termQuery(EndpointInventory.SEQUENCE, endpointId));
+            searchSourceBuilder.query(QueryBuilders.termQuery(EndpointTraffic.SEQUENCE, endpointId));
             searchSourceBuilder.size(1);
 
-            SearchResponse response = getClient().search(EndpointInventory.INDEX_NAME, searchSourceBuilder);
+            SearchResponse response = getClient().search(EndpointTraffic.INDEX_NAME, searchSourceBuilder);
             if (response.getHits().totalHits == 1) {
                 SearchHit searchHit = response.getHits().getAt(0);
                 return builder.map2Data(searchHit.getSourceAsMap());
diff --git a/oap-server/server-storage-plugin/storage-elasticsearch-plugin/src/main/java/org/apache/skywalking/oap/server/storage/plugin/elasticsearch/query/AggregationQueryEsDAO.java b/oap-server/server-storage-plugin/storage-elasticsearch-plugin/src/main/java/org/apache/skywalking/oap/server/storage/plugin/elasticsearch/query/AggregationQueryEsDAO.java
index e03c9bd..d2bed08 100644
--- a/oap-server/server-storage-plugin/storage-elasticsearch-plugin/src/main/java/org/apache/skywalking/oap/server/storage/plugin/elasticsearch/query/AggregationQueryEsDAO.java
+++ b/oap-server/server-storage-plugin/storage-elasticsearch-plugin/src/main/java/org/apache/skywalking/oap/server/storage/plugin/elasticsearch/query/AggregationQueryEsDAO.java
@@ -25,7 +25,7 @@ import org.apache.skywalking.oap.server.core.analysis.Downsampling;
 import org.apache.skywalking.oap.server.core.analysis.metrics.Metrics;
 import org.apache.skywalking.oap.server.core.query.entity.Order;
 import org.apache.skywalking.oap.server.core.query.entity.TopNEntity;
-import org.apache.skywalking.oap.server.core.register.EndpointInventory;
+import org.apache.skywalking.oap.server.core.analysis.manual.endpoint.EndpointTraffic;
 import org.apache.skywalking.oap.server.core.register.ServiceInstanceInventory;
 import org.apache.skywalking.oap.server.core.storage.model.ModelName;
 import org.apache.skywalking.oap.server.core.storage.query.IAggregationQueryDAO;
@@ -104,7 +104,7 @@ public class AggregationQueryEsDAO extends EsDAO implements IAggregationQueryDAO
         sourceBuilder.query(boolQueryBuilder);
 
         boolQueryBuilder.must().add(QueryBuilders.rangeQuery(Metrics.TIME_BUCKET).lte(endTB).gte(startTB));
-        boolQueryBuilder.must().add(QueryBuilders.termQuery(EndpointInventory.SERVICE_ID, serviceId));
+        boolQueryBuilder.must().add(QueryBuilders.termQuery(EndpointTraffic.SERVICE_ID, serviceId));
 
         return aggregation(indexName, valueCName, sourceBuilder, topN, order);
     }
diff --git a/oap-server/server-storage-plugin/storage-elasticsearch-plugin/src/main/java/org/apache/skywalking/oap/server/storage/plugin/elasticsearch/query/LogQueryEsDAO.java b/oap-server/server-storage-plugin/storage-elasticsearch-plugin/src/main/java/org/apache/skywalking/oap/server/storage/plugin/elasticsearch/query/LogQueryEsDAO.java
index a76ed67..ec44f00 100644
--- a/oap-server/server-storage-plugin/storage-elasticsearch-plugin/src/main/java/org/apache/skywalking/oap/server/storage/plugin/elasticsearch/query/LogQueryEsDAO.java
+++ b/oap-server/server-storage-plugin/storage-elasticsearch-plugin/src/main/java/org/apache/skywalking/oap/server/storage/plugin/elasticsearch/query/LogQueryEsDAO.java
@@ -49,8 +49,8 @@ public class LogQueryEsDAO extends EsDAO implements ILogQueryDAO {
 
     @Override
     public Logs queryLogs(String metricName, int serviceId, int serviceInstanceId, int endpointId, String traceId,
-        LogState state, String stateCode, Pagination paging, int from, int limit, long startSecondTB,
-        long endSecondTB) throws IOException {
+                          LogState state, String stateCode, Pagination paging, int from, int limit, long startSecondTB,
+                          long endSecondTB) throws IOException {
         SearchSourceBuilder sourceBuilder = SearchSourceBuilder.searchSource();
 
         BoolQueryBuilder boolQueryBuilder = QueryBuilders.boolQuery();
@@ -69,7 +69,7 @@ public class LogQueryEsDAO extends EsDAO implements ILogQueryDAO {
                             .add(QueryBuilders.termQuery(AbstractLogRecord.SERVICE_INSTANCE_ID, serviceInstanceId));
         }
         if (endpointId != Const.NONE) {
-            boolQueryBuilder.must().add(QueryBuilders.termQuery(AbstractLogRecord.ENDPOINT_ID, endpointId));
+            boolQueryBuilder.must().add(QueryBuilders.termQuery(AbstractLogRecord.ENDPOINT_NAME, endpointId));
         }
         if (!Strings.isNullOrEmpty(stateCode)) {
             boolQueryBuilder.must().add(QueryBuilders.termQuery(AbstractLogRecord.STATUS_CODE, stateCode));
@@ -79,10 +79,13 @@ public class LogQueryEsDAO extends EsDAO implements ILogQueryDAO {
         }
         if (LogState.ERROR.equals(state)) {
             boolQueryBuilder.must()
-                            .add(QueryBuilders.termQuery(AbstractLogRecord.IS_ERROR, BooleanUtils.booleanToValue(true)));
+                            .add(
+                                QueryBuilders.termQuery(AbstractLogRecord.IS_ERROR, BooleanUtils.booleanToValue(true)));
         } else if (LogState.SUCCESS.equals(state)) {
             boolQueryBuilder.must()
-                            .add(QueryBuilders.termQuery(AbstractLogRecord.IS_ERROR, BooleanUtils.booleanToValue(false)));
+                            .add(QueryBuilders.termQuery(AbstractLogRecord.IS_ERROR,
+                                                         BooleanUtils.booleanToValue(false)
+                            ));
         }
 
         sourceBuilder.size(limit);
@@ -98,12 +101,13 @@ public class LogQueryEsDAO extends EsDAO implements ILogQueryDAO {
             log.setServiceId(((Number) searchHit.getSourceAsMap().get(AbstractLogRecord.SERVICE_ID)).intValue());
             log.setServiceInstanceId(((Number) searchHit.getSourceAsMap()
                                                         .get(AbstractLogRecord.SERVICE_INSTANCE_ID)).intValue());
-            log.setEndpointId(((Number) searchHit.getSourceAsMap().get(AbstractLogRecord.ENDPOINT_ID)).intValue());
+            log.setEndpointName((String) searchHit.getSourceAsMap().get(AbstractLogRecord.ENDPOINT_NAME));
             log.setError(BooleanUtils.valueToBoolean(((Number) searchHit.getSourceAsMap()
                                                                         .get(AbstractLogRecord.IS_ERROR)).intValue()));
             log.setStatusCode((String) searchHit.getSourceAsMap().get(AbstractLogRecord.STATUS_CODE));
             log.setContentType(ContentType.instanceOf(((Number) searchHit.getSourceAsMap()
-                                                                         .get(AbstractLogRecord.CONTENT_TYPE)).intValue()));
+                                                                         .get(
+                                                                             AbstractLogRecord.CONTENT_TYPE)).intValue()));
             log.setContent((String) searchHit.getSourceAsMap().get(AbstractLogRecord.CONTENT));
 
             logs.getLogs().add(log);
diff --git a/oap-server/server-storage-plugin/storage-elasticsearch-plugin/src/main/java/org/apache/skywalking/oap/server/storage/plugin/elasticsearch/query/MetadataQueryEsDAO.java b/oap-server/server-storage-plugin/storage-elasticsearch-plugin/src/main/java/org/apache/skywalking/oap/server/storage/plugin/elasticsearch/query/MetadataQueryEsDAO.java
index 8e23694..7c3abb5 100644
--- a/oap-server/server-storage-plugin/storage-elasticsearch-plugin/src/main/java/org/apache/skywalking/oap/server/storage/plugin/elasticsearch/query/MetadataQueryEsDAO.java
+++ b/oap-server/server-storage-plugin/storage-elasticsearch-plugin/src/main/java/org/apache/skywalking/oap/server/storage/plugin/elasticsearch/query/MetadataQueryEsDAO.java
@@ -32,7 +32,7 @@ import org.apache.skywalking.oap.server.core.query.entity.Endpoint;
 import org.apache.skywalking.oap.server.core.query.entity.LanguageTrans;
 import org.apache.skywalking.oap.server.core.query.entity.Service;
 import org.apache.skywalking.oap.server.core.query.entity.ServiceInstance;
-import org.apache.skywalking.oap.server.core.register.EndpointInventory;
+import org.apache.skywalking.oap.server.core.analysis.manual.endpoint.EndpointTraffic;
 import org.apache.skywalking.oap.server.core.register.NodeType;
 import org.apache.skywalking.oap.server.core.register.RegisterSource;
 import org.apache.skywalking.oap.server.core.register.ServiceInstanceInventory;
@@ -90,12 +90,12 @@ public class MetadataQueryEsDAO extends EsDAO implements IMetadataQueryDAO {
         BoolQueryBuilder boolQueryBuilder = QueryBuilders.boolQuery();
 
         boolQueryBuilder.must()
-                        .add(QueryBuilders.termQuery(EndpointInventory.DETECT_POINT, DetectPoint.SERVER.ordinal()));
+                        .add(QueryBuilders.termQuery(EndpointTraffic.DETECT_POINT, DetectPoint.SERVER.ordinal()));
 
         sourceBuilder.query(boolQueryBuilder);
         sourceBuilder.size(0);
 
-        SearchResponse response = getClient().search(EndpointInventory.INDEX_NAME, sourceBuilder);
+        SearchResponse response = getClient().search(EndpointTraffic.INDEX_NAME, sourceBuilder);
         return (int) response.getHits().getTotalHits();
     }
 
@@ -218,28 +218,28 @@ public class MetadataQueryEsDAO extends EsDAO implements IMetadataQueryDAO {
         SearchSourceBuilder sourceBuilder = SearchSourceBuilder.searchSource();
 
         BoolQueryBuilder boolQueryBuilder = QueryBuilders.boolQuery();
-        boolQueryBuilder.must().add(QueryBuilders.termQuery(EndpointInventory.SERVICE_ID, serviceId));
+        boolQueryBuilder.must().add(QueryBuilders.termQuery(EndpointTraffic.SERVICE_ID, serviceId));
 
         if (!Strings.isNullOrEmpty(keyword)) {
-            String matchCName = MatchCNameBuilder.INSTANCE.build(EndpointInventory.NAME);
+            String matchCName = MatchCNameBuilder.INSTANCE.build(EndpointTraffic.NAME);
             boolQueryBuilder.must().add(QueryBuilders.matchQuery(matchCName, keyword));
         }
 
         boolQueryBuilder.must()
-                        .add(QueryBuilders.termQuery(EndpointInventory.DETECT_POINT, DetectPoint.SERVER.ordinal()));
+                        .add(QueryBuilders.termQuery(EndpointTraffic.DETECT_POINT, DetectPoint.SERVER.ordinal()));
 
         sourceBuilder.query(boolQueryBuilder);
         sourceBuilder.size(limit);
 
-        SearchResponse response = getClient().search(EndpointInventory.INDEX_NAME, sourceBuilder);
+        SearchResponse response = getClient().search(EndpointTraffic.INDEX_NAME, sourceBuilder);
 
         List<Endpoint> endpoints = new ArrayList<>();
         for (SearchHit searchHit : response.getHits()) {
             Map<String, Object> sourceAsMap = searchHit.getSourceAsMap();
 
             Endpoint endpoint = new Endpoint();
-            endpoint.setId(((Number) sourceAsMap.get(EndpointInventory.SEQUENCE)).intValue());
-            endpoint.setName((String) sourceAsMap.get(EndpointInventory.NAME));
+            endpoint.setId(((Number) sourceAsMap.get(EndpointTraffic.SEQUENCE)).intValue());
+            endpoint.setName((String) sourceAsMap.get(EndpointTraffic.NAME));
             endpoints.add(endpoint);
         }
 
diff --git a/oap-server/server-storage-plugin/storage-elasticsearch-plugin/src/main/java/org/apache/skywalking/oap/server/storage/plugin/elasticsearch/query/TopologyQueryEsDAO.java b/oap-server/server-storage-plugin/storage-elasticsearch-plugin/src/main/java/org/apache/skywalking/oap/server/storage/plugin/elasticsearch/query/TopologyQueryEsDAO.java
index 27b66bb..24ae7fb 100644
--- a/oap-server/server-storage-plugin/storage-elasticsearch-plugin/src/main/java/org/apache/skywalking/oap/server/storage/plugin/elasticsearch/query/TopologyQueryEsDAO.java
+++ b/oap-server/server-storage-plugin/storage-elasticsearch-plugin/src/main/java/org/apache/skywalking/oap/server/storage/plugin/elasticsearch/query/TopologyQueryEsDAO.java
@@ -21,6 +21,7 @@ package org.apache.skywalking.oap.server.storage.plugin.elasticsearch.query;
 import org.apache.skywalking.oap.server.core.UnexpectedException;
 import org.apache.skywalking.oap.server.core.analysis.Downsampling;
 import org.apache.skywalking.oap.server.core.analysis.manual.RelationDefineUtil;
+import org.apache.skywalking.oap.server.core.analysis.manual.endpoint.EndpointTraffic;
 import org.apache.skywalking.oap.server.core.analysis.manual.endpointrelation.EndpointRelationServerSideMetrics;
 import org.apache.skywalking.oap.server.core.analysis.manual.relation.instance.ServiceInstanceRelationClientSideMetrics;
 import org.apache.skywalking.oap.server.core.analysis.manual.relation.instance.ServiceInstanceRelationServerSideMetrics;
@@ -192,9 +193,9 @@ public class TopologyQueryEsDAO extends EsDAO implements ITopologyQueryDAO {
         BoolQueryBuilder serviceIdBoolQuery = QueryBuilders.boolQuery();
         boolQuery.must().add(serviceIdBoolQuery);
         serviceIdBoolQuery.should()
-                          .add(QueryBuilders.termQuery(EndpointRelationServerSideMetrics.SOURCE_ENDPOINT_ID, destEndpointId));
+                          .add(QueryBuilders.termQuery(EndpointRelationServerSideMetrics.SOURCE_ENDPOINT, destEndpointId));
         serviceIdBoolQuery.should()
-                          .add(QueryBuilders.termQuery(EndpointRelationServerSideMetrics.DEST_ENDPOINT_ID, destEndpointId));
+                          .add(QueryBuilders.termQuery(EndpointRelationServerSideMetrics.DEST_ENDPOINT, destEndpointId));
 
         sourceBuilder.query(boolQuery);
 
@@ -212,10 +213,10 @@ public class TopologyQueryEsDAO extends EsDAO implements ITopologyQueryDAO {
         for (Terms.Bucket entityBucket : entityTerms.getBuckets()) {
             String entityId = entityBucket.getKeyAsString();
 
-            RelationDefineUtil.RelationDefine relationDefine = RelationDefineUtil.splitEntityId(entityId);
+            RelationDefineUtil.EndpointRelationDefine relationDefine = RelationDefineUtil.splitEndpointEntityId(entityId);
             Call.CallDetail call = new Call.CallDetail();
-            call.setSource(relationDefine.getSource());
-            call.setTarget(relationDefine.getDest());
+            call.setSource(EndpointTraffic.buildId(relationDefine.getSourceServiceId(), relationDefine.getSource(), DetectPoint.SERVER.ordinal()));
+            call.setTarget(EndpointTraffic.buildId(relationDefine.getDestServiceId(), relationDefine.getDest(), DetectPoint.SERVER.ordinal()));
             call.setComponentId(relationDefine.getComponentId());
             call.setDetectPoint(detectPoint);
             call.generateID();
diff --git a/oap-server/server-storage-plugin/storage-elasticsearch7-plugin/src/main/java/org/apache/skywalking/oap/server/storage/plugin/elasticsearch7/cache/EndpointInventoryCacheEs7DAO.java b/oap-server/server-storage-plugin/storage-elasticsearch7-plugin/src/main/java/org/apache/skywalking/oap/server/storage/plugin/elasticsearch7/cache/EndpointInventoryCacheEs7DAO.java
index ea6b651..064bb6c 100644
--- a/oap-server/server-storage-plugin/storage-elasticsearch7-plugin/src/main/java/org/apache/skywalking/oap/server/storage/plugin/elasticsearch7/cache/EndpointInventoryCacheEs7DAO.java
+++ b/oap-server/server-storage-plugin/storage-elasticsearch7-plugin/src/main/java/org/apache/skywalking/oap/server/storage/plugin/elasticsearch7/cache/EndpointInventoryCacheEs7DAO.java
@@ -18,7 +18,7 @@
 
 package org.apache.skywalking.oap.server.storage.plugin.elasticsearch7.cache;
 
-import org.apache.skywalking.oap.server.core.register.EndpointInventory;
+import org.apache.skywalking.oap.server.core.analysis.manual.endpoint.EndpointTraffic;
 import org.apache.skywalking.oap.server.library.client.elasticsearch.ElasticSearchClient;
 import org.apache.skywalking.oap.server.storage.plugin.elasticsearch.cache.EndpointInventoryCacheEsDAO;
 import org.elasticsearch.action.search.SearchResponse;
@@ -37,13 +37,13 @@ public class EndpointInventoryCacheEs7DAO extends EndpointInventoryCacheEsDAO {
     }
 
     @Override
-    public EndpointInventory get(int endpointId) {
+    public EndpointTraffic get(int endpointId) {
         try {
             SearchSourceBuilder searchSourceBuilder = new SearchSourceBuilder();
-            searchSourceBuilder.query(QueryBuilders.termQuery(EndpointInventory.SEQUENCE, endpointId));
+            searchSourceBuilder.query(QueryBuilders.termQuery(EndpointTraffic.SEQUENCE, endpointId));
             searchSourceBuilder.size(1);
 
-            SearchResponse response = getClient().search(EndpointInventory.INDEX_NAME, searchSourceBuilder);
+            SearchResponse response = getClient().search(EndpointTraffic.INDEX_NAME, searchSourceBuilder);
             if (response.getHits().getTotalHits().value == 1) {
                 SearchHit searchHit = response.getHits().getAt(0);
                 return builder.map2Data(searchHit.getSourceAsMap());
diff --git a/oap-server/server-storage-plugin/storage-elasticsearch7-plugin/src/main/java/org/apache/skywalking/oap/server/storage/plugin/elasticsearch7/query/LogQueryEs7DAO.java b/oap-server/server-storage-plugin/storage-elasticsearch7-plugin/src/main/java/org/apache/skywalking/oap/server/storage/plugin/elasticsearch7/query/LogQueryEs7DAO.java
index ff17d72..6d2e997 100644
--- a/oap-server/server-storage-plugin/storage-elasticsearch7-plugin/src/main/java/org/apache/skywalking/oap/server/storage/plugin/elasticsearch7/query/LogQueryEs7DAO.java
+++ b/oap-server/server-storage-plugin/storage-elasticsearch7-plugin/src/main/java/org/apache/skywalking/oap/server/storage/plugin/elasticsearch7/query/LogQueryEs7DAO.java
@@ -19,6 +19,8 @@
 package org.apache.skywalking.oap.server.storage.plugin.elasticsearch7.query;
 
 import com.google.common.base.Strings;
+import java.io.IOException;
+import java.util.List;
 import org.apache.skywalking.oap.server.core.Const;
 import org.apache.skywalking.oap.server.core.analysis.manual.log.AbstractLogRecord;
 import org.apache.skywalking.oap.server.core.analysis.record.Record;
@@ -38,9 +40,6 @@ import org.elasticsearch.index.query.QueryBuilders;
 import org.elasticsearch.search.SearchHit;
 import org.elasticsearch.search.builder.SearchSourceBuilder;
 
-import java.io.IOException;
-import java.util.List;
-
 import static org.apache.skywalking.oap.server.core.analysis.manual.log.AbstractLogRecord.TRACE_ID;
 
 public class LogQueryEs7DAO extends EsDAO implements ILogQueryDAO {
@@ -50,8 +49,8 @@ public class LogQueryEs7DAO extends EsDAO implements ILogQueryDAO {
 
     @Override
     public Logs queryLogs(String metricName, int serviceId, int serviceInstanceId, int endpointId, String traceId,
-        LogState state, String stateCode, Pagination paging, int from, int limit, long startSecondTB,
-        long endSecondTB) throws IOException {
+                          LogState state, String stateCode, Pagination paging, int from, int limit, long startSecondTB,
+                          long endSecondTB) throws IOException {
         SearchSourceBuilder sourceBuilder = SearchSourceBuilder.searchSource();
 
         BoolQueryBuilder boolQueryBuilder = QueryBuilders.boolQuery();
@@ -70,7 +69,7 @@ public class LogQueryEs7DAO extends EsDAO implements ILogQueryDAO {
                             .add(QueryBuilders.termQuery(AbstractLogRecord.SERVICE_INSTANCE_ID, serviceInstanceId));
         }
         if (endpointId != Const.NONE) {
-            boolQueryBuilder.must().add(QueryBuilders.termQuery(AbstractLogRecord.ENDPOINT_ID, endpointId));
+            boolQueryBuilder.must().add(QueryBuilders.termQuery(AbstractLogRecord.ENDPOINT_NAME, endpointId));
         }
         if (!Strings.isNullOrEmpty(stateCode)) {
             boolQueryBuilder.must().add(QueryBuilders.termQuery(AbstractLogRecord.STATUS_CODE, stateCode));
@@ -80,10 +79,13 @@ public class LogQueryEs7DAO extends EsDAO implements ILogQueryDAO {
         }
         if (LogState.ERROR.equals(state)) {
             boolQueryBuilder.must()
-                            .add(QueryBuilders.termQuery(AbstractLogRecord.IS_ERROR, BooleanUtils.booleanToValue(true)));
+                            .add(
+                                QueryBuilders.termQuery(AbstractLogRecord.IS_ERROR, BooleanUtils.booleanToValue(true)));
         } else if (LogState.SUCCESS.equals(state)) {
             boolQueryBuilder.must()
-                            .add(QueryBuilders.termQuery(AbstractLogRecord.IS_ERROR, BooleanUtils.booleanToValue(false)));
+                            .add(QueryBuilders.termQuery(AbstractLogRecord.IS_ERROR,
+                                                         BooleanUtils.booleanToValue(false)
+                            ));
         }
 
         sourceBuilder.size(limit);
@@ -99,12 +101,13 @@ public class LogQueryEs7DAO extends EsDAO implements ILogQueryDAO {
             log.setServiceId(((Number) searchHit.getSourceAsMap().get(AbstractLogRecord.SERVICE_ID)).intValue());
             log.setServiceInstanceId(((Number) searchHit.getSourceAsMap()
                                                         .get(AbstractLogRecord.SERVICE_INSTANCE_ID)).intValue());
-            log.setEndpointId(((Number) searchHit.getSourceAsMap().get(AbstractLogRecord.ENDPOINT_ID)).intValue());
+            log.setEndpointName((String) searchHit.getSourceAsMap().get(AbstractLogRecord.ENDPOINT_NAME));
             log.setError(BooleanUtils.valueToBoolean(((Number) searchHit.getSourceAsMap()
                                                                         .get(AbstractLogRecord.IS_ERROR)).intValue()));
             log.setStatusCode((String) searchHit.getSourceAsMap().get(AbstractLogRecord.STATUS_CODE));
             log.setContentType(ContentType.instanceOf(((Number) searchHit.getSourceAsMap()
-                                                                         .get(AbstractLogRecord.CONTENT_TYPE)).intValue()));
+                                                                         .get(
+                                                                             AbstractLogRecord.CONTENT_TYPE)).intValue()));
             log.setContent((String) searchHit.getSourceAsMap().get(AbstractLogRecord.CONTENT));
 
             logs.getLogs().add(log);
diff --git a/oap-server/server-storage-plugin/storage-elasticsearch7-plugin/src/main/java/org/apache/skywalking/oap/server/storage/plugin/elasticsearch7/query/MetadataQueryEs7DAO.java b/oap-server/server-storage-plugin/storage-elasticsearch7-plugin/src/main/java/org/apache/skywalking/oap/server/storage/plugin/elasticsearch7/query/MetadataQueryEs7DAO.java
index d421b69..55d1a54 100644
--- a/oap-server/server-storage-plugin/storage-elasticsearch7-plugin/src/main/java/org/apache/skywalking/oap/server/storage/plugin/elasticsearch7/query/MetadataQueryEs7DAO.java
+++ b/oap-server/server-storage-plugin/storage-elasticsearch7-plugin/src/main/java/org/apache/skywalking/oap/server/storage/plugin/elasticsearch7/query/MetadataQueryEs7DAO.java
@@ -19,7 +19,7 @@
 package org.apache.skywalking.oap.server.storage.plugin.elasticsearch7.query;
 
 import java.io.IOException;
-import org.apache.skywalking.oap.server.core.register.EndpointInventory;
+import org.apache.skywalking.oap.server.core.analysis.manual.endpoint.EndpointTraffic;
 import org.apache.skywalking.oap.server.core.register.NodeType;
 import org.apache.skywalking.oap.server.core.register.ServiceInventory;
 import org.apache.skywalking.oap.server.core.source.DetectPoint;
@@ -61,12 +61,12 @@ public class MetadataQueryEs7DAO extends MetadataQueryEsDAO {
         BoolQueryBuilder boolQueryBuilder = QueryBuilders.boolQuery();
 
         boolQueryBuilder.must()
-                        .add(QueryBuilders.termQuery(EndpointInventory.DETECT_POINT, DetectPoint.SERVER.ordinal()));
+                        .add(QueryBuilders.termQuery(EndpointTraffic.DETECT_POINT, DetectPoint.SERVER.ordinal()));
 
         sourceBuilder.query(boolQueryBuilder);
         sourceBuilder.size(0);
 
-        SearchResponse response = getClient().search(EndpointInventory.INDEX_NAME, sourceBuilder);
+        SearchResponse response = getClient().search(EndpointTraffic.INDEX_NAME, sourceBuilder);
         return (int) response.getHits().getTotalHits().value;
     }
 
diff --git a/oap-server/server-storage-plugin/storage-influxdb-plugin/src/main/java/org/apache/skywalking/oap/server/storage/plugin/influxdb/query/AggregationQuery.java b/oap-server/server-storage-plugin/storage-influxdb-plugin/src/main/java/org/apache/skywalking/oap/server/storage/plugin/influxdb/query/AggregationQuery.java
index 36436bb..de8765c 100644
--- a/oap-server/server-storage-plugin/storage-influxdb-plugin/src/main/java/org/apache/skywalking/oap/server/storage/plugin/influxdb/query/AggregationQuery.java
+++ b/oap-server/server-storage-plugin/storage-influxdb-plugin/src/main/java/org/apache/skywalking/oap/server/storage/plugin/influxdb/query/AggregationQuery.java
@@ -27,7 +27,7 @@ import lombok.extern.slf4j.Slf4j;
 import org.apache.skywalking.oap.server.core.analysis.Downsampling;
 import org.apache.skywalking.oap.server.core.query.entity.Order;
 import org.apache.skywalking.oap.server.core.query.entity.TopNEntity;
-import org.apache.skywalking.oap.server.core.register.EndpointInventory;
+import org.apache.skywalking.oap.server.core.analysis.manual.endpoint.EndpointTraffic;
 import org.apache.skywalking.oap.server.core.register.ServiceInstanceInventory;
 import org.apache.skywalking.oap.server.core.storage.model.ModelName;
 import org.apache.skywalking.oap.server.core.storage.query.IAggregationQueryDAO;
@@ -85,7 +85,7 @@ public class AggregationQuery implements IAggregationQueryDAO {
                                             long startTB, long endTB, Order order) throws IOException {
         return getTopNEntity(
             downsampling, indName,
-            subQuery(EndpointInventory.SERVICE_ID, serviceId, indName, valueCName, startTB, endTB), order, topN
+            subQuery(EndpointTraffic.SERVICE_ID, serviceId, indName, valueCName, startTB, endTB), order, topN
         );
     }
 
diff --git a/oap-server/server-storage-plugin/storage-influxdb-plugin/src/main/java/org/apache/skywalking/oap/server/storage/plugin/influxdb/query/LogQuery.java b/oap-server/server-storage-plugin/storage-influxdb-plugin/src/main/java/org/apache/skywalking/oap/server/storage/plugin/influxdb/query/LogQuery.java
index 6b15592..c70a802 100644
--- a/oap-server/server-storage-plugin/storage-influxdb-plugin/src/main/java/org/apache/skywalking/oap/server/storage/plugin/influxdb/query/LogQuery.java
+++ b/oap-server/server-storage-plugin/storage-influxdb-plugin/src/main/java/org/apache/skywalking/oap/server/storage/plugin/influxdb/query/LogQuery.java
@@ -42,7 +42,7 @@ import org.influxdb.querybuilder.clauses.ConjunctionClause;
 
 import static org.apache.skywalking.oap.server.core.analysis.manual.log.AbstractLogRecord.CONTENT;
 import static org.apache.skywalking.oap.server.core.analysis.manual.log.AbstractLogRecord.CONTENT_TYPE;
-import static org.apache.skywalking.oap.server.core.analysis.manual.log.AbstractLogRecord.ENDPOINT_ID;
+import static org.apache.skywalking.oap.server.core.analysis.manual.log.AbstractLogRecord.ENDPOINT_NAME;
 import static org.apache.skywalking.oap.server.core.analysis.manual.log.AbstractLogRecord.IS_ERROR;
 import static org.apache.skywalking.oap.server.core.analysis.manual.log.AbstractLogRecord.SERVICE_ID;
 import static org.apache.skywalking.oap.server.core.analysis.manual.log.AbstractLogRecord.SERVICE_INSTANCE_ID;
@@ -76,7 +76,7 @@ public class LogQuery implements ILogQueryDAO {
             recallQuery.and(eq(SERVICE_INSTANCE_ID, serviceInstanceId));
         }
         if (endpointId != Const.NONE) {
-            recallQuery.and(eq(ENDPOINT_ID, endpointId));
+            recallQuery.and(eq(ENDPOINT_NAME, endpointId));
         }
         if (!Strings.isNullOrEmpty(traceId)) {
             recallQuery.and(eq(TRACE_ID, traceId));
@@ -103,7 +103,7 @@ public class LogQuery implements ILogQueryDAO {
             recallQuery.limit(limit);
         }
 
-        SelectQueryImpl countQuery = select().count(ENDPOINT_ID).from(client.getDatabase(), metricName);
+        SelectQueryImpl countQuery = select().count(ENDPOINT_NAME).from(client.getDatabase(), metricName);
         for (ConjunctionClause clause : recallQuery.getClauses()) {
             countQuery.where(clause);
         }
@@ -135,7 +135,7 @@ public class LogQuery implements ILogQueryDAO {
                 log.setContent((String) data.get(CONTENT));
                 log.setContentType(ContentType.instanceOf((int) data.get(CONTENT_TYPE)));
 
-                log.setEndpointId((int) data.get(ENDPOINT_ID));
+                log.setEndpointName(data.get(ENDPOINT_NAME));
                 log.setTraceId((String) data.get(TRACE_ID));
                 log.setTimestamp((String) data.get(TIMESTAMP));
 
diff --git a/oap-server/server-storage-plugin/storage-influxdb-plugin/src/main/java/org/apache/skywalking/oap/server/storage/plugin/influxdb/query/TopologyQuery.java b/oap-server/server-storage-plugin/storage-influxdb-plugin/src/main/java/org/apache/skywalking/oap/server/storage/plugin/influxdb/query/TopologyQuery.java
index 34b81c8..de9e40a 100644
--- a/oap-server/server-storage-plugin/storage-influxdb-plugin/src/main/java/org/apache/skywalking/oap/server/storage/plugin/influxdb/query/TopologyQuery.java
+++ b/oap-server/server-storage-plugin/storage-influxdb-plugin/src/main/java/org/apache/skywalking/oap/server/storage/plugin/influxdb/query/TopologyQuery.java
@@ -25,6 +25,7 @@ import java.util.List;
 import lombok.extern.slf4j.Slf4j;
 import org.apache.skywalking.oap.server.core.analysis.Downsampling;
 import org.apache.skywalking.oap.server.core.analysis.manual.RelationDefineUtil;
+import org.apache.skywalking.oap.server.core.analysis.manual.endpoint.EndpointTraffic;
 import org.apache.skywalking.oap.server.core.analysis.manual.endpointrelation.EndpointRelationServerSideMetrics;
 import org.apache.skywalking.oap.server.core.analysis.manual.relation.instance.ServiceInstanceRelationClientSideMetrics;
 import org.apache.skywalking.oap.server.core.analysis.manual.relation.instance.ServiceInstanceRelationServerSideMetrics;
@@ -160,21 +161,21 @@ public class TopologyQuery implements ITopologyQueryDAO {
             measurement,
             startTB,
             endTB,
-            EndpointRelationServerSideMetrics.SOURCE_ENDPOINT_ID,
-            EndpointRelationServerSideMetrics.DEST_ENDPOINT_ID,
+            EndpointRelationServerSideMetrics.SOURCE_ENDPOINT,
+            EndpointRelationServerSideMetrics.DEST_ENDPOINT,
             Collections.emptyList()
         );
-        query.and(eq(EndpointRelationServerSideMetrics.DEST_ENDPOINT_ID, destEndpointId));
+        query.and(eq(EndpointRelationServerSideMetrics.DEST_ENDPOINT, destEndpointId));
 
         WhereQueryImpl query2 = buildServiceCallsQuery(
             measurement,
             startTB,
             endTB,
-            EndpointRelationServerSideMetrics.SOURCE_ENDPOINT_ID,
-            EndpointRelationServerSideMetrics.DEST_ENDPOINT_ID,
+            EndpointRelationServerSideMetrics.SOURCE_ENDPOINT,
+            EndpointRelationServerSideMetrics.DEST_ENDPOINT,
             Collections.emptyList()
         );
-        query2.and(eq(EndpointRelationServerSideMetrics.SOURCE_ENDPOINT_ID, destEndpointId));
+        query2.and(eq(EndpointRelationServerSideMetrics.SOURCE_ENDPOINT, destEndpointId));
 
         List<Call.CallDetail> calls = buildCalls(query, DetectPoint.SERVER);
         calls.addAll(buildCalls(query2, DetectPoint.CLIENT));
@@ -243,10 +244,10 @@ public class TopologyQuery implements ITopologyQueryDAO {
         series.getValues().forEach(values -> {
             Call.CallDetail call = new Call.CallDetail();
             String entityId = (String) values.get(1);
-            RelationDefineUtil.RelationDefine relationDefine = RelationDefineUtil.splitEntityId(entityId);
+            RelationDefineUtil.EndpointRelationDefine relationDefine = RelationDefineUtil.splitEndpointEntityId(entityId);
 
-            call.setSource(relationDefine.getSource());
-            call.setTarget(relationDefine.getDest());
+            call.setSource(EndpointTraffic.buildId(relationDefine.getSourceServiceId(), relationDefine.getSource(), DetectPoint.SERVER.ordinal()));
+            call.setTarget(EndpointTraffic.buildId(relationDefine.getDestServiceId(), relationDefine.getDest(), DetectPoint.SERVER.ordinal()));
             call.setComponentId(relationDefine.getComponentId());
             call.setDetectPoint(detectPoint);
             call.generateID();
diff --git a/oap-server/server-storage-plugin/storage-jdbc-hikaricp-plugin/src/main/java/org/apache/skywalking/oap/server/storage/plugin/jdbc/h2/dao/H2AggregationQueryDAO.java b/oap-server/server-storage-plugin/storage-jdbc-hikaricp-plugin/src/main/java/org/apache/skywalking/oap/server/storage/plugin/jdbc/h2/dao/H2AggregationQueryDAO.java
index dea2b0b..4bab452 100644
--- a/oap-server/server-storage-plugin/storage-jdbc-hikaricp-plugin/src/main/java/org/apache/skywalking/oap/server/storage/plugin/jdbc/h2/dao/H2AggregationQueryDAO.java
+++ b/oap-server/server-storage-plugin/storage-jdbc-hikaricp-plugin/src/main/java/org/apache/skywalking/oap/server/storage/plugin/jdbc/h2/dao/H2AggregationQueryDAO.java
@@ -24,7 +24,7 @@ import org.apache.skywalking.oap.server.core.analysis.Downsampling;
 import org.apache.skywalking.oap.server.core.analysis.metrics.Metrics;
 import org.apache.skywalking.oap.server.core.query.entity.Order;
 import org.apache.skywalking.oap.server.core.query.entity.TopNEntity;
-import org.apache.skywalking.oap.server.core.register.EndpointInventory;
+import org.apache.skywalking.oap.server.core.analysis.manual.endpoint.EndpointTraffic;
 import org.apache.skywalking.oap.server.core.register.ServiceInstanceInventory;
 import org.apache.skywalking.oap.server.core.storage.model.ModelName;
 import org.apache.skywalking.oap.server.core.storage.query.IAggregationQueryDAO;
@@ -77,7 +77,7 @@ public class H2AggregationQueryDAO implements IAggregationQueryDAO {
     public List<TopNEntity> getEndpointTopN(int serviceId, String indName, String valueCName, int topN,
         Downsampling downsampling, long startTB, long endTB, Order order) throws IOException {
         return topNQuery(indName, valueCName, topN, downsampling, startTB, endTB, order, (sql, conditions) -> {
-            sql.append(" and ").append(EndpointInventory.SERVICE_ID).append("=?");
+            sql.append(" and ").append(EndpointTraffic.SERVICE_ID).append("=?");
             conditions.add(serviceId);
         });
     }
diff --git a/oap-server/server-storage-plugin/storage-jdbc-hikaricp-plugin/src/main/java/org/apache/skywalking/oap/server/storage/plugin/jdbc/h2/dao/H2EndpointInventoryCacheDAO.java b/oap-server/server-storage-plugin/storage-jdbc-hikaricp-plugin/src/main/java/org/apache/skywalking/oap/server/storage/plugin/jdbc/h2/dao/H2EndpointInventoryCacheDAO.java
index 9d86508..f75be15 100644
--- a/oap-server/server-storage-plugin/storage-jdbc-hikaricp-plugin/src/main/java/org/apache/skywalking/oap/server/storage/plugin/jdbc/h2/dao/H2EndpointInventoryCacheDAO.java
+++ b/oap-server/server-storage-plugin/storage-jdbc-hikaricp-plugin/src/main/java/org/apache/skywalking/oap/server/storage/plugin/jdbc/h2/dao/H2EndpointInventoryCacheDAO.java
@@ -19,7 +19,7 @@
 package org.apache.skywalking.oap.server.storage.plugin.jdbc.h2.dao;
 
 import java.io.IOException;
-import org.apache.skywalking.oap.server.core.register.EndpointInventory;
+import org.apache.skywalking.oap.server.core.analysis.manual.endpoint.EndpointTraffic;
 import org.apache.skywalking.oap.server.core.storage.cache.IEndpointInventoryCacheDAO;
 import org.apache.skywalking.oap.server.library.client.jdbc.hikaricp.JDBCHikariCPClient;
 import org.slf4j.Logger;
@@ -35,14 +35,14 @@ public class H2EndpointInventoryCacheDAO extends H2SQLExecutor implements IEndpo
 
     @Override
     public int getEndpointId(int serviceId, String endpointName, int detectPoint) {
-        String id = EndpointInventory.buildId(serviceId, endpointName, detectPoint);
-        return getEntityIDByID(h2Client, EndpointInventory.SEQUENCE, EndpointInventory.INDEX_NAME, id);
+        String id = EndpointTraffic.buildId(serviceId, endpointName, detectPoint);
+        return getEntityIDByID(h2Client, EndpointTraffic.SEQUENCE, EndpointTraffic.INDEX_NAME, id);
     }
 
     @Override
-    public EndpointInventory get(int endpointId) {
+    public EndpointTraffic get(int endpointId) {
         try {
-            return (EndpointInventory) getByColumn(h2Client, EndpointInventory.INDEX_NAME, EndpointInventory.SEQUENCE, endpointId, new EndpointInventory.Builder());
+            return (EndpointTraffic) getByColumn(h2Client, EndpointTraffic.INDEX_NAME, EndpointTraffic.SEQUENCE, endpointId, new EndpointTraffic.Builder());
         } catch (IOException e) {
             logger.error(e.getMessage(), e);
             return null;
diff --git a/oap-server/server-storage-plugin/storage-jdbc-hikaricp-plugin/src/main/java/org/apache/skywalking/oap/server/storage/plugin/jdbc/h2/dao/H2LogQueryDAO.java b/oap-server/server-storage-plugin/storage-jdbc-hikaricp-plugin/src/main/java/org/apache/skywalking/oap/server/storage/plugin/jdbc/h2/dao/H2LogQueryDAO.java
index 80b9033..95f90a1 100644
--- a/oap-server/server-storage-plugin/storage-jdbc-hikaricp-plugin/src/main/java/org/apache/skywalking/oap/server/storage/plugin/jdbc/h2/dao/H2LogQueryDAO.java
+++ b/oap-server/server-storage-plugin/storage-jdbc-hikaricp-plugin/src/main/java/org/apache/skywalking/oap/server/storage/plugin/jdbc/h2/dao/H2LogQueryDAO.java
@@ -39,7 +39,7 @@ import java.util.List;
 
 import static org.apache.skywalking.oap.server.core.analysis.manual.log.AbstractLogRecord.CONTENT;
 import static org.apache.skywalking.oap.server.core.analysis.manual.log.AbstractLogRecord.CONTENT_TYPE;
-import static org.apache.skywalking.oap.server.core.analysis.manual.log.AbstractLogRecord.ENDPOINT_ID;
+import static org.apache.skywalking.oap.server.core.analysis.manual.log.AbstractLogRecord.ENDPOINT_NAME;
 import static org.apache.skywalking.oap.server.core.analysis.manual.log.AbstractLogRecord.SERVICE_ID;
 import static org.apache.skywalking.oap.server.core.analysis.manual.log.AbstractLogRecord.SERVICE_INSTANCE_ID;
 import static org.apache.skywalking.oap.server.core.analysis.manual.log.AbstractLogRecord.STATUS_CODE;
@@ -78,7 +78,7 @@ public class H2LogQueryDAO implements ILogQueryDAO {
             parameters.add(serviceInstanceId);
         }
         if (endpointId != Const.NONE) {
-            sql.append(" and ").append(AbstractLogRecord.ENDPOINT_ID).append(" = ?");
+            sql.append(" and ").append(AbstractLogRecord.ENDPOINT_NAME).append(" = ?");
             parameters.add(endpointId);
         }
         if (!Strings.isNullOrEmpty(stateCode)) {
@@ -114,7 +114,7 @@ public class H2LogQueryDAO implements ILogQueryDAO {
                     Log log = new Log();
                     log.setServiceId(resultSet.getInt(SERVICE_ID));
                     log.setServiceInstanceId(resultSet.getInt(SERVICE_INSTANCE_ID));
-                    log.setEndpointId(resultSet.getInt(ENDPOINT_ID));
+                    log.setEndpointName(resultSet.getString(ENDPOINT_NAME));
                     log.setTraceId(resultSet.getString(TRACE_ID));
                     log.setTimestamp(resultSet.getString(TIMESTAMP));
                     log.setStatusCode(resultSet.getString(STATUS_CODE));
diff --git a/oap-server/server-storage-plugin/storage-jdbc-hikaricp-plugin/src/main/java/org/apache/skywalking/oap/server/storage/plugin/jdbc/h2/dao/H2MetadataQueryDAO.java b/oap-server/server-storage-plugin/storage-jdbc-hikaricp-plugin/src/main/java/org/apache/skywalking/oap/server/storage/plugin/jdbc/h2/dao/H2MetadataQueryDAO.java
index 1f3caf3..2d8f11f 100644
--- a/oap-server/server-storage-plugin/storage-jdbc-hikaricp-plugin/src/main/java/org/apache/skywalking/oap/server/storage/plugin/jdbc/h2/dao/H2MetadataQueryDAO.java
+++ b/oap-server/server-storage-plugin/storage-jdbc-hikaricp-plugin/src/main/java/org/apache/skywalking/oap/server/storage/plugin/jdbc/h2/dao/H2MetadataQueryDAO.java
@@ -35,7 +35,7 @@ import org.apache.skywalking.oap.server.core.query.entity.Endpoint;
 import org.apache.skywalking.oap.server.core.query.entity.LanguageTrans;
 import org.apache.skywalking.oap.server.core.query.entity.Service;
 import org.apache.skywalking.oap.server.core.query.entity.ServiceInstance;
-import org.apache.skywalking.oap.server.core.register.EndpointInventory;
+import org.apache.skywalking.oap.server.core.analysis.manual.endpoint.EndpointTraffic;
 import org.apache.skywalking.oap.server.core.register.NodeType;
 import org.apache.skywalking.oap.server.core.register.RegisterSource;
 import org.apache.skywalking.oap.server.core.register.ServiceInstanceInventory;
@@ -91,8 +91,8 @@ public class H2MetadataQueryDAO implements IMetadataQueryDAO {
     public int numOfEndpoint() throws IOException {
         StringBuilder sql = new StringBuilder();
         List<Object> condition = new ArrayList<>(5);
-        sql.append("select count(*) num from ").append(EndpointInventory.INDEX_NAME).append(" where ");
-        sql.append(EndpointInventory.DETECT_POINT).append("=").append(DetectPoint.SERVER.ordinal());
+        sql.append("select count(*) num from ").append(EndpointTraffic.INDEX_NAME).append(" where ");
+        sql.append(EndpointTraffic.DETECT_POINT).append("=").append(DetectPoint.SERVER.ordinal());
 
         return getNum(sql, condition);
     }
@@ -238,13 +238,13 @@ public class H2MetadataQueryDAO implements IMetadataQueryDAO {
     public List<Endpoint> searchEndpoint(String keyword, String serviceId, int limit) throws IOException {
         StringBuilder sql = new StringBuilder();
         List<Object> condition = new ArrayList<>(5);
-        sql.append("select * from ").append(EndpointInventory.INDEX_NAME).append(" where ");
-        sql.append(EndpointInventory.SERVICE_ID).append("=?");
+        sql.append("select * from ").append(EndpointTraffic.INDEX_NAME).append(" where ");
+        sql.append(EndpointTraffic.SERVICE_ID).append("=?");
         condition.add(serviceId);
         if (!Strings.isNullOrEmpty(keyword)) {
-            sql.append(" and ").append(EndpointInventory.NAME).append(" like '%").append(keyword).append("%' ");
+            sql.append(" and ").append(EndpointTraffic.NAME).append(" like '%").append(keyword).append("%' ");
         }
-        sql.append(" and ").append(EndpointInventory.DETECT_POINT).append(" = ?");
+        sql.append(" and ").append(EndpointTraffic.DETECT_POINT).append(" = ?");
         condition.add(DetectPoint.SERVER.ordinal());
         sql.append(" limit ").append(limit);
 
@@ -254,8 +254,8 @@ public class H2MetadataQueryDAO implements IMetadataQueryDAO {
 
                 while (resultSet.next()) {
                     Endpoint endpoint = new Endpoint();
-                    endpoint.setId(resultSet.getInt(EndpointInventory.SEQUENCE));
-                    endpoint.setName(resultSet.getString(EndpointInventory.NAME));
+                    endpoint.setId(resultSet.getInt(EndpointTraffic.SEQUENCE));
+                    endpoint.setName(resultSet.getString(EndpointTraffic.NAME));
                     endpoints.add(endpoint);
                 }
             }
diff --git a/oap-server/server-storage-plugin/storage-jdbc-hikaricp-plugin/src/main/java/org/apache/skywalking/oap/server/storage/plugin/jdbc/h2/dao/H2TopologyQueryDAO.java b/oap-server/server-storage-plugin/storage-jdbc-hikaricp-plugin/src/main/java/org/apache/skywalking/oap/server/storage/plugin/jdbc/h2/dao/H2TopologyQueryDAO.java
index ebf68e8..aef2e9a 100644
--- a/oap-server/server-storage-plugin/storage-jdbc-hikaricp-plugin/src/main/java/org/apache/skywalking/oap/server/storage/plugin/jdbc/h2/dao/H2TopologyQueryDAO.java
+++ b/oap-server/server-storage-plugin/storage-jdbc-hikaricp-plugin/src/main/java/org/apache/skywalking/oap/server/storage/plugin/jdbc/h2/dao/H2TopologyQueryDAO.java
@@ -26,6 +26,7 @@ import java.util.ArrayList;
 import java.util.List;
 import org.apache.skywalking.oap.server.core.analysis.Downsampling;
 import org.apache.skywalking.oap.server.core.analysis.manual.RelationDefineUtil;
+import org.apache.skywalking.oap.server.core.analysis.manual.endpoint.EndpointTraffic;
 import org.apache.skywalking.oap.server.core.analysis.manual.endpointrelation.EndpointRelationServerSideMetrics;
 import org.apache.skywalking.oap.server.core.analysis.manual.relation.instance.ServiceInstanceRelationClientSideMetrics;
 import org.apache.skywalking.oap.server.core.analysis.manual.relation.instance.ServiceInstanceRelationServerSideMetrics;
@@ -92,8 +93,8 @@ public class H2TopologyQueryDAO implements ITopologyQueryDAO {
         long endTB, int destEndpointId) throws IOException {
         String tableName = ModelName.build(downsampling, EndpointRelationServerSideMetrics.INDEX_NAME);
 
-        List<Call.CallDetail> calls = loadEndpointFromSide(tableName, startTB, endTB, EndpointRelationServerSideMetrics.SOURCE_ENDPOINT_ID, EndpointRelationServerSideMetrics.DEST_ENDPOINT_ID, destEndpointId, false);
-        calls.addAll(loadEndpointFromSide(tableName, startTB, endTB, EndpointRelationServerSideMetrics.SOURCE_ENDPOINT_ID, EndpointRelationServerSideMetrics.DEST_ENDPOINT_ID, destEndpointId, true));
+        List<Call.CallDetail> calls = loadEndpointFromSide(tableName, startTB, endTB, EndpointRelationServerSideMetrics.SOURCE_ENDPOINT, EndpointRelationServerSideMetrics.DEST_ENDPOINT, destEndpointId, false);
+        calls.addAll(loadEndpointFromSide(tableName, startTB, endTB, EndpointRelationServerSideMetrics.SOURCE_ENDPOINT, EndpointRelationServerSideMetrics.DEST_ENDPOINT, destEndpointId, true));
         return calls;
     }
 
@@ -182,10 +183,10 @@ public class H2TopologyQueryDAO implements ITopologyQueryDAO {
         while (resultSet.next()) {
             Call.CallDetail call = new Call.CallDetail();
             String entityId = resultSet.getString(Metrics.ENTITY_ID);
-            RelationDefineUtil.RelationDefine relationDefine = RelationDefineUtil.splitEntityId(entityId);
+            RelationDefineUtil.EndpointRelationDefine relationDefine = RelationDefineUtil.splitEndpointEntityId(entityId);
 
-            call.setSource(relationDefine.getSource());
-            call.setTarget(relationDefine.getDest());
+            call.setSource(EndpointTraffic.buildId(relationDefine.getSourceServiceId(), relationDefine.getSource(), DetectPoint.SERVER.ordinal()));
+            call.setTarget(EndpointTraffic.buildId(relationDefine.getDestServiceId(), relationDefine.getDest(), DetectPoint.SERVER.ordinal()));
             call.setComponentId(relationDefine.getComponentId());
             if (isClientSide) {
                 call.setDetectPoint(DetectPoint.CLIENT);
diff --git a/oap-server/server-storage-plugin/storage-jdbc-hikaricp-plugin/src/main/java/org/apache/skywalking/oap/server/storage/plugin/jdbc/mysql/MySQLTableInstaller.java b/oap-server/server-storage-plugin/storage-jdbc-hikaricp-plugin/src/main/java/org/apache/skywalking/oap/server/storage/plugin/jdbc/mysql/MySQLTableInstaller.java
index 21c2f8e..52c735d 100644
--- a/oap-server/server-storage-plugin/storage-jdbc-hikaricp-plugin/src/main/java/org/apache/skywalking/oap/server/storage/plugin/jdbc/mysql/MySQLTableInstaller.java
+++ b/oap-server/server-storage-plugin/storage-jdbc-hikaricp-plugin/src/main/java/org/apache/skywalking/oap/server/storage/plugin/jdbc/mysql/MySQLTableInstaller.java
@@ -37,7 +37,7 @@ import org.apache.skywalking.oap.server.storage.plugin.jdbc.SQLBuilder;
 import org.apache.skywalking.oap.server.storage.plugin.jdbc.h2.dao.H2TableInstaller;
 
 import static org.apache.skywalking.oap.server.core.source.DefaultScopeDefine.ALARM;
-import static org.apache.skywalking.oap.server.core.source.DefaultScopeDefine.ENDPOINT_INVENTORY;
+import static org.apache.skywalking.oap.server.core.source.DefaultScopeDefine.ENDPOINT_TRAFFIC;
 import static org.apache.skywalking.oap.server.core.source.DefaultScopeDefine.NETWORK_ADDRESS;
 import static org.apache.skywalking.oap.server.core.source.DefaultScopeDefine.SEGMENT;
 import static org.apache.skywalking.oap.server.core.source.DefaultScopeDefine.SERVICE_INSTANCE_INVENTORY;
@@ -111,7 +111,7 @@ public class MySQLTableInstaller extends H2TableInstaller {
             case SERVICE_INVENTORY:
             case SERVICE_INSTANCE_INVENTORY:
             case NETWORK_ADDRESS:
-            case ENDPOINT_INVENTORY:
+            case ENDPOINT_TRAFFIC:
                 createInventoryIndexes(client, model);
                 return;
             case SEGMENT:
diff --git a/oap-server/server-tools/profile-exporter/tool-profile-snapshot-server-mock/src/main/java/org/apache/skywalking/oap/server/tool/profile/core/MockCoreModuleProvider.java b/oap-server/server-tools/profile-exporter/tool-profile-snapshot-server-mock/src/main/java/org/apache/skywalking/oap/server/tool/profile/core/MockCoreModuleProvider.java
index 6143f9d..c55af8c 100755
--- a/oap-server/server-tools/profile-exporter/tool-profile-snapshot-server-mock/src/main/java/org/apache/skywalking/oap/server/tool/profile/core/MockCoreModuleProvider.java
+++ b/oap-server/server-tools/profile-exporter/tool-profile-snapshot-server-mock/src/main/java/org/apache/skywalking/oap/server/tool/profile/core/MockCoreModuleProvider.java
@@ -41,8 +41,8 @@ import org.apache.skywalking.oap.server.core.query.ProfileTaskQueryService;
 import org.apache.skywalking.oap.server.core.query.TopNRecordsQueryService;
 import org.apache.skywalking.oap.server.core.query.TopologyQueryService;
 import org.apache.skywalking.oap.server.core.query.TraceQueryService;
-import org.apache.skywalking.oap.server.core.register.service.EndpointInventoryRegister;
-import org.apache.skywalking.oap.server.core.register.service.IEndpointInventoryRegister;
+import org.apache.skywalking.oap.server.core.register.service.EndpointTrafficGeneratorGenerator;
+import org.apache.skywalking.oap.server.core.register.service.IEndpointTrafficGenerator;
 import org.apache.skywalking.oap.server.core.register.service.INetworkAddressInventoryRegister;
 import org.apache.skywalking.oap.server.core.register.service.IServiceInstanceInventoryRegister;
 import org.apache.skywalking.oap.server.core.register.service.IServiceInventoryRegister;
@@ -142,7 +142,7 @@ public class MockCoreModuleProvider extends CoreModuleProvider {
         this.registerServiceImplementation(IServiceInstanceInventoryRegister.class, new ServiceInstanceInventoryRegister(getManager()));
 
         this.registerServiceImplementation(EndpointInventoryCache.class, new EndpointInventoryCache(getManager(), moduleConfig));
-        this.registerServiceImplementation(IEndpointInventoryRegister.class, new EndpointInventoryRegister(getManager()));
+        this.registerServiceImplementation(IEndpointTrafficGenerator.class, new EndpointTrafficGeneratorGenerator(getManager()));
 
         this.registerServiceImplementation(NetworkAddressInventoryCache.class, new NetworkAddressInventoryCache(getManager(), moduleConfig));
         this.registerServiceImplementation(INetworkAddressInventoryRegister.class, new NetworkAddressInventoryRegister(getManager()));