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:20 UTC

[skywalking] branch remove-endpoint-register created (now 675c0b0)

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

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


      at 675c0b0  Finish step one, source and entity changed.

This branch includes the following new commits:

     new 675c0b0  Finish step one, source and entity changed.

The 1 revisions listed above as "new" are entirely new to this
repository and will be described in separate emails.  The revisions
listed as "add" were already present in the repository and have only
been added to this reference.



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

Posted by wu...@apache.org.
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()));