kingso_intro - Taocode

KINGSO介绍

KINGSO是一种高效的垂直化的搜索引擎,其包含query解析、检索、过滤、统计、排序功能,不包含抓取部分。它对商品搜索做了针对性的优化,目前在淘宝的多个应用中使用。

系统架构

如下是KINGSO的整体架构图:

*蓝色的部分负责查询功能

*黄色的部分负责建库功能

*绿色的部分负责更新功能

*红色的部分负责集群管理、负载均衡、容错

查询流程

1、前端将查询请求以URL的形式发送给Merger Server

2、Merger Server对查询请求进行一定的转换改写之后(例如分词等),发送给多个Searcher

3、收到请求的Searcher进行检索、过滤、统计、排序后,将结果返回给merger

4、merger汇总各个Searcher返回的结果,进行一系列处理后(归并排序),生成获取展示信息的请求

5、将请求发送给给Detail集群

6、Detail经过一定的处理(主要是取字段和高亮显示),把显示所需信息返回给Merger

7、Merger合并最终的展示信息返回给前端

全量建库

全量建库是指在离线状态下,解析原始数据(xml格式),生成在线查询中所需要的索引文件及信息文件

全量建库流程如下:

1、读取并解析原始数据文件(xml格式)

2、根据配置文件,分别处理不同字段,生成倒排、正排、信息数据中间文件

3、根据各种中间文件,建立最终的倒排索引、正排索引、信息

增量更新

增量更新是指在线状态下,接收并解析更新数据(xml格式),根据更新数据修改索引文件及信息文件

增量更新流程如下:

1、将增量消息通过网络传送给dispatcher

2、dispatcher根据NID(文档的唯一标识)的hash值转交给某一个builder处理

3、builder主线程解析这条消息,做归一化,编码,分词等操作。然后将消息push到文件队列

4、builder发送线程读取文件队列内容,发起对某列所有detail进程的更新。一个线程对应一个detail

5、builder发送线程读取文件队列内容,发起对某列所有searcher进程的更新。一个线程对应一个Searcher

集群管理

KINGSO的集群管理模块是使用clustermap,它的主要功能是:管理merger集群、search集群和detail集群,能够检测到集群节点的上下线,负载情况,使整个集群能够高容错、高效率的提供查询服务

clustermap与各个服务(merger、searcher、detail)是通过四种报文进行交互的:

*注册报文:

每个服务节点都需要先发送注册报文给clustermap,告知自身的存在

*心跳报文

每个服务节点通过发送心跳报文给clustermap,报告健康状态

*订阅报文

只有merger等上游节点,才需要使用订阅报文,来向clustermap订阅其下游节点的状态信息

*通知报文

由clustermap发送给订阅的服务节点,通知其下游节点的状态变更

服务框架

KINGSO的各种服务角色(merger、searcher、detail)都是使用同一种服务框架framework

该框架使用了异步通信模式,并通过剥离业务逻辑,使之具有良好的通用性

framework架构图如下:

服务流程:

1、用户发出查询请求

2、Service(anet回调类)处理查询请求,并根据请求内容生成session对象,放入任务队列taskQueue中

3、Dispatcher从任务队列中获取session,生成相应的Worker对象,调度给线程池中的线程去执行Worker

4、Worker进行应用逻辑相关的处理,返回应答信息给anet

5、Anet负责把应答信息返回给用户

单机模式

有些应用场景,索引数据量不大,负载压力较低,一台服务器即可支持

KINGSO针对这种情况,提供了单机模式,即一个searcher服务即可完成整个查询流程

单机模式:

查询流程:

用户发出查询请求

1、Service(anet回调类)处理查询请求,并根据请求内容生成session对象,放入任务队列taskQueue中

2、Dispatcher从任务队列中获取session,生成相应的Worker对象,调度给线程池中的线程去执行Worker

3、Worker调用QueryParser模块,解析查询请求

4、Worker调用Search/Filter模块,对索引数据进行检索、过滤

5、Worker调用Statistic模块,对检索后的结果进行统计

6、Worker调用Sort模块,对检索后的结果进行算分、排序

7、Worker调用detail模块,获取目标文档信息

8、Worker对待展示信息进行格式化(目前支持xml及protobuf格式)

9、Anet负责把最终展示信息返回给用户

附件

taiyi

|
2013-07-04 15:14:12
|

framework.jpg

|

35.5 KB

taiyi

|
2013-07-04 15:13:58
|

single.jpg

|

37.8 KB

taiyi

|
2013-07-04 15:12:45
|

architecture.jpg

|

32.5 KB

taiyi

|
2012-08-23 11:20:05
|

架构图.jpg

|

32.5 KB

taiyi

|
2012-08-23 11:20:05
|

服务框架.jpg

|

35.5 KB

taiyi

|
2012-08-23 11:20:05
|

单机模式.jpg

|

37.8 KB

