`

[转载] sensei分布式实时搜索系统源码解析(一) senseiServer的启动及若干概念

阅读更多

看来自己很懒,发现前同事的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的过程。

 

  • 大小: 7.7 KB
分享到:
评论

相关推荐

    sensei, 分布式实时搜索数据库.zip

    sensei, 分布式实时搜索数据库 什么是 Sensei( http://www.senseidb.com/ )Sensei是一个分布式的弹性实时搜索数据库。维基维基在以下位置可用:http://linkedin.jira.com/wiki/display/SENS

    Sensei for Mac v1.2.1 中文版 系统性能优化及清理工具

    Sensei mac版,是一款系统性能优化及清理工具,提供了一些与硬件和软件相关的功能,例如超级易于使用的应用程序卸载程序,快速的磁盘清理程序,电池和存储驱动器的运行状况信息等等,帮助您优化,监控和清洁Mac,以...

    Sensei.unitypackage

    Sensei.unitypackage

    sensei-hadoop-indexing-1.6.0.zip

    Sensei是一个高性能、可扩展的数据搜索引擎和分析框架,特别适用于大数据处理场景。版本1.6.0可能包含了一系列优化和增强,旨在提高索引效率和查询性能。 【描述】"Global Session Filter" 描述中提到的"global-...

    吴一男:网易通用搜索优化之道

    - 提及了多种开源搜索引擎产品如Solr/SolrCloud、ElasticSearch、IndexTank、Sensei和云搜索服务如Amazon CloudSearch和阿里云搜索。 - 专门提到了淘宝的通用搜索产品TSearcher。 2. 网易通用搜索系统的实现 - ...

    SENSEI:表面运行对Sub-GeV暗物质的第一个直接检测约束

    次电子噪声Skipper CCD实验仪器(SENSEI)使用最新开发的Skipper-CCD技术,从次GeV暗物质粒子与硅中... SENSEI是第一个致力于从暗物质中搜索电子反冲的实验,这些结果证明了Skipper-CCD技术在暗物质搜索中的强大作用。

    赛睿SteelSeries Sensei RAW游戏鼠标驱动程序 最新版

    赛睿SteelSeries Sensei游戏鼠标驱动程序,是赛睿鼠标的官方驱动程序,...Steelseries Sensei游戏鼠标拥有一个32位的ARM处理器,运算速度相当于英特尔公司于1994年发布的奔腾75 MHz处理器,用在鼠标上绝,欢迎下载体验

    DFSs:这是我的大学项目-分布式文件系统sama。 它基于GFS和HDFS

    分布式文件系统 受GFS启发的分布式文件系统。 目录 系统应如何工作 用户PC上有一个客户端。 在远程服务器上也有一个Sensei服务器。 而且在不同的计算机上有很多文件服务器。 客户 CLI是否可以使用文件名称空间并获取...

    sensei:WooThemes Sensei 插件

    1. **WordPress插件开发**:Sensei是WordPress生态系统的一部分,它扩展了平台的功能,使得用户无需编程知识也能创建在线课程,管理学生,以及设置考试和作业。 2. **在线教育平台**:Sensei提供了创建课程、章节、...

    【最新版】Sensei.dmg 1.1.8,24【亲测可用】最好的Mac性能工具

    下一代Mac性能工具 绩效仪表板 ...SSD修剪启动器 口音颜色支持 磁盘运行状况分析器 磁盘基准 电池健康分析仪 多种本地化 磁盘监控器 暗模式 启动速度优化器 分区图资源管理器 GPU固件导出器

    Sensei:Sensei LMS WordPress插件

    但是,我们确实要求,如果您在实时网站上使用该插件,请从该网站购买有效的许可证。 我们无法为没有有效许可证密钥的任何人提供支持或一键式更新。 建筑 Sensei LMS结构模型可以分为几个部分。 这些组件在当前版本...

    墨鱼AI导航源码/小白也能即拿即用+视频教程

    ### 墨鱼AI导航源码解析与应用 #### 一、系统概述 近年来,随着人工智能技术的迅猛发展,各种AI应用层出不穷,为人们的工作生活带来了极大的便利。在这个背景下,“墨鱼AI导航”应运而生,它不仅是一款集成了众多...

    react-sensei:清理React UI组件库

    Sensei是为前端React开发人员构建的UI组件库。 主要重点是快速创建干净的响应式仪表板! 安装 Sensei依赖于整个应用程序被包装在带有单个主题道具的SenseiProvider组件中。 1.安装react-sensei Sensei现在可以通过...

    Sensei_1.3.3像鲁大师一样.dmg

    Sensei,像鲁大师一样

    sensei:Sensei是一个简单的命令行工具,可以打开crates.io中任何包装箱的文档

    Sensei是一个简单的命令行工具,可以打开crates.io中任何包装箱的文档。 安装 cargo install sensei 用法 sensei <crate> [OPTIONS] [FLAGS] 选项 -v, --version <version> Opens documentation for a specific ...

    admit-sensei:启动模拟

    网站和用户系统启动器。 使用 Express 和 Backbone 实现。 技术 在服务器上 在客户端 发展 表示 引导程序 咕噜声 玉 主干.js 猫鼬 jQuery 护照 下划线.js 异步 字体真棒 电子邮件JS 时刻.js 现场演示 即将推出.....

    Sudoku Sensei-开源

    对于编程爱好者来说,这是一个宝贵的资源,可以深入研究其算法设计,了解数独逻辑解析的实现细节,甚至可以尝试自己动手优化或添加新特性。同时,这也是一个极好的学习机会,可以借此了解如何用编程语言构建交互式的...

    jQuery数据网格库SenseiGrid.zip

    Sensei Grid 是简单的数据网格库,使用 JavaScript 编写。i 目标: 简单 极小的代码基础 扩展性 稳定性 在线演示 标签:Sensei

Global site tag (gtag.js) - Google Analytics