diff --git a/README.MD b/README.MD
index 5214bd2cf6a8c3850598e5f1d116ade800eef156..7fdce7b3f6c8d2133712efa545910ba3347ec26f 100644
--- a/README.MD
+++ b/README.MD
@@ -44,6 +44,14 @@ TBD
 
 TBD
 
+### 项目结构
+
+- bootstrap 程序启动入口,不允许修改,评测时不依赖选手编译的 jar 包;
+- internal-dubbo dubbo 依赖,不允许修改,评测时不依赖选手编译的 jar 包;
+- internal-gateway gateway 依赖,不允许修改,评测时不依赖选手编译的 jar 包;
+- internal-service 服务的接口定义和实现,不允许修改,评测时不依赖选手编译的 jar 包;
+- workspace 选手进行开发的模块
+
 ### 开发接口
 
 TBD
diff --git a/bootstrap/pom.xml b/bootstrap/pom.xml
new file mode 100644
index 0000000000000000000000000000000000000000..7311cef9f80383c4f14374a532b3fe2b8be3a3b0
--- /dev/null
+++ b/bootstrap/pom.xml
@@ -0,0 +1,35 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project xmlns="http://maven.apache.org/POM/4.0.0"
+         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+    <parent>
+        <artifactId>adaptive-loadbalance</artifactId>
+        <groupId>com.aliware.tianchi</groupId>
+        <version>1.0.0</version>
+    </parent>
+    <modelVersion>4.0.0</modelVersion>
+
+    <artifactId>bootstrap</artifactId>
+    <dependencies>
+        <dependency>
+            <groupId>org.springframework</groupId>
+            <artifactId>spring-context</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>com.aliware.tianchi</groupId>
+            <artifactId>workspace-gateway</artifactId>
+            <version>1.0.0</version>
+        </dependency>
+        <dependency>
+            <groupId>com.aliware.tianchi</groupId>
+            <artifactId>workspace-provider</artifactId>
+            <version>1.0.0</version>
+        </dependency>
+        <dependency>
+            <groupId>com.aliware.tianchi</groupId>
+            <artifactId>service-provider</artifactId>
+        </dependency>
+    </dependencies>
+
+
+</project>
\ No newline at end of file
diff --git a/bootstrap/src/main/java/com/aliware/tianchi/GatewayApp.java b/bootstrap/src/main/java/com/aliware/tianchi/GatewayApp.java
new file mode 100644
index 0000000000000000000000000000000000000000..f3d1decc60daf88d81ccbd09db5c079a4c6b0fdc
--- /dev/null
+++ b/bootstrap/src/main/java/com/aliware/tianchi/GatewayApp.java
@@ -0,0 +1,16 @@
+package com.aliware.tianchi;
+
+import java.io.IOException;
+import org.springframework.context.support.ClassPathXmlApplicationContext;
+
+/**
+ * @author guohaoice@gmail.com
+ */
+public class GatewayApp {
+  public static void main(String[] args) throws IOException {
+    ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext(new String[]{"dubbo-provider.xml"});
+    context.start();
+
+    System.in.read(); // press any key to exit
+  }
+}
diff --git a/bootstrap/src/main/java/com/aliware/tianchi/ProviderApp.java b/bootstrap/src/main/java/com/aliware/tianchi/ProviderApp.java
new file mode 100644
index 0000000000000000000000000000000000000000..a8a203aec664f4331225826a8b11c4b4bc8ba1c7
--- /dev/null
+++ b/bootstrap/src/main/java/com/aliware/tianchi/ProviderApp.java
@@ -0,0 +1,17 @@
+package com.aliware.tianchi;
+
+import java.io.IOException;
+import org.springframework.context.support.ClassPathXmlApplicationContext;
+
+/**
+ * @author guohaoice@gmail.com
+ */
+public class ProviderApp {
+
+  public static void main(String[] args) throws IOException {
+    ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext(new String[]{"classpath:dubbo-provider.xml"});
+    context.start();
+    System.in.read(); // press any key to exit
+  }
+
+}
diff --git a/internal-dubbo/pom.xml b/internal-dubbo/pom.xml
index a4be6d0ac8b3adbfe8aad1265daff56d011f7f05..9c4730d24728d5c34b368774eda81bab1a77e928 100644
--- a/internal-dubbo/pom.xml
+++ b/internal-dubbo/pom.xml
@@ -10,4 +10,12 @@
     <modelVersion>4.0.0</modelVersion>
 
     <artifactId>internal-dubbo</artifactId>
