百度技术沙龙第 28 期回顾:如何测试你的搜索引擎(含资料下载)

  • 贾国清

2012 年 7 月 16 日

话题:百度DevOps语言 & 开发架构

在 7 月 14 日由 @百度 主办、 @InfoQ 负责策划组织和实施的第 28 期百度技术沙龙活动上,来自百度高级工程师,线下百度负责人杨进,搜狗搜索事业部测试部经理,搜索测试负责人冯刚分别分享了关于搜索引擎系统的测试方法、常见问题以及相关的案例,话题涉及“大型搜索引擎的系统测试方法及案例分享”,以及“搜索引擎测试常见问题及有趣的缺陷”等。本文将对他们各自的分享做下简单的回顾,同时提供相关资料的下载。

主题一:大型搜索引擎的系统测试方法及案例分享微盘下载讲稿

来自百度高级工程师,线下百度负责人杨进第一个为大家分享,内容主要包括搜索引擎特点和测试挑战、沙盒、线下 PS 以及未来的发展方向这几部分,区别于其他互联网产品,搜索引擎主要充当着互联网入口的角色,无论在从数据和机器规模,还是并发数和响应速度上都有着较大的数量级,同时,这也意味着搜索引擎遇到的网络异常和攻击是其他产品所无法想象的,杨进提到:

系统中隐患爆发的可能性和规模的平方成正比。

早期的搜索引擎测试主要以模块和性能测试为主,遇到的挑战主要集中在以下几点:

  • 上线单
  • 异常处理
  • 多线程、分布式调度
  • 典型、异常数据
  • 相互影响的策略

沙盒一般是线上环境的成比例缩放,主要涉及用例、维护和环境三要素,用例主要包含日志监控、数据排查和监控报表;维护主要是指排队系统、自动部署和系统监控;环境包含模块组成、部署拓扑和数据规模等考量。在使用过程中发现,沙盒同样也遇到了一些困惑,比如在跨子系统接口和沙盒自身稳定性以及基础架构上都遇到了一些挑战,为了解决这一情况,百度推出了一套自己的线下 PS 系统,核心目的是在项目上线前,先进行一次接近生产环境的模拟(预上线),预上线的对象除程序外还包括紧急升级、数据上线、基础架构、OS。其核心测试能力主要体现在以下几点:

  • 环境仿真
    • 搭建完整 PS 系统,并完善对外接口
    • 增加机器规模
    • 线上运维人员使用和运维整个环境
  • 场景驱动
    • 覆盖线上主要场景
    • 测试数据多样化,分成背景随机数据、异常数据、业务监控数据等
    • 注入线上常见故障
  • 监控安全
    • 部署全部线上监控 +QA 系统测试监控和用例

通过这种方式,在半年时间内完成了预上线 722 次,发现问题 150 个,线上问题减少 1/3,新增监控 500 个,监控项多达 3000 多个。最后,杨进还分享了效果监控、业务集成测试等内容,并介绍了质量防护网的组成等内容。

主题二:搜索引擎测试常见问题及有趣的缺陷微盘下载讲稿

搜狗搜索事业部测试部经理,搜索测试负责人冯刚第二个为大家分享,话题主要涉及搜索引擎常见问题(网络连接与容灾、协议容错与兼容、内存使用与线程安全)和有趣 Bug 分享。搜索引擎也同样会遇到内存使用和线程安全的问题:

  • 错误使用
    • 未申请成功就使用
    • 未初始化就使用,缺省值真的不一定为 0
  • 内存泄露
    • 容错分支最易漏
    • 内存碎片
  • 内存越界
    • 静态数组越界
    • 指针移动越界
    • 真的不一定 core
  • 释放了还用
    • Double free
    • Free 后没有将指针置为 NULL,产生野指针
    • Return 了指向“栈内存”的指针或引用,该内存在函数体结束时被自动销毁

