目录
2.1、缓存数据构建executeAgentWithoutStore
1、spinnaker缓存代理类相关解析
(以TencentImageCachingAgent类为例)
缓存接口
1.1、缓存代理类提供两种数据类型AUTHORITATIVE、INFORMATIVE,详见com.netflix.spinnaker.cats.agent.AgentDataType.Authority。
数据类型为AUTHORITATIVE时,则从云上查询出来结果集被认为是一个完整体,以此结果集为准修改缓存中的关系数据(relationship)
数据类型为INFORMATIVE时,则无需关注缓存中数据的准确性,不会去删除关系数据(relationship)
1.2、缓存结构任一资源下都包括attributes(当前资源的详细信息)、relationships(当前资源与其他资源的关系)、hash、members、relationship(资源关系标识集合)。
attributes、relationships由代理类提供,hash、members、relationship由缓存机制生成提供。
hash: 根据每个资源的属性值计算其hash值,用于对资源的增删改
members: 查询时的桥表,与提高查询效率
relationships:当前资源与其他资源的联系,比如,acs application下有哪些cluster、loadbalancers、serverGroups等等,方便后面组装数据
2、spinnaker缓存
缓存机制依赖于agent机制触发 CachingAgent#executeAgent
2.1、缓存数据构建executeAgentWithoutStore
以TencentImageCachingAgent类为例,loadData方法中进行的以下几步:
1、拉取云平台镜像资源
2、获取缓存中进行资源
3、比对过滤出淘汰的数据
4、构建缓存对象(缓存对象包括有效数据和已淘汰待清理数据)
2.2、数据存储storeAgentResult
1、获取代理类AUTHORITATIVE类型数据
2、根据缓存匹配的key筛选缓存members中AUTHORITATIVE类型已过期的数据
3、缓存操作
3、核心方法详解
3.1、putCacheResult详解
- 从缓存中查询AUTHORITATIVE类型的关系数据(relationships)
- 数据存储
- 过滤失效数据
- 删除过期数据
3.2、数据存储详解mergeItems
调用链 com.netflix.spinnaker.cats.provider.DefaultProviderCache#putCacheResult -> cacheDataType -> backingStore.mergeAll -> mergeItems方法
1、合并数据操作
hash检测会检测历史数据与最新数据的hash值,如果hash存在则表示历史数据已存在,跳过当前数据存储
relationships同理
2、数据存储
3.3、数据删除evictAll
调用链com.netflix.spinnaker.cats.provider.DefaultProviderCache#putCacheResult -> evictDeletedItems -> backingStore.evictAll