SFE(Sonew Front End)详解

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

时间: 2024-10-03 23:02:34

SFE(Sonew Front End)详解的相关文章

Android触摸屏事件派发机制详解与源码分析二(ViewGroup篇)

1 背景 还记得前一篇<Android触摸屏事件派发机制详解与源码分析一(View篇)>中关于透过源码继续进阶实例验证模块中存在的点击Button却触发了LinearLayout的事件疑惑吗?当时说了,在那一篇咱们只讨论View的触摸事件派发机制,这个疑惑留在了这一篇解释,也就是ViewGroup的事件派发机制. PS:阅读本篇前建议先查看前一篇<Android触摸屏事件派发机制详解与源码分析一(View篇)>,这一篇承接上一篇. 关于View与ViewGroup的区别在前一篇的A

支撑5亿用户、1.5亿活跃用户的Twitter最新架构详解及相关实现

如果你对项目管理.系统架构有兴趣,请加微信订阅号"softjg",加入这个PM.架构师的大家庭 摘要:Twitter出道之初只是个奋斗在RoR上的小站点,而如今已拥有1.5亿的活跃用户,系统日传输tweet更多达4亿条,并已完成了以服务为核心的系统架构蜕变. Twitter如今在世界范围内已拥有1.5亿的活跃用户,为了给用户生成timeline(时间轴)需支撑30万QPS,其firehose每秒同样生成22MB数据.整个系统每天传输tweet 4亿条,并且只需要5分钟就可以让一条twe

Python数据类型及其方法详解

Python数据类型及其方法详解 我们在学习编程语言的时候,都会遇到数据类型,这种看着很基础也不显眼的东西,却是很重要,本文介绍了python的数据类型,并就每种数据类型的方法作出了详细的描述,可供知识回顾. 一.整型和长整型 整型:数据是不包含小数部分的数值型数据,比如我们所说的1.2.3.4.122,其type为"int" 长整型:也是一种数字型数据,但是一般数字很大,其type为"long" 在python2中区分整型和长整型,在32位的机器上,取值范围是-2

Xen虚拟化基本原理详解

标签:虚拟化 xen 原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 .作者信息和本声明.否则将追究法律责任.http://wangzan18.blog.51cto.com/8021085/1727106 查看虚拟化技术详解请点击 一.Xen概述 Xen是由剑桥大学计算机实验室开发的一个开源项目.是一个直接运行在计算机硬件之上的用以替代操作系统的软件层,它能够在计算机硬件上并发的运行多个客户操作系统(Guest OS).目前已经在开源社区中得到了极大的推动. Xen支持x86.x

boost asio异步读写网络聊天程序客户端 实例详解

// // chat_client.cpp // ~~~~~~~~~~~~~~~ // // Copyright (c) 2003-2013 Christopher M. Kohlhoff (chris at kohlhoff dot com) // // Distributed under the Boost Software License, Version 1.0. (See accompanying // file LICENSE_1_0.txt or copy at http://ww

POSIX 线程详解(2-线程创建和销毁)

算法旨在用尽可能简单的思路解决问题,理解算法也应该是一个越看越简单的过程,当你看到算法里的一串概念,或者一大坨代码,第一感觉是复杂,此时不妨从例子入手,通过一个简单的例子,并编程实现,这个过程其实就可以理解清楚算法里的最重要的思想,之后扩展,对算法的引理或者更复杂的情况,对算法进行改进.最后,再考虑时间和空间复杂度的问题. 了解这个算法是源于在Network Alignment问题中,图论算法用得比较多,而对于alignment,特别是pairwise alignment, 又经常遇到maxim

C++:vector的用法详解(转载)

原文地址:http://blog.csdn.net/hancunai0017/article/details/7032383 vector(向量): C++中的一种数据结构,确切的说是一个类.它相当于一个动态的数组,当程序员无法知道自己需要的数组的规模多大时,用其来解决问题可以达到最大节约空间的目的. 用法: 1.文件包含: 首先在程序开头处加上#include<vector>以包含所需要的类文件vector 还有一定要加上using namespace std; 2.变量声明: 2.1 例:

C++ list容器系列功能函数详解

C++ list函数详解 首先说下eclipse工具下怎样debug:方法:你先要设置好断点,然后以Debug方式启动你的应用程序,不要用run的方式,当程序运行到你的断点位置时就会停住,也会提示你进入到Debug视图方式操作,F5是进入到函数或语句块的内部,F6是单步运行,一行一行的走,F7可以跳当前监听函数或语句块F8 会直接跳到下个断点. 下面进入主题: 一.构造.析构函数.= 运算符 1.功能:声明list容器.4种方式 list<int> first;                

elasticsearch中api详解

一.cluster API详解 1.cluster health(获取集群的状态) 集群状态: green:绿色表示所有的碎片都被分配 yellow:黄色表示主碎片被分配,但副本不是     red:表示特定的碎片没有在集群中分配 请求参数 level: cluster,indices,shards wait_for_status: green,yellow,red [[email protected] ~]# curl -XGET 'http://10.2.11.225:9200/_clust