You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@servicecomb.apache.org by li...@apache.org on 2020/06/23 03:41:06 UTC

[servicecomb-docs] branch master updated: [SCB-2019]update gateway documents for zuul to use spring cloud huawei

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

liubao pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/servicecomb-docs.git


The following commit(s) were added to refs/heads/master by this push:
     new e27beac  [SCB-2019]update gateway documents for zuul to use spring cloud huawei
e27beac is described below

commit e27beac8a8793c41cb556a3c78463574b8a5a82d
Author: liubao <bi...@qq.com>
AuthorDate: Mon Jun 22 11:33:21 2020 +0800

    [SCB-2019]update gateway documents for zuul to use spring cloud huawei
---
 .../zh_CN/docs/edge/by-servicecomb-sdk.md          |   2 +-
 java-chassis-reference/zh_CN/docs/edge/nginx.md    |  87 +++++++-------
 .../zh_CN/docs/edge/open-service.md                |   8 +-
 java-chassis-reference/zh_CN/docs/edge/zuul.md     | 127 ++-------------------
 java-chassis-reference/zh_CN/docs/toc.md           |   6 +-
 java-chassis-reference/zh_CN/mkdocs.yml            |   6 +-
 6 files changed, 67 insertions(+), 169 deletions(-)

diff --git a/java-chassis-reference/zh_CN/docs/edge/by-servicecomb-sdk.md b/java-chassis-reference/zh_CN/docs/edge/by-servicecomb-sdk.md
index 2f3b060..4d1cc6e 100644
--- a/java-chassis-reference/zh_CN/docs/edge/by-servicecomb-sdk.md
+++ b/java-chassis-reference/zh_CN/docs/edge/by-servicecomb-sdk.md
@@ -1,4 +1,4 @@
-# 使用 Edge Service 做边缘服务
+# 使用 Edge Service 做网关
 
 Edge Service 是ServiceComb 提供的JAVA网关服务开发框架。Edge Service作为整个微服务系统对外的接口,向最终用户提供服务,接入RESTful请求,转发给内部微服务。Edge Service以开发框架的形式提供,开发者可以非常简单的搭建一个Edge Service服务,通过简单的配置就可以定义路由转发规则。同时Edge Service支持强大的扩展能力,服务映射、请求解析、加密解密、鉴权等逻辑都可以通过扩展实现。
 
diff --git a/java-chassis-reference/zh_CN/docs/edge/nginx.md b/java-chassis-reference/zh_CN/docs/edge/nginx.md
index f76eb9c..03b628e 100644
--- a/java-chassis-reference/zh_CN/docs/edge/nginx.md
+++ b/java-chassis-reference/zh_CN/docs/edge/nginx.md
@@ -1,91 +1,90 @@
-# 使用confd和Nginx做边缘服务
+# nginx 网关简单介绍
 
 ## 概念阐述
 
 ### **confd**
 
