2019独角兽企业重金招聘Python工程师标准>>>

Lily是什么

Lily是一个可扩展的数据仓库。用于数据的存储和搜索。Lily是一个分布式系统,她并不是白手起家的,她依赖于两个已有的OpenSource软件,一个是HBase, 另一个是SOLR. 同时Lily对于使用者提供自己的操作接口,称作Lily API.

Lily的优势在于她强大的搜索能力,无论是文本匹配还是全文索引,通通都能搞定。但我觉得Lily在获取这些优势的同时付出了相当大的代价,最主要的代价就是系统的复杂性。想想看,为了能够使用Lily,你需要安装并维护以下系统:HDFS, HBase, Zookeeper, SOLR, Lily. 这些系统任何一个都可能让Operation Team抓狂,更不用说他们混在一起了。

Lily的架构

1.总体架构

Lily使用分布式的架构,这包括两方面:1) Lily拥有多个Node,不同的Node完成不同的工作,相互合作共同完成任务。2) Lily拥有多个Node,每个Node都完成一样的工作,这样可以保证可扩展性和容错性。

Lily的大致架构可用这张图来表示:

先将这张图分成左右两边,左边是Lily的系统,右边是Lily依赖的系统,从上至下是HBase, HDFS, SOLR, Zookeeper. 后面我们会分析每个Lily Node的内部结构,现在我们先来分析一下Lily的每个依赖:

Zookeeper, 每个Lily Node用Zookeeper来发布自己的存在,就好像HBase RegionServer一样。Client可以从Zookeeper获取当前有多少个Lily Node在提供服务。

SOLR,为全文索引提供服务,具体的使用方法是Lily Node将插入的内容同步输出到SOLR Node,SOLR自己生成全文索引,Client直接call SOLR(不经过Lily Node)获取搜索结果。

HDFS,它和Lily Node其实没有直接联系,换句话说Lily可以忽视他的存在。HDFS的作用就是存储HBase的数据,或者直接供Client使用,但这和Lily没什么关联。

HBase,和Lily Node的联系最为紧密,Lily Node作为中间层,接到Client的写入请求以后将数据写入HBase,并加上自己的数据以实现Secondary Index. 这个实现可以说和GMS很相似,但Lily的设计更为复杂。

2. Lily Node的内部结构

多个Lily Node组成了Lily的系统,我们通过观察每个Node内部的结构来了解Lily的工作原理。这张图描述了每个Lily Node的内部结构:

这张图稍微有点复杂,我们略过依赖的module,看看Lily Node内部有哪些module: Repository, WAL, MQ(Message Queue), Indexer, LinkIndex.

Repository:

这个是Client操作的入口,Client使用基于Avro的协议(类似于PB)操作Repository,而Repository使用HBase标准的Java API操作HBase. 除了基本的HBase操作,Repository还有添加Secondary Index信息的任务。为了保证Index信息和原始信息的最终一致性,需要用到WAL. Repository在每次操作的最开始写WAL log, 然后原始操作,写WAL, 再Index操作,写WAL. 一步一标记,失败了就把没做的事情重做一遍. 都做完了写入MQ, 将任务转交个后续处理模块.

WAL:

前面已经介绍过了,这个模块是保证最终一致性用的. 它和HBase的WAL没什么联系,实现方式也不同。不过我觉得如果想让WAL有保证的化应该将log写入分布式文件系统中,比如HDFS. 但Lily的做法貌似更绝,使用HBase的一个Table来存储WAL,简单,但是加大了依赖性,而且可能会产生更多相互依赖的问题。

Message Queue:

为什么要有Message Queue?因为有些操作不需要当时完成,丢到MQ里面由后续模块异步慢慢完成好了, 比如说将新的内容同步到SOLR. 因此MQ产生了,如何实现?还是老办法,用HBase里面的一个Table来实现。

Indexer:

Indexer的主要功能是同步SOLR,进而实现全文索引。因为操作SOLR使用的是公开的API,且Lily不管查询工作,所以Indexer也不会很复杂。

LinkIndex:

根据Index来查找具体类容的模块,Repository和Indexer都会用到,具体实现细节还需要研究源码才能得知.

总结

说到这里大家对于Lily因该已经有大概的认识了. 我这里总结一下Lily的优缺点.

优点:支持多种搜索,设计上没有大的缺陷.

缺点:复杂,管理困难,client必须使用Lily的API才能享受其功能,对于HBase相当依赖却又不能融入其中。

对于我们来说也许做一个轻量级的Secondary Index真的有些意义。

转载于:https://my.oschina.net/u/930279/blog/786643

