通用广告引擎的索引设计和性能优化.ppt
《通用广告引擎的索引设计和性能优化.ppt》由会员分享,可在线阅读,更多相关《通用广告引擎的索引设计和性能优化.ppt(36页珍藏版)》请在冰豆网上搜索。
![通用广告引擎的索引设计和性能优化.ppt](https://file1.bdocx.com/fileroot1/2022-10/28/ad83e544-9baf-400e-bd57-74da93211745/ad83e544-9baf-400e-bd57-74da932117451.gif)
通用广告引擎的索引设计和性能优化阿里妈妈事业部师陀Agenda背景索引设计和实现遇到的问题下一步工作性能优化过程性能优化小结Q&A背景广告引擎的基本状况层级结构:
广告主-广告计划-广告商品-竞价词背景广告引擎的基本状况层级结构:
广告主-广告计划-广告商品-竞价词广告查询流程Query解析-倒排查询-过滤-算分-排序-拼装结果返回背景广告引擎的基本状况层级结构:
广告主-广告计划-广告商品-竞价词在线查询流程Query解析-倒排查询-过滤-算分-排序-拼装结果返回索引数据:
每天重建全量+实时更新增量背景广告引擎的基本状况层级结构:
广告主-广告计划-广告商品-竞价词在线查询流程Query解析-倒排查询-过滤-算分-排序-拼装结果返回索引数据:
每天重建全量+实时更新增量多条产品线,引擎技术有通用性背景一年前:
使用搜索引擎isearch的索引内核+自己开发的辅表结构相对实现复杂,正排读接口不清晰性能问题背景一年前:
使用搜索引擎isearch的索引内核+自己开发的辅表结构相对实现复杂,正排读接口不清晰性能问题重构:
新的通用广告引擎(一期)索引支持主辅表结构只做广告引擎需要的功能目标:
性能和可维护性索引设计倒排:
全量+增量Payload字段可配置增量的多级可回收内存池索引设计正排:
主/辅表结构多种值类型:
bit/int8/int16/float/string多种字段类型:
单值/固定多值/变长多值定长字段和变长字段的紧密存储Package表的关联字段平铺索引设计正排:
主/辅表结构多种值类型:
bit/int8/int16/float/string多种字段类型:
单值/固定多值/变长多值Package表的关联字段平铺索引设计正排多种值类型:
bit/int8/int16/float/string多种字段类型:
单值/固定多值/变长多值定长字段和变长字段的紧密存储Package表的关联字段平铺主/辅表+keyId-docId的hash表+DeleteMap索引实现索引实现索引实现索引实现索引实现其他TableWriter的其他成员DeleteMapKeyIdHashTable相关小工具:
indexLibPrinter遇到的问题
(1)Mmap的得失天然的弱持久化方案利用系统pagecache管理数据局部性遇到的问题
(1)Mmap的得失天然的弱持久化方案利用系统pagecache管理数据局部性脏页回写不可控遇到的问题
(1)Mmap的得失天然的弱持久化方案利用系统pagecache管理数据局部性脏页回写不可控短期解决方案2.6.18内核:
flush_mmap_pages=0遇到的问题
(1)Mmap的得失天然的弱持久化方案利用系统pagecache管理数据局部性脏页回写不可控短期解决方案2.6.18内核:
flush_mmap_pages=0Pagecache换入换出不可控遇到的问题
(1)Mmap的得失天然的弱持久化方案利用系统pagecache管理数据局部性脏页回写不可控短期解决方案2.6.18内核:
flush_mmap_pages=0Pagecache换入换出不可控mlock:
不符合极端情况的异常处理需求遇到的问题
(1)Mmap的得失天然的弱持久化方案利用系统pagecache管理数据局部性脏页回写不可控短期解决方案2.6.18内核:
flush_mmap_pages=0Pagecache换入换出不可控mlock:
不符合极端情况的异常处理需求另外的解决方案:
使用shm替换mmap,主动控制持久化和故障恢复遇到的问题
(2)稳定性每天build全量的过程牵涉的系统太多太复杂故障恢复的能力需要加强解决方案:
索引重整+索引压缩遇到的问题
(2)稳定性每天build全量的过程牵涉的系统太多太复杂故障恢复的能力需要加强解决方案:
索引重整能力+索引压缩数据灵活性跟分布式build的结合批量更新能力下一步工作广告引擎设计时的各项指标优先级稳定性正确性灵活性问题定位能力性能下一步工作一期的新引擎还是很像搜索引擎dispatchersearchNodesearchNodesearchNodemerger下一步工作dispatchersearchNodesearchNodesearchNodemerger分布式引擎索引数据中心服务化的searchNode集群期望的广告引擎性能优化目标:
searchNode的单机qps优化,主要是cpu优化方法:
Perf热点分析代码优化业务层优化索引数据层优化Cpu资源利用最大化性能优化过程全量qps全量rt增量qps增量rtBASE71526msstrncpymemcpy109117ms增加结果初选178011msPartial_sort优化182311ms增加进程个数351521ms249130ms辅表数据平铺+bitFilter合并387919ms274327ms性能优化小结工具帮助理解分析性能瓶颈,但不要仅对热点进行代码优化推荐Intelvtune的top-down视图性能优化小结工具帮助理解分析性能瓶颈,但不要仅对热点进行优化推荐Intelvtune的top-down视图针对内核/硬件特性的优化需谨慎性能优化小结工具帮助理解分析性能瓶颈,但不要仅对热点进行优化推荐Intelvtune的top-down视图针对内核/硬件特性的优化需谨慎关注数据局部性和整体代码质量(CPI)性能优化小结工具帮助理解分析性能瓶颈,但不要仅对热点进行优化推荐Intelvtune的top-down视图针对内核/硬件特性的优化需谨慎关注数据局部性和整体代码质量(CPI)Cpu压不上去的几种原因:
并发压力不够网卡跑满/某个线程or进程的cpu跑满锁竞争strace+pstack+taskset+逐个调高并发数性能优化的下一步数据局部性:
全量数据重排小库化:
适应nehalem架构资源管理系统谢谢Q&A