- 浏览: 147298 次
- 性别:
- 来自: 北京
文章分类
- 全部博客 (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 1067sensei分布式实时搜索系统源码解析(三) 分布式inde ... -
基于sensei+lucene的分布式搜索终于上线了-2012-12-08
2011-12-08 13:26 1580基于sensei+lucene的分布式搜索终于上线了 ... -
[转载] sensei分布式实时搜索系统源码解析(二) 分布式Search的流程
2011-07-22 14:57 1433看来自己很懒,发现前同事的sensei 研究了 转载: ht ... -
lucene分布式搜索sensei的使用及完善
2011-07-22 14:32 3506原创文章,转载请注明 ... -
LinkedIn 的分布式搜索sensei编译安装
2011-04-11 11:37 1750Sensei是LinkedIn的一个分布式搜索系统。安装步骤 ... -
转载:几种常见的基于Lucene的开源搜索解决方案对比
2011-04-06 14:38 1302一 直接使用 Lucene ( http://lucene ... -
转载: Apache Zookeeper入门1
2011-04-06 14:36 1867源: http://www.javabloger.com/ar ... -
转载:Lucene查询语法详解
2011-04-02 10:33 1062英文原文地址:http: ... -
各种字符串Hash函数比较
2011-02-12 14:54 4086Java自带的字符串hash函数: public ... -
Lucene MoreLikeThisQuery 例子 备注
2011-01-06 11:22 14211。 编码问题: MoreLikeThisQuery中的 ... -
Lucene MoreLikeThisQuery 例子
2011-01-04 13:42 2789要做一个跟文章标题相关的新闻,本来想简单做一下,就是把标 ... -
lucene 3.0 分词例子 转载
2010-12-27 17:30 1879源:http://hxraid.iteye.com/blog ... -
lucene基本概念
2010-12-03 15:51 1123一、lucene索引的建立 1 ... -
[转载] lucene使用与优化
2010-12-03 10:14 1033源:http://www.cnblogs.com/bysshi ... -
[转载] 几种常见的基于Lucene的开源搜索解决方案对比
2010-12-02 16:07 869源:http://blog.fulin.org/201 ... -
lucene中的Token, TokenStream, Tokenizer, Analyzer
2010-11-22 10:41 1312转载: Token: 如果一个字段被token化,这表示它经 ... -
Lucene3.0的几种分词系统
2010-11-17 17:25 12581、 StopAnalyzer StopAnalyze ... -
当前几个主要的Lucene中文分词器的比较
2010-11-17 12:35 12911. 基本介绍: paoding :Lucene中 ... -
lucene score explain 评分解释说明
2010-11-16 17:29 2227通过Searcher.explain(Query qu ... -
lucene 排序 (Sort SortField 构造函数)
2010-11-09 13:58 4077注意: 在lucene2.9中,排序的字段域必须inde ...
相关推荐
sensei, 分布式实时搜索数据库 什么是 Sensei( http://www.senseidb.com/ )Sensei是一个分布式的弹性实时搜索数据库。维基维基在以下位置可用:http://linkedin.jira.com/wiki/display/SENS
Sensei mac版,是一款系统性能优化及清理工具,提供了一些与硬件和软件相关的功能,例如超级易于使用的应用程序卸载程序,快速的磁盘清理程序,电池和存储驱动器的运行状况信息等等,帮助您优化,监控和清洁Mac,以...
Sensei.unitypackage
次电子噪声Skipper CCD实验仪器(SENSEI)使用最新开发的Skipper-CCD技术,从次GeV暗物质粒子与硅中... SENSEI是第一个致力于从暗物质中搜索电子反冲的实验,这些结果证明了Skipper-CCD技术在暗物质搜索中的强大作用。
赛睿SteelSeries Sensei游戏鼠标驱动程序,是赛睿鼠标的官方驱动程序,...Steelseries Sensei游戏鼠标拥有一个32位的ARM处理器,运算速度相当于英特尔公司于1994年发布的奔腾75 MHz处理器,用在鼠标上绝,欢迎下载体验
分布式文件系统 受GFS启发的分布式文件系统。 目录 系统应如何工作 用户PC上有一个客户端。 在远程服务器上也有一个Sensei服务器。 而且在不同的计算机上有很多文件服务器。 客户 CLI是否可以使用文件名称空间并获取...
下一代Mac性能工具 绩效仪表板 ...SSD修剪启动器 口音颜色支持 磁盘运行状况分析器 磁盘基准 电池健康分析仪 多种本地化 磁盘监控器 暗模式 启动速度优化器 分区图资源管理器 GPU固件导出器
但是,我们确实要求,如果您在实时网站上使用该插件,请从该网站购买有效的许可证。 我们无法为没有有效许可证密钥的任何人提供支持或一键式更新。 建筑 Sensei LMS结构模型可以分为几个部分。 这些组件在当前版本...
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
woothemes-老师WooThemes Sensei 插件
Sensei的游览图书馆(SLoT)是一种便捷的Java工具,可将Wiki转储转换为一组精简HTML页面,可轻松地在手持式设备或电子书阅读器上阅读。
老师无处不在Sensei Anywhere 是一种由模糊搜索提供支持的导航工具。 Sensei Anywhere 在用于在连接、数据库和表之间导航。 该项目目前正在大量开发中,使用风险自负。安装Sensei Anywhere 依赖于 jQuery、lodash/...
Sensei 旨在替代 ,使用更简单和更新的堆栈。 它在功能方面并不符合标准,但已准备好进行试驾。 安装 使用发布的 Docker 镜像 :spouting_whale: 使用docker image pull zenika/sensei 创建别名sensei alias ...
适用于OPNSense和Sensei的Grafana仪表板适用于OPNsense和插件Sensei的Grafana仪表板要求ELK堆栈7+ OPNsense的Telegraf配置Grafana和InfluxDBGrafana插件镁字云面板flant-statusmap-panel 格拉纳纳-皮埃哈特(panana...
Sensei 是一个逻辑回归引擎。 它旨在在一台机器上运行中型数据。 它目前能够: 以 LIBSVM 格式读取数据集(仅具有二进制特征) 高度可配置的训练 自动特征探索 自动特征修剪 保存模型以供以后训练或评分 数据评分...
ai-sensei-beta