`

Lily架构简介

 
阅读更多

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://www.spnguru.com/?p=548

分享到:
评论

相关推荐

    Lily的FI后台配置系列一

    "Lily的FI后台配置系列一"是针对企业后台财务系统配置的详细指南,尤其是"enterprise structure"部分,主要关注如何构建和优化企业的组织架构,确保财务数据的有效管理和报告。以下将详细阐述这一主题的相关知识点。...

    大数据平台架构及与EDA云化关系.

    - **Lily Indexer**:一个用于索引和搜索HBase表的工具,可以提高HBase在多维度查询方面的性能。 #### 平台架构及关键技术 大数据平台的整体架构包括以下几个层面: - **采集层**:负责从各种数据源(如DPI数据、...

    Lily Framework-开源

    lilyFM是一个面向对象的php框架,为php网站应用程序程序员提供了将MVC架构应用于其应用程序的工具。 它使用php对象的XML表示形式的XSL转换来呈现HTML页面。

    OpenCVVS架构-算法及应用.pdf

    其中提到了一些关键的作者和出版信息,例如Lily Huang, Gary Yng, 和 KaewTrakulPong Bowden等人,以及他们的研究成果。 由于OCR识别技术的限制,文档中存在一些文字识别错误,但可以理解其讨论的核心内容是关于...

    三层架构大型短消息系统

    三层架构是一种常见的软件设计模式,尤其在开发大型企业级应用时被广泛应用。在这个特定的案例中,"三层架构大型短消息系统"指的是一个基于C#编程语言构建的系统,用于处理大量的短消息服务。这种系统通常包括用户...

    三层架构+MVC+Linq to SQL 入门实例

    三层架构、MVC模式以及Linq to SQL是开发高效、可维护性高的Web应用程序的关键技术。下面我们将深入探讨这三个概念及其在实际应用中的结合。 **三层架构** 三层架构是一种软件设计模式,它将应用程序分为三个主要...

    一种VLIW-Superscalar混合微处理器结构.pdf

    论文详细描述了该混合结构在Lily2处理器上的设计和实现,并通过基于Open64的编译器提供支持,评测结果表明该处理器在信号处理和通用处理领域都具有较强的性能优势。 知识点: 1. 超长指令字(VLIW):一种微处理器...

    waterlily:日光浴和美容沙龙的网站,具有购买在线礼品券的功能

    这个项目是基于Ruby on Rails框架构建的,Ruby on Rails(简称Rails)是一个开源的Web应用程序框架,它遵循MVC(模型-视图-控制器)架构模式,极大地提高了开发效率和代码可读性。 在Ruby on Rails中,"模型"...

    jabber/xmpp技术研究与应用

    Jabber/XMPP采用的是客户端-服务端架构,而非传统的客户端-客户端模式。这种设计使得所有客户端之间的消息和数据传输都需要经过服务器中转,确保了数据的安全性和一致性。 - **客户端**:负责用户界面和与服务器...

    现在学习使用的适用于8.0版本的myEclipse

    Struts是一个MVC(模型-视图-控制器)架构的框架,主要用于构建可维护性和可扩展性高的Web应用程序。而Spring则是一个全面的企业级应用框架,它提供了依赖注入(DI)、面向切面编程(AOP)、数据访问/集成、事务管理...

    tensorbox.zip

    在Tensorboard中,我们可以利用这些脚本来实验不同网络架构,并通过Tensorboard的graph dashboard来可视化网络结构。这有助于理解模型的计算流程,查找可能的优化空间。 此外,data_scalar_group.svg是一个SVG图像...

    精品课程推荐 大数据与云计算教程课件 优质大数据课程 12.序列化框架(共28页).pptx

    1. **Hadoop简介与安装**:介绍了Hadoop的基础概念,包括分布式计算的基本原理,以及如何在本地或集群环境中安装和配置Hadoop。 2. **MapReduce**:MapReduce是Hadoop的核心计算框架,课程讲解了MapReduce的工作...

    浙江大学计算机组成大程MIPScpu

    《浙江大学计算机组成大程MIPScpu》是针对计算机科学领域中的一个重要主题——MIPS(Microprocessor without Interlocked Pipeline Stages,无互锁流水线级)架构进行深入讲解的资料,通常在计算机组成原理课程中...

    C#中简单三层构架实例

    在IT行业中,软件开发的架构设计是至关重要的,它决定了系统的可维护性、扩展性和复用性。C#作为微软.NET框架的主要编程语言,广泛应用于企业级应用开发。本实例将详细探讨C#中的简单三层架构,这是一种常见的、用于...

    英语情景对话-英语对话材料精选.doc

    2. **公司简介**: - 联想公司位于中国北京,是全球第四大个人电脑制造商,长期在中国市场占据主导地位,同时也涉足手机、服务器等业务。 - 公司成立于1984年,虽然历史不长,但市场竞争能力强。 3. **业务领域**...

    如何构建三层构架

    三层架构是一种常见的软件系统设计模式,它将应用逻辑划分为三个独立的层次,分别是表示层、业务逻辑层和数据访问层。这种架构模式的主要目的是提高系统的可维护性、可扩展性和可重用性。以下是对如何构建三层架构的...

    asp.net黯心快餐点餐系统

    asp.net黯心快餐点餐系统

    精品课程推荐 大数据与云计算教程课件 优质大数据课程 40.Neo4j(共50页).pptx

    在大数据领域,Hadoop是关键的基石,课程从Hadoop的简介与安装入门开始,讲解了如何搭建和管理Hadoop环境。MapReduce是Hadoop的核心计算框架,课程深入介绍了MapReduce的工作原理、编程模型,包括序列化、输入输出...

    信息规则:智能分类帐体系结构和分布式权限-研究论文

    这项研究由Lily Innovation董事总经理Maury Shenk和Z执行主席Michael Mainelli教授领导。 / Yen Group。该报告得出的结论是,成功的许可系统的标准似乎是:精确-准确传达许可的能力;广度-传达任何类型的许可的范围...

    Android 移植技术

    这篇文章主要关注于Android系统如何适应不同的硬件环境,特别是在非传统移动设备上的应用,如x86架构的笔记本电脑或平板电脑。 ### Android 背景 Android自2007年11月5日由Google宣布以来,迅速成为了全球最流行的...

Global site tag (gtag.js) - Google Analytics