Lily:基于Solr、HBase、Zookeeper云计算上的内容仓库相关推荐

  1. 基于Solr的HBase多条件查询测试

    背景: 某电信项目中采用HBase来存储用户终端明细数据,供前台页面即时查询.HBase无可置疑拥有其优势,但其本身只对rowkey支持毫秒级的快速检索,对于多字段的组合查询却无能为力.针对HBase ...

  2. 【Hadoop】基于Hadoop/Hbase/Hive的小型离线服务器日志分析应用

    ##1.项目简介 本项目主要设计一个基于Hadoop的日志分析系统.其中的日志数据主要来自于某系统开发测试期间的服务器访问日志数据(Tomcat),通过对这些日志数据利用正则表达式等技术手段进行处理, ...

  3. HBase在CentOS上分布集群安装

    场景 CentOS7上搭建Hadoop集群(入门级): https://blog.csdn.net/BADAO_LIUMANG_QIZHI/article/details/119335883 在上面搭 ...

  4. 基于Solr的空间搜索学习笔记

    基于Solr的空间搜索学习笔记 在Solr中基于空间地址查询主要围绕2个概念实现: (1) Cartesian Tiers 笛卡尔层 Cartesian Tiers是通过将一个平面地图的根据设定的层次 ...

  5. hadoop +hbase +zookeeper 完全分布搭建 (版本一)

    hadoop2.0已经发布了稳定版本了,增加了很多特性,比如HDFS HA.YARN等.最新的hadoop-2.6.0又增加了YARN HA 注意:apache提供的hadoop-2.6.0的安装包是 ...

  6. 云计算机是一种基于资源,一种基于云平台和云计算的资源管理系统和方法

    一种基于云平台和云计算的资源管理系统和方法 [技术领域] [0001]本发明涉及云计算系统,尤其涉及一种基于云平台和云计算的资源管理系统和方法. [背景技术] [0002]云计算(Cloud Comp ...

  7. 基于Solr DIH实现MySQL表数据全量索引和增量索引

    实现MySQL表数据全量索引和增量索引,基于Solr DIH组件实现起来比较简单,只需要重复使用Solr的DIH(Data Import Handler)组件,对data-config.xml进行简单 ...

  8. Solr+Hbase多条件查(优劣互补)

    为什么要使用solr+hbase组合: 某电信项目中采用HBase来存储用户终端明细数据,供前台页面即时查询.HBase无可置疑拥有其优势,但其本身只对rowkey支持毫秒级的快速检索,对于多字段的组 ...

  9. Solr 11 - Solr集群模式的部署(基于Solr 4.10.4搭建SolrCloud)

    目录 1 SolrCloud结构说明 2 环境的安装 2.1 环境说明 2.2 部署并启动ZooKeeper集群 2.3 部署Solr单机服务 2.4 添加Solr的索引库 3 部署Solr集群服务( ...

最新文章

  1. 重上热搜!北师大教授:给非洲留学生1年10万奖学金真的不算多!
  2. Cheat—— 给Linux初学者和管理员一个终极命令行备忘单
  3. python下载安装教程3.8.1-Linux安装Python 3.8.1
  4. 高阶奇异值分解(HOSVD)理解
  5. 关于maven仓库中的_remote.repositories
  6. tensorflow包_在Keras和Tensorflow中使用深度卷积网络生成Meme(表情包)文本
  7. 《Orange’s 一个操作系统的实现》1.搭建操作系统开发环境
  8. python 绘图 hist bin参数_Python-hist,distplot bin宽度不一致问题的解决方案
  9. 执行容器内的shell_你的Docker容器可能充满了Graboid加密蠕虫
  10. Python爬取最新反爬虫汽车之家口碑
  11. Win11查看电脑磁盘分区格式的方法教学
  12. java 爬取网页的数据_java爬取网页数据
  13. 苹果MFi认证协处理器(MFI337S3959)公钥证书分析
  14. pytorch torch.nn到底是什么?
  15. 计算机硬件有问题,计算机硬件有哪些
  16. 大数据学习之一——Hadoop单机部署
  17. android o 开发者大会,谷歌开发者大会刚结束Android O又要来了?
  18. SSM框架优缺点和springboot 比起优缺点是什么?
  19. 线程,进程,线程安全的理解
  20. matlab中保存imagesc呈现的图像内容以及保存图像大小设置

热门文章

  1. 学了java然后深入_JAVA8学习——从源码角度深入Stream流(学习过程)
  2. 快速解决MariaDB无密码就可以登录的问题
  3. mycat重启报错Failed to connect to the Wrapper at port解决方法
  4. 使用spring session+redis技术,解决负载均衡下的session共享问题
  5. ant design table column 设置width不生效解决方案
  6. SSH启动失败解决方法
  7. 【Bug】解决 java.sql.SQLSyntaxErrorException 异常
  8. 如何从数据框的单元格获取值?
  9. Swift语言中的#ifdef替换
  10. win11无法下载steam怎么办 Windows11无法下载steam的解决教程