-confd是一个轻量级的配置管理工具,源码地址:[https://github.com/kelseyhightower/confd](https://github.com/kelseyhightower/confd),它可以将配置信息存储在etcd、consul、dynamodb、redis以及zookeeper等。confd定期会从这些存储节点pull最新的配置,然后重新加载服务,完成配置文件的更新。
+confd是一个轻量级的配置管理工具,源码地址:[https://github.com/kelseyhightower/confd](https://github.com/kelseyhightower/confd),
+它可以将配置信息存储在etcd、consul、dynamodb、redis以及zookeeper等。confd定期会从这些存储节点pull最
+新的配置,然后重新加载服务,完成配置文件的更新。
 
 ### **Nginx**
 
-Nginx \(engine x\)是一个高性能的HTTP和反向代理服务器,具有负载均衡的功能。详情请参考[http://www.nginx.cn/doc/](http://www.nginx.cn/doc/)。本小节介绍的服务主要使用到的是Nginx的http代理功能。
+Nginx \(engine x\)是一个高性能的HTTP和反向代理服务器,具有负载均衡的功能。详情请
+参考[http://www.nginx.cn/doc/](http://www.nginx.cn/doc/)。
 
 ## 场景描述
 
-本小节介绍的技术是使用nginx+confd做边缘服务,同时可以对接Java Chassis微服务框架中的服务中心,从服务中心中拉去服务信息通过confd动态更新nginx的配置。
+本小节简单介绍 Nginx 对接服务中心,从服务中心中获取服务信息并通过 confd 动态更新 Nginx 的配置。
 
-使用nginx+confd动态反向代理的实现步骤可参考文章[http://www.cnblogs.com/Anker/p/6112022.html](http://www.cnblogs.com/Anker/p/6112022.html),本节主要介绍confd如何对接Java Chassis框架的服务中心。
+使用 nginx+confd 动态反向代理的实现步骤可参考文
+章[http://www.cnblogs.com/Anker/p/6112022.html](http://www.cnblogs.com/Anker/p/6112022.html)。
 
-## 对接服务中心
+* 方法一:http调用
 
-本节介绍的技术核心在于如何使得confd获取到服务中心的服务信息,服务中心开放了以下接口供外部调用:
+  服务中心开放http接口均需要添加租户头部信息:“X-Tenant-Name:tenantName”,tenameName为租户名,默
+  认为default,例如"X-Tenant-Name:default"。
 
-### **方法一:http调用**
+  * 检查服务中心健康状态
 
-服务中心开放http接口均需要添加租户头部信息:“X-Tenant-Name:tenantName”,tenameName为租户名,默认为default,例如"X-Tenant-Name:default"。
+            ```
+            GET 127.0.0.1:30100/health
+            ```
 
-* 检查服务中心健康状态
+  * 获取所有微服务信息
 
-```
-GET 127.0.0.1:30100/health
-```
+            ```
+            GET 127.0.0.1:30100/registry/v3/microservices
+            ```
 
-* 获取所有微服务信息
+  * 获取指定id的微服务信息
 
-```
-GET 127.0.0.1:30100/registry/v3/microservices
-```
-
-* 获取指定id的微服务信息
-
-    * 首先根据微服务信息获取serviceId
+    首先根据微服务信息获取serviceId
 
             GET 127.0.0.1:30100/registry/v3/existence?type=microservice&appId={appId}&serviceName={serviceName}&version={version}
 
-    * 根据上述接口返回的serviceId获取微服务完整信息
+    根据上述接口返回的serviceId获取微服务完整信息
 
             GET 127.0.0.1:30100/registry/v3/microservices/{serviceId}
 
-* 获取指定微服务的所有实例信息
+  * 获取指定微服务的所有实例信息
 
-        GET 127.0.0.1:30100/registry/v3/microservices/{serviceId}/instances
+            GET 127.0.0.1:30100/registry/v3/microservices/{serviceId}/instances
         
-   需要在header中添加:"X-ConsumerId:{serviceId}"。
+    需要在header中添加:"X-ConsumerId:{serviceId}"。
 
-* 查找微服务实例信息
+  * 查找微服务实例信息
 
-        GET 127.0.0.1:30100/registry/v3/instances?appId={appId}&serviceName={serviceName}&version={version}
+            GET 127.0.0.1:30100/registry/v3/instances?appId={appId}&serviceName={serviceName}&version={version}
         
-   需要在header中添加: "X-ConsumerId:{serviceId}"。
-
-
+    需要在header中添加: "X-ConsumerId:{serviceId}"。
 
-#### 注意:在实际开发中请访问实际的service-center访问地址,并将上述url中{}的变量替换成具体值,http返回的数据均为json格式
 
-### **方法二:使用servicecomb开源代码接口**
+* 方法二:使用servicecomb开源代码接口
 
-在开发微服务应用,只需要调用servicecomb框架代码中的工具类RegistryUtil.java中提供的接口,即可获取服务中心的信息,接口描述如下:
+  在开发微服务应用,只需要调用servicecomb框架代码中的工具类RegistryUtil.java中提供的接口,即可
+  获取服务中心的信息,接口描述如下:
 
-* 获取所有微服务信息  
+  * 获取所有微服务信息  
 
-        List<Microservice> getAllMicroservices();
+            List<Microservice> getAllMicroservices();
 
-* 获取微服务唯一标识  
+  * 获取微服务唯一标识  
 
-        String getMicroserviceId(String appId, String microserviceName, String versionRule);
+            String getMicroserviceId(String appId, String microserviceName, String versionRule);
 
-* 根据微服务唯一标识查询微服务静态信息  
+  * 根据微服务唯一标识查询微服务静态信息  
 
-        Microservice getMicroservice(String microserviceId);
+            Microservice getMicroservice(String microserviceId);
 
-* 根据多个微服务唯一标识查询所有微服务实例信息  
+  * 根据多个微服务唯一标识查询所有微服务实例信息  
 
-        List<MicroserviceInstance> getMicroserviceInstance(String consumerId, String providerId);
+            List<MicroserviceInstance> getMicroserviceInstance(String consumerId, String providerId);
 
-* 按照app+interface+version查询实例endpoints信息  
+  * 按照app+interface+version查询实例endpoints信息  
 
-        List<MicroserviceInstance> findServiceInstance(String consumerId, String appId, String serviceName,String versionRule);
+            List<MicroserviceInstance> findServiceInstance(String consumerId, String appId, String serviceName,String versionRule);
 
 
-通过上述http接口可获取到服务中心的微服务和其实例的信息,从而通过confd动态更新nginx配置。
+  通过上述http接口可获取到服务中心的微服务和其实例的信息,从而通过confd动态更新nginx配置。
 
diff --git a/java-chassis-reference/zh_CN/docs/edge/open-service.md b/java-chassis-reference/zh_CN/docs/edge/open-service.md
index e406c8c..87b2709 100644
--- a/java-chassis-reference/zh_CN/docs/edge/open-service.md
+++ b/java-chassis-reference/zh_CN/docs/edge/open-service.md
@@ -1,5 +1,9 @@
 # 服务能力开放
 
-大量的微服务能力需要通过网关开放给用户、其他外部系统访问。网关一方面扮演着汇集用户请求的作用,同时还会扮演认证、鉴权、流量控制、防攻击的用途。同时,由于网关是一个汇聚点,容易形成业务的瓶颈,通常还会采用多级网关机制,最外层的网关提供主备以及简单的请求转发功能,中间层的实现鉴权等功能,多实例部署。常见的可以用于网关的技术和服务包括LVS、Nginx、Zuul等。
+微服务能力需要通过网关开放给用户、其他外部系统访问。网关一方面扮演着汇集用户请求的作用,同时扮演认证、鉴权、流量
+控制、防攻击的用途。由于网关是一个汇聚点,容易形成业务的瓶颈,通常还会采用多级网关,外层的网关提供主备以及简单
+的请求转发功能,内层网关实现鉴权等功能,多实例部署。常见的可以用于外层网关的技术和服务包括 `LVS`、`DNS`,
+`Nginx` 等,内层网关包括 `spring cloud gateway`、`zuul` 等。
 
-ServiceComb 也提供了自己的网关服务Edge Service。Edge Service内建了强大的路由策略,支持接口级别的兼容性转发(灰度发布),内嵌ServiceComb治理能力,并支持非常灵活的扩展机制。
+ServiceComb 也提供了内层网关服务 `Edge Service`。Edge Service 内建了强大的路由策略,支持接口级别的
+兼容性转发(灰度发布),内嵌治理能力,并支持非常灵活的扩展机制。
diff --git a/java-chassis-reference/zh_CN/docs/edge/zuul.md b/java-chassis-reference/zh_CN/docs/edge/zuul.md
index e6de123..2df1e68 100644
--- a/java-chassis-reference/zh_CN/docs/edge/zuul.md
+++ b/java-chassis-reference/zh_CN/docs/edge/zuul.md
@@ -1,12 +1,4 @@
-# 使用zuul做边缘服务
-
-## 概念阐述
-
-### API Gateway:
-
-API Gateway是一个服务器,也可以说是进入系统的唯一节点。API Gateway封装内部系统的架构,并且提供API给各个客户端。
-
-### Zuul
+# 使用 `zuul` 和 `spring cloud gateway` 做网关
 
 Zuul是Netflix的基于JVM的路由器和服务器端负载均衡器,可以使用Zuul进行以下操作:
 
@@ -21,114 +13,17 @@ Zuul是Netflix的基于JVM的路由器和服务器端负载均衡器,可以使
 * 静态相响应处理
 * 主动/被动流量管理
 
-本小节主要介绍在SpringBoot应用中使用Zuul做API Gateway。关于Zuul的详细功能介绍请参考文档[路由器和过滤器:Zuul](https://springcloud.cc/spring-cloud-dalston.html#_router_and_filter_zuul)。
-
-## 场景描述
-
-Zuul做API Gateway,即建立一个Zuul Proxy应用,在该Proxy应用中统一定义所有的微服务访问入口,通过使用不同的前缀\(stripped\)来区分各个微服务。本小节通过建立一个ZuulProxy SpringBoot应用来演示Zuul的API Gateway功能。
-
-## 注意事项
-
-本小节介绍的ZuulProxy和ZuulServer等demo都是基于SpringBoot和ServiceComb框架的应用,具体请参考[在Spring Boot中使用java chassis](../using-java-chassis-in-spring-boot/using-java-chassis-in-spring-boot.md)。
-
-## 启动Zuul Proxy
-
-本节介绍如何启动一个zuul proxy应用作为API Gateway。步骤如下:
-
-* **步骤 1**在pom文件中添加依赖:
-
-```xml
-<dependency> 
-  <groupId>org.springframework.cloud</groupId>  
-  <artifactId>spring-cloud-starter-zuul</artifactId> 
-</dependency>
-<dependency> 
-  <groupId>org.springframework.cloud</groupId>  
-  <artifactId>spring-cloud-starter-ribbon</artifactId> 
-</dependency><dependency> 
-  <groupId>org.springframework.cloud</groupId>  
-  <artifactId>spring-cloud-starter-hystrix</artifactId> 
-</dependency>
-<dependency> 
-  <groupId>org.apache.servicecomb</groupId>  
-  <artifactId>spring-boot-starter-discovery</artifactId> 
-</dependency>
-```
-
-* **步骤 2**在SpringBoot主类添加注解:
-
-```java
-@SpringBootApplication
-@EnableServiceComb
-@EnableZuulProxy//新增注解
-public class ZuulMain{
-    public static void main(String[] args) throws Exception{
-      SpringApplication.run(ZuulMain.class, args);
-    }
-}
-```
-
-* **步骤 3**在application.yml文件中定义路由策略:
-
-```yaml
-server: 
-  port: 8754 #api gateway服务端口
-zuul: 
-  routes: #路由策略
-    discoveryServer: /myServer/** #路由规则
-```
-
-红色的配置项表示可以根据实际开发环境进行配置。关于zuul.routers的路由策略的详细定义规则,请参考官方文献:[路由器和过滤器:Zuul](https://springcloud.cc/spring-cloud-dalston.html#_router_and_filter_zuul),可更细粒度地对路由进行控制。
-
-* **步骤 4**在microservice.yaml定义微服务属性:
-
-```yaml
-APPLICATION_ID: discoverytest #服务ID
-service_description: 
-  name: discoveryGateway #服务名称
-  version: 0.0.2 #服务版本号
-servicecomb: 
-  service: 
-    registry: 
-      address:  http://127.0.0.1:30100            #服务注册中心地址
- rest: 
-   address: 0.0.0.0:8082                         #微服务端口,可不写
-```
-
-* **步骤 5 **Run ZuulMain Application
-
-## 使用Zuul Proxy
-
-在使用zuul做的API Gateway前,首先要启动在zuul.routers中定义的微服务提供者。
-
-开发服务提供者,开按流程请参考3 开发服务提供者。在微服务microservice.yaml文件中需注意以下两点:
-
-* APPLICATION\_ID需要于zuul proxy中定义的保持一致。
-
-* service\_description.name需要于zuul.routers中相对应。
-
-示例如下:
-
-```yaml
-APPLICATION_ID: discoverytest #与zuul proxy一致
-service_description: 
-  name: discoveryServer #服务名称,与zuul.routers对应
-  version: 0.0.2
-servicecomb: 
-  service: 
-    registry: 
-      address: http://127.0.0.1:30100                #服务注册中心地址
-rest: 
-  address: 0.0.0.0:8080
-```
-
-API Gateway的访问入口为:[http://127.0.0.1:8754](http://127.0.0.1:8754),所有在zuul.routers中定义的服务都可通过这个访问入口进行代理访问,访问规则如下:
-
-[http://127.0.0.1:8754/myServer/\*\*\*](http://127.0.0.1:8754/myServer/***)
-
-这表示,Http调用[http://127.0.0.1:8754/myServer/\*\*\*](http://127.0.0.1:8754/myServer/***),会转到discoveryServer服务(例如:"/myServer/101"跳转到discoveryServer 服务下的"/101")
+关于Zuul的详细功能介绍请参考[路由器和过滤器:Zuul][zuul-ref]。
 
-> 如果在服务中心同时存在多个discoveryServer服务\(版本不同\),zuul默认采用Ribbon策略对请求进行转发。
+spring cloud gateway 是 spring cloud 开发的新一代网关服务,详细介绍可以参考[sprig cloud gateway][spring-cloud-gateway-ref]
 
+使用 `zuul` 和 `spring cloud gateway` 作为网关,核心需要解决的问题是从服务中心发现其他微服务实例,
+需要使用到 [spring cloud huawei][spring-cloud-huawei0] 的组件,
+详细开发指南可以参考[1][spring-cloud-huawei1], [2][spring-cloud-huawei2]
 
+[zuul-ref]: https://springcloud.cc/spring-cloud-dalston.html#_router_and_filter_zuul
+[spring-cloud-gateway-ref]: https://spring.io/projects/spring-cloud-gateway
+[spring-cloud-huawei0]: https://github.com/huaweicloud/spring-cloud-huawei
+[spring-cloud-huawei1]: https://support.huaweicloud.com/devg-servicestage/cse_java_0059.html
+[spring-cloud-huawei2]: https://support.huaweicloud.com/devg-servicestage/cse_java_0064.html
 
diff --git a/java-chassis-reference/zh_CN/docs/toc.md b/java-chassis-reference/zh_CN/docs/toc.md
index 6d4c10b..5564b93 100644
--- a/java-chassis-reference/zh_CN/docs/toc.md
+++ b/java-chassis-reference/zh_CN/docs/toc.md
@@ -78,9 +78,9 @@
     * [配置注入机制](config/inject-config.md)
 - 服务能力开放:
     - [介绍](edge/open-service.md)
-    - [使用Edge Service做边缘服务](edge/by-servicecomb-sdk.md)
-    - [使用confd和Nginx做边缘服务](edge/nginx.md)
-    - [使用zuul做边缘服务](edge/zuul.md)
+    - [使用 Edge Service 做网关](edge/by-servicecomb-sdk.md)
+    - [使用 `zuul` 和 `spring cloud gateway` 做网关](edge/zuul.md)
+    - [nginx 网关简单介绍](edge/nginx.md)
 - 服务打包和运行: 
     - [以standalone模式打包](packaging/standalone.md)
     - [以WEB容器模式打包](packaging/web-container.md)
diff --git a/java-chassis-reference/zh_CN/mkdocs.yml b/java-chassis-reference/zh_CN/mkdocs.yml
index 6af30a0..682ee2c 100644
--- a/java-chassis-reference/zh_CN/mkdocs.yml
+++ b/java-chassis-reference/zh_CN/mkdocs.yml
@@ -25,9 +25,9 @@ nav:
     - 配置注入机制: config/inject-config.md
 - 服务能力开放:
     - 介绍: edge/open-service.md
-    - 使用Edge Service做边缘服务: edge/by-servicecomb-sdk.md
-    - 使用confd和Nginx做边缘服务: edge/nginx.md
-    - 使用zuul做边缘服务: edge/zuul.md
+    - 使用 Edge Service 做网关: edge/by-servicecomb-sdk.md
+    - 使用 `zuul` 和 `spring cloud gateway` 做网关: edge/zuul.md
+    - nginx 网关简单介绍: edge/nginx.md
 - 服务打包和运行: 
     - 以standalone模式打包: packaging/standalone.md
     - 以WEB容器模式打包: packaging/web-container.md