+
+    <dependencies>
+        <dependency>
+            <groupId>org.apache.dubbo</groupId>
+            <artifactId>dubbo</artifactId>
+            <version>3.0.0-SNAPSHOT</version>
+        </dependency>
+    </dependencies>
 </project>
\ No newline at end of file
diff --git a/internal-gateway/pom.xml b/internal-gateway/pom.xml
index cc5ce9a0db1e7d6b263abf9e0a0d04f8543f91b1..dfdbf980700f7d5a644f6c22eff5a922d3d48d3d 100644
--- a/internal-gateway/pom.xml
+++ b/internal-gateway/pom.xml
@@ -11,5 +11,11 @@
 
     <artifactId>internal-gateway</artifactId>
 
+    <dependencies>
+        <dependency>
+            <groupId>com.aliware.tianchi</groupId>
+            <artifactId>internal-dubbo</artifactId>
+        </dependency>
+    </dependencies>
 
 </project>
\ No newline at end of file
diff --git a/service/pom.xml b/internal-service/pom.xml
similarity index 100%
rename from service/pom.xml
rename to internal-service/pom.xml
diff --git a/service/service-api/pom.xml b/internal-service/service-api/pom.xml
similarity index 100%
rename from service/service-api/pom.xml
rename to internal-service/service-api/pom.xml
diff --git a/service/service-api/src/main/java/com/aliware/tianchi/HashInterface.java b/internal-service/service-api/src/main/java/com/aliware/tianchi/HashInterface.java
similarity index 100%
rename from service/service-api/src/main/java/com/aliware/tianchi/HashInterface.java
rename to internal-service/service-api/src/main/java/com/aliware/tianchi/HashInterface.java
diff --git a/internal-service/service-consumer/pom.xml b/internal-service/service-consumer/pom.xml
new file mode 100644
index 0000000000000000000000000000000000000000..81633ade46316180e0b5ad5d31e8bdab1b752aa4
--- /dev/null
+++ b/internal-service/service-consumer/pom.xml
@@ -0,0 +1,26 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project xmlns="http://maven.apache.org/POM/4.0.0"
+         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+    <parent>
+        <artifactId>service</artifactId>
+        <groupId>com.aliware.tianchi</groupId>
+        <version>1.0.0</version>
+    </parent>
+    <modelVersion>4.0.0</modelVersion>
+
+    <artifactId>service-consumer</artifactId>
+
+    <dependencies>
+        <dependency>
+            <groupId>com.aliware.tianchi</groupId>
+            <artifactId>service-api</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>org.springframework</groupId>
+            <artifactId>spring-context</artifactId>
+        </dependency>
+    </dependencies>
+
+
+</project>
\ No newline at end of file
diff --git a/internal-service/service-consumer/src/main/java/com/aliware/tianchi/MyConsumer.java b/internal-service/service-consumer/src/main/java/com/aliware/tianchi/MyConsumer.java
new file mode 100644
index 0000000000000000000000000000000000000000..162e5b34419ba2c0d99d4b7c1ca8e3c4cc216b5d
--- /dev/null
+++ b/internal-service/service-consumer/src/main/java/com/aliware/tianchi/MyConsumer.java
@@ -0,0 +1,19 @@
+package com.aliware.tianchi;
+
+import java.io.IOException;
+import org.springframework.context.support.ClassPathXmlApplicationContext;
+
+/**
+ * @author guohaoice@gmail.com
+ */
+public class MyConsumer {
+  public static void main(String[] args) throws IOException {
+    ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext(new String[]{"classpath:dubbo-consumer.xml"});
+    context.start();
+    HashInterface bean = context.getBean(HashInterface.class);
+    for (int i = 0; i < 10; i++) {
+      System.out.println(bean.hash("hahaha"));
+    }
+    System.in.read(); // press any key to exit
+  }
+}
diff --git a/internal-service/service-consumer/src/main/resources/dubbo-consumer.xml b/internal-service/service-consumer/src/main/resources/dubbo-consumer.xml
new file mode 100644
index 0000000000000000000000000000000000000000..f25a6e957747a7497fe950c196e1d075ec780f46
--- /dev/null
+++ b/internal-service/service-consumer/src/main/resources/dubbo-consumer.xml
@@ -0,0 +1,18 @@
+<beans xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+       xmlns:dubbo="http://dubbo.apache.org/schema/dubbo"
+       xmlns="http://www.springframework.org/schema/beans"
+       xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
+       http://dubbo.apache.org/schema/dubbo http://dubbo.apache.org/schema/dubbo/dubbo.xsd">
+
+    <!-- consumer's application name, used for tracing dependency relationship (not a matching criterion),
+    don't set it same as provider -->
+    <dubbo:application name="demo-consumer"/>
+
+    <!-- use multicast registry center to discover service -->
+    <!--<dubbo:registry address="zookeeper://127.0.0.1:2181"/>-->
+
+    <!-- generate proxy for the remote service, then demoService can be used in the same way as the
+    local regular interface -->
+    <dubbo:reference id="directService" check="false" interface="com.aliware.tianchi.HashInterface" url="localhost:20880"/>
+
+</beans>
\ No newline at end of file
diff --git a/service/service-provider/pom.xml b/internal-service/service-provider/pom.xml
similarity index 93%
rename from service/service-provider/pom.xml
rename to internal-service/service-provider/pom.xml
index 53c8fabe88b9307d1fb28c5605161197b9ec82fc..5e390fbe44bcf192d2c31c1ce58156742c43e06b 100644
--- a/service/service-provider/pom.xml
+++ b/internal-service/service-provider/pom.xml
@@ -15,8 +15,8 @@
         <dependency>
             <groupId>com.aliware.tianchi</groupId>
             <artifactId>service-api</artifactId>
