You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@skywalking.apache.org by wu...@apache.org on 2018/07/20 03:40:09 UTC

[incubator-skywalking] branch 6.0 updated: Refactor codebases for v6, restore modulization back

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

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


The following commit(s) were added to refs/heads/6.0 by this push:
     new 62ca37b  Refactor codebases for v6, restore modulization back
62ca37b is described below

commit 62ca37bc8f9f80140d1efa01fcd794495866ea99
Author: Wu Sheng <wu...@foxmail.com>
AuthorDate: Fri Jul 20 11:40:00 2018 +0800

    Refactor codebases for v6, restore modulization back
---
 .../ClusterModuleStandaloneProvider.java           | 20 ++++---
 ...loneModuleQuery.java => StandaloneManager.java} | 33 +++++++----
 .../standalone/StandaloneModuleRegister.java       | 38 -------------
 .../plugin/standalone/StandaloneRegister.java      | 32 -----------
 .../standalone/StandaloneServiceManager.java       | 42 --------------
 .../plugin/standalone/StandaloneManagerTest.java}  | 30 +++++-----
 .../zookeeper/ClusterModuleZookeeperProvider.java  | 50 ++++++++++------
 .../plugin/zookeeper/SWInstanceSerializer.java     | 10 ++--
 .../plugin/zookeeper/ServiceCacheManager.java      | 44 ---------------
 .../plugin/zookeeper/ZookeeperModuleQuery.java     | 21 +++----
 .../plugin/zookeeper/ZookeeperModuleRegister.java  | 66 ----------------------
 .../plugin/zookeeper/ZookeeperNodeRegister.java    | 60 ++++++++++++++++++++
 .../ClusterModuleZookeeperProviderTestCase.java    | 42 +++++++++-----
 .../oap/server/core/CoreModuleProvider.java        | 38 +++++++------
 .../oap/server/core/cluster/ClusterModule.java     |  2 +-
 .../{ModuleQuery.java => ClusterNodesQuery.java}   |  4 +-
 .../{ModuleRegister.java => ClusterRegister.java}  |  5 +-
 .../{InstanceDetails.java => RemoteInstance.java}  | 11 +---
 ...ywalking.oap.server.library.module.ModuleDefine | 21 +++++++
 .../oap/server/library/module/BootstrapFlow.java   |  2 +-
 .../oap/server/library/module/ModuleDefine.java    |  2 +-
 .../oap/server/library/module/ModuleProvider.java  |  4 +-
 .../starter/config/ApplicationConfigLoader.java    | 26 ---------
 .../src/main/resources/application.yml             | 17 ++----
 24 files changed, 244 insertions(+), 376 deletions(-)

diff --git a/oap-server/server-cluster-plugin/cluster-standalone-plugin/src/main/java/org/apache/skywalking/oap/server/cluster/plugin/standalone/ClusterModuleStandaloneProvider.java b/oap-server/server-cluster-plugin/cluster-standalone-plugin/src/main/java/org/apache/skywalking/oap/server/cluster/plugin/standalone/ClusterModuleStandaloneProvider.java
index a6f4bef..a861e3e 100644
--- a/oap-server/server-cluster-plugin/cluster-standalone-plugin/src/main/java/org/apache/skywalking/oap/server/cluster/plugin/standalone/ClusterModuleStandaloneProvider.java
+++ b/oap-server/server-cluster-plugin/cluster-standalone-plugin/src/main/java/org/apache/skywalking/oap/server/cluster/plugin/standalone/ClusterModuleStandaloneProvider.java
@@ -18,9 +18,15 @@
 
 package org.apache.skywalking.oap.server.cluster.plugin.standalone;
 
-import org.apache.skywalking.oap.server.core.cluster.*;
-import org.apache.skywalking.oap.server.library.module.*;
-import org.slf4j.*;
+import org.apache.skywalking.oap.server.core.cluster.ClusterModule;
+import org.apache.skywalking.oap.server.core.cluster.ClusterNodesQuery;
+import org.apache.skywalking.oap.server.core.cluster.ClusterRegister;
+import org.apache.skywalking.oap.server.library.module.ModuleConfig;
+import org.apache.skywalking.oap.server.library.module.ModuleProvider;
+import org.apache.skywalking.oap.server.library.module.ModuleStartException;
+import org.apache.skywalking.oap.server.library.module.ServiceNotProvidedException;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 
 /**
  * @author peng-yongsheng
@@ -29,11 +35,8 @@ public class ClusterModuleStandaloneProvider extends ModuleProvider {
 
     private static final Logger logger = LoggerFactory.getLogger(ClusterModuleStandaloneProvider.class);
 
-    private final StandaloneServiceManager serviceManager;
-
     public ClusterModuleStandaloneProvider() {
         super();
-        this.serviceManager = new StandaloneServiceManager();
     }
 
     @Override public String name() {
@@ -49,8 +52,9 @@ public class ClusterModuleStandaloneProvider extends ModuleProvider {
     }
 
     @Override public void prepare() throws ServiceNotProvidedException {
-        this.registerServiceImplementation(ModuleRegister.class, new StandaloneModuleRegister(serviceManager));
-        this.registerServiceImplementation(ModuleQuery.class, new StandaloneModuleQuery(serviceManager));
+        StandaloneManager standaloneManager = new StandaloneManager();
+        this.registerServiceImplementation(ClusterRegister.class, standaloneManager);
+        this.registerServiceImplementation(ClusterNodesQuery.class, standaloneManager);
     }
 
     @Override public void start() throws ModuleStartException {
diff --git a/oap-server/server-cluster-plugin/cluster-standalone-plugin/src/main/java/org/apache/skywalking/oap/server/cluster/plugin/standalone/StandaloneModuleQuery.java b/oap-server/server-cluster-plugin/cluster-standalone-plugin/src/main/java/org/apache/skywalking/oap/server/cluster/plugin/standalone/StandaloneManager.java
similarity index 50%
copy from oap-server/server-cluster-plugin/cluster-standalone-plugin/src/main/java/org/apache/skywalking/oap/server/cluster/plugin/standalone/StandaloneModuleQuery.java
copy to oap-server/server-cluster-plugin/cluster-standalone-plugin/src/main/java/org/apache/skywalking/oap/server/cluster/plugin/standalone/StandaloneManager.java
index cc0b326..c266eb4 100644
--- a/oap-server/server-cluster-plugin/cluster-standalone-plugin/src/main/java/org/apache/skywalking/oap/server/cluster/plugin/standalone/StandaloneModuleQuery.java
+++ b/oap-server/server-cluster-plugin/cluster-standalone-plugin/src/main/java/org/apache/skywalking/oap/server/cluster/plugin/standalone/StandaloneManager.java
@@ -18,24 +18,35 @@
 
 package org.apache.skywalking.oap.server.cluster.plugin.standalone;
 
-import java.util.*;
-import org.apache.skywalking.oap.server.core.cluster.*;
+import org.apache.skywalking.oap.server.core.cluster.ClusterNodesQuery;
+import org.apache.skywalking.oap.server.core.cluster.ClusterRegister;
+import org.apache.skywalking.oap.server.core.cluster.RemoteInstance;
+
+import java.util.ArrayList;
+import java.util.List;
 
 /**
- * @author peng-yongsheng
+ * A cluster manager simulator. Work in memory only.
+ * Also return the current instance.
+ *
+ * @author peng-yongsheng, Wu Sheng
  */