KINGSO介绍的更多相关文章

  1. CSS3 background-image背景图片相关介绍

    这里将会介绍如何通过background-image设置背景图片,以及背景图片的平铺.拉伸.偏移.设置大小等操作. 1. 背景图片样式分类 CSS中设置元素背景图片及其背景图片样式的属性主要以下几个: ...

  2. MySQL高级知识- MySQL的架构介绍

    [TOC] 1.MySQL 简介 概述 MySQL是一个关系型数据库管理系统,由瑞典MySQL AB公司开发,目前属于Oracle公司. MySQL是一种关联数据库管理系统,将数据保存在不同的表中,而 ...

  3. Windows Server 2012 NIC Teaming介绍及注意事项

    Windows Server 2012 NIC Teaming介绍及注意事项 转载自:http://www.it165.net/os/html/201303/4799.html Windows Ser ...

  4. Linux下服务器端开发流程及相关工具介绍(C++)

    去年刚毕业来公司后,做为新人,发现很多东西都没有文档,各种工具和地址都是口口相传的,而且很多时候都是不知道有哪些工具可以使用,所以当时就想把自己接触到的这些东西记录下来,为后来者提供参考,相当于一个路 ...

  5. JavaScript var关键字、变量的状态、异常处理、命名规范等介绍

    本篇主要介绍var关键字.变量的undefined和null状态.异常处理.命名规范. 目录 1. var 关键字:介绍var关键字的使用. 2. 变量的状态:介绍变量的未定义.已定义未赋值.已定义已 ...

  6. HTML DOM 介绍

    本篇主要介绍DOM内容.DOM 节点.节点属性以及获取HTML元素的方法. 目录 1. 介绍 DOM:介绍DOM,以及对DOM分类和功能的说明. 2. DOM 节点:介绍DOM节点分类和节点层次. 3 ...

  7. HTML 事件(一) 事件的介绍

    本篇主要介绍HTML中的事件知识:事件相关术语.DOM事件规范.事件对象. 其他事件文章 1. HTML 事件(一) 事件的介绍 2. HTML 事件(二) 事件的注册与注销 3. HTML 事件(三 ...

  8. HTML5 介绍

    本篇主要介绍HTML5规范的内容和页面上的架构变动. 目录 1. HTML5介绍 1.1 介绍 1.2 内容 1.3 浏览器支持情况 2. 创建HTML5页面 2.1 <!DOCTYPE> ...

  9. ExtJS 4.2 介绍

    本篇介绍ExtJS相关知识,是以ExtJS4.2.1版本为基础进行说明,包括:ExtJS的特点.MVC模式.4.2.1GPL版本资源的下载和说明以及4种主题的演示. 目录 1. 介绍 1.1 说明 1 ...

随机推荐

  1. CTreeCtrl 控件使用总结

    一 基础操作  1 插入节点 1)插入根节点 [cpp] view plaincopy //插入根节点 HTREEITEM hRoot; CString str=L"ROOT" h ...

  2. 初探swift语言的学习—Object-C与Swift混编

    swift 语言出来后,可能新的项目直接使用swift来开发,但可能在过程中会遇到一些情况,某些已用OC写好的类或封装好的模块,不想再在swift 中再写一次,哪就使用混编.这个在IOS8中是允许的. ...

  3. Extending your SharePoint 2007 site with Microsoft ASP.NET AJAX 3.5

    After ASP.NET 3.5 has been installed you need to modify the web.config file of your MOSS web site wi ...

  4. 阿里云部署 Flask + WSGI + Nginx 详解

    抵不住朋友的诱惑,今天终于入手了一台阿里云服务器,是Ubuntu 1.4 32位版本,最初考虑是用来尝尝鲜只是买了个最低配的,价格算起来与在国外买个空间的价格相当吧(可能一年才贵100多),但用起来感 ...

  5. cookie保存分页参数

    <script src="../Public/js/jquery.cookie.js"></script> <script type="te ...

  6. java 抽象类与接口的区别 整理

    抽象类与接口的区别 抽象类 包含抽象方法的类就是抽象类,声明的语句:abstract class 必须是public protected 接口 对行为的抽象,声明语句:interface 抽象方法的修 ...

  7. springMVC + mybatis 搜索 分页等

    mybatis-3.0.5spring-core-3.2.0.RELEASE等MyBatis3+Spring3当前Spring版本(3.0.5)中未提供对MyBatis3的支持使用第三方jar包进行整 ...

  8. spring bean管理 笔记1

    轻量级,无侵入 Bean管理 1 创建applicationContext.xml 2 配置被管理的Bean 3 获取Bean pom.xml配置 <dependency> <gro ...

  9. HDU p1294 Rooted Trees Problem 解题报告

    http://www.cnblogs.com/keam37/p/3639294.html keam所有 转载请注明出处 Problem Description Give you two definit ...

  10. IT第十一天、第十二天、第十三天 - 数组的应用、飞行棋游戏的编写和总结

    NIIT第十一天 上午 多维数组 1.数组是引用数据类型 排序 1.冒泡排序法 2.类冒泡排序法 下午 飞行棋游戏 1.项目策划 2.项目规则确认 3.项目模块确认 晚上 1.飞行棋游戏,项目框架的编 ...