24

谈服务实例日志分布式存储02(200518)

 3 years ago
source link: http://blog.sina.com.cn/s/blog_493a84550102z8al.html
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.

6JNBJn3.jpg!web

注:图片来源  https://blog.csdn.net/u014091123/article/details/73322563

今天继续谈下服务实例日志的分布式存储,对于日志分布式存储重点需要考虑解决两个问题,第一个就是引入分布式数据库或分布式存储,通过NFS等来替代SAN集中化存储并实现弹性水平扩展;第二个就是解决当前服务实例信息模糊查询速度慢的问题。

在上一篇文章里面我提到了将服务运行实例头信息存储到Solr库中,而将明细信息存储到HBASE分布式数据库中。今年上周的讨论,整个方案变化为将服务实例头和明细信息都写入到HBASE数据库中,但是这样的话对于服务实例查询仍然是对全部扫描HBASE库表,性能仍然上不来。因此新方案为:

所有数据全部入HBASE数据库 + 基于HBASE数据库构建Solr二级索引。

这是一个当前主流的对于大表数据存储和查询的一个推荐解决方案。这个方案属于典型的以空间换时间,通过二级索引的建立,将每次查询请求快速的定位到一个更小的索引集中,以实现高性能检索。当然也是强烈不建议直接采用HBASE索引进行多条件模糊查询,这种全部扫描对内存和计算资源消耗都很大。

对于基于Solr来构建HBASE的二级索引可以参考下面这篇文章:

https://blog.csdn.net/jediael_lu/article/details/76576897

1. 为hbase表建倒排索引,重新索引回hbase中,以标签作rowkey,以用户id作值

2. 使用coprocessor将数据索引至solr

3. 使用solr-index等开源工具将数据索引至solr。

CDH有一个hbase-solr的模块,它是基于开源项目hbase-indexer的。问题是hbase-indexer基于0.94与0.98的,不清楚cdh是否有改进,没文档说明。但一般而言,它与CDH5.6同时发布,应该是不存在兼容性问题的。

另外一篇文章可参考: https://blog.csdn.net/u014091123/article/details/73322563

对于二级索引构建方式:表索引、列索引、全文索引

  • 表索引:  是将索引数据单独存储为一张表,通过 HBase Coprocessor 生成并访问索引数据。
  • 列索引:  是将索引数据与源数据存储在相同的 Region 里,索引数据定义为一个单独的列族,也是利用 Coprocessor 来生成并访问索引数据。对于表索引,源数据表与索引表的数据一致性很难保证,访问两张不同的表也会增加 IO 开销和远程调用的次数。对于列索引,单表的数据容量会急剧增加,对同一 Region 里的多个列族进行 Split 或 Merge 等操作时可能会造成数据丢失或不一致。
  • 全文索引: 以CDH5中的Lily HBase Indexer服务实现,其使用SolrCloud存储HBase的索引数据,Indexer索引和搜索不会影响HBase运行的稳定性和HBase数据写入的吞吐量,因为索引和搜索过程是完全分开并且异步的。Lily HBase Indexer在CDH5中运行必须依赖HBase、SolrCloud和Zookeeper服务。

CDH5.4中的Key-Value Indexer使用的是Lily HBase NRT Indexer服务,Lily HBase Indexer是一款灵活的、可扩展的、高容错的、事务性的,并且近实时的处理HBase列索引数据的分布式服务软件。它是NGDATA公司开发的Lily系统的一部分,已开放源代码。

Lily HBase Indexer使用SolrCloud来存储HBase的索引数据,当HBase执行写入、更新或删除操作时,Indexer通过HBase的replication功能来把这些操作抽象成一系列的Event事件,并用来保证写入Solr中的HBase索引数据的一致性。并且Indexer支持用户自定义的抽取,转换规则来索引HBase列数据。Solr搜索结果会包含用户自定义的columnfamily:qualifier字段结果,这样应用程序就可以直接访问HBase的列数据。而且Indexer索引和搜索不会影响HBase运行的稳定性和HBase数据写入的吞吐量,因为索引和搜索过程是完全分开并且异步的。

Lily HBase Indexer在CDH5中运行必须依赖HBase、SolrCloud和Zookeeper服务。

对原有日志存储和日志模糊查询功能的改造

在原来文章里面我就谈到过,对于已经上线的生产系统在后续变更和优化中最佳方案就是要尽量对已有的功能影响最小,对已有的功能无侵入。这样即使新功能或优化功能上线出现问题或Bug也能够将影响控制到最小范围。因此原来我们准备是对日志存储和模糊查询功能做大改造。

但是新方案修改为:

完全保留当前日志存储和查询功能,再新增加一个归档服务日志查询功能。

对于归档日志查询功能采用定时任务的方式将当前结构化数据库中的日志存储同步到HBASE数据库中,并对同步到HBASE数据库中的数据再进行Solr二级索引的建立。这样对于在线库只需要保存3到6个月实例日志数据,其它服务日志都定时同步到HBASE归档库中,并基于HBASE库新增加一个归档日志查询功能即可。

采用这种方式可以最大限度避免对已有日志存储和查询功能的影响。


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK