`

[转载] 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:表面运行对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.dmg 1.1.8,24【亲测可用】最好的Mac性能工具

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

    Sensei:Sensei LMS WordPress插件

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

    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 现场演示 即将推出.....

    jQuery数据网格库SenseiGrid.zip

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

    sensei:WooThemes Sensei 插件

    woothemes-老师WooThemes Sensei 插件

    Sensei's Library on Tour-开源

    Sensei的游览图书馆(SLoT)是一种便捷的Java工具,可将Wiki转储转换为一组精简HTML页面,可轻松地在手持式设备或电子书阅读器上阅读。

    sensei-anywhere:由模糊搜索 (JSHTML) 提供支持的导航工具

    老师无处不在Sensei Anywhere 是一种由模糊搜索提供支持的导航工具。 Sensei Anywhere 在用于在连接、数据库和表之间导航。 该项目目前正在大量开发中,使用风险自负。安装Sensei Anywhere 依赖于 jQuery、lodash/...

    sensei:https的替代品

    Sensei 旨在替代 ,使用更简单和更新的堆栈。 它在功能方面并不符合标准,但已准备好进行试驾。 安装 使用发布的 Docker 镜像 :spouting_whale: 使用docker image pull zenika/sensei 创建别名sensei alias ...

    opnsense_grafana_dashboard:适用于OPNsense和插件Sensei的Grafana仪表板

    适用于OPNSense和Sensei的Grafana仪表板适用于OPNsense和插件Sensei的Grafana仪表板要求ELK堆栈7+ OPNsense的Telegraf配置Grafana和InfluxDBGrafana插件镁字云面板flant-statusmap-panel 格拉纳纳-皮埃哈特(panana...

    sensei:中型数据的逻辑回归引擎

    Sensei 是一个逻辑回归引擎。 它旨在在一台机器上运行中型数据。 它目前能够: 以 LIBSVM 格式读取数据集(仅具有二进制特征) 高度可配置的训练 自动特征探索 自动特征修剪 保存模型以供以后训练或评分 数据评分...

    ai-sensei-beta

    ai-sensei-beta

Global site tag (gtag.js) - Google Analytics