• 亿级数据的高并发通用搜索引擎架构设计


    最新的搜索引擎架构,目前已经写出“搜索查询接口”和“索引更新接口”的beta版。经测试,在一台“奔腾四 3.6GHz 双核CPU、2GB内存”的普通PC机,7000万条索引记录的条件下,“搜索查询接口”平均查询速度为0.0XX秒(查询速度已经达到百度、谷歌、搜狗、中国雅虎等搜索引擎的水平,详见文章末尾的“附2”),并且能够支撑高达5000的并发连接;而“索引更新接口”进行数据分析、入队列、返回信息给用户的全过程,高达1500 Requests/Sec。
          “队列控制器”这一部分是核心,它要控制队列读取,更新MySQL主表与增量表,更新搜索引擎数据存储层Tokyo Tyrant,准实时(1分钟内)完成更新Sphinx增量索引,定期合并Sphinx索引。我预计在这周写出beta版。

      图示说明:
      1、搜索查询接口:
      ①、Web应用服务器通过HTTP POST/GET方式,将搜索关键字等条件,传递给搜索引擎服务器的search.php接口;
      ②③、search.php通过Sphinx的API(我根据最新的Sphinx 0.9.9-rc1 API,改写了一个C语言的PHP扩展sphinx.so),查询Sphinx索引服务,取得满足查询条件的搜索引擎唯一ID(15位搜索唯一ID:前5位类别ID+后10位原数据表主键ID)列表;
      ④⑤、search.php将这些ID号作为key,通过Memcache协议一次性从Tokyo Tyrant中mget取回ID号对应的文本数据。
      ⑥⑦、search.php将搜索结果集,按查询条件,进行摘要和关键字高亮显示处理,以JSON格式或XML格式返回给Web应用服务器。

      2、索引更新接口:
      ⑴、Web应用服务器通过HTTP POST/GET方式,将要增加、删除、更新的内容告知搜索服务器的update.php接口;
      ⑵、update.php将接收到的信息处理后,写入TT高速队列(我基于Tokyo Tyrant做的一个队列系统);
      注:这两步的速度可达到1500次请求/秒以上,可应对6000万PV的搜索索引更新调用。

      3、搜索索引与数据存储控制:
      ㈠、“队列控制器”守护进程从TT高速队列中循环读取信息(每次50条,直到末尾);
      ㈡、“队列控制器”将读取出的信息写入搜索引擎数据存储层Tokyo Tyrant;
      ㈢、“队列控制器”将读取出的信息异步写入MySQL主表(这张主表按500万条记录进行分区,仅作为数据永久性备份用);
      ㈣、“队列控制器”将读取出的信息写入MySQL增量表;
      ㈤、“队列控制器”在1分钟内,触发Sphinx更新增量索引,Sphinx的indexer会将MySQL增量表作为数据源,建立增量索引。Sphinx的增量索引和作为数据源的MySQL增量表成对应关系;
      ㈥、“队列控制器”每间隔3小时,短暂停止从TT高速队列中读取信息,并触发Sphinx将增量索引合并入主索引(这个过程非常快),同时清空MySQL增量表(保证了MySQL增量表的记录数始终只有几千条至几十万条,大大加快Sphinx增量索引更新速度),然后恢复从TT高速队列中取出数据,写入MySQL增量表。

      本架构使用的开源软件:
      1、Sphinx 0.9.9-rc1
      2、Tokyo Tyrant 1.1.9
      3、MySQL 5.1.30
      4、Nginx 0.7.22
      5、PHP 5.2.6

      本架构自主研发的程序:
      1、搜索查询接口(search.php)
      2、索引更新接口(update.php)
      3、队列控制器
      4、Sphinx 0.9.9-rc1 API的PHP扩展(sphinx.so)
      5、基于Tokyo Tyrant的高速队列系统

  • 相关阅读:
    jQuery UI (7)Autocomplete 自动补全插件
    jQuery UI (6)Accodion 可折叠面板插件
    jQuery UI (5)Sortable 排序插件
    jQuery UI (4)Jquery UI Selectable 选择插件
    jQuery UI (3)Resiable 调整大小插件
    jQuery UI (2)Droppable 放置插件
    jQuery UI (1)Draggable 拖动插件
    C#(99):Lambda表达式
    C#(99):四种Timer的区别和用法
    C#(99):Reporting Service编程----访问Web服务
  • 原文地址:https://www.cnblogs.com/yixiaogo/p/12901659.html
Copyright © 2020-2023  润新知