- 浏览: 150623 次
- 性别:
- 来自: 北京
文章分类
- 全部博客 (69)
- Maven (1)
- lucene (22)
- bobo zoie (6)
- eclipse (5)
- Nexus (1)
- Git (1)
- trac (1)
- RMI (2)
- svn (0)
- Protocol buffer (0)
- sensei (6)
- JMX (2)
- Faceted search (1)
- Linux (1)
- Cassandra (1)
- Zookeeper (3)
- zoie (1)
- jmap (1)
- mongodb (2)
- 百度百科 (2)
- 词库 (2)
- 抓取 (2)
- IndexTank (1)
- LinkedIn (4)
- norbert (3)
- 分布式 (2)
- senseidb (2)
- Thrift (1)
- scala (1)
- 搜索引擎 (1)
- 质量 (1)
- Nosql (1)
- Jaccard (1)
- Mahout (1)
最新评论
-
bluky999:
@Mark
怎样量化评价搜索引擎的结果质量 -
baso4233:
非常感谢,我跑通了。途中出现了,java.lang.Unsup ...
norbert 高并发分布式服务例子 examples (二) -
yangsong158:
rabbit9898 写道xiansuanla 写道我运行 m ...
JMX 入门例子 -
rabbit9898:
xiansuanla 写道我运行 main方法以后 cmd 里 ...
JMX 入门例子 -
xiansuanla:
我运行 main方法以后 cmd 里面运行 jconsole ...
JMX 入门例子
看来自己很懒,发现前同事的sensei 研究了
转载:http://johnnychenjun.blog.163.com/blog/static/137493406201161163651879/
一、源码结构
首先,先从github将 sensei源码 取下。从整体代码结构上来看主要分为如下几类:
1. 提供多种index的提供数据的方式,主要在dataprovider下的几个包,及gateway下的几个包。
2. 提供client端调用的查询服务client及servlet,servlet下为提供包装搜索查询的servlet服务。
3. nodes下包含了在一个服务器上启动node入口类,senseibroker,以及一些本地配置类。
4. svc下的包顾名思义是sensei提供核心服务的类,如SenseiService。
5. req包下的为protobuf相关的消息转化的部分。
6. cluster 下提供了一些面向索引集群的负载均衡的实现。
二、 SenseiServer
基本了解代码结构后,可以从官方getting started 里面的内容来深入了解Sensei的运作原理: bin/sensei-client.sh client-conf 启动的是SenseiServer。
作为Server Node的入口类,main函数创建SenseiServerBuilder,该builder才真正建立一个jettyserver和senseiServer。
jettyServer其实是建立了一个web服务器,提供服务由SenseiHttpInvokerServiceServlet,DefaultSenseiJSONServlet来提供senseiservlet,初始化的时候从WebAppContext将相应的上下文设置上去,主要是跟sensei相关的配置文件被注入。
需要注意的是,上述Servlet在生成的时候延时加载的,刚开始看了半天没明白相关配置是如何加载进去的,最后在jettyServer.start()时WebAppContext里的相关配置才加载如servlet。
SenseiHttpInvokerServiceServlet 的功能实际由 ClusteredSenseiServiceImpl 提供,这个才是真正提供sensei查询服务的service。
这个ClusteredSenseiServiceImpl中的成员变量SenseiBroker 是做分布式query的broker,承担了loadbalance的调用和mergeresult的任务。
而SenseiServer中的成员_networkServer 才是提供本地node节点查询服务的NettyNetworkServer,这个NettyNetworkServer 注册了Message handler,来处理来自broker的请求。NettyNetworkServer是由norbert框架提供的,注册服务需要提供,inputmessage,outputmessage格式,及处理message的handler。本质是一个由CoreSenseiServiceImpl提供服务的SenseiCoreServiceMessageHandler。NettyNetworkServer其实是提供了通过protobuf来通讯,而CoreSenseiServiceImpl做target的服务。
至此,可能大家刚入sensei的也和我一样会产生一些概念上的疑惑,jettyServer/SenseiServer/_networkServer/clusterclient/等等,多种server和client会让人有点晕。其实理解起来主要是谁调用谁的问题,在sensei里面,存在着多种client/server的调用,如作为索引服务Server的node同样会是zookeeper的client,而jettyServer是一个http的Server来提供外部client的调用,同时该node作为senseibroker来调用另一个node的NettyNetworkServer的某shard的数据,则此时该node又变为其他Server的client。
NettyNetworkServer NettyNetworkClient分别代表着通过norbert进行调用的Server和client。
回到SenseiServer这个入口类,其中包含几个成员变量:
_networkServer 这个作为一个senseinode 提供网络服务的server
_serverNode 当前的servernode相关信息
_clusterClient 作为zookeeper的一个client来与zookeeper进行交互,如获取最新的节点变更
_innerSvc 提供sensei的核心服务的类
_externalSvc 一些扩展服务的类。
本来按照个人之前的解决搜索分布式的方案,自己实现的话,将可能采用更加熟悉的http方式的调用,但看到linkedin的这种方案,
之所以选用NettyNetworkServer 应该是linkedin考虑到提供高并发,低延时服务时的性能问题,选用了NIO的netty+protobuf来处理broker至一个node的服务请求。
下一章将详细介绍 Sensei的整个search的过程。
发表评论
-
[转载]sensei分布式实时搜索系统源码解析(三) 分布式index
2012-04-26 15:22 1106sensei分布式实时搜索系统源码解析(三) 分布式inde ... -
基于sensei+lucene的分布式搜索终于上线了-2012-12-08
2011-12-08 13:26 1649基于sensei+lucene的分布式搜索终于上线了 ... -
[转载] sensei分布式实时搜索系统源码解析(二) 分布式Search的流程
2011-07-22 14:57 1481看来自己很懒,发现前同事的sensei 研究了 转载: ht ... -
lucene分布式搜索sensei的使用及完善
2011-07-22 14:32 3552原创文章,转载请注明 ... -
LinkedIn 的分布式搜索sensei编译安装
2011-04-11 11:37 1791Sensei是LinkedIn的一个分布式搜索系统。安装步骤 ... -
转载:几种常见的基于Lucene的开源搜索解决方案对比
2011-04-06 14:38 1336一 直接使用 Lucene ( http://lucene ... -
转载: Apache Zookeeper入门1
2011-04-06 14:36 1907源: http://www.javabloger.com/ar ... -
转载:Lucene查询语法详解
2011-04-02 10:33 1109英文原文地址:http: ... -
各种字符串Hash函数比较
2011-02-12 14:54 4131Java自带的字符串hash函数: public ... -
Lucene MoreLikeThisQuery 例子 备注
2011-01-06 11:22 14571。 编码问题: MoreLikeThisQuery中的 ... -
Lucene MoreLikeThisQuery 例子
2011-01-04 13:42 2838要做一个跟文章标题相关的新闻,本来想简单做一下,就是把标 ... -
lucene 3.0 分词例子 转载
2010-12-27 17:30 1939源:http://hxraid.iteye.com/blog ... -
lucene基本概念
2010-12-03 15:51 1166一、lucene索引的建立 1 ... -
[转载] lucene使用与优化
2010-12-03 10:14 1061源:http://www.cnblogs.com/bysshi ... -
[转载] 几种常见的基于Lucene的开源搜索解决方案对比
2010-12-02 16:07 911源:http://blog.fulin.org/201 ... -
lucene中的Token, TokenStream, Tokenizer, Analyzer
2010-11-22 10:41 1357转载: Token: 如果一个字段被token化,这表示它经 ... -
Lucene3.0的几种分词系统
2010-11-17 17:25 12921、 StopAnalyzer StopAnalyze ... -
当前几个主要的Lucene中文分词器的比较
2010-11-17 12:35 13271. 基本介绍: paoding :Lucene中 ... -
lucene score explain 评分解释说明
2010-11-16 17:29 2269通过Searcher.explain(Query qu ... -
lucene 排序 (Sort SortField 构造函数)
2010-11-09 13:58 4123注意: 在lucene2.9中,排序的字段域必须inde ...
相关推荐
sensei, 分布式实时搜索数据库 什么是 Sensei( http://www.senseidb.com/ )Sensei是一个分布式的弹性实时搜索数据库。维基维基在以下位置可用:http://linkedin.jira.com/wiki/display/SENS
Sensei mac版,是一款系统性能优化及清理工具,提供了一些与硬件和软件相关的功能,例如超级易于使用的应用程序卸载程序,快速的磁盘清理程序,电池和存储驱动器的运行状况信息等等,帮助您优化,监控和清洁Mac,以...
Sensei.unitypackage
Sensei是一个高性能、可扩展的数据搜索引擎和分析框架,特别适用于大数据处理场景。版本1.6.0可能包含了一系列优化和增强,旨在提高索引效率和查询性能。 【描述】"Global Session Filter" 描述中提到的"global-...
- 提及了多种开源搜索引擎产品如Solr/SolrCloud、ElasticSearch、IndexTank、Sensei和云搜索服务如Amazon CloudSearch和阿里云搜索。 - 专门提到了淘宝的通用搜索产品TSearcher。 2. 网易通用搜索系统的实现 - ...
次电子噪声Skipper CCD实验仪器(SENSEI)使用最新开发的Skipper-CCD技术,从次GeV暗物质粒子与硅中... SENSEI是第一个致力于从暗物质中搜索电子反冲的实验,这些结果证明了Skipper-CCD技术在暗物质搜索中的强大作用。
赛睿SteelSeries Sensei游戏鼠标驱动程序,是赛睿鼠标的官方驱动程序,...Steelseries Sensei游戏鼠标拥有一个32位的ARM处理器,运算速度相当于英特尔公司于1994年发布的奔腾75 MHz处理器,用在鼠标上绝,欢迎下载体验
分布式文件系统 受GFS启发的分布式文件系统。 目录 系统应如何工作 用户PC上有一个客户端。 在远程服务器上也有一个Sensei服务器。 而且在不同的计算机上有很多文件服务器。 客户 CLI是否可以使用文件名称空间并获取...
1. **WordPress插件开发**:Sensei是WordPress生态系统的一部分,它扩展了平台的功能,使得用户无需编程知识也能创建在线课程,管理学生,以及设置考试和作业。 2. **在线教育平台**:Sensei提供了创建课程、章节、...
下一代Mac性能工具 绩效仪表板 ...SSD修剪启动器 口音颜色支持 磁盘运行状况分析器 磁盘基准 电池健康分析仪 多种本地化 磁盘监控器 暗模式 启动速度优化器 分区图资源管理器 GPU固件导出器
但是,我们确实要求,如果您在实时网站上使用该插件,请从该网站购买有效的许可证。 我们无法为没有有效许可证密钥的任何人提供支持或一键式更新。 建筑 Sensei LMS结构模型可以分为几个部分。 这些组件在当前版本...
### 墨鱼AI导航源码解析与应用 #### 一、系统概述 近年来,随着人工智能技术的迅猛发展,各种AI应用层出不穷,为人们的工作生活带来了极大的便利。在这个背景下,“墨鱼AI导航”应运而生,它不仅是一款集成了众多...
Sensei是为前端React开发人员构建的UI组件库。 主要重点是快速创建干净的响应式仪表板! 安装 Sensei依赖于整个应用程序被包装在带有单个主题道具的SenseiProvider组件中。 1.安装react-sensei Sensei现在可以通过...
Sensei,像鲁大师一样
Sensei是一个简单的命令行工具,可以打开crates.io中任何包装箱的文档。 安装 cargo install sensei 用法 sensei <crate> [OPTIONS] [FLAGS] 选项 -v, --version <version> Opens documentation for a specific ...
网站和用户系统启动器。 使用 Express 和 Backbone 实现。 技术 在服务器上 在客户端 发展 表示 引导程序 咕噜声 玉 主干.js 猫鼬 jQuery 护照 下划线.js 异步 字体真棒 电子邮件JS 时刻.js 现场演示 即将推出.....
对于编程爱好者来说,这是一个宝贵的资源,可以深入研究其算法设计,了解数独逻辑解析的实现细节,甚至可以尝试自己动手优化或添加新特性。同时,这也是一个极好的学习机会,可以借此了解如何用编程语言构建交互式的...
Sensei Grid 是简单的数据网格库,使用 JavaScript 编写。i 目标: 简单 极小的代码基础 扩展性 稳定性 在线演示 标签:Sensei