-            <version>${project.version}</version>
         </dependency>
+
     </dependencies>
 
 
diff --git a/service/service-provider/src/main/java/com/aliware/tianchi/HashServiceImpl.java b/internal-service/service-provider/src/main/java/com/aliware/tianchi/HashServiceImpl.java
similarity index 94%
rename from service/service-provider/src/main/java/com/aliware/tianchi/HashServiceImpl.java
rename to internal-service/service-provider/src/main/java/com/aliware/tianchi/HashServiceImpl.java
index 4df128874254c968a5b484706f4ce0b605223573..35bd7d0e3756ae147eeb4bdef034476aa675c2a2 100644
--- a/service/service-provider/src/main/java/com/aliware/tianchi/HashServiceImpl.java
+++ b/internal-service/service-provider/src/main/java/com/aliware/tianchi/HashServiceImpl.java
@@ -36,7 +36,7 @@ public class HashServiceImpl implements HashInterface {
     double cdf = 0;
     while (u >= cdf) {
       x++;
-      cdf = 1 - Math.exp(-1.0 * 1 / averageRTT * x);
+      cdf = 1 - Math.exp(-1.0D * 1 / averageRTT * x);
     }
     return x;
   }
diff --git a/internal-service/service-provider/src/main/resources/dubbo-provider.xml b/internal-service/service-provider/src/main/resources/dubbo-provider.xml
new file mode 100644
index 0000000000000000000000000000000000000000..fb14e691c6c6bdea255914dfd7f6929beca67aab
--- /dev/null
+++ b/internal-service/service-provider/src/main/resources/dubbo-provider.xml
@@ -0,0 +1,21 @@
+<beans xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+       xmlns:dubbo="http://dubbo.apache.org/schema/dubbo"
+       xmlns="http://www.springframework.org/schema/beans"
+       xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.3.xsd
+       http://dubbo.apache.org/schema/dubbo http://dubbo.apache.org/schema/dubbo/dubbo.xsd">
+
+    <!-- provider's application name, used for tracing dependency relationship -->
+    <dubbo:application name="demo-provider"/>
+    <!-- use multicast registry center to export service -->
+    <dubbo:registry address="multicast://224.5.6.7:1234"/>
+    <!-- use dubbo protocol to export service on port 20880 -->
+    <dubbo:protocol name="dubbo" port="20880"/>
+    <!-- service implementation, as same as regular local bean -->
+    <bean id="demoService" class="com.aliware.tianchi.HashServiceImpl">
+        <constructor-arg index="0" value="10"/>
+        <constructor-arg index="1" value="10000000"/>
+        <constructor-arg index="2" value="salt-value"/>
+    </bean>
+    <!-- declare the service interface to be exported -->
+    <dubbo:service interface="com.aliware.tianchi.HashInterface" ref="demoService"/>
+</beans>
\ No newline at end of file
diff --git a/pom.xml b/pom.xml
index 3055949960681ac3e3bcd1c730158e515d09e184..93825243e03b198d5bf431797a6dd9b8fa6fd71c 100644
--- a/pom.xml
+++ b/pom.xml
@@ -9,6 +9,53 @@
     <packaging>pom</packaging>
     <version>1.0.0</version>
 
