iServer 缓存专题 |
SuperMap iServer 支持多种缓存方式,在不同的层级上为服务提供缓存支持,在浏览器层级支持浏览器端缓存,在服务层级提供Web请求缓存,此外在服务组件和提供者层级也分别提供缓存支持,具体如下。
浏览器端缓存:浏览器端缓存是将服务的响应内容(如图片、js、css等静态资源缓存)缓存在浏览器的内存中,再次收到相同的请求时直接将存储的缓存内容返回。
Web请求缓存:将服务的响应结果缓存到内存(ehcache)中,当收到相同的请求直接把缓存结果返回。Web 请求的详细介绍请参考配置启用 Web 请求缓存。支持Web请求缓存的服务有地图服务、三维服务。
组件层缓存:在组件层为服务提供缓存支持,缓存类型包括文件缓存、数据库缓存、内存缓存。支持组件层缓存的服务有地图服务、数据服务,各服务支持的组件层缓存类型具体如下:
各服务支持的组件层缓存类型
地图服务支持的缓存类型 | 数据服务支持的缓存类型 | |
文件缓存 |
SMTiles、GDP地图瓦片(已过时),UTFGrid属性瓦片(已过时) |
- |
数据库缓存 |
MongoDB地图瓦片、MongoDB(MVT)矢量瓦片 |
- |
内存缓存 |
- |
ehcache |
提供者层缓存:在提供者层为服务提供缓存支持,缓存类型包括文件缓存、数据库缓存。支持提供者层缓存的服务有地图服务、三维服务、影像服务,各服务支持的提供者层缓存类型具体如下:
各服务支持的提供者层缓存类型
地图服务支持的缓存类型 | 三维服务支持的缓存类型 | 影像服务支持的缓存类型 | |
文件型缓存 |
UGCV5 |
矢量、影像、地形、模型、地图、场景缓存 |
UGCV5(原始型和紧凑型) |
数据库型缓存 |
- |
- |
MongoDB |
缓存的作用体现在两个方面,一是通过缓存文件为服务加速,二是将缓存作为数据源直接发布。
通过缓存为服务加速是指对服务的的数据、图片、响应结果等按照特定的方式进行预先存储,以后在收到相同的请求时不需要服务器重新生成,从而提高数据的访问效率。如,某个地图服务预先生成了地图缓存文件,那在浏览地图时则不再需要服务器重新生成图片,而是直接返回缓存的瓦片,有效减少了计算量、提高了地图服务的出图效率。
部分缓存数据,如地图瓦片,也可以作为数据源直接发布,地图缓存发布的地图服务也可以提高访问效率。地图缓存发布流程如下:
发布文件缓存(以发布UGCV5缓存为例):启动iServer,进入首页,点击“快速发布一个或一组服务”,选择数据源为“UGCV5瓦片”,输入配置文件然后选择发布的服务类型,点击“完成”按钮完成UGCV5缓存的发布流程。
发布数据库缓存(以发布MongoDB缓存为例):启动iServer,进入首页,点击“快速发布一个或一组服务”,选择数据源为“MongoDB瓦片”,填入服务地址、数据库、用户名、密码等信息,然后选择发布的服务类型,点击“完成”按钮完成MongoDB缓存的发布流程。
浏览器端缓存、Web请求缓存、组件层缓存、提供者层缓存分别适用于不同的场景:
浏览器缓存适用于存储不常变化的静态资源缓存,比如图片、js、css等。
Web请求缓存具有高效的优点,也具有缓存存储空间较小(因为缓存占用太大时会影响服务器运行效率)、不支持缓存共享等缺点。因此Web请求缓存适用于对缓存效率要求较高,但是数据量不大也不需要缓存共享的场景。
组件层缓存不适用于数据变更频繁的场景,因为数据变更频繁意味着需要频繁地重新生成缓存,即占用了资源又增加了时间成本 。在数据变更不频繁的情况下,组件层的文件缓存和内存缓存更适用于单机环境,数据库缓存更适用于多机环境。
提供者层缓存也不适用于数据变更频繁的场景,因为数据变更频繁意味着需要频繁地重新生成缓存,即占用了资源又增加了时间成本 。在数据变更不频繁的情况下,提供者层的文件缓存更适用于单机环境,数据库缓存更适用于多机环境。
浏览器端缓存一般默认开启,无需单独进行设置。
Web请求缓存开启方式为:启动iServer,进入 服务>高级->HTTP缓存 页面,设置开启HTTP缓存。
组件层文件缓存启用方式(以启用SMTiles为例)
启动iServer,进入 服务->服务管理页面,打开服务的服务详情页。在缓存项勾选“是否启用地图瓦片缓存”,选择缓存类型为SMTiles,然后保存当前配置。
组件层数据库缓存启用方式(以启用MongoDB为例)
启动iServer,进入 服务->服务管理页面,打开服务的服务详情页。在缓存项勾选“是否启用地图瓦片缓存”,选择缓存类型为MongoDB,点击“导入存储位置”->“添加存储位置”,输入存储ID、服务地址、数据库、用户名、密码等信息,然后保存当前配置。
组件层内存缓存(ehcache)默认启用,不需要单独配置。
地图服务文件型缓存启用方式(以启用UGCV5为例):
启动iServer,进入 服务->服务管理页面,打开地图服务的服务详情页。在缓存项勾选“是否启用地图瓦片缓存”,选择缓存类型为UGC,选择缓存版本为5.0,然后保存当前配置。
三维服务文件型缓存启用方式:
将已切好的三维缓存文件复制到【SuperMap iServer 安装目录】\webapps\iserver\output\{scene} 目录下后,在访问三维服务时即可使用三维缓存。
影像服务文件型缓存启用方式:请参考配置影像服务动态缓存方案。
影像服务数据库型缓存启用方式:请参考配置影像服务动态缓存方案。
缓存的生产方式有两种,动态生成和预缓存。其中浏览器端缓存、Web请求缓存仅支持动态缓存,而组件层缓存(除内存缓存)、提供者层缓存既支持动态缓存又支持预缓存。对组件、提供者层缓存,当预缓存存在时优先使用预缓存的文件,当预缓存不存在时方动态生成缓存。
当访问服务时会动态地生成浏览器端缓存,存储在浏览器内存中,当收到相同的请求,直接把缓存结果返回。浏览器端缓存到期失效后,再次收到请求时会重新生成缓存。
在访问服务时,动态地在ehcache中生成服务响应结果缓存,当收到相同的请求,直接把缓存结果返回。Web请求缓存到期失效后,再次收到请求时会重新生成缓存。
组件层缓存的生产方式如下表:
服务类型 | 各类服务支持的缓存类型 | 缓存生产方式 | ||
动态生成 | 预缓存 | |||
地图服务 | 文件缓存 | SMTiles地图瓦片、GDP地图瓦片(已过时)、UTFGrid属性瓦片(已过时) | 在通过地图服务出图时动态生成缓存 | 通过iServer分布式切图服务生成 |
数据库缓存 | MongoDB地图瓦片 | 通过iServer分布式切图服务或iDesktop切图功能生成 | ||
MongoDB(MVT)矢量瓦片 | - | |||
数据服务 | 内存缓存 | ehcache | 在访问数据服务时动态生成缓存 | - |
地图服务的组件层缓存支持动态生成和预缓存两种缓存生成方式。动态缓存是在访问服务的同时动态地生成缓存。而预缓存是提前生成缓存,访问服务时可以直接使用已生成的缓存文件,不再动态生成缓存。
动态缓存
开启地图缓存后,在地图服务出图时将自动在对应的缓存存储路径中动态生成缓存文件。缓存的开启方式为:启动iServer,进入 服务->服务管理页面,打开服务的服务详情页。在缓存项勾选“是否启用地图/矢量/属性瓦片缓存”,选择缓存类型为上表中地图服务支持的缓存类型,并输入其他相关参数,然后保存当前配置。
预缓存
通过iServer分布式切图服务生成预缓存:请参考创建切图任务。
通过iDesktop切图功能生成地图预缓存:在iDesktop中提供“单任务切图”、“多任务切图”两种地图缓存生成方式,生成缓存的具体步骤请参考iDesktop帮助文档中的 单任务切图、多任务切图。
注意:iDesktop切图功能生成的栅格瓦片能作为iServer地图服务的预缓存,但iDesktop切图功能生成的矢量瓦片不能作为iServer地图服务的预缓存
数据服务在开启组件层缓存后,在访问数据服务时将动态生成缓存存储在ehcache中。
地图服务的数据量通常较大,因此一般建议您通过预缓存功能来更新缓存。您可以通过iServer分布式切图服务或iDesktop切图功能更新缓存,更新缓存的方法与生成缓存的方法相同。在更新时您可以选择进行整体更新或局部更新,以iServer分布式切图服务为例进行介绍:
整体更新:在通过分布式切图服务更新时,设置更新范围为原有缓存的全幅范围、设置比例尺层级为原有缓存的所有比例尺层级。
局部更新:在通过分布式切图服务更新缓存时,在“高级设置”中设置缓存范围为您期望更新的部分区域,或在“缓存比例尺”中设置仅更新原有地图缓存的部分比例尺。当然,您也可以同时进行以上两个设置,即仅更新部分子区域的部分比例尺层级的缓存文件。
数据服务组件层内存缓存的存活周期为一分钟,如一分钟内没有收到相同的请求,则该缓存自动失效。在已有的缓存失效后,再收到请求时又会重新生成缓存。
服务类型 | 缓存类型 | 生成方式 | ||
动态缓存 | 预缓存 | |||
地图服务 | 文件型缓存 | UGCV5 | 在通过地图服务出图时动态生成缓存 | 通过iServer分布式切图服务或iDesktop切图功能生成 |
三维服务 | 文件型缓存 | 矢量、影像、地形、模型、地图、场景缓存 | - | 通过iDesktop生成场景缓存功能生成 |
影像服务 | 文件型缓存 | UGCV5(原始型和紧凑型) | 在通过影像服务出图时动态生成缓存 | 通过iServer影像服务静默切片生成 |
数据库型缓存 | MongoDB |
地图服务
动态缓存
开启地图缓存后,在地图服务出图时将自动在对应的缓存存储路径中动态生成缓存文件。缓存的开启方式为:启动iServer,进入 服务->服务管理页面,打开服务的服务详情页。在缓存项勾选“是否启用地图瓦片缓存”,选择缓存类型为UGC,然后选择缓存版本,并设置其他相关参数,保存当前配置。
预缓存
通过iServer分布式切图服务生成预缓存:请参考创建切图任务。
通过iDesktop切图功能生成地图预缓存:在iDesktop中提供“单任务切图”、“多任务切图”两种地图缓存生成方式,生成缓存的具体步骤请参考iDesktop帮助文档中的 单任务切图、多任务切图。
三维服务
在提供者层不支持为三维服务动态生成缓存,仅支持预缓存,预缓存方式如下:
通过iDesktop“生成场景缓存” 功能生成影像缓存、地形缓存、矢量缓存、二三维地图缓存或三维场景的缓存,具体步骤请参考 iDesktop 帮助中的 生成场景缓存。注意,如果期望通过预缓存文件为三维服务加速,需要在生成预缓存后需要将已切好的三维缓存文件复制到【SuperMap iServer 安装目录】\webapps\iserver\output\{scene} 目录下。
影像服务
动态缓存:开启影像服务动态缓存后,浏览影像服务时会在相应的存储位置下动态地生成缓存,缓存的开启方式请参考配置影像服务动态缓存方案。
预缓存(静默切片):影像服务支持静默切片策略,静默切片策略是利用服务器空闲资源,后台启动影像地图切片,切片结果输出位置与动态缓存目录一致。静默切片的开启方式请参考配置影像服务动态缓存方案。
地图服务、三维服务、影像服务的数据量通常较大,因此一般建议您通过预缓存功能来更新缓存,更新缓存的方式与生成缓存的方式相同。在通过预缓存功能更新缓存时,您也可以根据您的需求进行整体更新或局部更新。
iServer对地图服务、数据服务、三维服务、影像服务都提供缓存支持,这几类服务支持开启的缓存方式下表所示:
表 iServer数据服务、地图服务、三维服务支持开启的缓存方式
数据服务 | 地图服务 | 三维服务 | 影像服务 | |
支持开启的缓存方式 | 浏览器端缓存、组件层缓存 | 浏览器端缓存、Web请求缓存、组件层缓存、提供者层缓存 | 浏览器端缓存、Web请求缓存、提供者层缓存 | 浏览器端缓存、提供者层缓存 |
在单机环境下,地图服务可以开启Web请求缓存。
此外,如数据更新频率低,建议同时开启地图缓存,具体建议如下:
如数据源是工作空间,建议开启UGCV5地图缓存。
如数据源是SuperMap REST服务、在线地图服务、ArcGIS REST 地图服务、OGC地图服务则建议开启SMTiles地图缓存。
在开启地图缓存时您可以选择动态缓存或预缓存的使用方式。数据量很大时建议您使用预缓存的使用方式,可有效提高出图的效率。
多机环境包括集群环境和基于数据库的多节点服务配置信息自动同步的环境。在多机环境下,地图服务可以开启Web请求缓存。
此外,对SuperMap工作空间,SuperMap REST地图服务、OGC地图服务、在线地图服务、ArcGIS REST 地图服务发布的地图服务,如数据变更频率低,建议同时开启MongoDB地图缓存。
对数据服务,iServer默认开启组件层内存缓存和浏览器端缓存,您无需进行选择,也无需进行额外的启动配置。
对三维服务,可以开启Web请求缓存。
此外,由SuperMap工作空间发布的三维服务,如数据源变更频率低,建议再开启三维预缓存。
对影像服务,单机环境下,建议使用UGCV5缓存;多机环境下,建议使用MongoDB缓存。