-public class StandaloneModuleQuery implements ModuleQuery {
+public class StandaloneManager implements ClusterNodesQuery, ClusterRegister {
+
+    private volatile RemoteInstance remoteInstance;
 
-    private final StandaloneServiceManager serviceManager;
 
-    StandaloneModuleQuery(StandaloneServiceManager serviceManager) {
-        this.serviceManager = serviceManager;
+    @Override public void registerRemote(RemoteInstance remoteInstance) {
+        this.remoteInstance = remoteInstance;
     }
 
     @Override
-    public List<InstanceDetails> query(String moduleName, String providerName) {
-        List<InstanceDetails> instanceDetails = new ArrayList<>(1);
-        instanceDetails.add(serviceManager.get(moduleName, providerName));
-        return instanceDetails;
+    public List<RemoteInstance> queryRemoteNodes() {
+        if(remoteInstance == null){
+            return new ArrayList(0);
+        }
+        ArrayList remoteList = new ArrayList(1);
+        remoteList.add(remoteInstance);
+        return remoteList;
     }
 }
diff --git a/oap-server/server-cluster-plugin/cluster-standalone-plugin/src/main/java/org/apache/skywalking/oap/server/cluster/plugin/standalone/StandaloneModuleRegister.java b/oap-server/server-cluster-plugin/cluster-standalone-plugin/src/main/java/org/apache/skywalking/oap/server/cluster/plugin/standalone/StandaloneModuleRegister.java
deleted file mode 100644
index bb9241d..0000000
--- a/oap-server/server-cluster-plugin/cluster-standalone-plugin/src/main/java/org/apache/skywalking/oap/server/cluster/plugin/standalone/StandaloneModuleRegister.java
+++ /dev/null
@@ -1,38 +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.cluster.plugin.standalone;
-
-import org.apache.skywalking.oap.server.core.cluster.*;
-
-/**
- * @author peng-yongsheng
- */
-public class StandaloneModuleRegister implements ModuleRegister {
-
-    private final StandaloneServiceManager serviceManager;
-
-    StandaloneModuleRegister(StandaloneServiceManager serviceManager) {
-        this.serviceManager = serviceManager;
-    }
-
-    @Override public void register(String moduleName, String providerName,
-        InstanceDetails instanceDetails) {
-        serviceManager.put(moduleName, providerName, instanceDetails);
-    }
-}
diff --git a/oap-server/server-cluster-plugin/cluster-standalone-plugin/src/main/java/org/apache/skywalking/oap/server/cluster/plugin/standalone/StandaloneRegister.java b/oap-server/server-cluster-plugin/cluster-standalone-plugin/src/main/java/org/apache/skywalking/oap/server/cluster/plugin/standalone/StandaloneRegister.java
deleted file mode 100644
index 7f923fa..0000000
--- a/oap-server/server-cluster-plugin/cluster-standalone-plugin/src/main/java/org/apache/skywalking/oap/server/cluster/plugin/standalone/StandaloneRegister.java
+++ /dev/null
@@ -1,32 +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.cluster.plugin.standalone;
-
-import org.apache.skywalking.oap.server.core.cluster.*;
-
-/**
- * @author peng-yongsheng
- */
-public class StandaloneRegister implements ModuleRegister {
-
-    @Override public void register(String moduleName, String providerName,
-        InstanceDetails instanceDetails) throws ServiceRegisterException {
-
-    }
-}
diff --git a/oap-server/server-cluster-plugin/cluster-standalone-plugin/src/main/java/org/apache/skywalking/oap/server/cluster/plugin/standalone/StandaloneServiceManager.java b/oap-server/server-cluster-plugin/cluster-standalone-plugin/src/main/java/org/apache/skywalking/oap/server/cluster/plugin/standalone/StandaloneServiceManager.java
deleted file mode 100644
index fe5fe1d..0000000
--- a/oap-server/server-cluster-plugin/cluster-standalone-plugin/src/main/java/org/apache/skywalking/oap/server/cluster/plugin/standalone/StandaloneServiceManager.java
+++ /dev/null
@@ -1,42 +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.cluster.plugin.standalone;
-
-import java.util.*;
-import org.apache.skywalking.oap.server.core.cluster.InstanceDetails;
-
-/**
- * @author peng-yongsheng
- */
-public class StandaloneServiceManager {
-
-    private final Map<String, InstanceDetails> instanceDetailsMap;
-
-    public StandaloneServiceManager() {
-        this.instanceDetailsMap = new HashMap<>();
-    }
-
-    public void put(String moduleName, String providerName, InstanceDetails instanceDetails) {
-        instanceDetailsMap.put(moduleName + "/" + providerName, instanceDetails);
-    }
-
-    public InstanceDetails get(String moduleName, String providerName) {
-        return instanceDetailsMap.get(moduleName + "/" + providerName);
-    }
-}
diff --git a/oap-server/server-cluster-plugin/cluster-standalone-plugin/src/main/java/org/apache/skywalking/oap/server/cluster/plugin/standalone/StandaloneModuleQuery.java b/oap-server/server-cluster-plugin/cluster-standalone-plugin/src/test/java/org/apache/skywalking/oap/server/cluster/plugin/standalone/StandaloneManagerTest.java
similarity index 58%
rename from oap-server/server-cluster-plugin/cluster-standalone-plugin/src/main/java/org/apache/skywalking/oap/server/cluster/plugin/standalone/StandaloneModuleQuery.java
rename to oap-server/server-cluster-plugin/cluster-standalone-plugin/src/test/java/org/apache/skywalking/oap/server/cluster/plugin/standalone/StandaloneManagerTest.java
index cc0b326..2679492 100644
--- a/oap-server/server-cluster-plugin/cluster-standalone-plugin/src/main/java/org/apache/skywalking/oap/server/cluster/plugin/standalone/StandaloneModuleQuery.java
+++ b/oap-server/server-cluster-plugin/cluster-standalone-plugin/src/test/java/org/apache/skywalking/oap/server/cluster/plugin/standalone/StandaloneManagerTest.java
@@ -18,24 +18,20 @@
 
 package org.apache.skywalking.oap.server.cluster.plugin.standalone;
 
-import java.util.*;
-import org.apache.skywalking.oap.server.core.cluster.*;
+import org.apache.skywalking.oap.server.core.cluster.RemoteInstance;
+import org.junit.Assert;
+import org.junit.Test;
 
-/**
- * @author peng-yongsheng
- */
-public class StandaloneModuleQuery implements ModuleQuery {
-
-    private final StandaloneServiceManager serviceManager;
-
-    StandaloneModuleQuery(StandaloneServiceManager serviceManager) {
-        this.serviceManager = serviceManager;
-    }
+public class StandaloneManagerTest {
+    @Test
+    public void test(){
+        StandaloneManager standaloneManager = new StandaloneManager();
+        RemoteInstance remote1 = new RemoteInstance();
+        RemoteInstance remote2 = new RemoteInstance();
 
-    @Override
-    public List<InstanceDetails> query(String moduleName, String providerName) {
-        List<InstanceDetails> instanceDetails = new ArrayList<>(1);
-        instanceDetails.add(serviceManager.get(moduleName, providerName));
-        return instanceDetails;
+        standaloneManager.registerRemote(remote1);
+        Assert.assertEquals(remote1, standaloneManager.queryRemoteNodes().get(0));
+        standaloneManager.registerRemote(remote2);
+        Assert.assertEquals(remote2, standaloneManager.queryRemoteNodes().get(0));
     }
 }
diff --git a/oap-server/server-cluster-plugin/cluster-zookeeper-plugin/src/main/java/org/apache/skywalking/oap/server/cluster/plugin/zookeeper/ClusterModuleZookeeperProvider.java b/oap-server/server-cluster-plugin/cluster-zookeeper-plugin/src/main/java/org/apache/skywalking/oap/server/cluster/plugin/zookeeper/ClusterModuleZookeeperProvider.java
index 0c52a81..0cfa3d5 100644
--- a/oap-server/server-cluster-plugin/cluster-zookeeper-plugin/src/main/java/org/apache/skywalking/oap/server/cluster/plugin/zookeeper/ClusterModuleZookeeperProvider.java
+++ b/oap-server/server-cluster-plugin/cluster-zookeeper-plugin/src/main/java/org/apache/skywalking/oap/server/cluster/plugin/zookeeper/ClusterModuleZookeeperProvider.java
@@ -19,15 +19,27 @@
 package org.apache.skywalking.oap.server.cluster.plugin.zookeeper;
 
 import org.apache.curator.RetryPolicy;
-import org.apache.curator.framework.*;
+import org.apache.curator.framework.CuratorFramework;
+import org.apache.curator.framework.CuratorFrameworkFactory;
 import org.apache.curator.retry.ExponentialBackoffRetry;
-import org.apache.curator.x.discovery.*;
-import org.apache.skywalking.oap.server.core.cluster.*;
-import org.apache.skywalking.oap.server.library.module.*;
-import org.slf4j.*;
+import org.apache.curator.x.discovery.ServiceCache;
+import org.apache.curator.x.discovery.ServiceDiscovery;
+import org.apache.curator.x.discovery.ServiceDiscoveryBuilder;
+import org.apache.skywalking.oap.server.core.cluster.ClusterModule;
+import org.apache.skywalking.oap.server.core.cluster.ClusterNodesQuery;
+import org.apache.skywalking.oap.server.core.cluster.ClusterRegister;
+import org.apache.skywalking.oap.server.core.cluster.RemoteInstance;
+import org.apache.skywalking.oap.server.library.module.ModuleConfig;
+import org.apache.skywalking.oap.server.library.module.ModuleProvider;
+import org.apache.skywalking.oap.server.library.module.ModuleStartException;
+import org.apache.skywalking.oap.server.library.module.ServiceNotProvidedException;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 
 /**
- * @author peng-yongsheng
+ * Use Zookeeper to manage all instances in SkyWalking cluster.
+ *
+ * @author peng-yongsheng, Wu Sheng
  */
 public class ClusterModuleZookeeperProvider extends ModuleProvider {
 
@@ -35,15 +47,13 @@ public class ClusterModuleZookeeperProvider extends ModuleProvider {
 
     private static final String BASE_PATH = "/skywalking";
 
-    private final ServiceCacheManager cacheManager;
     private final ClusterModuleZookeeperConfig config;
     private CuratorFramework client;
-    private ServiceDiscovery<InstanceDetails> serviceDiscovery;
+    private ServiceDiscovery<RemoteInstance> serviceDiscovery;
 
     public ClusterModuleZookeeperProvider() {
         super();
         this.config = new ClusterModuleZookeeperConfig();
-        this.cacheManager = new ServiceCacheManager();
     }
 
     @Override public String name() {
@@ -58,27 +68,35 @@ public class ClusterModuleZookeeperProvider extends ModuleProvider {
         return config;
     }
 
-    @Override public void prepare() throws ServiceNotProvidedException {
+    @Override public void prepare() throws ServiceNotProvidedException, ModuleStartException {
         RetryPolicy retryPolicy = new ExponentialBackoffRetry(config.getBaseSleepTimeMs(), config.getMaxRetries());
         client = CuratorFrameworkFactory.newClient(config.getHostPort(), retryPolicy);
 
-        serviceDiscovery = ServiceDiscoveryBuilder.builder(InstanceDetails.class).client(client)
+        serviceDiscovery = ServiceDiscoveryBuilder.builder(RemoteInstance.class).client(client)
             .basePath(BASE_PATH)
             .watchInstances(true)
             .serializer(new SWInstanceSerializer()).build();
 
-        this.registerServiceImplementation(ModuleRegister.class, new ZookeeperModuleRegister(serviceDiscovery, cacheManager));
-        this.registerServiceImplementation(ModuleQuery.class, new ZookeeperModuleQuery(cacheManager));
-    }
-
-    @Override public void start() throws ModuleStartException {
+        String remoteName = "remote";
+        ServiceCache<RemoteInstance> serviceCache = serviceDiscovery.serviceCacheBuilder()
+            .name(remoteName)
+            .build();
         try {
             client.start();
             client.blockUntilConnected();
             serviceDiscovery.start();
+
+            serviceCache.start();
         } catch (Exception e) {
+            logger.error(e.getMessage(), e);
             throw new ModuleStartException(e.getMessage(), e);
         }
+
+        this.registerServiceImplementation(ClusterRegister.class, new ZookeeperNodeRegister(serviceDiscovery, remoteName));
+        this.registerServiceImplementation(ClusterNodesQuery.class, new ZookeeperModuleQuery(serviceCache));
+    }
+
+    @Override public void start() {
     }
 
     @Override public void notifyAfterCompleted() {
diff --git a/oap-server/server-cluster-plugin/cluster-zookeeper-plugin/src/main/java/org/apache/skywalking/oap/server/cluster/plugin/zookeeper/SWInstanceSerializer.java b/oap-server/server-cluster-plugin/cluster-zookeeper-plugin/src/main/java/org/apache/skywalking/oap/server/cluster/plugin/zookeeper/SWInstanceSerializer.java
index 76b59b5..3b86f9d 100644
--- a/oap-server/server-cluster-plugin/cluster-zookeeper-plugin/src/main/java/org/apache/skywalking/oap/server/cluster/plugin/zookeeper/SWInstanceSerializer.java
+++ b/oap-server/server-cluster-plugin/cluster-zookeeper-plugin/src/main/java/org/apache/skywalking/oap/server/cluster/plugin/zookeeper/SWInstanceSerializer.java
@@ -22,21 +22,21 @@ import com.google.gson.Gson;
 import com.google.gson.reflect.TypeToken;
 import org.apache.curator.x.discovery.ServiceInstance;
 import org.apache.curator.x.discovery.details.InstanceSerializer;
-import org.apache.skywalking.oap.server.core.cluster.InstanceDetails;
+import org.apache.skywalking.oap.server.core.cluster.RemoteInstance;
 
 /**
  * @author peng-yongsheng
  */
-public class SWInstanceSerializer implements InstanceSerializer<InstanceDetails> {
+public class SWInstanceSerializer implements InstanceSerializer<RemoteInstance> {
 
     private final Gson gson = new Gson();
 
-    @Override public byte[] serialize(ServiceInstance<InstanceDetails> instance) throws Exception {
+    @Override public byte[] serialize(ServiceInstance<RemoteInstance> instance) throws Exception {
         return gson.toJson(instance).getBytes();
     }
 
-    @Override public ServiceInstance<InstanceDetails> deserialize(byte[] bytes) throws Exception {
-        return gson.fromJson(new String(bytes), new TypeToken<ServiceInstance<InstanceDetails>>() {
+    @Override public ServiceInstance<RemoteInstance> deserialize(byte[] bytes) throws Exception {
+        return gson.fromJson(new String(bytes), new TypeToken<ServiceInstance<RemoteInstance>>() {
         }.getType());
     }
 }
diff --git a/oap-server/server-cluster-plugin/cluster-zookeeper-plugin/src/main/java/org/apache/skywalking/oap/server/cluster/plugin/zookeeper/ServiceCacheManager.java b/oap-server/server-cluster-plugin/cluster-zookeeper-plugin/src/main/java/org/apache/skywalking/oap/server/cluster/plugin/zookeeper/ServiceCacheManager.java
deleted file mode 100644
index e08a01b..0000000
--- a/oap-server/server-cluster-plugin/cluster-zookeeper-plugin/src/main/java/org/apache/skywalking/oap/server/cluster/plugin/zookeeper/ServiceCacheManager.java
+++ /dev/null
@@ -1,44 +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.cluster.plugin.zookeeper;
-
-import java.util.*;
-import java.util.concurrent.ConcurrentHashMap;
-import org.apache.curator.x.discovery.ServiceCache;
-import org.apache.skywalking.oap.server.core.cluster.InstanceDetails;
-
-/**
- * @author peng-yongsheng
- */
-public class ServiceCacheManager {
-
-    private final Map<String, ServiceCache<InstanceDetails>> serviceCacheMap;
-
-    public ServiceCacheManager() {
-        this.serviceCacheMap = new ConcurrentHashMap<>();
-    }
-
-    public void put(String name, ServiceCache<InstanceDetails> cache) {
-        serviceCacheMap.put(name, cache);
-    }
-
-    public ServiceCache<InstanceDetails> get(String name) {
-        return serviceCacheMap.get(name);
-    }
-}
diff --git a/oap-server/server-cluster-plugin/cluster-zookeeper-plugin/src/main/java/org/apache/skywalking/oap/server/cluster/plugin/zookeeper/ZookeeperModuleQuery.java b/oap-server/server-cluster-plugin/cluster-zookeeper-plugin/src/main/java/org/apache/skywalking/oap/server/cluster/plugin/zookeeper/ZookeeperModuleQuery.java
index 7dd93e8..7a41531 100644
--- a/oap-server/server-cluster-plugin/cluster-zookeeper-plugin/src/main/java/org/apache/skywalking/oap/server/cluster/plugin/zookeeper/ZookeeperModuleQuery.java
+++ b/oap-server/server-cluster-plugin/cluster-zookeeper-plugin/src/main/java/org/apache/skywalking/oap/server/cluster/plugin/zookeeper/ZookeeperModuleQuery.java
@@ -19,26 +19,27 @@
 package org.apache.skywalking.oap.server.cluster.plugin.zookeeper;
 
 import java.util.*;
+import org.apache.curator.x.discovery.ServiceCache;
 import org.apache.curator.x.discovery.ServiceInstance;
 import org.apache.skywalking.oap.server.core.cluster.*;
 
 /**
- * @author peng-yongsheng
+ * @author peng-yongsheng, Wu Sheng
  */
-public class ZookeeperModuleQuery implements ModuleQuery {
+public class ZookeeperModuleQuery implements ClusterNodesQuery {
 
-    private final ServiceCacheManager cacheManager;
+    private final ServiceCache<RemoteInstance> serviceCache;
 
-    ZookeeperModuleQuery(ServiceCacheManager cacheManager) {
-        this.cacheManager = cacheManager;
+    ZookeeperModuleQuery(ServiceCache<RemoteInstance> serviceCache) {
+        this.serviceCache = serviceCache;
     }
 
     @Override
-    public List<InstanceDetails> query(String moduleName, String providerName) throws ServiceRegisterException {
-        List<ServiceInstance<InstanceDetails>> serviceInstances = cacheManager.get(NodeNameBuilder.build(moduleName, providerName)).getInstances();
+    public List<RemoteInstance> queryRemoteNodes() throws ServiceRegisterException {
+        List<ServiceInstance<RemoteInstance>> serviceInstances = serviceCache.getInstances();
 
-        List<InstanceDetails> instanceDetails = new ArrayList<>(serviceInstances.size());
-        serviceInstances.forEach(serviceInstance -> instanceDetails.add(serviceInstance.getPayload()));
-        return instanceDetails;
+        List<RemoteInstance> remoteInstanceDetails = new ArrayList<>(serviceInstances.size());
+        serviceInstances.forEach(serviceInstance -> remoteInstanceDetails.add(serviceInstance.getPayload()));
+        return remoteInstanceDetails;
     }
 }
diff --git a/oap-server/server-cluster-plugin/cluster-zookeeper-plugin/src/main/java/org/apache/skywalking/oap/server/cluster/plugin/zookeeper/ZookeeperModuleRegister.java b/oap-server/server-cluster-plugin/cluster-zookeeper-plugin/src/main/java/org/apache/skywalking/oap/server/cluster/plugin/zookeeper/ZookeeperModuleRegister.java
deleted file mode 100644
index ede5fbd..0000000
--- a/oap-server/server-cluster-plugin/cluster-zookeeper-plugin/src/main/java/org/apache/skywalking/oap/server/cluster/plugin/zookeeper/ZookeeperModuleRegister.java
+++ /dev/null
@@ -1,66 +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.cluster.plugin.zookeeper;
-
-import java.util.UUID;
-import org.apache.curator.x.discovery.*;
-import org.apache.skywalking.oap.server.core.cluster.*;
-
-/**
- * @author peng-yongsheng
- */
-public class ZookeeperModuleRegister implements ModuleRegister {
-
-    private final ServiceDiscovery<InstanceDetails> serviceDiscovery;
-    private final ServiceCacheManager cacheManager;
-
-    ZookeeperModuleRegister(ServiceDiscovery<InstanceDetails> serviceDiscovery,
-        ServiceCacheManager cacheManager) {
-        this.serviceDiscovery = serviceDiscovery;
-        this.cacheManager = cacheManager;
-    }
-
-    @Override public synchronized void register(String moduleName, String providerName,
-        InstanceDetails instanceDetails) throws ServiceRegisterException {
-        try {
-            String name = NodeNameBuilder.build(moduleName, providerName);
-
-            ServiceInstance<InstanceDetails> thisInstance = ServiceInstance.<InstanceDetails>builder()
-                .name(NodeNameBuilder.build(moduleName, providerName))
-                .id(UUID.randomUUID().toString())
-                .address(instanceDetails.getHost())
-                .port(instanceDetails.getPort())
-//                .uriSpec(new UriSpec(StringUtils.isEmpty(instanceDetails.getContextPath()) ? StringUtils.EMPTY_STRING : instanceDetails.getContextPath()))
-                .payload(instanceDetails)
-                .build();
-
-            serviceDiscovery.registerService(thisInstance);
-
-            ServiceCache<InstanceDetails> serviceCache = serviceDiscovery.serviceCacheBuilder()
-                .name(name)
-                .build();
-            serviceCache.start();
-
-            cacheManager.put(name, serviceCache);
-        } catch (Exception e) {
-            e.printStackTrace();
-            throw new ServiceRegisterException(e.getMessage());
-        }
-    }
-}
diff --git a/oap-server/server-cluster-plugin/cluster-zookeeper-plugin/src/main/java/org/apache/skywalking/oap/server/cluster/plugin/zookeeper/ZookeeperNodeRegister.java b/oap-server/server-cluster-plugin/cluster-zookeeper-plugin/src/main/java/org/apache/skywalking/oap/server/cluster/plugin/zookeeper/ZookeeperNodeRegister.java
new file mode 100644
index 0000000..ba6b518
--- /dev/null
+++ b/oap-server/server-cluster-plugin/cluster-zookeeper-plugin/src/main/java/org/apache/skywalking/oap/server/cluster/plugin/zookeeper/ZookeeperNodeRegister.java
@@ -0,0 +1,60 @@
+/*
+ * 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.cluster.plugin.zookeeper;
+
+import java.util.UUID;
+import org.apache.curator.x.discovery.ServiceDiscovery;
+import org.apache.curator.x.discovery.ServiceInstance;
+import org.apache.skywalking.oap.server.core.cluster.ClusterRegister;
+import org.apache.skywalking.oap.server.core.cluster.RemoteInstance;
+import org.apache.skywalking.oap.server.core.cluster.ServiceRegisterException;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+/**
+ * @author peng-yongsheng
+ */
+public class ZookeeperNodeRegister implements ClusterRegister {
+    private static final Logger logger = LoggerFactory.getLogger(ZookeeperNodeRegister.class);
+
+    private final ServiceDiscovery<RemoteInstance> serviceDiscovery;
+    private final String nodeName;
+
+    ZookeeperNodeRegister(ServiceDiscovery<RemoteInstance> serviceDiscovery, String nodeName) {
+        this.serviceDiscovery = serviceDiscovery;
+        this.nodeName = nodeName;
+    }
+
+    @Override public synchronized void registerRemote(RemoteInstance remoteInstance) throws ServiceRegisterException {
+        try {
+            ServiceInstance<RemoteInstance> thisInstance = ServiceInstance.<RemoteInstance>builder()
+                .name(nodeName)
+                .id(UUID.randomUUID().toString())
+                .address(remoteInstance.getHost())
+                .port(remoteInstance.getPort())
+                .payload(remoteInstance)
+                .build();
+
+            serviceDiscovery.registerService(thisInstance);
+        } catch (Exception e) {
+            logger.error(e.getMessage(), e);
+            throw new ServiceRegisterException(e.getMessage());
+        }
+    }
+}
diff --git a/oap-server/server-cluster-plugin/cluster-zookeeper-plugin/src/test/java/org/apache/skywalking/oap/server/cluster/plugin/zookeeper/ClusterModuleZookeeperProviderTestCase.java b/oap-server/server-cluster-plugin/cluster-zookeeper-plugin/src/test/java/org/apache/skywalking/oap/server/cluster/plugin/zookeeper/ClusterModuleZookeeperProviderTestCase.java
index 218eccc..fafd127 100644
--- a/oap-server/server-cluster-plugin/cluster-zookeeper-plugin/src/test/java/org/apache/skywalking/oap/server/cluster/plugin/zookeeper/ClusterModuleZookeeperProviderTestCase.java
+++ b/oap-server/server-cluster-plugin/cluster-zookeeper-plugin/src/test/java/org/apache/skywalking/oap/server/cluster/plugin/zookeeper/ClusterModuleZookeeperProviderTestCase.java
@@ -21,9 +21,16 @@ package org.apache.skywalking.oap.server.cluster.plugin.zookeeper;
 import java.io.IOException;
 import java.util.List;
 import org.apache.curator.test.TestingServer;
-import org.apache.skywalking.oap.server.core.cluster.*;
-import org.apache.skywalking.oap.server.library.module.*;
-import org.junit.*;
+import org.apache.skywalking.oap.server.core.cluster.ClusterNodesQuery;
+import org.apache.skywalking.oap.server.core.cluster.ClusterRegister;
+import org.apache.skywalking.oap.server.core.cluster.RemoteInstance;
+import org.apache.skywalking.oap.server.core.cluster.ServiceRegisterException;
+import org.apache.skywalking.oap.server.library.module.ModuleStartException;
+import org.apache.skywalking.oap.server.library.module.ServiceNotProvidedException;
+import org.junit.After;
+import org.junit.Assert;
+import org.junit.Before;
+import org.junit.Test;
 
 /**
  * @author peng-yongsheng
@@ -39,7 +46,7 @@ public class ClusterModuleZookeeperProviderTestCase {
     }
 
     @Test
-    public void testStart() throws ServiceNotProvidedException, ModuleStartException, ServiceRegisterException {
+    public void testStart() throws ServiceNotProvidedException, ModuleStartException, ServiceRegisterException, InterruptedException {
         ClusterModuleZookeeperProvider provider = new ClusterModuleZookeeperProvider();
         ClusterModuleZookeeperConfig moduleConfig = (ClusterModuleZookeeperConfig)provider.createConfigBeanIfAbsent();
         moduleConfig.setHostPort(server.getConnectString());
@@ -49,19 +56,26 @@ public class ClusterModuleZookeeperProviderTestCase {
         provider.prepare();
         provider.start();
 
-        ModuleRegister moduleRegister = provider.getService(ModuleRegister.class);
-        ModuleQuery moduleQuery = provider.getService(ModuleQuery.class);
+        ClusterRegister moduleRegister = provider.getService(ClusterRegister.class);
+        ClusterNodesQuery clusterNodesQuery = provider.getService(ClusterNodesQuery.class);
 
-        InstanceDetails instanceDetails = new InstanceDetails();
-        instanceDetails.setHost("ProviderAHost");
-        instanceDetails.setPort(1000);
+        RemoteInstance remoteInstance = new RemoteInstance();
+        remoteInstance.setHost("ProviderAHost");
+        remoteInstance.setPort(1000);
 
-        moduleRegister.register("ModuleA", "ProviderA", instanceDetails);
+        moduleRegister.registerRemote(remoteInstance);
+
+        for (int i = 0; i < 20; i++) {
+            List<RemoteInstance> detailsList = clusterNodesQuery.queryRemoteNodes();
+            if(detailsList.size() == 0){
+                Thread.sleep(500);
+                continue;
+            }
+            Assert.assertEquals(1, detailsList.size());
+            Assert.assertEquals("ProviderAHost", detailsList.get(0).getHost());
+            Assert.assertEquals(1000, detailsList.get(0).getPort());
+        }
 
-        List<InstanceDetails> detailsList = moduleQuery.query("ModuleA", "ProviderA");
-        Assert.assertEquals(1, detailsList.size());
-        Assert.assertEquals("ProviderAHost", detailsList.get(0).getHost());
-        Assert.assertEquals(1000, detailsList.get(0).getPort());
     }
 
     @After
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 6a8ca4f..f58f207 100644
--- 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
@@ -18,14 +18,24 @@
 
 package org.apache.skywalking.oap.server.core;
 
-import org.apache.skywalking.oap.server.core.cluster.*;
-import org.apache.skywalking.oap.server.core.receiver.*;
-import org.apache.skywalking.oap.server.core.server.*;
-import org.apache.skywalking.oap.server.library.module.*;
+import org.apache.skywalking.oap.server.core.cluster.ClusterModule;
+import org.apache.skywalking.oap.server.core.cluster.ClusterRegister;
+import org.apache.skywalking.oap.server.core.cluster.RemoteInstance;
+import org.apache.skywalking.oap.server.core.receiver.SourceReceiver;
+import org.apache.skywalking.oap.server.core.receiver.SourceReceiverImpl;
+import org.apache.skywalking.oap.server.core.server.GRPCHandlerRegister;
+import org.apache.skywalking.oap.server.core.server.GRPCHandlerRegisterImpl;
+import org.apache.skywalking.oap.server.core.server.JettyHandlerRegister;
+import org.apache.skywalking.oap.server.core.server.JettyHandlerRegisterImpl;
+import org.apache.skywalking.oap.server.library.module.ModuleConfig;
+import org.apache.skywalking.oap.server.library.module.ModuleProvider;
+import org.apache.skywalking.oap.server.library.module.ModuleStartException;
+import org.apache.skywalking.oap.server.library.module.ServiceNotProvidedException;
 import org.apache.skywalking.oap.server.library.server.ServerException;
 import org.apache.skywalking.oap.server.library.server.grpc.GRPCServer;
 import org.apache.skywalking.oap.server.library.server.jetty.JettyServer;
-import org.slf4j.*;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 
 /**
  * @author peng-yongsheng
@@ -68,26 +78,22 @@ public class CoreModuleProvider extends ModuleProvider {
         this.registerServiceImplementation(SourceReceiver.class, new SourceReceiverImpl());
     }
 
-    @Override public void start() throws ModuleStartException {
+    @Override public void start() {
+
+    }
+
+    @Override public void notifyAfterCompleted() throws ModuleStartException{
         try {
             grpcServer.start();
             jettyServer.start();
         } catch (ServerException e) {
             throw new ModuleStartException(e.getMessage(), e);
         }
-    }
 
-    @Override public void notifyAfterCompleted() {
-        InstanceDetails gRPCServerInstance = new InstanceDetails();
+        RemoteInstance gRPCServerInstance = new RemoteInstance();
         gRPCServerInstance.setHost(moduleConfig.getGRPCHost());
         gRPCServerInstance.setPort(moduleConfig.getGRPCPort());
-        this.getManager().find(ClusterModule.NAME).getService(ModuleRegister.class).register(CoreModule.NAME, "gRPC", gRPCServerInstance);
-
-        InstanceDetails restServerInstance = new InstanceDetails();
-        restServerInstance.setHost(moduleConfig.getRestHost());
-        restServerInstance.setPort(moduleConfig.getRestPort());
-        restServerInstance.setContextPath(moduleConfig.getRestContextPath());
-        this.getManager().find(ClusterModule.NAME).getService(ModuleRegister.class).register(CoreModule.NAME, "rest", restServerInstance);
+        this.getManager().find(ClusterModule.NAME).getService(ClusterRegister.class).registerRemote(gRPCServerInstance);
     }
 
     @Override
diff --git a/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/cluster/ClusterModule.java b/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/cluster/ClusterModule.java
index 992ed10..a4499dc 100644
--- a/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/cluster/ClusterModule.java
+++ b/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/cluster/ClusterModule.java
@@ -32,6 +32,6 @@ public class ClusterModule extends ModuleDefine {
     }
 
     @Override public Class[] services() {
-        return new Class[] {ModuleRegister.class, ModuleQuery.class};
+        return new Class[] {ClusterRegister.class, ClusterNodesQuery.class};
     }
 }
diff --git a/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/cluster/ModuleQuery.java b/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/cluster/ClusterNodesQuery.java
similarity index 86%
rename from oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/cluster/ModuleQuery.java
rename to oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/cluster/ClusterNodesQuery.java
index d44532a..a7c0d82 100644
--- a/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/cluster/ModuleQuery.java
+++ b/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/cluster/ClusterNodesQuery.java
@@ -25,7 +25,7 @@ import java.util.List;
 /**
  * @author peng-yongsheng
  */
-public interface ModuleQuery extends Service {
+public interface ClusterNodesQuery extends Service {
 
-    List<InstanceDetails> query(String moduleName, String providerName) throws ServiceRegisterException;
+    List<RemoteInstance> queryRemoteNodes();
 }
diff --git a/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/cluster/ModuleRegister.java b/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/cluster/ClusterRegister.java
similarity index 84%
rename from oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/cluster/ModuleRegister.java
rename to oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/cluster/ClusterRegister.java
index e3cdb0e..3e5a8c2 100644
--- a/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/cluster/ModuleRegister.java
+++ b/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/cluster/ClusterRegister.java
@@ -23,8 +23,7 @@ import org.apache.skywalking.oap.server.library.module.Service;
 /**
  * @author peng-yongsheng
  */
-public interface ModuleRegister extends Service {
+public interface ClusterRegister extends Service {
 
-    void register(String moduleName, String providerName,
-        InstanceDetails instanceDetails) throws ServiceRegisterException;
+    void registerRemote(RemoteInstance remoteInstance) throws ServiceRegisterException;
 }
diff --git a/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/cluster/InstanceDetails.java b/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/cluster/RemoteInstance.java
similarity index 83%
rename from oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/cluster/InstanceDetails.java
rename to oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/cluster/RemoteInstance.java
index a4f8dc2..14018e1 100644
--- a/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/cluster/InstanceDetails.java
+++ b/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/cluster/RemoteInstance.java
@@ -21,11 +21,10 @@ package org.apache.skywalking.oap.server.core.cluster;
 /**
  * @author peng-yongsheng
  */
-public class InstanceDetails {
+public class RemoteInstance {
 
     private String host;
     private int port;
-    private String contextPath;
 
     public String getHost() {
         return host;
@@ -42,12 +41,4 @@ public class InstanceDetails {
     public void setPort(int port) {
         this.port = port;
     }
-
-    public String getContextPath() {
-        return contextPath;
-    }
-
-    public void setContextPath(String contextPath) {
-        this.contextPath = contextPath;
-    }
 }
diff --git a/oap-server/server-core/src/main/resources/META-INF/services/org.apache.skywalking.oap.server.library.module.ModuleDefine b/oap-server/server-core/src/main/resources/META-INF/services/org.apache.skywalking.oap.server.library.module.ModuleDefine
new file mode 100644
index 0000000..d0a876f
--- /dev/null
+++ b/oap-server/server-core/src/main/resources/META-INF/services/org.apache.skywalking.oap.server.library.module.ModuleDefine
@@ -0,0 +1,21 @@
+#
+# 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.
+#
+#
+
+org.apache.skywalking.oap.server.core.storage.StorageModule
+org.apache.skywalking.oap.server.core.cluster.ClusterModule
+org.apache.skywalking.oap.server.core.CoreModule
\ No newline at end of file
diff --git a/oap-server/server-library/library-module/src/main/java/org/apache/skywalking/oap/server/library/module/BootstrapFlow.java b/oap-server/server-library/library-module/src/main/java/org/apache/skywalking/oap/server/library/module/BootstrapFlow.java
index 187575f..e41e2be 100644
--- a/oap-server/server-library/library-module/src/main/java/org/apache/skywalking/oap/server/library/module/BootstrapFlow.java
+++ b/oap-server/server-library/library-module/src/main/java/org/apache/skywalking/oap/server/library/module/BootstrapFlow.java
@@ -63,7 +63,7 @@ class BootstrapFlow {
         }
     }
 
-    void notifyAfterCompleted() throws ServiceNotProvidedException {
+    void notifyAfterCompleted() throws ServiceNotProvidedException, ModuleStartException {
         for (ModuleProvider provider : startupSequence) {
             provider.notifyAfterCompleted();
         }
diff --git a/oap-server/server-library/library-module/src/main/java/org/apache/skywalking/oap/server/library/module/ModuleDefine.java b/oap-server/server-library/library-module/src/main/java/org/apache/skywalking/oap/server/library/module/ModuleDefine.java
index 3f6a80c..74c908d 100644
--- a/oap-server/server-library/library-module/src/main/java/org/apache/skywalking/oap/server/library/module/ModuleDefine.java
+++ b/oap-server/server-library/library-module/src/main/java/org/apache/skywalking/oap/server/library/module/ModuleDefine.java
@@ -53,7 +53,7 @@ public abstract class ModuleDefine {
      * @throws ProviderNotFoundException when even don't find a single one providers.
      */
     void prepare(ModuleManager moduleManager,
-        ApplicationConfiguration.ModuleConfiguration configuration) throws ProviderNotFoundException, ServiceNotProvidedException, ModuleConfigException {
+        ApplicationConfiguration.ModuleConfiguration configuration) throws ProviderNotFoundException, ServiceNotProvidedException, ModuleConfigException, ModuleStartException {
         ServiceLoader<ModuleProvider> moduleProviderLoader = ServiceLoader.load(ModuleProvider.class);
         boolean providerExist = false;
         for (ModuleProvider provider : moduleProviderLoader) {
diff --git a/oap-server/server-library/library-module/src/main/java/org/apache/skywalking/oap/server/library/module/ModuleProvider.java b/oap-server/server-library/library-module/src/main/java/org/apache/skywalking/oap/server/library/module/ModuleProvider.java
index 78597ea..7596fb6 100644
--- a/oap-server/server-library/library-module/src/main/java/org/apache/skywalking/oap/server/library/module/ModuleProvider.java
+++ b/oap-server/server-library/library-module/src/main/java/org/apache/skywalking/oap/server/library/module/ModuleProvider.java
@@ -66,7 +66,7 @@ public abstract class ModuleProvider {
     /**
      * In prepare stage, the module should initialize things which are irrelative other modules.
      */
-    public abstract void prepare() throws ServiceNotProvidedException;
+    public abstract void prepare() throws ServiceNotProvidedException, ModuleStartException;
 
     /**
      * In start stage, the module has been ready for interop.
@@ -76,7 +76,7 @@ public abstract class ModuleProvider {
     /**
      * This callback executes after all modules start up successfully.
      */
-    public abstract void notifyAfterCompleted() throws ServiceNotProvidedException;
+    public abstract void notifyAfterCompleted() throws ServiceNotProvidedException, ModuleStartException;
 
     /**
      * @return module names which does this module require?
diff --git a/oap-server/server-starter/src/main/java/org/apache/skywalking/oap/server/starter/config/ApplicationConfigLoader.java b/oap-server/server-starter/src/main/java/org/apache/skywalking/oap/server/starter/config/ApplicationConfigLoader.java
index ea4caff..dbedbf6 100644
--- a/oap-server/server-starter/src/main/java/org/apache/skywalking/oap/server/starter/config/ApplicationConfigLoader.java
+++ b/oap-server/server-starter/src/main/java/org/apache/skywalking/oap/server/starter/config/ApplicationConfigLoader.java
@@ -48,7 +48,6 @@ public class ApplicationConfigLoader implements ConfigLoader<ApplicationConfigur
     @Override public ApplicationConfiguration load() throws ConfigFileNotFoundException {
         ApplicationConfiguration configuration = new ApplicationConfiguration();
         this.loadConfig(configuration);
-        this.loadDefaultConfig(configuration);
         this.overrideConfigBySystemEnv(configuration);
         return configuration;
     }
@@ -84,31 +83,6 @@ public class ApplicationConfigLoader implements ConfigLoader<ApplicationConfigur
         }
     }
 
-    @SuppressWarnings("unchecked")
-    private void loadDefaultConfig(ApplicationConfiguration configuration) throws ConfigFileNotFoundException {
-        try {
-            Reader applicationReader = ResourceUtils.read("application-default.yml");
-            Map<String, Map<String, Map<String, ?>>> moduleConfig = yaml.loadAs(applicationReader, Map.class);
-            if (CollectionUtils.isNotEmpty(moduleConfig)) {
-                moduleConfig.forEach((moduleName, providerConfig) -> {
-                    if (!configuration.has(moduleName)) {
-                        logger.warn("The {} module did't define in application.yml, use default", moduleName);
-                        ApplicationConfiguration.ModuleConfiguration moduleConfiguration = configuration.addModule(moduleName);
-                        providerConfig.forEach((name, propertiesConfig) -> {
-                            Properties properties = new Properties();
-                            if (propertiesConfig != null) {
-                                propertiesConfig.forEach(properties::put);
-                            }
-                            moduleConfiguration.addProviderConfiguration(name, properties);
-                        });
-                    }
-                });
-            }
-        } catch (FileNotFoundException e) {
-            throw new ConfigFileNotFoundException(e.getMessage(), e);
-        }
-    }
-
     private void overrideConfigBySystemEnv(ApplicationConfiguration configuration) {
         for (Map.Entry<Object, Object> prop : System.getProperties().entrySet()) {
             overrideModuleSettings(configuration, prop.getKey().toString(), prop.getValue().toString());
diff --git a/oap-server/server-starter/src/main/resources/application.yml b/oap-server/server-starter/src/main/resources/application.yml
index 5bdaa05..1faf0e2 100644
--- a/oap-server/server-starter/src/main/resources/application.yml
+++ b/oap-server/server-starter/src/main/resources/application.yml
@@ -15,17 +15,12 @@
 # limitations under the License.
 
 cluster:
-  zookeeper:
-    hostPort: localhost:2181
-    # Retry Policy
-    baseSleepTimeMs: 1000 # initial amount of time to wait between retries
-    maxRetries: 3 # max number of times to retry
-#naming:
-#  jetty:
-#    #OS real network IP(binding required), for agent to find collector cluster
-#    host: localhost
-#    port: 10800
-#    contextPath: /
+   standalone:
+#  zookeeper:
+#    hostPort: localhost:2181
+#    # Retry Policy
+#    baseSleepTimeMs: 1000 # initial amount of time to wait between retries
+#    maxRetries: 3 # max number of times to retry
 core:
   default:
     restHost: localhost