文档章节

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

fengyexjtu
 fengyexjtu
发布于 2016/11/12 00:03
字数 1248
阅读 69
收藏 1

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真的有些意义。

本文转载自:http://blog.csdn.net/haizhaopeng/article/details/45890543

fengyexjtu

fengyexjtu

粉丝 5
博文 52
码字总数 20519
作品 0
西安
程序员
私信 提问
hdfs+zookeeper+hbase分布式在k8s中部署

版权声明:本文为博主原创文章,转载请注明来源。开发合作联系luanpenguestc@sina.com https://blog.csdn.net/luanpeng825485697/article/details/81985602 1、背景知识 先看下HBase的组成:...

数据架构师
2018/08/26
0
0
大数据平台搭建-hbase集群的搭建

本系列文章主要阐述大数据计算平台相关框架的搭建,包括如下内容: 虚拟服务器安装 基础环境安装 zookeeper集群的搭建 kafka集群的搭建 hadoop/hbase集群的搭建 spark集群的搭建 flink集群的...

molyeo
2018/07/25
0
0
HADOOP HBASE配置注意事项

1、yum安装的jdk工具1.8版本,在配置hbase1.2版本需要在hbase-env.sh配置文件中注释掉下面的内容: export HBASEMASTEROPTS="$HBASEMASTEROPTS -XX:PermSize=128m -XX:MaxPermSize=128m" exp......

断臂人
2018/07/11
0
0
Hbase的应用场景、原理及架构分析

Hbase概述 hbase是一个构建在HDFS上的分布式列存储系统。HBase是Apache Hadoop生态系统中的重要 一员,主要用于海量结构化数据存储。从逻辑上讲,HBase将数据按照表、行和列进行存储。 如图所...

xiangxizhishi
2017/07/22
0
0
HBase入门5(集群) -压力分载与失效转发

在上一篇关于HBase的文章中曾经讲述过HBase在分布式中的架构,这篇文章将会讲述HBase在分布式环境中是如何排除单点故障的(SPFO),做一个小实验讲述HBase在分布式环境中的高可用性,亲眼看到一...

超人学院
2015/05/22
0
0

没有更多内容

加载失败,请刷新页面

加载更多

Jenkins基础入门-5-用户和权限管理

本篇,我们来介绍下Jenkins上如何创建用户,以及如何管理用户,和那些用户可以有ProjectA的权限。这个很好理解,一个项目,有开发和测试,和运维,每个团队都有不同的角色,例如有测试经理和...

shzwork
3分钟前
0
0
linux上解压版安装jdk,tomcat

需要的安装包 1.vmware12 2.centos7版本 3.安装完成后需要xshell来连接远程虚拟机,虚拟机保证要联网,网络畅通。 4.xftp用来向linux传输文件用,一般来说xshell和xftp配套使用 5.对应的压缩...

architect刘源源
39分钟前
23
0
使用 spring 的 IOC 解决程序耦合

工厂模式解耦 在实际开发中我们可以把三层的对象都使用配置文件配置起来,当启动服务器应用加载的时候,让一个类中的方法通过读取配置文件,把这些对象创建出来并存起来。在接下来的使用的时...

骚年锦时
今天
2
0
group by分组后获得每组中时间最大的那条记录

用途: GROUP BY 语句用于 对一个或多个列对结果集进行分组。 例子: 原表: 现在,我们希望根据USER_ID 字段进行分组,那么,可使用 GROUP BY 语句。 我们使用下列 SQL 语句: SELECT ID,US...

豆花饭烧土豆
今天
3
0
android6.0源码分析之Camera API2.0下的Preview(预览)流程分析

本文将基于android6.0的源码,对Camera API2.0下Camera的preview的流程进行分析。在文章android6.0源码分析之Camera API2.0下的初始化流程分析中,已经对Camera2内置应用的Open即初始化流程进...

天王盖地虎626
今天
4
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部