diff --git a/README.MD b/README.MD index 7fdce7b3f6c8d2133712efa545910ba3347ec26f..ec3533390ae983d66883201242aebd325488a0d1 100644 --- a/README.MD +++ b/README.MD @@ -1,48 +1,78 @@ # 阿里巴巴2019ä¸é—´ä»¶æ€§èƒ½æŒ‘战赛-自适应负载å‡è¡¡ï¼ˆåˆèµ›ï¼‰èµ›é¢˜ -[TOC] - ## 背景 ### è´Ÿè½½å‡è¡¡ (loadbalance) -[è´Ÿè½½å‡è¡¡](https://en.wikipedia.org/wiki/Load_balancing_(computing))是大规模计算机系统ä¸çš„ä¸€ä¸ªåŸºç¡€é—®é¢˜ã€‚çµæ´»çš„è´Ÿè½½å‡è¡¡ç®—法å¯ä»¥å°†è¯·æ±‚åˆç†åœ°åˆ†é…到负载较少的æœåŠ¡å™¨ä¸Šã€‚ç†æƒ³çжæ€ä¸‹ï¼Œä¸€ä¸ªè´Ÿè½½å‡è¡¡ç®—法应该能够最å°åŒ–æœåŠ¡å“应时间(RTT),使系统åžå釿œ€é«˜ï¼Œä¿æŒé«˜æ€§èƒ½æœåŠ¡èƒ½åŠ›ã€‚è‡ªé€‚åº”è´Ÿè½½å‡è¡¡æ˜¯æŒ‡æ— 论当系统处在空闲ã€ç¨³å®šè¿˜æ˜¯ç¹å¿™çжæ€ï¼Œç³»ç»Ÿéƒ½åº”è¯¥ä¿æŒè¾ƒå¥½çš„æ€§èƒ½ï¼Œä¸å…许产生饥饿或者宕机。 +[è´Ÿè½½å‡è¡¡](https://en.wikipedia.org/wiki/Load_balancing_(computing))是大规模计算机系统ä¸çš„ä¸€ä¸ªåŸºç¡€é—®é¢˜ã€‚çµæ´»çš„è´Ÿè½½å‡è¡¡ç®—法å¯ä»¥å°†è¯·æ±‚åˆç†åœ°åˆ†é…到负载较少的æœåŠ¡å™¨ä¸Šã€‚ç†æƒ³çжæ€ä¸‹ï¼Œè´Ÿè½½å‡è¡¡ç®—法应该能够最å°åŒ–æœåŠ¡å“应时间(RTT),使系统åžå釿œ€é«˜ï¼Œä»Žè€Œä¿æŒé«˜æ€§èƒ½æœåŠ¡èƒ½åŠ›ã€‚è‡ªé€‚åº”è´Ÿè½½å‡è¡¡æ˜¯æŒ‡è´Ÿè½½å‡è¡¡ç®—æ³•èƒ½å¤Ÿæ ¹æ®æœåŠ¡èƒ½åŠ›åŠ¨æ€çš„进行æµé‡è°ƒåº¦ï¼Œæ— 论当系统处在空闲ã€ç¨³å®šè¿˜æ˜¯ç¹å¿™çжæ€ï¼Œç³»ç»Ÿéƒ½å¯ä»¥ä¿æŒè¾ƒå¥½çš„æ€§èƒ½ï¼Œä¸ä¼šäº§ç”Ÿé¥¥é¥¿æˆ–者宕机。 ### Apache Dubbo (incubating) [Apache Dubbo (incubating)](http://dubbo.apache.org/zh-cn/) |ˈdÊŒbəʊ| 是一款高性能ã€è½»é‡çº§çš„å¼€æºJava RPC框架,它æä¾›äº†ä¸‰å¤§æ ¸å¿ƒèƒ½åŠ›ï¼šé¢å‘接å£çš„远程方法调用,智能容错和负载å‡è¡¡ï¼Œä»¥åŠæœåŠ¡è‡ªåŠ¨æ³¨å†Œå’Œå‘现。  - ### Apache Dubbo Gateway TBD ### é¢˜ç›®ç”±æ¥ -ä¼ ç»Ÿçš„è´Ÿè½½å‡è¡¡åœºæ™¯ä¸ºå•调度器模å¼ï¼Œå³ä¸å¿ƒåŒ–è´Ÿè½½å‡è¡¡ï¼šè°ƒåº¦å™¨è´Ÿè´£å°†æ–°åˆ°çš„请求立å³è½¬å‘至多个åŽç«¯æœåС噍ä¸çš„一个。éšç€åˆ†å¸ƒå¼ç³»ç»Ÿçš„å‘展,这ç§å•调度器模å¼åœ¨æ‰©å±•性和å¯é 性方é¢çš„问题也愈å‘严é‡ã€‚å› æ¤ï¼Œè®¾è®¡å’Œå®žçŽ°åŽ»ä¸å¿ƒåŒ–且性能优异的负载å‡è¡¡æ˜¯å¦æœ¯å’Œå·¥ä¸šç•Œçš„å…±åŒéœ€æ±‚。 +ä¼ ç»Ÿçš„è´Ÿè½½å‡è¡¡åœºæ™¯ä¸ºå•调度器模å¼ï¼Œå³ä¸å¿ƒåŒ–è´Ÿè½½å‡è¡¡ï¼šè°ƒåº¦å™¨è´Ÿè´£å°†æ–°åˆ°çš„请求立å³è½¬å‘至多个åŽç«¯æœåС噍ä¸çš„一个。éšç€åˆ†å¸ƒå¼ç³»ç»Ÿçš„å‘展,这ç§å•调度器模å¼åœ¨æ‰©å±•性ã€å¯é 性和性能方é¢çš„问题愈å‘严é‡ã€‚å› æ¤ï¼Œè®¾è®¡å’Œå®žçŽ°åŽ»ä¸å¿ƒåŒ–且性能优异的负载å‡è¡¡æ˜¯å¦æœ¯å’Œå·¥ä¸šç•Œçš„å…±åŒéœ€æ±‚。 ## 赛题说明 -按照题目æä¾›çš„æ‰©å±•接å£ï¼Œå®žçŽ°ä¸€å¥—è‡ªé€‚åº”è´Ÿè½½å‡è¡¡æœºåˆ¶ã€‚è¦æ±‚能够具备以下能力: +基于 Dubbo çš„ LoadBalanceã€Routerã€Filter ç‰SPI接å£ï¼Œå®žçŽ°ä¸€å¥—è‡ªé€‚åº”è´Ÿè½½å‡è¡¡æœºåˆ¶ï¼Œä½œä¸ºæ‰©å±•作用于 gateway å’Œ providerä¸¤ç«¯ã€‚è¦æ±‚能够具备以下能力: 1. Gateway(Consumer) ç«¯èƒ½å¤Ÿè‡ªåŠ¨æ ¹æ®æœåС处ç†èƒ½åŠ›å˜åŒ–åŠ¨æ€æœ€ä¼˜åŒ–分é…请求ä¿è¯è¾ƒä½Žå“应时间,较高åžåé‡ã€‚ 2. Provider 端能自动进行æœåС容é‡è¯„估,当请求数é‡è¶…过æœåŠ¡èƒ½åŠ›æ—¶ï¼Œå…许拒ç»éƒ¨åˆ†è¯·æ±‚,以ä¿è¯æœåŠ¡ä¸è¿‡è½½ã€‚ 3. 当请求速率高于所有的 Provider æœåŠ¡æ•ˆçŽ‡ä¹‹å’Œæ—¶ï¼Œå…许 Gateway( Consumer ) æ‹’ç»æœåŠ¡æ–°åˆ°è¯·æ±‚ã€‚ ### æž¶æž„ +  +- 所有程åºå‡åœ¨ docker 容器ä¸è¿è¡Œ - Gateway 负责将请求转å‘至 Providerï¼› - Provider 处ç†è¯·æ±‚返回å“应; - Provider 按照 CPU æ ¸æ•°å’Œå†…å˜å¤§å°åˆ†ä¸º Smallã€Mediumã€Large ä¸‰ä¸ªè§„æ ¼ï¼› -- 选手需è¦è®¾è®¡å®žçް Gateway 选择 Provider çš„ loadbalance 算法。 +- 选手需è¦è®¾è®¡å®žçް Gateway 选择 Provider çš„ loadbalance/router 算法。 -### æœåŠ¡ -TBD -### 调用æµç¨‹ +### ç›®æ ‡ -TBD +1. ä¿è¯ç³»ç»Ÿç¨³å®šæ€§ï¼Œä»»ä½•情况下æœåŠ¡éƒ½ä¸èƒ½è¢«æ‰“挂; +2. ä¿è¯è¯·æ±‚æˆåŠŸçŽ‡ï¼Œå°½å¯èƒ½çš„让更多的请求在较çŸçš„æ—¶é—´å†…被处ç†ï¼› +3. å°½å¯èƒ½é¿å…å› é‡è¯•导致æµé‡è¢«è¿‡åº¦æ”¾å¤§ã€‚ + +### æœåŠ¡ + +Provider 是æœåŠ¡æä¾›è€…,Gateway( Consumer ) 是æœåŠ¡æ¶ˆè´¹è€…ï¼ŒGateway 消费 Provider æä¾›çš„æœåŠ¡ã€‚Gateway åŠ Provider æœåŠ¡çš„å®žçŽ° **由赛会官方æä¾›**。 为简化æµç¨‹ï¼Œæœ¬æ¬¡æ¯”èµ›ä¸ä½¿ç”¨æœåŠ¡æ³¨å†Œå’Œå‘现机制,Gateway 通过 docker çš„ dns 进行直连调用 Provider æœåŠ¡ã€‚ + +Provider æœåŠ¡æŽ¥å£ï¼š +``` +public interface HashInterface { + + /** + * 计算给定å—符串的 hash 值 + * <li> + * <ol>接å£çš„å“应时间符åˆè´ŸæŒ‡æ•°åˆ†å¸ƒ </ol> + * <ol>接å£çš„å¹¶å‘度(å…è®¸åŒæ—¶è°ƒç”¨çš„çº¿ç¨‹æ•°ï¼‰ä¼šéšæ—¶é—´å¢žåŠ æˆ–å‡å°ï¼Œä»Žè€Œæ¨¡æ‹Ÿç”Ÿäº§çŽ¯å¢ƒå¯èƒ½çš„æŽ’队</ol> + * </li> + * @param input è¦è®¡ç®—çš„å—符串 + * @return å—符串的 hash 值 + */ + int hash(String input); +} +``` +Consumer 在接收到客户端请求以åŽï¼Œä¼šç”Ÿæˆä¸€ä¸ªéšæœºå—符串,该å—符串ç»è¿‡ Consumer Agent å’Œ Provider Agent åŽåˆ°è¾¾ Provider,由 Provider 计算哈希值åŽè¿”å›žï¼Œå®¢æˆ·ç«¯ä¼šæ ¡éªŒè¯¥å“ˆå¸Œå€¼ä¸Žå…¶ç”Ÿæˆçš„æ•°æ®æ˜¯å¦ç›¸åŒï¼Œå¦‚果相åŒåˆ™è¿”回æ£å¸¸ï¼ˆ200),å¦åˆ™è¿”回异常(500)。 + +### å¯åŠ¨å’Œè°ƒç”¨æµç¨‹ + +1. å¯åŠ¨ä¸‰ä¸ª Provider 实例 +2. å¯åЍ Gateway 实例 +3. 客户端通过 HTTP 访问 Gateway æœåŠ¡ +4. Gateway 按照选手扩展的路由或负载å‡è¡¡ç®—法选择一个 Provider 并进行调用 +5. Provider 处ç†è¯·æ±‚,返回结果 +6. Gateway 将本次请求的结果返回至客户端(success/failure) ### 项目结构 @@ -50,7 +80,7 @@ TBD - internal-dubbo dubbo ä¾èµ–,ä¸å…许修改,评测时ä¸ä¾èµ–选手编译的 jar 包; - internal-gateway gateway ä¾èµ–,ä¸å…许修改,评测时ä¸ä¾èµ–选手编译的 jar 包; - internal-service æœåŠ¡çš„æŽ¥å£å®šä¹‰å’Œå®žçŽ°ï¼Œä¸å…许修改,评测时ä¸ä¾èµ–选手编译的 jar 包; -- workspace 选手进行开å‘çš„æ¨¡å— +- workspace 选手进行开å‘的模å—, 评测时会以 jar 包ä¾èµ–的方å¼åŠ è½½ ### å¼€å‘æŽ¥å£ @@ -62,25 +92,54 @@ TBD ### é™åˆ¶ -### 环境 - - - -### ç›®æ ‡ - -1. ä¿è¯ç³»ç»Ÿç¨³å®šæ€§ï¼Œä»»ä½•情况下æœåŠ¡éƒ½ä¸èƒ½è¢«æ‰“挂; -2. ä¿è¯è¯·æ±‚æˆåŠŸçŽ‡ï¼Œå°½å¯èƒ½çš„让更多的请求在较çŸçš„æ—¶é—´å†…被处ç†ï¼› -3. å°½å¯èƒ½é¿å…å› é‡è¯•导致æµé‡è¢«è¿‡åº¦æ”¾å¤§ã€‚ +1. ä¸å…许修改 Dubbo/Gateway 相关é…ç½® +2. ä¸å…è®¸ä½¿ç”¨è„šæœ¬æˆ–è€…å…¶ä»–æ–¹å¼æ›¿æ¢ provider/gateway æœåŠ¡ +3. ä¸å…许使用 provider æœåŠ¡å†…çš„ç›¸å…³ä¿¡æ¯ï¼Œå¦‚é…置的 averageRTT/ maxConcurrency ç‰ã€‚ +4. ä¸å…许引入外部ä¾èµ–,如果对开æºä»£ç 有所借鉴,å¯å°éƒ¨åˆ† copy。 + +### å¼€å‘环境æå»º + +#### ä¾èµ–项目 +- [internal-dubbo](https://code.aliyun.com/middlewarerace2019/dubbo-internal) + + 比赛使用的特定版本 dubbo, éœ€è¦æ‰‹åŠ¨å®‰è£…ä¾èµ–。 + ```bash + git clone https://code.aliyun.com/middlewarerace2019/dubbo-internal + mvn clean install -Dmaven.test.skip=true + ``` + +- [internal-gateway](https://code.aliyun.com/middlewarerace2019/internal-gateway) + + 执行调用的consumer,接收压测程åºè¯·æ±‚ï¼ŒåŠ è½½é€‰æ‰‹å®žçŽ°[workspace-gateway]()部分的 LoadBalance 扩展,按照扩展选择相应 Provider 完æˆè°ƒç”¨ï¼Œè¿”回结果æˆåŠŸ(200)或失败(500)。å¯åŠ¨ç¨‹åºå·²ç»è¢«é›†æˆè‡³ internal-serviceï¼Œæœ¬åœ°å¼€å‘æ— 需关心。 + + 由于代ç 对比赛支æŒåšäº†ä¸€å®šçš„ä¿®æ”¹ï¼Œæ‰€ä»¥éœ€è¦æ‰‹åŠ¨å®‰è£…ä¾èµ–: + ```bash + git clone https://code.aliyun.com/middlewarerace2019/internal-gateway + mvn clean install -Dmaven.test.skip=true + ``` + +- [internal-service](https://code.aliyun.com/middlewarerace2019/internal-service) + + 内置æœåŠ¡ï¼Œå·²ç»ç”±èµ›é¢˜å®˜æ–¹æä¾›ï¼Œå¼€å‘过程ä¸éœ€è¦ä¿®æ”¹ï¼Œåªéœ€è¦å®‰è£…ä¾èµ–。 + ```bash + git clone https://code.aliyun.com/middlewarerace2019/internal-service.git + mvn clean install -Dmaven.test.skip=true + ``` + +#### å¼€å‘项目 +- [adaptive-loadbalance](https://code.aliyun.com/middlewarerace2019/adaptive-loadbalance) + + 选手按照题目æä¾›çš„æŽ¥å£ï¼Œå®žçް provider-consumer ååŒçš„自适应负载å‡è¡¡ç–略。 ## 评测 - ### 环境 + - Gateway : 1 å° - Provider : 3å° - Provider-small: 1c2g - Provider-medium: 2c4g - - Provider-large: 4c8g + - Provider-large: 3c6g - æ¯ä¸ª Provider çš„æœåŠ¡èƒ½åŠ›(处ç†è¯·æ±‚的速率)都会ä¸å®šæœŸå˜åŒ–: - 䏉尿œºå™¨çš„æ€»å¤„ç†èƒ½åŠ›ä¼šåˆ†åˆ«åœ¨å°äºŽ/约ç‰äºŽ/大于请求é‡ä¸‰ä¸ªçжæ€å˜åŠ¨ï¼› - 䏉尿œºå™¨ä»»æ„一å°çš„å•å°å¤„ç†èƒ½åŠ›éƒ½å°äºŽæ€»è¯·æ±‚é‡ã€‚ @@ -113,4 +172,6 @@ TBD | :--: | :--------: | :------: | | 1 | 1,000,000 | 9,999 | | 2 | 1,000,000 | 9,998 | -| 3 | 800,000 | 10,000 | \ No newline at end of file +| 3 | 800,000 | 10,000 | +``` + diff --git a/dockerfile/debian-jdk8-devel/Dockerfile b/dockerfile/debian-jdk8-devel/Dockerfile deleted file mode 100644 index 0a0d8960341fa49ff1c8f0abad7dae23c693ce15..0000000000000000000000000000000000000000 --- a/dockerfile/debian-jdk8-devel/Dockerfile +++ /dev/null @@ -1,6 +0,0 @@ -FROM registry.cn-shanghai.aliyuncs.com/aliware2019/aliware:debian-jdk - -ADD apache-maven-3.6.1-bin.tar.gz /opt - -ENV MAVEN_HOME=/opt/apache-maven-3.6.1 -ENV PATH=${PATH}:${MAVEN_HOME}/bin diff --git a/dockerfile/debian-jdk8-release/debian-jdk8-release-consumer/Dockerfile b/dockerfile/debian-jdk8-release/debian-jdk8-release-consumer/Dockerfile deleted file mode 100644 index 8a2601dba5ce61fb7f06b171f7846703a5cd5759..0000000000000000000000000000000000000000 --- a/dockerfile/debian-jdk8-release/debian-jdk8-release-consumer/Dockerfile +++ /dev/null @@ -1,10 +0,0 @@ -FROM registry.cn-shanghai.aliyuncs.com/aliware2019/aliware:debian-jdk8-devel - -COPY service-consumer-1.0.0.jar /usr/local/service/ - -COPY start.sh /usr/local/service - -WORKDIR /usr/local/service - -ENTRYPOINT ["sh","start.sh"] - diff --git a/dockerfile/debian-jdk8-release/debian-jdk8-release-consumer/start.sh b/dockerfile/debian-jdk8-release/debian-jdk8-release-consumer/start.sh deleted file mode 100644 index daf523cf0a80acf63cce2954708a82ec18e857ef..0000000000000000000000000000000000000000 --- a/dockerfile/debian-jdk8-release/debian-jdk8-release-consumer/start.sh +++ /dev/null @@ -1 +0,0 @@ -java -jar service-consumer-1.0.0.jar diff --git a/dockerfile/debian-jdk8-release/debian-jdk8-release-provider/Dockerfile b/dockerfile/debian-jdk8-release/debian-jdk8-release-provider/Dockerfile deleted file mode 100644 index bbfb6b0b38304ddc90e5359e569f6cc849759bce..0000000000000000000000000000000000000000 --- a/dockerfile/debian-jdk8-release/debian-jdk8-release-provider/Dockerfile +++ /dev/null @@ -1,10 +0,0 @@ -FROM registry.cn-shanghai.aliyuncs.com/aliware2019/aliware:debian-jdk8-devel - -COPY service-provider-1.0.0.jar /usr/local/service/ - -COPY start.sh /usr/local/service - -WORKDIR /usr/local/service - -ENTRYPOINT ["sh","start.sh"] - diff --git a/dockerfile/debian-jdk8-release/debian-jdk8-release-provider/start.sh b/dockerfile/debian-jdk8-release/debian-jdk8-release-provider/start.sh deleted file mode 100644 index 886ea10514b443cc315a85a5977ceba9b384598b..0000000000000000000000000000000000000000 --- a/dockerfile/debian-jdk8-release/debian-jdk8-release-provider/start.sh +++ /dev/null @@ -1 +0,0 @@ -java -jar service-provider-1.0.0.jar diff --git a/dockerfile/debian-jdk8/Dockerfile b/dockerfile/debian-jdk8/Dockerfile deleted file mode 100644 index b8f3879e0f9bcc61ccca1c8da843e5a0a3802f34..0000000000000000000000000000000000000000 --- a/dockerfile/debian-jdk8/Dockerfile +++ /dev/null @@ -1,10 +0,0 @@ -FROM debian:stretch - -ADD jdk-8u211-linux-x64.tar.gz /opt/ - -ENV LANG C.UTF-8 -ENV JAVA_HOME=/opt/jdk1.8.0_211 -ENV CLASSPATH $JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar -ENV PATH $PATH:$JAVA_HOME/bin - - diff --git a/internal-service/pom.xml b/internal-service/pom.xml deleted file mode 100644 index ba2aaec588e2ddeb7949b95fa183583154bf7a2c..0000000000000000000000000000000000000000 --- a/internal-service/pom.xml +++ /dev/null @@ -1,32 +0,0 @@ -<?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> - - <properties> - <dubbo.version>tianchi.1.0.0</dubbo.version> - </properties> - - <artifactId>service</artifactId> - <packaging>pom</packaging> - <modules> - <module>service-api</module> - <module>service-consumer</module> - <module>service-provider</module> - </modules> - - - <dependencies> - <dependency> - <groupId>com.aliware.tianchi</groupId> - <artifactId>internal-gateway</artifactId> - <version>${project.version}</version> - </dependency> - </dependencies> -</project> \ No newline at end of file diff --git a/internal-service/service-api/pom.xml b/internal-service/service-api/pom.xml deleted file mode 100644 index 3e3a112a95e7836a0c779994c46604852ed1c38f..0000000000000000000000000000000000000000 --- a/internal-service/service-api/pom.xml +++ /dev/null @@ -1,30 +0,0 @@ -<?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-api</artifactId> - - <dependencies> - <dependency> - <groupId>org.slf4j</groupId> - <artifactId>slf4j-api</artifactId> - </dependency> - <dependency> - <groupId>ch.qos.logback</groupId> - <artifactId>logback-classic</artifactId> - </dependency> - - <dependency> - <groupId>org.apache.dubbo</groupId> - <artifactId>dubbo</artifactId> - </dependency> - </dependencies> - -</project> \ No newline at end of file diff --git a/internal-service/service-api/src/main/java/com/aliware/tianchi/HashInterface.java b/internal-service/service-api/src/main/java/com/aliware/tianchi/HashInterface.java deleted file mode 100644 index 087dfcef54124f5801e2f09ac68d6f1e05aedbe1..0000000000000000000000000000000000000000 --- a/internal-service/service-api/src/main/java/com/aliware/tianchi/HashInterface.java +++ /dev/null @@ -1,18 +0,0 @@ -package com.aliware.tianchi; - -/** - * @author guohaoice@gmail.com - */ -public interface HashInterface { - - /** - * 计算给定å—符串的 hash 值 - * <li> - * <ol>接å£çš„å“应时间符åˆè´ŸæŒ‡æ•°åˆ†å¸ƒ </ol> - * <ol>接å£çš„å¹¶å‘度(å…è®¸åŒæ—¶è°ƒç”¨çš„çº¿ç¨‹æ•°ï¼‰ä¼šéšæ—¶é—´å¢žåŠ æˆ–å‡å°ï¼Œä»Žè€Œæ¨¡æ‹Ÿç”Ÿäº§çŽ¯å¢ƒå¯èƒ½çš„æŽ’队</ol> - * </li> - * @param input è¦è®¡ç®—çš„å—符串 - * @return å—符串的 hash 值 - */ - int hash(String input); -} diff --git a/internal-service/service-consumer/pom.xml b/internal-service/service-consumer/pom.xml deleted file mode 100644 index 3ad3b7b9da7fac1b6e4259968f47f065b6480b0e..0000000000000000000000000000000000000000 --- a/internal-service/service-consumer/pom.xml +++ /dev/null @@ -1,53 +0,0 @@ -<?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> - </dependencies> - - <build> - <plugins> - <plugin> - <groupId>org.apache.maven.plugins</groupId> - <artifactId>maven-shade-plugin</artifactId> - <version>3.2.1</version> - <executions> - <execution> - <phase>package</phase> - <goals> - <goal>shade</goal> - </goals> - <configuration> - <transformers> - <transformer implementation="org.apache.maven.plugins.shade.resource.ManifestResourceTransformer"> - <mainClass>com.aliware.tianchi.MyConsumer</mainClass> - </transformer> - <transformer - implementation="org.apache.maven.plugins.shade.resource.AppendingTransformer"> - <resource>META-INF/spring.handlers</resource> - </transformer> - <transformer - implementation="org.apache.maven.plugins.shade.resource.AppendingTransformer"> - <resource>META-INF/spring.schemas</resource> - </transformer> - </transformers> - </configuration> - </execution> - </executions> - </plugin> - </plugins> - </build> -</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 deleted file mode 100644 index e413e71929366f4c62d910a9716642e702e1967e..0000000000000000000000000000000000000000 --- a/internal-service/service-consumer/src/main/java/com/aliware/tianchi/MyConsumer.java +++ /dev/null @@ -1,38 +0,0 @@ -package com.aliware.tianchi; - -import java.util.List; -import org.apache.dubbo.common.Constants; -import org.apache.dubbo.common.URL; -import org.apache.dubbo.config.ApplicationConfig; -import org.apache.dubbo.config.ReferenceConfig; -import org.apache.dubbo.config.RegistryConfig; - -/** - * Gateway å¯åŠ¨å…¥å£ - * @author guohaoice@gmail.com */ -public class MyConsumer { - public static void main(String[] args) throws InterruptedException { - ApplicationConfig application = new ApplicationConfig(); - application.setName("service-gateway"); - - // 直连方å¼ï¼Œä¸ä½¿ç”¨æ³¨å†Œä¸å¿ƒ - RegistryConfig registry = new RegistryConfig(); - registry.setAddress("N/A"); - - ReferenceConfig<HashInterface> reference = new ReferenceConfig<>(); - reference.setApplication(application); - reference.setRegistry(registry); - reference.setInterface(HashInterface.class); - - List<URL> urls = reference.toUrls(); - // æ·»åŠ ç›´è¿žçš„ provider åœ°å€ - urls.add(new URL(Constants.DUBBO_PROTOCOL, "localhost", 20880, reference.getInterface())); - urls.add(new URL(Constants.DUBBO_PROTOCOL, "localhost", 20880, reference.getInterface())); - - HashInterface service = reference.get(); - while (true) { - Thread.sleep(1000); - System.out.println(service.hash("hahaha")); - } - } -} diff --git a/internal-service/service-consumer/src/main/java/com/aliware/tianchi/MyDirectServiceConsumer.java b/internal-service/service-consumer/src/main/java/com/aliware/tianchi/MyDirectServiceConsumer.java deleted file mode 100644 index 82826cb6eba319c728f5fea7bba41be001b45889..0000000000000000000000000000000000000000 --- a/internal-service/service-consumer/src/main/java/com/aliware/tianchi/MyDirectServiceConsumer.java +++ /dev/null @@ -1,12 +0,0 @@ -package com.aliware.tianchi; - -import java.io.IOException; - -/** - * @author daofeng.xjf - */ -public class MyDirectServiceConsumer { - public static void main(String[] args) throws IOException { - - } -} diff --git a/internal-service/service-consumer/src/main/resources/dubbo-consumer.xml b/internal-service/service-consumer/src/main/resources/dubbo-consumer.xml deleted file mode 100644 index 72f887b84bd131480e6dc43c6f2a9ca3649ffe5d..0000000000000000000000000000000000000000 --- a/internal-service/service-consumer/src/main/resources/dubbo-consumer.xml +++ /dev/null @@ -1,18 +0,0 @@ -<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="list://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" /> - -</beans> \ No newline at end of file diff --git a/internal-service/service-consumer/src/main/resources/dubbo-direct-service-consumer.xml b/internal-service/service-consumer/src/main/resources/dubbo-direct-service-consumer.xml deleted file mode 100644 index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..0000000000000000000000000000000000000000 diff --git a/internal-service/service-consumer/src/main/resources/logback.xml b/internal-service/service-consumer/src/main/resources/logback.xml deleted file mode 100644 index 946213798813423e6339cc6a3e5616c78ac9e975..0000000000000000000000000000000000000000 --- a/internal-service/service-consumer/src/main/resources/logback.xml +++ /dev/null @@ -1,22 +0,0 @@ -<configuration> - <appender name="FILE" class="ch.qos.logback.core.FileAppender"> - <file>service-provider.log</file> - <encoder> - <pattern>%date %level [%thread] %logger{10} [%file : %line] %msg%n</pattern> - </encoder> - </appender> - - <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender"> - <encoder> - <pattern>%msg%n</pattern> - </encoder> - </appender> - - <logger name="chapters.configuration.Foo" additivity="false"> - <appender-ref ref="FILE" /> - </logger> - - <root level="info"> - <appender-ref ref="STDOUT" /> - </root> -</configuration> \ No newline at end of file diff --git a/internal-service/service-provider/pom.xml b/internal-service/service-provider/pom.xml deleted file mode 100644 index 91ebdbfb8d814d6db4faa884f25b399f3e4aeab8..0000000000000000000000000000000000000000 --- a/internal-service/service-provider/pom.xml +++ /dev/null @@ -1,59 +0,0 @@ -<?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-provider</artifactId> - - - <dependencies> - <dependency> - <groupId>com.aliware.tianchi</groupId> - <artifactId>service-api</artifactId> - </dependency> - <dependency> - <groupId>org.apache.dubbo</groupId> - <artifactId>dubbo</artifactId> - </dependency> - </dependencies> - - <build> - <plugins> - <plugin> - <groupId>org.apache.maven.plugins</groupId> - <artifactId>maven-shade-plugin</artifactId> - <version>3.2.1</version> - <executions> - <execution> - <phase>package</phase> - <goals> - <goal>shade</goal> - </goals> - <configuration> - <transformers> - <transformer implementation="org.apache.maven.plugins.shade.resource.ManifestResourceTransformer"> - <mainClass>com.aliware.tianchi.DemoProviderMain</mainClass> - </transformer> - <transformer - implementation="org.apache.maven.plugins.shade.resource.AppendingTransformer"> - <resource>META-INF/spring.handlers</resource> - </transformer> - <transformer - implementation="org.apache.maven.plugins.shade.resource.AppendingTransformer"> - <resource>META-INF/spring.schemas</resource> - </transformer> - </transformers> - </configuration> - </execution> - </executions> - </plugin> - </plugins> - </build> - -</project> \ No newline at end of file diff --git a/internal-service/service-provider/src/main/java/com/aliware/tianchi/DemoProviderMain.java b/internal-service/service-provider/src/main/java/com/aliware/tianchi/DemoProviderMain.java deleted file mode 100644 index a7fffecc8fbb7262921cd43c091f4da1f05f1a00..0000000000000000000000000000000000000000 --- a/internal-service/service-provider/src/main/java/com/aliware/tianchi/DemoProviderMain.java +++ /dev/null @@ -1,66 +0,0 @@ -package com.aliware.tianchi; - -import java.io.IOException; -import java.util.List; -import com.aliware.tianchi.policy.SmallConfig; -import org.apache.dubbo.config.ApplicationConfig; -import org.apache.dubbo.config.ProtocolConfig; -import org.apache.dubbo.config.RegistryConfig; -import org.apache.dubbo.config.ServiceConfig; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; - -/** @author guohaoice@gmail.com */ -public class DemoProviderMain { - private static final Logger LOGGER = LoggerFactory.getLogger(DemoProviderMain.class); - - public static void main(String[] args) throws IOException { - String env; - String salt; - if (args.length != 3) { - LOGGER.info("No specific args found, use [DEFAULT] to run demo provider"); - env = "small"; - salt = "salt_val"; - } else { - env = args[0]; - salt = args[1]; - } - List<ThrashConfig> configs; - switch (env) { - case "small": - configs = new SmallConfig().allConfig; - break; - default: - configs = new SmallConfig().allConfig; - } - - // 当å‰åº”用é…ç½® - ApplicationConfig application = new ApplicationConfig(); - application.setName("service-provider"); - - // 连接注册ä¸å¿ƒé…ç½® - RegistryConfig registry = new RegistryConfig(); - registry.setAddress("N/A"); - - // æœåŠ¡æä¾›è€…åè®®é…ç½® - ProtocolConfig protocol = new ProtocolConfig(); - protocol.setName("dubbo"); - protocol.setPort(20880); - protocol.setThreads(200); - - // 注æ„:ServiceConfig为é‡å¯¹è±¡ï¼Œå†…部å°è£…了与注册ä¸å¿ƒçš„连接,以åŠå¼€å¯æœåŠ¡ç«¯å£ - - // æœåŠ¡æä¾›è€…暴露æœåŠ¡é…ç½® - ServiceConfig<HashInterface> service = - new ServiceConfig<>(); // æ¤å®žä¾‹å¾ˆé‡ï¼Œå°è£…了与注册ä¸å¿ƒçš„连接,请自行缓å˜ï¼Œå¦åˆ™å¯èƒ½é€ æˆå†…å˜å’Œè¿žæŽ¥æ³„æ¼ - service.setApplication(application); - service.setRegistry(registry); // 多个注册ä¸å¿ƒå¯ä»¥ç”¨setRegistries() - service.setProtocol(protocol); // 多个åè®®å¯ä»¥ç”¨setProtocols() - service.setInterface(HashInterface.class); - service.setRef(new HashServiceImpl(salt, configs)); - - // æš´éœ²åŠæ³¨å†ŒæœåŠ¡ - service.export(); - System.in.read(); // press any key to exit - } -} diff --git a/internal-service/service-provider/src/main/java/com/aliware/tianchi/HashServiceImpl.java b/internal-service/service-provider/src/main/java/com/aliware/tianchi/HashServiceImpl.java deleted file mode 100644 index 614cee9b04c3bec95d92be0fcaa58c331f49f522..0000000000000000000000000000000000000000 --- a/internal-service/service-provider/src/main/java/com/aliware/tianchi/HashServiceImpl.java +++ /dev/null @@ -1,84 +0,0 @@ -package com.aliware.tianchi; - -import java.util.Collections; -import java.util.List; -import java.util.Random; -import java.util.concurrent.ScheduledExecutorService; -import java.util.concurrent.ScheduledThreadPoolExecutor; -import java.util.concurrent.Semaphore; -import java.util.concurrent.TimeUnit; -import java.util.concurrent.atomic.AtomicBoolean; -import org.apache.dubbo.common.utils.NamedThreadFactory; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; - -/** - * Facade - * - * @author guohaoice@gmail.com - */ -public class HashServiceImpl implements HashInterface { - private static final Logger LOGGER = LoggerFactory.getLogger(HashServiceImpl.class); - - private final String salt; - private final AtomicBoolean init = new AtomicBoolean(false); - private final List<ThrashConfig> configs; - private volatile ThrashConfig config; - private Random rng = new Random(2019); - private ScheduledExecutorService scheduler = - new ScheduledThreadPoolExecutor(1, new NamedThreadFactory("HashService-Refresher")); - - public HashServiceImpl(String salt) { - this(salt, Collections.emptyList()); - } - - public HashServiceImpl(String salt, List<ThrashConfig> configs) { - this.salt = salt; - this.config = ThrashConfig.INIT_CONFIG; - this.configs = Collections.unmodifiableList(configs); - } - - @Override - public int hash(String input) { - long st = System.currentTimeMillis(); - if (!init.get()) { - if (init.compareAndSet(false, true)) { - int startTime = 0; - for (ThrashConfig thrashConfig : configs) { - scheduler.schedule( - () -> refresh(thrashConfig), startTime + config.durationInMs, TimeUnit.MILLISECONDS); - startTime += config.durationInMs; - } - } - } - Semaphore permit = config.permit; - try { - permit.acquire(); - long baseRtt = nextRTT(); - Thread.sleep(baseRtt); - return (input + salt).hashCode(); - } catch (InterruptedException e) { - Thread.currentThread().interrupt(); - } finally { - long cost = System.currentTimeMillis() - st; - LOGGER.info("HashService cost:{} ms to handle request", cost); - permit.release(); - } - throw new IllegalStateException("Unexpected exception"); - } - - private void refresh(ThrashConfig thrashConfig) { - this.config = thrashConfig; - } - - private long nextRTT() { - double u = rng.nextDouble(); - int x = 0; - double cdf = 0; - while (u >= cdf) { - x++; - cdf = 1 - Math.exp(-1.0D * 1 / config.averageRTTInMs * x); - } - return x; - } -} diff --git a/internal-service/service-provider/src/main/java/com/aliware/tianchi/ThrashConfig.java b/internal-service/service-provider/src/main/java/com/aliware/tianchi/ThrashConfig.java deleted file mode 100644 index cf77000573203f195cbe18d58b5c6639446ba87b..0000000000000000000000000000000000000000 --- a/internal-service/service-provider/src/main/java/com/aliware/tianchi/ThrashConfig.java +++ /dev/null @@ -1,19 +0,0 @@ -package com.aliware.tianchi; - -import java.util.concurrent.Semaphore; - -/** - * @author guohaoice@gmail.com - */ -public class ThrashConfig { - public static final ThrashConfig INIT_CONFIG=new ThrashConfig(4000,Integer.MAX_VALUE,10); - final long durationInMs; - final int averageRTTInMs; - final Semaphore permit; - - public ThrashConfig(long durationInMs, int maxConcurrency, int averageRTTInMs) { - this.durationInMs = durationInMs; - this.averageRTTInMs = averageRTTInMs; - this.permit=new Semaphore(maxConcurrency); - } -} diff --git a/internal-service/service-provider/src/main/java/com/aliware/tianchi/policy/SmallConfig.java b/internal-service/service-provider/src/main/java/com/aliware/tianchi/policy/SmallConfig.java deleted file mode 100644 index 30db975a577ca29cdb4f4b89ed163d30db813b1a..0000000000000000000000000000000000000000 --- a/internal-service/service-provider/src/main/java/com/aliware/tianchi/policy/SmallConfig.java +++ /dev/null @@ -1,25 +0,0 @@ -package com.aliware.tianchi.policy; - -import java.util.Arrays; -import java.util.List; -import com.aliware.tianchi.ThrashConfig; - -/** - * @author guohaoice@gmail.com - */ -public class SmallConfig { - private final int baseRTT=20; - private final int onePeriodInMs=20_000; - private final int baseMaxConcurrency=10_000; - private final ThrashConfig config1=new ThrashConfig(onePeriodInMs,baseMaxConcurrency,baseRTT/2); - private final ThrashConfig config2=new ThrashConfig(onePeriodInMs,baseMaxConcurrency,baseRTT); - private final ThrashConfig config3=new ThrashConfig(onePeriodInMs,baseMaxConcurrency/2,baseRTT); - private final ThrashConfig config4=new ThrashConfig(onePeriodInMs,baseMaxConcurrency,baseRTT); - private final ThrashConfig config5=new ThrashConfig(onePeriodInMs,baseMaxConcurrency/2,baseRTT*2); - private final ThrashConfig config6=new ThrashConfig(onePeriodInMs,baseMaxConcurrency*2,baseRTT); - private final ThrashConfig config7=new ThrashConfig(onePeriodInMs,baseMaxConcurrency,baseRTT); - private final ThrashConfig config8=new ThrashConfig(onePeriodInMs,baseMaxConcurrency*2,baseRTT/2); - private final ThrashConfig config9=new ThrashConfig(onePeriodInMs,baseMaxConcurrency,baseRTT); - - public final List<ThrashConfig> allConfig= Arrays.asList(config1,config2,config3,config4,config5,config6,config7,config8,config9); -} diff --git a/internal-service/service-provider/src/main/resources/logback.xml b/internal-service/service-provider/src/main/resources/logback.xml deleted file mode 100644 index 946213798813423e6339cc6a3e5616c78ac9e975..0000000000000000000000000000000000000000 --- a/internal-service/service-provider/src/main/resources/logback.xml +++ /dev/null @@ -1,22 +0,0 @@ -<configuration> - <appender name="FILE" class="ch.qos.logback.core.FileAppender"> - <file>service-provider.log</file> - <encoder> - <pattern>%date %level [%thread] %logger{10} [%file : %line] %msg%n</pattern> - </encoder> - </appender> - - <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender"> - <encoder> - <pattern>%msg%n</pattern> - </encoder> - </appender> - - <logger name="chapters.configuration.Foo" additivity="false"> - <appender-ref ref="FILE" /> - </logger> - - <root level="info"> - <appender-ref ref="STDOUT" /> - </root> -</configuration> \ No newline at end of file diff --git a/pom.xml b/pom.xml index 5a58537a821bf1baeeaa0a940fe8630bce92bc11..e578c465c62fae6d4cfae16d228267f3eebf460a 100644 --- a/pom.xml +++ b/pom.xml @@ -30,32 +30,12 @@ <!--internal start--> <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> + <artifactId>workspace-gateway</artifactId> <version>${project.version}</version> </dependency> <dependency> <groupId>com.aliware.tianchi</groupId> - <artifactId>workspace-gateway</artifactId> + <artifactId>workspace-common</artifactId> <version>${project.version}</version> </dependency> <!--internal end--> @@ -69,11 +49,6 @@ <artifactId>logback-classic</artifactId> <version>1.2.3</version> </dependency> - <dependency> - <groupId>org.apache.commons</groupId> - <artifactId>commons-lang3</artifactId> - <version>3.9</version> - </dependency> </dependencies> </dependencyManagement> <build> @@ -91,8 +66,8 @@ </plugins> </build> <modules> - <module>internal-gateway</module> - <module>internal-service</module> - <module>workspace</module> + <module>workspace-common</module> + <module>workspace-gateway</module> + <module>workspace-provider</module> </modules> </project> \ No newline at end of file diff --git a/internal-gateway/pom.xml b/workspace-common/pom.xml similarity index 93% rename from internal-gateway/pom.xml rename to workspace-common/pom.xml index 9d992934dd87a199f3c32916e5a56a9964f7df18..1f52996e345e6530735713203377193d26b05015 100644 --- a/internal-gateway/pom.xml +++ b/workspace-common/pom.xml @@ -9,7 +9,7 @@ </parent> <modelVersion>4.0.0</modelVersion> - <artifactId>internal-gateway</artifactId> + <artifactId>workspace-common</artifactId> <dependencies> <dependency> diff --git a/workspace/pom.xml b/workspace-gateway/pom.xml similarity index 66% rename from workspace/pom.xml rename to workspace-gateway/pom.xml index 5230c79c381be375c584ccd0a1d52b260aa25db7..c38ca43d58df6446dda15566b6357c4666d1fc5a 100644 --- a/workspace/pom.xml +++ b/workspace-gateway/pom.xml @@ -9,12 +9,13 @@ </parent> <modelVersion>4.0.0</modelVersion> - <artifactId>workspace</artifactId> - <packaging>pom</packaging> - <modules> - <module>workspace-gateway</module> - <module>workspace-provider</module> - </modules> + <artifactId>workspace-gateway</artifactId> + <dependencies> + <dependency> + <groupId>com.aliware.tianchi</groupId> + <artifactId>workspace-common</artifactId> + </dependency> + </dependencies> </project> \ No newline at end of file diff --git a/workspace/workspace-provider/pom.xml b/workspace-provider/pom.xml similarity index 65% rename from workspace/workspace-provider/pom.xml rename to workspace-provider/pom.xml index 7d0f8a3081016e02c865945d5788a2f88c548473..e4fb58c6fb8bc9037c7d493fedfba2ebbb2b42aa 100644 --- a/workspace/workspace-provider/pom.xml +++ b/workspace-provider/pom.xml @@ -3,7 +3,7 @@ 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> + <artifactId>adaptive-loadbalance</artifactId> <groupId>com.aliware.tianchi</groupId> <version>1.0.0</version> </parent> @@ -11,4 +11,11 @@ <artifactId>workspace-provider</artifactId> + <dependencies> + <dependency> + <groupId>com.aliware.tianchi</groupId> + <artifactId>workspace-common</artifactId> + </dependency> + </dependencies> + </project> \ No newline at end of file diff --git a/workspace/README.md b/workspace/README.md deleted file mode 100644 index b89adcf4d8d28fd60f523fe70167d911fa092f44..0000000000000000000000000000000000000000 --- a/workspace/README.md +++ /dev/null @@ -1,3 +0,0 @@ -# Workspace - -选手在这个 module 下开å‘,其他 module ä¸å…许修改。 \ No newline at end of file diff --git a/workspace/workspace-gateway/pom.xml b/workspace/workspace-gateway/pom.xml deleted file mode 100644 index 9a1c6a71bb133635813aa4447731a9b237f83d46..0000000000000000000000000000000000000000 --- a/workspace/workspace-gateway/pom.xml +++ /dev/null @@ -1,15 +0,0 @@ -<?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-gateway</artifactId> - - -</project> \ No newline at end of file