SAP Gateway Foundation 缓存服务的元数据信息以显着提高性能。 SAP 提供了三种类型的缓存:
- 在 hub 上缓存。
在 Hub 系统上缓存了元数据模型、注释模型以及服务的注释文本。
- 在后端缓存。
在后端仅缓存元数据模型和注释模型。 后端不需要注释文本来进行服务实例化,因此不会在此处缓存。
- co-deployment 场景。
共部署场景是指 hub 和 backend 是一个系统。 因此,缓存只需为 hub 和每个后端系统执行一次。
SAP 推荐在开发系统上不打开缓存 cache:
在 OData 通道编程范例中,包含最后修改时间戳的模型提供程序类仅在最初加载元数据并将其存储在 SAP Gateway Foundation 元数据缓存中时调用一次。 如果之后更改了模型提供者类(例如,由于编码更改或由于导入更改后的模型提供者类),元数据缓存会为每个服务文档或服务元数据文档请求执行一次握手,并检查缓存是否包含最新的元数据。 如果元数据已过时,则会自动触发缓存刷新。
SAP Gateway 元数据组件允许完全缓存元数据,从而显着提高通过 SAP Gateway 发送的请求的性能。
存在三种不同的访问场景:
-
需要满足对OData服务文档或OData服务元数据文档的请求。
-
SAP Gateway 运行时本身需要访问元数据才能处理请求。
-
IW_BEP 软件组件需要访问元数据才能处理请求。
SAP Gateway 通过提供三级缓存策略为所有这些场景提供功能。
Access Scenario 1 - Web Infrastructure Cache
在这种情况下,存在获取服务文档或服务元数据文档的消费者请求。 这意味着对资源的请求在生产环境中很少改变。
为了使用 HTTP 标准技术,SAP Gateway OData Channel 根据 HTTP 缓存标准(Last-Modified)设置服务(元数据)文档的 HTTP 响应标头。 如果之前已经请求过资源,则此参数使 Web 基础结构组件(例如,Web 服务器和浏览器)能够满足其缓存之外的请求。
特定于应用程序的模型提供程序类可以通过实现方法 GET_LAST_MODIFIED 影响此时间戳。 此方法的默认实现根据模型提供程序类 (MPC) 的更改时间戳派生最后修改的时间戳。 如果不合适,应用程序可以覆盖逻辑。
Access Scenario 2 - SAP Gateway Metadata Cache
如果无法通过 Web 基础架构缓存满足请求,或者 SAP Gateway 运行时本身需要访问元数据,例如读取提要,则会检查当前服务的元数据是否已存在于 SAP Gateway 元数据中 缓存(如果启用)。
如果存在,则直接从缓存中检索数据。 另一方面,如果它不存在,则从相应的数据源读取数据并传回。数据源的一个示例是模型提供程序类或 SAP Gateway 元数据持久性,存储在 SAP Gateway 元数据缓存中以服务来自它的后续请求。
Access Scenario 3- IW_BEP Metadata Cache
IW_BEP 上的缓存无法禁用,需要正确实现模型提供程序类方法才能检索最后修改的时间戳。
如果模型提供者类未更改,但底层 ABAP 字典绑定(例如 ABAP 结构中字段类型的定义),则更改不会直接反映出来,因为没有 ABAP 字典更改的挂钩。 在这种情况下,需要手动清除 IW_BEP 上的元数据缓存。