• 1. ISearch5实现原理之实时搜索引擎平台北京团队 万喜
  • 2. 纲要应用场景 实时引擎 消息系统
  • 3. 应用场景—主搜需求需要解决的问题 性能优化 更快的从异常中恢复 更好的扩展性
  • 4. 应用场景—主搜swiftdumphdfsdp indexPush RawDocPull RawDocDump RawDocBuildJobRawDocindexSearch ClusterSwiftSearcherdisk
  • 5. 实时引擎Diskpartition1partitionNpartition2…swiftBatch indexBuilderDocProcessor ChainSearcherReaderRt indexDocObjQueryPull RawDoc
  • 6. 实时引擎—优化手段批量job可以利用offline计算资源做索引优化 全局排序 静态截断 大增量merge
  • 7. 实时引擎—大增量MergeMerge用于回收被标记删除的文档,减小物理内存和多segment对查询性能的影响 引擎以version和segment为单位组织索引。 每个version包含多个segment,segment中包括倒排(index)、正排(attribute)和详情(summary) MergeStrategy:指segment合并的策略,目前引擎提供optimize、balanceTree、realtime三种策略
  • 8. 实时引擎—大增量MergeSearcherSegment_0IndexReader1Segment_1Segment_2Segment_3Version.3Segment_1Segment_2Segment_3Version.3Segment_4Version.4IndexReader2Query
  • 9. 实时引擎—按行切换SearcherSegment_0IndexReader1Segment_1Segment_2Segment_3Version.3Segment_4Version.4IndexReader2Query
  • 10. 实时引擎—查询优化 实时流程 实时截断 减小Build对查询的影响 防止segment过多对查询性能的影响 优化Modify效率 与批量一致的索引结构,截断策略类似 同步Build、内存托管 实时索引merge策略 Update自适应 时效性低的更新可以走批量流程
  • 11. 实时引擎—快速恢复场景 全量切换后如何快速恢复实时数据 机器异常时如果快速迁移数据 流程 坏节点的迁移 追赶实时数据 未在线服务时充分利用cpu 在线服务时限制build速度
  • 12. Machine2Machine1实时引擎—快速恢复hdfsSearcherFull index + Increment index Swiftpull msg Querypull msg
  • 13. 实时引擎—可扩展SwiftP1P2P3P4P5P6msg引擎扩列或者swift加机器都互不影响Searcher0- 3276732768-65535hashSearcher0- 2184543690-6553521846- 43690
  • 14. 实时引擎瓶颈 时效性:分钟级 采用小segment+merge的方式受磁盘io的影响 性能:processor对查询的影响,目前小于5% 正在做的工作 Processor分离 内存索引可检索 更新的优化
  • 15. SwiftadminadminBrokerPartitionTopicPartitionPartitionProducerPush msgzookeeperheartbeatCmdConsumerPull msgstorageConsumerConsumer
  • 16. Swift性能 消息的写入方式 消息的读取方式 主搜swift性能 可靠性 数据存储在HDFS、Pangu 扩展性 支持动态加减机器 集群规模受限于zookeeper性能 同步和异步的差异 Cache API上提供批量读写和压缩接口
  • 17. Swift—去重主搜需求 Dump发送宝贝的全量消息 分层的good/bad cluster需要读取各自的消息 search/summary分离,不去重更新的消息会重复订阅
  • 18. Swift—去重Swift Partitionmsg0msg1msg2Full DocGood ClusterBad ClusterSummary ClusterSearch FieldSummary Field
  • 19. Swift—去重Message Filter Message: 支持uint8Payload Field Filter Message:由多个field组成,每个field为[name, value, isUpdated] Producer:在message中设置isUpdated标记 Consumer:读取isUpdate=true的field
  • 20. Swift—自动化运维解决单点故障 单集群部署时平滑升级 统一的运维接口多Admin 自动化热升级 Swift tools集成相应运维命令
  • 21. (本页无文本内容)