+    <dependencyManagement>
+        <dependencies>
+            <!--internal start-->
+            <dependency>
+                <groupId>com.aliware.tianchi</groupId>
+                <artifactId>internal-dubbo</artifactId>
+                <version>${project.version}</version>
+            </dependency>
+            <dependency>
+                <groupId>com.aliware.tianchi</groupId>
+                <artifactId>internal-gateway</artifactId>
+                <version>${project.version}</version>
+            </dependency>
+            <dependency>
+                <groupId>com.aliware.tianchi</groupId>
+                <artifactId>service-api</artifactId>
+                <version>${project.version}</version>
+            </dependency>
+            <dependency>
+                <groupId>com.aliware.tianchi</groupId>
+                <artifactId>service-consumer</artifactId>
+                <version>${project.version}</version>
+            </dependency>
+            <dependency>
+                <groupId>com.aliware.tianchi</groupId>
+                <artifactId>service-provider</artifactId>
+                <version>${project.version}</version>
+            </dependency>
+            <dependency>
+                <groupId>com.aliware.tianchi</groupId>
+                <artifactId>workspace-provider</artifactId>
+                <version>${project.version}</version>
+            </dependency>
+            <dependency>
+                <groupId>com.aliware.tianchi</groupId>
+                <artifactId>workspace-gateway</artifactId>
+                <version>${project.version}</version>
+            </dependency>
+            <!--internal end-->
+
+            <dependency>
+                <groupId>org.springframework</groupId>
+                <artifactId>spring-context</artifactId>
+                <version>4.3.20.RELEASE</version>
+            </dependency>
+        </dependencies>
+    </dependencyManagement>
     <build>
         <plugins>
             <plugin>
@@ -26,6 +73,8 @@
     <modules>
         <module>internal-dubbo</module>
         <module>internal-gateway</module>
-        <module>service</module>
+        <module>internal-service</module>
+        <module>bootstrap</module>
+        <module>workspace</module>
     </modules>
 </project>