在最后,冯刚还分享了一些有趣的 bug:性能测试压力不是越大越好,nagle 算法导致的性能问题,nagle 算法会与 TCP 的延迟确认机制发生冲突,测试前建议使用套接字 TCP_NODELAY 选项关闭 nagle;字符串不能乱做加法,在使用 strcpy 时,字符串错误的被截断后计算 hash,会导致 hash 的 key 严重冲突,由此导致有可能会加出\0;

Open Space(开放式讨论环节)

为了促进参会者与我们每期的嘉宾以及讲师近距离交流,深入探讨在演讲过程中的疑问,本次活动依然设置了 Open ​Space(开放式讨论)环节。除了讲师杨进、冯刚外,《这就是搜索引擎作者》张俊林、一淘网测试架构师公直 _ 黄利,以及乐视网 CTO 曹坤波也参与了小组讨论。在 Open Space 的总结环节,几位话题小组长​分别对讨论的内容进行了总结。

杨进:主要讨论了测试环境的运作机制和监控机制相关的话题。

冯刚:主要讨论了自动化测试的流程、具体分工等问题。

公直 _ 黄利:主要讨论了测试框架、工具和平台的相关话题。重点讨论了为什么要自己开发工具:不适应当前的业务需求、易用性上的考量、学习成本高、需要结合多个工具、功能太全、资金和版权问题、现有工具缺少一些功能、新工具使用调研需要一定成本、技术体系、人员培养和需求、团队的宣传、领导的个人喜爱、兼容性、稳定性、扩展性以及维护成本的考虑。

张俊林:主要讨论了实时搜索和传统搜索的区别、特点以及基于内容和行为分析的算法的一些应用。

曹坤波:主要同大家讨论了从视频上传到搜素以及整个生命周期的管理,还谈到了用户 query 的解析以及后续通过对用户搜索行为的分析,最终提升用户体验的一些技术实践。

会后,一些参会者也通过新浪微博分享了他们的参会感受:​​

@锐刃 -flint:冯老师讲的很实在,经验的积累。

@Build2011# 百度技术沙龙 #杨大侠讲的真好。不仅仅是搜索引擎测试。还包括百度测试的模式。也提到我们服务上线遇到的问题。赞一个。

公直 _ 黄利:下次找个机会专门分享下关于测试框架与工具设计吧,今天 Open Space 环节时间太短了。发现 tcpcopy 的作者@wangbin579 也在现场就一起拉到我们组讨论了,好巧 。

钱钤# 百度技术沙龙 # 搜索引擎测试对网络技术知识与数据结构、操作系统等计算机基本功要求较高,有挑战性,再别说测试没有技术含量了。测试工作也可变得有独创性具备想象力。

Hou 金轩# 百度技术沙龙 #协议的兼容升级确实是个很头痛的问题,但是编码之前确实很难预测到协议的变化,并且也不是对所有的客户端都有时间和精力做到兼容。做搜索引擎可能还好些,毕竟网络协议已经很稳定升级变动不大。不过当然考虑的越全面对用户体验越好了。

淘朱藻:testing in production, 在听百度技术沙龙,这个想法不错。

Smile 薇 __# 百度技术沙龙 #第一次参加,果然很好,都是技术牛人,想想我们银行做测试用的工具和思路,真的是比较落后了,不过木有办法,求稳,对银行来说,最稳定的才是最好的。

harry 小淫既天才# 百度技术沙龙 #冯刚师兄讲的搜索引擎遇到的网络异常让人大开眼界。

腾腾的小菠萝# 百度技术沙龙 # 事前测试,事中监控,事后总结,多方面立体提高 QA 工作的效率和质量。

lovely 心若冰清 2010@百度技术沙龙 服务器端与客户端连接状态的重点监控。lr 无可用端口,爆出。查看 tcp 协议状态。

有关百度技术沙龙的更多信息,可以通过新浪微博关注@百度技术沙龙,或者加入百度技术沙龙微群,InfoQ 上也总结了过往 26 期所有百度技术沙龙的演讲视频和资料等,感兴趣的读者可以直接浏览阅读

特别提示:第 29 期百度技术沙龙将在 8 月 18 日,北京举行,欢迎关注@InfoQ@百度技术沙龙 获取后续的活动信息。

百度DevOps语言 & 开发架构