我们有两个(有时甚至更多)应用程序争夺操作系统页面缓存。特别是 ElasticSearch 非常依赖操作系统页面缓存。在低延迟情况下,缓存未命中可能会影响或破坏性能。ES 是节点上唯一的低延迟应用程序,因此它需求操作系统页面缓存。由于整个索引无法放入 RAM,因此使用预热器来填充缓存,但几个小时后,这些缓存就会被其他应用程序破坏。
我的一些想法和观点:
- RAMFS(但索引不适合 RAM,所以不能去那里)
- TMPFS(但它不会在重启后保留并使用交换)
- Lucene/ES 级别的缓存(似乎不存在,OS 页面缓存是他们的缓存策略)
- 专用硬件(这很难证明,因为机器有足够的 RAM 和 CPU,只需要更好地利用它;另外我们还需要很多节点数)。
- 带锁定的 VMTouch(无法真正检测 ES 何时合并新段并需要解锁旧文件并映射新文件)
- 完整虚拟机(性能成本和额外的管理/管理)
一个可以划分出预定义 RAM 块用于缓存的专用文件系统将是理想的选择。但由于 ES/Lucene 的设计限制,除了购买专用节点外,我目前对任何方案都持开放态度。