第03章-核心服务详解

第三章:核心服务详解

3.1 引言

GeoServer Cloud 采用微服务架构,将传统 GeoServer 的各项功能拆分为独立的服务组件。每个服务专注于特定的业务能力,可以独立部署、扩展和管理。本章将深入介绍 GeoServer Cloud 的各个核心服务组件,包括它们的功能、配置选项和使用方法。

理解这些服务组件是有效使用和管理 GeoServer Cloud 的基础。无论您是系统管理员、GIS 开发人员还是解决方案架构师,本章的内容都将帮助您更好地理解系统的工作原理,从而做出更好的配置和架构决策。

3.2 服务概览

3.2.1 服务分类

GeoServer Cloud 的服务可以分为三大类:

基础设施服务(Infrastructure Services)

提供微服务架构所需的基础能力:

  • Discovery(服务发现)
  • Config(配置管理)
  • Gateway(API 网关)
  • 消息总线(RabbitMQ/Kafka)

业务服务(Business Services)

实现 GeoServer 核心功能的 OGC 标准服务:

  • WMS(Web Map Service)
  • WFS(Web Feature Service)
  • WCS(Web Coverage Service)
  • WPS(Web Processing Service)
  • GWC(GeoWebCache)

管理服务(Management Services)

提供配置和管理功能:

  • REST API(RESTful 配置接口)
  • WebUI(Web 管理界面)
  • ACL(访问控制列表)

3.2.2 服务依赖关系

服务之间的依赖关系如下图所示:

                    ┌─────────────────────────────────────┐
                    │           客户端请求                 │
                    └──────────────────┬──────────────────┘
                                       │
                                       ▼
┌──────────────────────────────────────────────────────────────────────────┐
│                         Gateway (API 网关)                                │
│    - 请求路由                                                              │
│    - 负载均衡                                                              │
│    - 认证/授权                                                             │
└──────────────────────────────────────────────────────────────────────────┘
                                       │
           ┌───────────────────────────┼───────────────────────────┐
           │                           │                           │
           ▼                           ▼                           ▼
    ┌──────────────┐           ┌──────────────┐           ┌──────────────┐
    │     WMS      │           │     WFS      │           │    WebUI     │
    └──────────────┘           └──────────────┘           └──────────────┘
           │                           │                           │
           └───────────────────────────┼───────────────────────────┘
                                       │
                                       ▼
                    ┌─────────────────────────────────────┐
                    │        Discovery (服务发现)          │
                    │        Config (配置服务)             │
                    │        Event Bus (消息总线)          │
                    └─────────────────────────────────────┘
                                       │
                                       ▼
                    ┌─────────────────────────────────────┐
                    │     Catalog Backend (目录后端)       │
                    │         PostgreSQL / DataDir         │
                    └─────────────────────────────────────┘

3.2.3 服务端口分配

默认端口分配(开发模式下的本地端口):

服务 容器内端口 本地开发端口 用途
Gateway 8080 9090 API 网关入口
Discovery 8761 8761 Eureka Dashboard
Config 8888 8888 配置服务
WMS 8080 9102 地图服务
WFS 8080 9101 要素服务
WCS 8080 9103 覆盖服务
WPS 8080 9104 处理服务
REST 8080 9105 REST API
WebUI 8080 9106 Web 界面
RabbitMQ 5672/15672 5672/15672 消息队列
PostgreSQL 5432 5432 数据库

3.3 Gateway 网关服务

3.3.1 功能概述

Gateway 是 GeoServer Cloud 的统一入口点,基于 Spring Cloud Gateway 实现。它的主要职责包括:

  • 请求路由:根据 URL 路径将请求转发到对应的后端服务
  • 负载均衡:在多个服务实例之间分配请求
  • 服务发现集成:自动发现和路由到可用的服务实例
  • 请求/响应处理:添加请求头、修改响应等
  • 安全控制:集中式的认证和授权(可选)

3.3.2 路由配置

Gateway 的路由配置定义了 URL 路径与后端服务的映射关系。默认配置示例:

spring:
  cloud:
    gateway:
      routes:
        # WMS 路由
        - id: wms-service
          uri: lb://wms-service
          predicates:
            - Path=/geoserver/cloud/wms/**,/geoserver/cloud/ows**
          filters:
            - StripPrefix=2
            - name: RequestRateLimiter
              args:
                redis-rate-limiter.replenishRate: 100
                redis-rate-limiter.burstCapacity: 200
                
        # WFS 路由
        - id: wfs-service
          uri: lb://wfs-service
          predicates:
            - Path=/geoserver/cloud/wfs/**
          filters:
            - StripPrefix=2
            
        # WebUI 路由
        - id: webui-service
          uri: lb://webui-service
          predicates:
            - Path=/geoserver/cloud/web/**,/geoserver/cloud/j_spring_security/**
          filters:
            - StripPrefix=2
            
        # REST API 路由
        - id: rest-service
          uri: lb://restconfig-v1
          predicates:
            - Path=/geoserver/cloud/rest/**
          filters:
            - StripPrefix=2

3.3.3 负载均衡策略

Gateway 默认使用 Round Robin(轮询)负载均衡策略。可以通过配置修改:

spring:
  cloud:
    loadbalancer:
      ribbon:
        enabled: false  # 使用 Spring Cloud LoadBalancer
    gateway:
      loadbalancer:
        use404: true  # 无可用实例时返回 404

支持的负载均衡策略:

  • Round Robin:默认,按顺序轮询
  • Random:随机选择实例
  • Weighted:按权重分配

3.3.4 超时配置

配置请求超时以避免长时间等待:

spring:
  cloud:
    gateway:
      httpclient:
        connect-timeout: 10000  # 连接超时(毫秒)
        response-timeout: 60000  # 响应超时(毫秒)
      routes:
        - id: wms-service
          metadata:
            response-timeout: 120000  # WMS 可能需要更长时间

3.3.5 跨域配置(CORS)

如果前端应用需要跨域访问:

spring:
  cloud:
    gateway:
      globalcors:
        corsConfigurations:
          '[/**]':
            allowedOrigins: 
              - "https://example.com"
              - "http://localhost:3000"
            allowedMethods:
              - GET
              - POST
              - PUT
              - DELETE
              - OPTIONS
            allowedHeaders: "*"
            exposedHeaders:
              - "Content-Type"
              - "Content-Length"
            maxAge: 3600

3.3.6 日志和监控

启用详细的请求日志:

logging:
  level:
    org.springframework.cloud.gateway: DEBUG
    reactor.netty.http.client: DEBUG

management:
  endpoints:
    web:
      exposure:
        include: gateway,health,info

查看路由信息:

# 获取所有路由
curl http://localhost:9090/actuator/gateway/routes

# 刷新路由
curl -X POST http://localhost:9090/actuator/gateway/refresh

3.4 Discovery 服务发现

3.4.1 功能概述

Discovery 服务基于 Netflix Eureka 实现,提供服务注册与发现功能:

  • 服务注册:各服务启动时向 Discovery 注册自己的地址
  • 服务发现:客户端从 Discovery 获取可用服务实例列表
  • 健康检查:定期检查服务实例的健康状态
  • 自我保护:在网络分区时避免错误地注销服务

3.4.2 Eureka Server 配置

Discovery 服务(Eureka Server)的主要配置:

server:
  port: 8761

eureka:
  instance:
    hostname: localhost
  client:
    registerWithEureka: false  # Server 不需要注册自己
    fetchRegistry: false       # Server 不需要获取注册表
  server:
    # 自我保护模式
    enableSelfPreservation: true
    renewalPercentThreshold: 0.85
    # 清理间隔
    evictionIntervalTimerInMs: 60000
    # 响应缓存
    responseCacheUpdateIntervalMs: 30000

3.4.3 Eureka Client 配置

各服务作为 Eureka Client 的配置:

eureka:
  client:
    serviceUrl:
      defaultZone: http://discovery:8761/eureka/
    registryFetchIntervalSeconds: 30  # 获取注册表间隔
  instance:
    preferIpAddress: true             # 使用 IP 而非主机名
    leaseRenewalIntervalInSeconds: 10 # 心跳间隔
    leaseExpirationDurationInSeconds: 30  # 过期时间
    instanceId: ${spring.application.name}:${random.uuid}

3.4.4 Eureka Dashboard

访问 http://localhost:8761 查看 Eureka Dashboard:

Dashboard 显示的信息:

  • System Status:系统状态、环境和数据中心信息
  • Instances currently registered:已注册的服务实例列表
  • General Info:服务注册表版本、更新时间等
  • Instance Info:当前 Eureka Server 的信息

3.4.5 Kubernetes 部署注意事项

在 Kubernetes 环境中,通常不需要 Eureka,可以使用 Kubernetes 原生的服务发现:

spring:
  profiles:
    active: standalone  # 启用 standalone 配置文件

# standalone 配置
eureka:
  client:
    enabled: false  # 禁用 Eureka

使用 Kubernetes Service 进行服务发现:

apiVersion: v1
kind: Service
metadata:
  name: wms-service
spec:
  selector:
    app: wms
  ports:
    - port: 8080
      targetPort: 8080

3.5 Config 配置服务

3.5.1 功能概述

Config 服务基于 Spring Cloud Config 实现,提供集中式配置管理:

  • 配置集中化:所有服务的配置存储在一个地方
  • 环境隔离:支持不同环境(dev、test、prod)的配置
  • 动态刷新:支持运行时刷新配置
  • 加密支持:敏感配置可以加密存储

3.5.2 配置存储后端

Config 服务支持多种配置存储方式:

Git 仓库(推荐)

spring:
  cloud:
    config:
      server:
        git:
          uri: https://github.com/geoserver/geoserver-cloud-config
          default-label: main
          clone-on-start: true
          force-pull: true

本地文件系统

spring:
  profiles:
    active: native
  cloud:
    config:
      server:
        native:
          search-locations: file:///opt/config/

Vault(敏感配置)

spring:
  cloud:
    config:
      server:
        vault:
          host: vault.example.com
          port: 8200
          token: ${VAULT_TOKEN}

3.5.3 配置文件命名规范

配置文件按照以下命名规范组织:

{application}-{profile}.yml

例如:

  • application.yml:所有服务共享的配置
  • wms-service.yml:WMS 服务的配置
  • wms-service-docker.yml:WMS 服务在 Docker 环境的配置
  • wms-service-kubernetes.yml:WMS 服务在 K8s 环境的配置

3.5.4 配置优先级

配置按以下优先级(从高到低)加载:

  1. 命令行参数
  2. 环境变量
  3. Config Server 的 {application}-{profile}.yml
  4. Config Server 的 {application}.yml
  5. Config Server 的 application-{profile}.yml
  6. Config Server 的 application.yml
  7. 本地 application.yml

3.5.5 配置刷新

支持运行时刷新配置(无需重启服务):

刷新单个服务实例

curl -X POST http://localhost:9101/actuator/refresh

刷新所有服务实例(通过 Bus)

curl -X POST http://localhost:8888/actuator/bus-refresh

配置自动刷新

使用 Spring Cloud Bus 实现配置变更自动推送:

spring:
  cloud:
    bus:
      enabled: true
      refresh:
        enabled: true
  rabbitmq:
    host: rabbitmq
    port: 5672

3.5.6 Kubernetes 部署替代方案

在 Kubernetes 中,通常使用 ConfigMap 和 Secret 替代 Config Server:

apiVersion: v1
kind: ConfigMap
metadata:
  name: geoserver-config
data:
  application.yml: |
    geoserver:
      backend:
        pgconfig:
          enabled: true
          host: postgresql
          database: geoserver

挂载到容器:

spec:
  containers:
    - name: wms
      volumeMounts:
        - name: config
          mountPath: /etc/geoserver
  volumes:
    - name: config
      configMap:
        name: geoserver-config

3.6 WMS(Web Map Service)

3.6.1 功能概述

WMS 服务提供标准的 OGC Web 地图服务,支持:

  • GetCapabilities:返回服务能力描述文档
  • GetMap:返回指定区域的地图图像
  • GetFeatureInfo:返回指定位置的要素信息
  • GetLegendGraphic:返回图例图形

支持的 WMS 版本:1.1.1、1.3.0

3.6.2 请求示例

GetCapabilities

GET /geoserver/cloud/wms?
    service=WMS&
    version=1.3.0&
    request=GetCapabilities

GetMap

GET /geoserver/cloud/wms?
    service=WMS&
    version=1.3.0&
    request=GetMap&
    layers=ne:countries&
    styles=&
    crs=EPSG:4326&
    bbox=-180,-90,180,90&
    width=800&
    height=400&
    format=image/png

GetFeatureInfo

GET /geoserver/cloud/wms?
    service=WMS&
    version=1.3.0&
    request=GetFeatureInfo&
    layers=ne:countries&
    query_layers=ne:countries&
    crs=EPSG:4326&
    bbox=-180,-90,180,90&
    width=800&
    height=400&
    i=400&
    j=200&
    info_format=application/json

3.6.3 配置选项

WMS 服务的主要配置项:

geoserver:
  wms:
    # 输出格式
    svg:
      enabled: true
      antialias: true
    # 缓存配置
    getmap:
      max-buffer: 50
      max-rendering-time: 60
    # 最大请求限制
    max-request-memory: 67108864  # 64MB

3.6.4 性能调优

渲染性能优化

geoserver:
  wms:
    # 并行渲染
    rendering:
      pool-size: 4
    # 标注缓存
    label-cache:
      enabled: true
      size: 10000

内存配置

# JVM 参数
JAVA_OPTS: >
  -Xms1g -Xmx4g
  -XX:+UseG1GC
  -XX:MaxGCPauseMillis=200

3.6.5 扩展能力

WMS 服务支持的主要扩展:

扩展 功能
Vector Tiles 输出 MVT/GeoJSON 矢量瓦片
CSS Styling CSS 样式支持
MBStyle MapBox 样式支持
Rendering Transforms 渲染转换

3.7 WFS(Web Feature Service)

3.7.1 功能概述

WFS 服务提供标准的 OGC Web 要素服务,支持:

  • GetCapabilities:返回服务能力描述
  • DescribeFeatureType:返回要素类型的 Schema
  • GetFeature:查询并返回要素数据
  • Transaction(WFS-T):插入、更新、删除要素
  • LockFeature:锁定要素以进行编辑
  • GetPropertyValue:获取属性值

支持的 WFS 版本:1.0.0、1.1.0、2.0.0

3.7.2 请求示例

GetCapabilities

GET /geoserver/cloud/wfs?
    service=WFS&
    version=2.0.0&
    request=GetCapabilities

GetFeature(基本查询)

GET /geoserver/cloud/wfs?
    service=WFS&
    version=2.0.0&
    request=GetFeature&
    typeNames=ne:countries&
    count=10&
    outputFormat=application/json

GetFeature(带过滤条件)

POST /geoserver/cloud/wfs
Content-Type: application/xml

<wfs:GetFeature xmlns:wfs="http://www.opengis.net/wfs/2.0"
                service="WFS" version="2.0.0"
                outputFormat="application/json">
  <wfs:Query typeNames="ne:countries">
    <fes:Filter xmlns:fes="http://www.opengis.net/fes/2.0">
      <fes:PropertyIsEqualTo>
        <fes:ValueReference>continent</fes:ValueReference>
        <fes:Literal>Asia</fes:Literal>
      </fes:PropertyIsEqualTo>
    </fes:Filter>
  </wfs:Query>
</wfs:GetFeature>

Transaction(插入要素)

POST /geoserver/cloud/wfs
Content-Type: application/xml

<wfs:Transaction xmlns:wfs="http://www.opengis.net/wfs/2.0"
                 service="WFS" version="2.0.0">
  <wfs:Insert>
    <sf:bugsites xmlns:sf="http://cite.opengeospatial.org/gmlsf">
      <sf:cat>3</sf:cat>
      <sf:str1>New Bug Site</sf:str1>
      <sf:the_geom>
        <gml:Point xmlns:gml="http://www.opengis.net/gml/3.2" srsName="EPSG:4326">
          <gml:pos>-74.0 40.7</gml:pos>
        </gml:Point>
      </sf:the_geom>
    </sf:bugsites>
  </wfs:Insert>
</wfs:Transaction>

3.7.3 输出格式

WFS 支持多种输出格式:

格式 MIME Type 说明
GML 3.2 application/gml+xml; version=3.2 默认格式
GeoJSON application/json 常用的 JSON 格式
Shapefile application/x-shapefile ESRI Shapefile
CSV text/csv 逗号分隔值
KML application/vnd.google-earth.kml+xml Google Earth
FlatGeoBuf application/flatgeobuf 高效二进制格式
DXF application/dxf AutoCAD 格式

3.7.4 配置选项

geoserver:
  wfs:
    # 最大返回要素数
    max-features: 1000000
    # 默认返回数量
    default-max-features: 1000
    # 事务支持
    service-level: COMPLETE  # BASIC, TRANSACTIONAL, COMPLETE
    # GML 配置
    gml:
      srs-name-style: URN2  # XML, URN, URN2, URL
    # JSONP 支持
    jsonp:
      enabled: false

3.7.5 性能调优

分页查询优化

GET /geoserver/cloud/wfs?
    service=WFS&
    version=2.0.0&
    request=GetFeature&
    typeNames=ne:countries&
    startIndex=0&
    count=100

属性选择

GET /geoserver/cloud/wfs?
    service=WFS&
    version=2.0.0&
    request=GetFeature&
    typeNames=ne:countries&
    propertyName=name,population

3.8 WCS(Web Coverage Service)

3.8.1 功能概述

WCS 服务提供栅格数据访问,支持:

  • GetCapabilities:返回服务能力描述
  • DescribeCoverage:返回覆盖数据的详细描述
  • GetCoverage:返回指定区域的栅格数据

支持的 WCS 版本:1.0.0、1.1.0、1.1.1、2.0.1

3.8.2 请求示例

GetCapabilities

GET /geoserver/cloud/wcs?
    service=WCS&
    version=2.0.1&
    request=GetCapabilities

DescribeCoverage

GET /geoserver/cloud/wcs?
    service=WCS&
    version=2.0.1&
    request=DescribeCoverage&
    coverageId=DEM__GTOPO30

GetCoverage

GET /geoserver/cloud/wcs?
    service=WCS&
    version=2.0.1&
    request=GetCoverage&
    coverageId=DEM__GTOPO30&
    subset=Lat(-10,10)&
    subset=Long(100,120)&
    format=image/tiff

3.8.3 输出格式

格式 MIME Type 说明
GeoTIFF image/tiff 最常用格式
JPEG 2000 image/jp2 高压缩比
NetCDF application/x-netcdf 科学数据格式
PNG image/png 无损压缩

3.8.4 配置选项

geoserver:
  wcs:
    # 最大输出大小(像素)
    max-input-memory: 2147483648  # 2GB
    # 支持的输出格式
    output-formats:
      - image/tiff
      - image/png
      - application/x-netcdf

3.9 WPS(Web Processing Service)

3.9.1 功能概述

WPS 服务提供地理空间处理功能:

  • GetCapabilities:返回服务能力描述
  • DescribeProcess:返回处理过程的详细描述
  • Execute:执行地理处理操作
  • GetStatus:获取异步执行状态
  • GetResult:获取执行结果

支持的 WPS 版本:1.0.0

3.9.2 内置处理过程

GeoServer WPS 内置了丰富的处理过程:

矢量处理

  • geo:buffer:缓冲区分析
  • geo:union:合并要素
  • geo:intersection:交集运算
  • geo:clip:裁剪
  • geo:centroid:质心计算

栅格处理

  • ras:Contour:等值线提取
  • ras:CropCoverage:裁剪栅格
  • ras:Rasterize:矢量栅格化

渲染处理

  • render:Map:地图渲染
  • render:Animation:动画生成

3.9.3 请求示例

同步执行(缓冲区分析)

POST /geoserver/cloud/wps
Content-Type: application/xml

<?xml version="1.0" encoding="UTF-8"?>
<wps:Execute xmlns:wps="http://www.opengis.net/wps/1.0.0"
             xmlns:ows="http://www.opengis.net/ows/1.1"
             xmlns:gml="http://www.opengis.net/gml"
             service="WPS" version="1.0.0">
  <ows:Identifier>geo:buffer</ows:Identifier>
  <wps:DataInputs>
    <wps:Input>
      <ows:Identifier>geom</ows:Identifier>
      <wps:Data>
        <wps:ComplexData mimeType="application/wkt">
          POINT(0 0)
        </wps:ComplexData>
      </wps:Data>
    </wps:Input>
    <wps:Input>
      <ows:Identifier>distance</ows:Identifier>
      <wps:Data>
        <wps:LiteralData>10</wps:LiteralData>
      </wps:Data>
    </wps:Input>
  </wps:DataInputs>
  <wps:ResponseForm>
    <wps:RawDataOutput mimeType="application/json">
      <ows:Identifier>result</ows:Identifier>
    </wps:RawDataOutput>
  </wps:ResponseForm>
</wps:Execute>

异步执行

<wps:ResponseForm>
  <wps:ResponseDocument storeExecuteResponse="true" status="true">
    <wps:Output>
      <ows:Identifier>result</ows:Identifier>
    </wps:Output>
  </wps:ResponseDocument>
</wps:ResponseForm>

3.9.4 配置选项

geoserver:
  wps:
    # 执行资源限制
    max-synchronous-processes: 10
    max-asynchronous-processes: 20
    # 结果存储
    storage:
      max-age: 86400  # 秒
      type: file
      path: /tmp/wps-output

3.10 REST API 服务

3.10.1 功能概述

REST API 服务提供 RESTful 风格的配置管理接口,用于:

  • 工作区(Workspace)管理
  • 数据存储(DataStore)管理
  • 图层(Layer)管理
  • 样式(Style)管理
  • 缓存(GeoWebCache)管理

3.10.2 API 端点

主要 API 端点:

端点 方法 说明
/rest/workspaces GET, POST 工作区列表和创建
/rest/workspaces/ GET, PUT, DELETE 工作区详情
/rest/workspaces/{ws}/datastores GET, POST 数据存储管理
/rest/workspaces/{ws}/datastores/{ds}/featuretypes GET, POST 要素类型管理
/rest/workspaces/{ws}/coveragestores GET, POST 覆盖存储管理
/rest/styles GET, POST 样式管理
/rest/layers GET 图层列表
/rest/layers/ GET, PUT, DELETE 图层详情

3.10.3 使用示例

列出所有工作区

curl -u admin:geoserver \
    "http://localhost:9090/geoserver/cloud/rest/workspaces.json"

创建工作区

curl -u admin:geoserver -X POST \
    -H "Content-Type: application/json" \
    -d '{"workspace":{"name":"test"}}' \
    "http://localhost:9090/geoserver/cloud/rest/workspaces"

创建 PostGIS 数据存储

curl -u admin:geoserver -X POST \
    -H "Content-Type: application/json" \
    -d '{
      "dataStore": {
        "name": "postgis_store",
        "connectionParameters": {
          "entry": [
            {"@key": "host", "$": "localhost"},
            {"@key": "port", "$": "5432"},
            {"@key": "database", "$": "geodata"},
            {"@key": "schema", "$": "public"},
            {"@key": "user", "$": "geoserver"},
            {"@key": "passwd", "$": "geoserver"},
            {"@key": "dbtype", "$": "postgis"}
          ]
        }
      }
    }' \
    "http://localhost:9090/geoserver/cloud/rest/workspaces/test/datastores"

发布图层

curl -u admin:geoserver -X POST \
    -H "Content-Type: application/json" \
    -d '{
      "featureType": {
        "name": "countries",
        "nativeName": "countries",
        "title": "World Countries"
      }
    }' \
    "http://localhost:9090/geoserver/cloud/rest/workspaces/test/datastores/postgis_store/featuretypes"

上传样式

curl -u admin:geoserver -X POST \
    -H "Content-Type: application/vnd.ogc.sld+xml" \
    -d @style.sld \
    "http://localhost:9090/geoserver/cloud/rest/styles?name=mystyle"

3.10.4 认证配置

REST API 需要认证,支持以下方式:

  • HTTP Basic:用户名和密码
  • API Key:通过请求头或查询参数传递
# Basic 认证
curl -u admin:geoserver ...

# API Key(如果启用)
curl -H "X-GS-ApiKey: your-api-key" ...

3.11 WebUI 管理界面

3.11.1 功能概述

WebUI 提供图形化的管理界面,功能包括:

  • 服务配置(WMS/WFS/WCS 参数)
  • 数据管理(数据存储、图层发布)
  • 样式编辑(SLD/CSS 样式)
  • 安全设置(用户、角色、权限)
  • 系统监控(资源使用、日志)

3.11.2 主要功能模块

数据模块

  • 工作区管理
  • 存储(矢量/栅格)管理
  • 图层管理
  • 图层组管理
  • 样式管理

服务模块

  • WMS 配置
  • WFS 配置
  • WCS 配置
  • WPS 配置
  • CSW 配置(如果启用)

安全模块

  • 用户管理
  • 组管理
  • 角色管理
  • 数据安全规则
  • 服务安全规则

瓦片缓存模块

  • 瓦片层管理
  • Grid Sets 管理
  • Blob Stores 管理
  • 缓存种子/清理

3.11.3 访问 WebUI

默认地址:http://localhost:9090/geoserver/cloud/web/

登录后的主界面展示:

  • 服务状态概览
  • 最近活动
  • 快捷操作链接

3.12 GeoWebCache 瓦片缓存

3.12.1 功能概述

GWC(GeoWebCache)提供瓦片缓存服务:

  • 预渲染瓦片:提前生成地图瓦片
  • 动态瓦片:按需生成并缓存
  • 多格式支持:PNG、JPEG、WebP、矢量瓦片
  • 多服务支持:WMTS、TMS、KML

3.12.2 支持的服务

服务 端点 说明
WMTS /gwc/service/wmts OGC 瓦片服务
TMS /gwc/service/tms Tile Map Service
WMS-C /gwc/service/wms WMS 瓦片缓存
KML /gwc/service/kml Google Earth

3.12.3 请求示例

WMTS GetCapabilities

GET /geoserver/cloud/gwc/service/wmts?
    service=WMTS&
    request=GetCapabilities

WMTS GetTile

GET /geoserver/cloud/gwc/service/wmts?
    service=WMTS&
    request=GetTile&
    layer=ne:countries&
    tilematrixset=EPSG:4326&
    tilematrix=EPSG:4326:0&
    tilerow=0&
    tilecol=0&
    format=image/png

TMS

GET /geoserver/cloud/gwc/service/tms/1.0.0/ne:countries@EPSG:4326@png/0/0/0.png

3.12.4 瓦片存储后端

GWC 支持多种瓦片存储方式:

类型 说明 适用场景
文件系统 本地或网络文件系统 开发/小规模
S3 AWS S3 兼容存储 云部署
Azure Blob Azure 存储 Azure 部署
Google Cloud GCS 存储 GCP 部署
PostgreSQL 数据库存储 统一管理

配置示例(S3):

gwc:
  blobstores:
    - name: s3-tiles
      type: S3BlobStore
      enabled: true
      default: true
      bucket: my-tiles-bucket
      prefix: tiles
      region: us-east-1

3.12.5 种子和清理

通过 REST API 管理瓦片缓存:

开始种子任务

curl -u admin:geoserver -X POST \
    -H "Content-Type: application/xml" \
    -d '<seedRequest>
          <name>ne:countries</name>
          <srs><number>4326</number></srs>
          <zoomStart>0</zoomStart>
          <zoomStop>10</zoomStop>
          <format>image/png</format>
          <type>seed</type>
          <threadCount>4</threadCount>
        </seedRequest>' \
    "http://localhost:9090/geoserver/cloud/gwc/rest/seed/ne:countries.xml"

清理缓存

curl -u admin:geoserver -X POST \
    "http://localhost:9090/geoserver/cloud/gwc/rest/seed/ne:countries?truncate=true"

3.13 本章小结

本章详细介绍了 GeoServer Cloud 的各个核心服务组件:

  1. Gateway:统一的 API 入口,提供路由、负载均衡和安全控制。

  2. Discovery:基于 Eureka 的服务发现,实现服务的自动注册和发现。

  3. Config:集中式配置管理,支持动态配置刷新。

  4. WMS:Web 地图服务,提供地图图像渲染。

  5. WFS:Web 要素服务,支持矢量数据查询和编辑。

  6. WCS:Web 覆盖服务,提供栅格数据访问。

  7. WPS:Web 处理服务,支持空间分析操作。

  8. REST API:RESTful 配置接口,用于编程管理 GeoServer。

  9. WebUI:图形化管理界面。

  10. GWC:瓦片缓存服务,提高地图服务性能。

理解这些服务的功能和配置是有效使用 GeoServer Cloud 的基础。在下一章中,我们将深入探讨目录(Catalog)和配置管理。

3.14 思考题

  1. 在什么情况下应该扩展 WMS 服务而不是 WFS 服务?如何确定每个服务需要的实例数量?

  2. Gateway 服务的负载均衡策略有哪些?各适用于什么场景?

  3. 如果需要在 WFS 服务中实现数据编辑(Transaction),需要考虑哪些安全因素?

  4. GeoWebCache 的不同瓦片存储后端各有什么优缺点?如何选择?

  5. 在生产环境中,是否应该禁用 Eureka 而改用 Kubernetes 原生服务发现?为什么?

posted @ 2025-11-29 13:07  我才是银古  阅读(0)  评论(0)    收藏  举报