问题背景
API Gateway 需要缓存,以防止microservice无回应的时候提供缓存数据
If there are failures in the backend services, the API Gateway can mask them by returning cached or default data.
缓存方案
是否直接从缓存读取
不管后端服务是否健康,先访问缓存。如果缓存存在直接返回缓存数据,如果不存在再访问后端。优点是能大幅降低响应时间(cache vs network),缺点是会返回陈旧数据。是否采取这个方案取决于client对数据新鲜程度的要求。如果允许一定程度的陈旧数据,可以通过调整缓存过期时间来找到平衡。
应对后端服务的失败
后端服务失败可以返回默认数据或者缓存数据。如果不允许默认数据,就得从缓存读取缓存数据。但是,设置缓存的时候会设置过期时间,比如30秒。如果过期了缓存数据就不复存在,那系统就会不available。
方案 缓存备份(backup vs operational)
在存储缓存的时候,可以存一份缓存过期时间(比如一天)很长的备份缓存。如果后端服务失败,operational缓存又过期,可以从备份缓存中读取数据以保证服务的可用性。备份缓存可以在作业缓存更新的时候同步更新。