\ No newline at end of file
diff --git a/service/src/main/java/com/aliware/tianchi/HashInterface.java b/service/src/main/java/com/aliware/tianchi/HashInterface.java
deleted file mode 100644
index 5665174dd7c49ae5760864824d8397a4ea0fd9be..0000000000000000000000000000000000000000
--- a/service/src/main/java/com/aliware/tianchi/HashInterface.java
+++ /dev/null
@@ -1,10 +0,0 @@
-package com.aliware.tianchi;
-
-/**
- * @author guohaoice@gmail.com
- */
-public interface HashInterface {
-
-    int hash(String input);
-
-}
diff --git a/src/main/java/com/aliware/GatewayApp.java b/src/main/java/com/aliware/GatewayApp.java
deleted file mode 100644
index f00f00d17b51c01f6cc9764bb12dffe01f2c20cc..0000000000000000000000000000000000000000
--- a/src/main/java/com/aliware/GatewayApp.java
+++ /dev/null
@@ -1,10 +0,0 @@
-package com.aliware;
-
-/**
- * @author guohaoice@gmail.com
- */
-public class GatewayApp {
-  public static void main(String[] args) {
-    //
-  }
-}
diff --git a/src/main/java/com/aliware/ProviderApp.java b/src/main/java/com/aliware/ProviderApp.java
deleted file mode 100644
index bd5778af65166747a6a6609f771f25abcf675936..0000000000000000000000000000000000000000
--- a/src/main/java/com/aliware/ProviderApp.java
+++ /dev/null
@@ -1,10 +0,0 @@
-package com.aliware;
-
-/**
- * @author guohaoice@gmail.com
- */
-public class ProviderApp {
-  public static void main(String[] args) {
-    //
-  }
-}
diff --git a/workspace/README.md b/workspace/README.md
new file mode 100644
index 0000000000000000000000000000000000000000..b89adcf4d8d28fd60f523fe70167d911fa092f44
--- /dev/null
+++ b/workspace/README.md
@@ -0,0 +1,3 @@
+# Workspace
+
+选手在这个 module 下开发,其他 module 不允许修改。
\ No newline at end of file
diff --git a/workspace/pom.xml b/workspace/pom.xml
new file mode 100644
index 0000000000000000000000000000000000000000..5230c79c381be375c584ccd0a1d52b260aa25db7
--- /dev/null
+++ b/workspace/pom.xml
@@ -0,0 +1,20 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project xmlns="http://maven.apache.org/POM/4.0.0"
+         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+    <parent>
+        <artifactId>adaptive-loadbalance</artifactId>
+        <groupId>com.aliware.tianchi</groupId>
+        <version>1.0.0</version>
+    </parent>
+    <modelVersion>4.0.0</modelVersion>
+
+    <artifactId>workspace</artifactId>
+    <packaging>pom</packaging>
+    <modules>
+        <module>workspace-gateway</module>
+        <module>workspace-provider</module>
+    </modules>
+
+
+</project>
\ No newline at end of file
diff --git a/service/service-consumer/pom.xml b/workspace/workspace-gateway/pom.xml
similarity index 82%
rename from service/service-consumer/pom.xml
rename to workspace/workspace-gateway/pom.xml
index ba938d80e9b3c947e8ffdddc82978939cebfd453..9a1c6a71bb133635813aa4447731a9b237f83d46 100644
--- a/service/service-consumer/pom.xml
+++ b/workspace/workspace-gateway/pom.xml
@@ -3,13 +3,13 @@
          xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
          xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
     <parent>
-        <artifactId>service</artifactId>
+        <artifactId>workspace</artifactId>
         <groupId>com.aliware.tianchi</groupId>
         <version>1.0.0</version>
     </parent>
     <modelVersion>4.0.0</modelVersion>
 
-    <artifactId>service-consumer</artifactId>
+    <artifactId>workspace-gateway</artifactId>
 
 
 </project>
\ No newline at end of file
diff --git a/workspace/workspace-provider/pom.xml b/workspace/workspace-provider/pom.xml
new file mode 100644
index 0000000000000000000000000000000000000000..7d0f8a3081016e02c865945d5788a2f88c548473
--- /dev/null
+++ b/workspace/workspace-provider/pom.xml
@@ -0,0 +1,14 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project xmlns="http://maven.apache.org/POM/4.0.0"
+         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+    <parent>
+        <artifactId>workspace</artifactId>
+        <groupId>com.aliware.tianchi</groupId>
+        <version>1.0.0</version>
+    </parent>
+    <modelVersion>4.0.0</modelVersion>
+
+    <artifactId>workspace-provider</artifactId>
+
+</project>
\ No newline at end of file