《Elastic Stack 实战手册》——四、应用实践——4.3 性能优化场景——4.3.2.Elasticsearch 开发人员最佳实践指南(2): https://developer.aliyun.com/article/1225222spm=a2c6h.13148508.setting.15.438f4f0e18NXNE
实战技巧(Strategy)
在最后一节中,我收集了解决上述未解决问题的便捷的实战技巧。
始终(尝试)坚持使用最新的 JVM 和 Elasticsearch 版本
Elasticsearch 是一个 Java 应用程序。像其他所有 Java 应用程序一样,它也有 hot paths
和垃圾回收问题。几乎每个新的 JVM 版本都会带来很多优化,你可以不费吹灰之力利用这些
优化。
Elasticsearch 有一个官方页面,列出了支持的 JVM 版本和垃圾收集器。在尝试任何 JVM 升
级之前,请务必先翻一翻如下文章清单:
· https://www.elastic.co/guide/en/elasticsearch/guide/current/_don_8217_t_touch_thes
e_settings.html
· https://www.elastic.co/cn/support/matrix#matrix_jvm
注意:Elasticsearch 升级也是免费获得性能提升的来源。
使用 Elasticsearch 完整和部分快照进行备份
Elasticsearch 可以便捷的实现全部索引的全量快照,或者部分索引数据的增量快照。
根据你的更新模式和索引大小,找到适合你的用例的快照最佳组合。
也就是说,例如,在 00:00 时有 1 个完整快照,在 06:00、12:00 和 18:00 时有 3 个 局部
增量快照。将它们存储在第三方存储也是一种好习惯。
有一些第三方 插件 可以简化这些情况。
举例:https://www.elastic.co/guide/en/elasticsearch/plugins/master/repository.html
与每份备份方案一样,安全起见,请确保快照可以还原并反复练习几次。
有一个持续的性能测试平台
像任何其他数据库一样,Elasticsearch 在不同条件下显示不同的性能:
· 索引,文档大小;
· 更新,查询/检索模式;
· 索引,集群设置;
· 硬件,操作系统,JVM 版本等。
很难跟踪每个设置的改变以观察其对整体性能的影响。确保你(至少)进行每日性能测试,以
帮助缩小范围,快速定位最近引入的、导致性能下降的可能的原因。
这种性能测试说起来容易做起来难。你需要确保测试环境:
· 能有代表性的生产环境数据
· 配置和生产环境一致
· 完全覆盖用例
· 考虑包括操作系统缓存的测试的影响。
使用别名
告诉你一些颇有见地的实操经验:永远不要查询索引,而要查询别名。
别名是指向实际索引的指针。你可以将一个或多个索引归为一个别名。
许多 Elasticsearch 索引在索引名称上都有内部上下文,例如 events-20190515 代表 201905
15 这一天的数据。
现在,在查询 events-* 索引时,应用程序代码中有两个选择:
选择 1:通过特定日期格式即时确定索引名称:events-YYYYMMDD。
这种方法有两个主要缺点:
1)需要回退到特定日期的索引,因此需要对整个代码库进行相应的设计以支持这种操作。
2)撇开所有时钟同步问题,在凌晨,你需要用程序或者脚本控制索引切换,确保数据写入下一
天索引。
选择 2:创建一个 events 别名,指向 events-* 相关的索引。负责创建新索引的组件如:
curator 或者 ILM(索引生命周期管理)可以自动将别名切换到新索引。
这种方法将带来两个明显的好处:
1)它没有以前方法的缺点。
2)只需指向 events 别名,代码就会更简洁。
避免拥有大量同义词
Elasticsearch 支持索引阶段和查询阶段指定 同义词。
没有同义词,搜索引擎是不完整的,但实战使用环境,注意如下问题:
·索引阶段同义词增加了索引大小,并增加了运行时开销。
·查询阶段同义词不会增加索引的大小,但顾名思义,这会增加运行时开销。
·使用同义词,很容易在尝试修复其他问题时无意间破坏某些其他内容。
所以,要持续监视同义词对性能的影响,并尝试为添加的每个同义词编写测试用例。
同义词官方文档:https://www.elastic.co/guide/en/elasticsearch/reference/current/analysis
-synonym-tokenfilter.html
《Elastic Stack 实战手册》——四、应用实践——4.3 性能优化场景——4.3.2.Elasticsearch 开发人员最佳实践指南(4): https://developer.aliyun.com/article/1225219?spm=a2c6h.13148508.setting.17.438f4f0e18NXNE