无论计算机性能有多强,程序优化的多么好,都会遇到其瓶颈。能够快速方便的实现并行处理并可以实现横向扩展才是处理海量数据的重要原则,按此原则实现以分布式并行计算为核心架构设计架构,才能为海量数据索引提供解决方案。
需要要做到以下几点:
一.支持热插拔:就是允许服务器在不关闭系统,不切断电的情况下增加或去掉某个节点、从而提高了可靠的服务和系统对灾难处理及恢复能力、更加灵活维护等。
二.可扩展:在应该用过程中,需要新节点时可动态加载新节点,从而处理更大规模数据业务,从而升级新的需求。
三.高负载:当然这一点是更为核心的问题,系统能够快速计算或查询出用户需求。
四.易用性:能与现有平台无缝集成,指的是平台对开发人员来说意味着易于学习和使用维护、减轻相应人员负担。
五.支持失败转移:当组上某个节点down机时,用于动态切换到备份节点,从而保证数据的准确可读性。
六.灾难恢复:当节点比较多时,会发现组中一个或几个节点出现问题,是很常见的事,需提供相应的备份机制,来处切点之间的无缝迁移,提供了尽量可靠的灾难恢复计划。
系统设计:
由于一直从事java相关的工作,系统设计也java为例,希望能起个抛砖引玉的作用。在这先感谢那些伟大JAVA工程师为我们开源很多非常优秀的框架,让我们可以不必了解整流即可写出性能非常不错的应用平台。
选用Lucene+Hadoop+Zookeeper分布式并行计算搜索框架
Lucene:是一个索引框架,众所周知,搜索几乎已经成为每个索引相关项目必不可缺的框架之一,使用Lucene构造一个“索引-查询”的应用也是最常见的java解决方案 ,写起来也比较顺手。当然还得需要相应的分词工具,如:IKAnalyzer,在这里不做详细介绍,具体可参考http://code.google.com/p/ik-analyzer/
Hadoop:一个分布式系统基础架构,由Apache基金会开发。用户可以在不了解分布式底层细节的情况下,开发分布式程序。充分利用集群的威力高速运算和存储。MapReduce、HDFS是Hadoop的主要实现,两者紧密相连,缺一不可,MapReduce:为分布式计算框,HDFS:为分布式文件系统,通过mapreduce很容易在hadoop平台上进行设计分布式的平台。
Zookeeper:是Hadoop的子项目,主要针对大型分布式系统提供可靠协调系统,可提供配置维护、名字服务、分布式同步、组服务等。