文/腾讯soso 谢海劝
《阿凡达》全球首映,引起轰动,影迷需要对该影片进行全方位的了解,可能需要去腾讯网找资讯,去新浪网找新闻,去优酷网找相关视频,去百度图片找相关图片……,最后去保利电影院的网站定一张电影票。其实事情可以不用如此复杂,打开www.soso.com,输入“阿凡达”,点击“搜索”按钮,用户马上得到关于该影片的资讯、新闻、视频、图片、排档、影院、影评等信息。
如此简单的一个输入框+搜索按钮,却可以实现如此神奇的一站式搜索服务,为用户提供丰富、准确的信息,这要归功于一个强劲的后台引擎。用户可曾想过,这么简单的行为,后台引擎可能会有成千上万台机器在为你服务。搜索引擎就像一台高效运转的发动机,不停响应用户的请求,输出用户想要的信息。
搜索引擎技术,可以细分为爬取、索引、检索、排序等相关领域的技术。爬取负责从互联网下载网页信息;索引负责把网页信息建立顺排和倒排索引;检索负责从索引中,把用户查询相关的网页召回;而排序负责如何对检索召回的网页进行排序,给用户一个更相关的结果。
高效的检索系统需要提供亿级次每日的检索服务能力,在100ms左右从千亿级的海量网页中获取相关的数据,同时提供稳定、7*24小时的服务和高可靠的容错机制。这需要一个高性能、稳健的引擎作为支持,是一个充满挑战的技术领域。随着网页数量的急剧膨胀、新硬件技术的快速发展、WEB2.0等实时性网页的出现,检索技术必须不断发展,以适应这些变化。检索系统的一些关键技术如下文所述。
1.网页分类/分层技术
千亿级的海量网页,包含各个类别、各种质量的网页,可以说是内容丰富、鱼龙混杂。从时间的维度上讲,网页的更新频率千差万别,有些网页1分钟更新一次,有些网页从存在到死亡都不会更新;从质量上讲,有些网页是高质量的网页,有些质量很差,甚至属于垃圾,没有任何价值;从内容上讲,网页的信息包含的内容极其丰富,有新闻、图片、视频、音乐、博客、资讯、小说等等。搜索引擎需要研究如何对网页进行分类、分层,对不同类别的网页采用差异化的存储和处理,以保证在有限的硬件资源下,提供给用户一个高效的检索系统,同时提供给用户相关、丰富的检索结果。
2.检索算法
千亿级的海量数据、亿级的日服务能力、100ms搜索延迟、成千上万台服务机器,如此大规模的检索系统,必然要求有高效的检索算法支持,包括索引组织方法、召回算法、压缩解压算法、缓存算法、调度算法等等。
3.新硬件应用
新硬件的发展总是超乎想象,在可展望的未来,单服务器将迎来100核的时代,在多核时代,需要研究计算任务的分配和调度;GPU的出现,提供了数百倍于通用CPU的计算能力,研究适用于GPU架构的算法和数据结构,为未来高性能的计算提供可能;SSD的出现,解决了磁盘寻址和读写能力不足的硬伤,SSD提供数十倍于传统硬盘的IO能力,如何利用该设备,设计适合的存储方式和算法,成为一个新的研究方向。硬件发展日新月异,给我们带来了机遇,同时也带来挑战,检索系统必须从架构、数据存储、算法等各个方面,不断去适应新硬件的发展。
4.专用操作系统
通用的操作系统为了满足不同类型的应用,从而考虑一些固定、通用的策略,然而,并不是所有的应用都能很好的适应这种策略,因此,通用性往往会导致应用性能的降低。为了提供更高效的检索服务,需要对通用操作系统的策略做调整,以满足特殊应用的需求。这种调整包括线程调度、内存管理、缓存、IO、网络通信等策略。
5.实时检索技术
互联网的发展,已经打破了传统媒体批量累积、定时出版的模式,用户对信息获取的实时性要求越来越高,甚至很苛刻。用户不再满足今天发生的事情,明天才能知道,而会要求知道1分钟之前发生的事情。WEB2.0、微博、突发事件等因素使得互联网时时刻刻存在实时性的网页。用户的主观要求和信息的客观存在对搜索引擎处理实时数据的要求越来越高,需要一种特殊的爬取、索引、检索技术,以支持对实时数据的处理。
6.架构与分布式存储和计算平台上的检索系统
传统的单机存储和计算资源调度方式,在驾驭海量数据存储和海量计算过程中,存在明显的短板,越来越感觉到心有余而力不足,主要体现在以下几个方面:
(1)数据容灾:磁盘故障是最频繁发生的硬件故障之一,这导致存放在磁盘上的数据,永远处于不安全的状态;
(2)资源的调度和利用:直接面对用户的互联网服务,流量的分布是一条有波峰和波谷的曲线,而系统设计的容量要保证峰值时的服务质量,这就导致在系统闲时大量资源的浪费,据统计,互联网业务的机器资源使用率在20%左右,甚至更低,搜索引擎面对海量的数据和海量计算,需要大量的机器资源,这种浪费更加明显;
(3)故障恢复:面对时刻存在的硬件故障,人工恢复的方式低效并且容易出错,更大的问题是浪费了大量的人力。可以想象一下,有几万台机器的检索系统,如果所有故障都由工程师来人工处理,工程师一定会忙得焦头烂额。
正是由于这些原因,分布式存储和分布式计算平台成为一种必须的趋势,这样的一个分布式平台一般包含以下几个系统:
(1)分布式文件系统;
(2)分布式海量数据管理系统;
(3)分布式计算系统;
(4)分布式资源调度系统;
(5)分布式传输系统。
架构于分布式平台上的检索系统,可以实现高效计算、资源充分利用、可靠存储、自适应容错、高可扩展性、自动驾驶。
7.全方位监控技术
检索系统需要提供7*24小时的不间断服务,我们面临了诸多的挑战:
(1)复杂的网络环境:电信网、联通网、移动网、校园网……,这就是中国特色的网络结构,也是我们必须面对的现实,如此复杂的网络结构,意味着网络故障发生的概率会很高;
(2)单点故障:机器故障是家常便饭,特别在一个包含几万台机器的系统,现实情况是:如果有一天不发生机器故障,工程师心里肯定会不踏实;
(3)操作系统故障:虽然目前linux操作系统的稳定性有一定的保证,但在机器时刻满负荷运转的情况下,谁能保证操作系统一定不会打盹呢?
(4)应用层故障:检索系统由几十个服务共同组成,哪一个工程师可以保证自己的代码不会出问题呢!
从网络、硬件、操作系统到应用的各种故障,使得我们的系统可能时刻处于不健康的状态中。必现的故障并不可怕,可怕的是故障只是概率性的发生,当你想去看看怎么回事时,故障已经不出现,这个时候,你一定会无所适从,有大型系统开发经验的工程师对这个应该深有体会。因此,对我们的开发和运营工程师来说,系统不应该是一个“黑盒子”,而应该是一个“水晶球”。为了做到这一点,我们必须对网络、硬件、操作系统、应用的各种状态进行全方位的监控,采集各种监控数据,从而进行:
(1)故障的告警:我们不能保证故障不发生,但一定要保证故障发生时得到及时的处理,对于可以自动处理的故障,采用自动恢复机制,否则,必须告警,人工处理;
(2)系统诊断:监控数据就像系统的健康档案,可以通过数据分析和挖掘,发现系统的问题,以及问题的原因;
(3)运营数据生成:通过对监控数据的统计,生成各种运营数据,从而体现系统服务的情况以及业务的发展情况;
(4)反向控制:通过对监控数据的分析和挖掘,自动发现系统存在的问题,从而自动对系统进行自动控制,当然,这个要非常小心谨慎,控制不当,会造成服务的不稳定。
总之,通过全方位的监控技术,我们希望做到系统是完全透明、可解释的,从而保证服务的质量。
8.相关性实验平台
相关性调优是一个不断尝试和实验的过程,主要从因子的加入和策略的调整两个方面进行实验,而这些实验必须以检索系统为载体。传统的“对比系统”方法存在两个主要问题:
(1)效率低:每一次小的实验,可能需要经过代码修改、编译、发布、系统搭建、实验、分析等步骤,这会耗费工程师很多的精力,效率低下,同时,如果多人进行实验,实验环境冲突的问题导致没有办法并行开展;
(2)资源占用多:每一个新的实验都需要搭建一套对比系统,如果实验很多,机器的资源根本不可接受。
为了支持相关性的不断调优,需要研发一个新的实验平台,支持A/B TEST的模式,以达到高效、廉价、多任务、多用户的目标。
上述主要对检索系统的关键技术进行了概述,后续会有针对性的进行展开介绍。