SFE概述和目的
SFE(Sonew Front End)是在线系统的前端服务器,基于Apache模块来开发,它接收Web的查询请求,去SOLR系统取得和查询最相关的UID, 再去Desc DB 取得这些UID的描述信息,最后返回搜索的XML结果给Web前端。
Online总体结构
SFE模块划分
按功能将SFE划分成以上模块
QueryParse:负责Query的解析分词,SFE支持参数的处理
Client: 负责连接需要的后台服务,取得服务结果
Description: 负责连接HBase取得具体的描述,动态摘要,飘红等处理
Mixing:负责小产品之间的结果混合
SonewEngine:核心处理模块,负责调用其他模块,XML结果输出
AsyncClient架构
每个Cliet都是一个有限状态机,每个状态(SN)都对应一个处理函数(FN), 在处理函数中实现状态的转移
ClientMgr相当于一个容器,它遍历其中的所有Client,执行每个Client的处理函数(根据其状态),执行对每个Client的状态转移,直到所有的Client都在终结状态(DONE或FAIL)
Client可以嵌套其他的Client,实现复杂的处理
每个client必须定义所有的状态和对应的转换函数
每个转换函数必须被定义成如:int FUNC(FPMessage*)
转换函数用来推进client的状态
例:
setStatFunc(s1, this, &Client::func);
Client为该对象或者它的父类
例:PubNote流程
客户端类关系
ASolrClient状态与转换函数
setStatFunc(ASCS_START, this, &ASolrClient::start);
setStatFunc(ASCS_READ, this, &ASolrClient::read);
setStatus(ASCS_START);
APubNoteClient状态与转换函数
setStatFunc(ASCS_START, this, &APubNoteClient::start);
setStatFunc(DESC, this, &ACommonClient::retr_descs);
setStatFunc(WAIT_DESC, this,&ACommonClient::wait_descs); setStatus(ASCS_START);
ACommonClient状态与转换函数
setStatFunc(ASCS_START, this, &ACommonClient::start);
setStatFunc(DESC, this, &ACommonClient::retr_descs);
setStatFunc(WAIT_DESC, this, &ACommonClient::wait_descs);
setStatus(ASCS_START);
ADescClient状态与转换函数
setStatFunc(ASCS_START, this, &ADescClient::start);
setStatFunc(ASCS_READ, this, &ADescClient::read);
setStatus(ASCS_START);
流程图地址:
http://r.photo.store.qq.com/psb?/V12VvuOZ4bHLE3/B.5fbZp6QX9oEvE*.gcNMNt1INU0PF0UAr5Z3mj6xcQ!/r/dCwAAAAAAAAA