"baifan - Elastic Meetup - Wuhan-final.pdf"
本次演讲的主题是"高吞吐状况下斗鱼搜索引擎优化之路",由白凡@尚德机构分享。白凡在2015年加入斗鱼,负责搜索服务的搭建,并在2017年10月转至尚德机构。演讲内容主要涵盖了斗鱼搜索服务的技术架构、优化过程、Elasticsearch(ES)的应用拓展以及常见问题。
1. **技术架构**:Elasticsearch在斗鱼的搜索服务中占据核心地位,几乎覆盖了所有的搜索需求。系统中使用Ansj中文分词器对数据进行分词处理,通过HDFS进行离线统计分析,以生成自定义词库(Custom.dic)。
2. **自定义词库与分词器**:为了提升搜索的准确性,白凡提到了如何丰富自定义词库。词库主要来源于斗鱼平台的"弹幕"和搜索词,通过分析用户行为来定制分词规则。例如,针对直播间描述的特殊性,使用whitespaceanalyzer配合patterntokenizer,根据","和" "进行分词,确保只有精确的搜索词(如"五五开"、"电竞卢本伟")才能匹配到结果。
3. **Java API开发**:在构建查询时,利用BoolQuery进行多维度查询,可以根据不同维度设置权重值,这些权重值配置在一个中心调度系统中,确保了灵活性和一致性。
4. **增量索引**:斗鱼搜索服务面临来自PHP、C++、Java等不同语言的数据源,增量索引的实现方式包括:
- **RocketMQ**:实时性和稳定性优秀,可复用,适用于通过Canal解析binlog或前端HTTP请求POST增量数据,多组消费可以设置不同的Group。
- **Redis队列**:实时性和稳定性也较好,但只能单个服务端消费,且无持久化可能导致数据丢失。
- **定时任务**:无需中间件,但实时性和稳定性较差,依赖于准确的时间点进行更新,容易因任务失败而错过更新。
5. **优化之路**:斗鱼搜索服务的优化主要包括集群升级,这可能是为了应对不断增长的业务需求,或者是新版本Elasticsearch提供的性能改进和新功能吸引。此外,还涉及到其他优化措施,如查询性能提升、索引结构优化等。
6. **ES应用拓展**:除了基本的搜索服务,白凡还分享了Elasticsearch在斗鱼的其他应用,可能包括日志分析、实时监控等方面,以充分利用其分布式和高可用的特性。
7. **常见问题**:演讲可能涉及了在高并发、大数据量下Elasticsearch可能出现的问题及解决策略,比如内存管理、索引碎片、节点协调等问题。
这场分享深入探讨了在高吞吐场景下,斗鱼如何通过Elasticsearch进行搜索服务优化,以及在实际操作中遇到的各种挑战和解决方案,对理解大规模搜索服务的建设和优化提供了宝贵的实践经验和洞见。