首页 资讯 正文

大家都知道分布式存储,但是你了解过分布式搜索吗?

IPSOU 2019年06月05日 18:53

搜索引擎(Search Engine)是指根据一定的策略、运用特定的计算机程序从互联网上搜集信息,在对信息进行组织和处理后,为用户提供检索服务,将用户检索相关的信息展示给用户的系统。搜索引擎包括全文索引、目录索引、元搜索引擎、垂直搜索引擎、集合式搜索引擎、门户搜索引擎与免费链接列表等。

搜索引擎是网站建设中针对“用户使用网站的便利性”所提供的必要功能,同时也是“研究网站用户行为的一个有效工具”。高效的站内检索可以让用户快速准确地找到目标信息,从而更有效地促进产品/服务的销售,而且通过对网站访问者搜索行为的深度分析,对于进一步制定更为有效的网络营销策略具有重要价值。

要了解分布式搜索引擎,先了解搜索这个事儿吧,搜索这个技术领域里最入门级别的一个概念就是倒排索引。我们先简单说一下倒排索引是个什么东西。

1、倒排索引是什么

假如说你现在不用搜索引擎,单纯使用数据库来存放和搜索一些数据,比如说放了一些论坛的帖子数据吧,那么这个数据的格式大致如下:


很简单吧,假设有一个id字段标识每个帖子数据,然后title字段是帖子的标题,content字段是帖子的内容。那么这个时候,比如我们要是用数据库来进行搜索包含“汽车”这个关键字的所有帖子,大致SQL如下:


咱们姑且不论这个数据库层面也有支持全文检索的一些特殊索引类型,或者数据库层面是怎么执行的,这个不是本文讨论的重点,你就看看数据库的数据格式以及搜索的方式就好了。但是如果你通过搜索引擎类的技术来存放帖子的内容,他是可以建立倒排索引的。就是说,你把上述的几行数据放到搜索引擎里,这个倒排索引数据大致看起来如下:


所谓的倒排索引,就是把你的数据内容先分词,每句话分成一个一个的关键词,然后记录好每个关键词对应出现在了哪些id标识的数据里。那么你要搜索包含“汽车”关键词的帖子,直接扫描这个倒排索引,在倒排索引里找到“汽车”这个关键词对应的那些数据的id就好了。然后你可以从其他地方根据这几个id找到对应的数据就可以了,这个就是倒排索引的数据格式以及搜索的方式,上面这种利用倒排索引查找数据的方式,也被称之为全文检索。

2、分布式搜索引擎理解

其实还是很简单,假如说你现在要存储1TB的数据,那么放在一台机器还是可以的。但是如果你要存储超过10TB,100TB,甚至1000TB的数据呢?你用一台机器放的下吗?当然是放不下的了,你的机器磁盘空间是不够的。大家看一下下面的图:


所以这个时候,你就得用分布式搜索引擎了,也就是要使用多台机器来部署搜索引擎集群。比如说,假设你用Elasticsearch(后面简写为:ES)。现在你总共有3TB的数据,那么你搞3台机器,每台机器上部署一个ES进程,管理那台机器上的1TB数据就可以了。这样不就可以把3TB的数据分散在3台机器上来存储了?这不就是索引数据的分布式存储吗?而且,你在搜索数据的时候,不就可以利用3台机器来对分布式存储后的数据进行搜索了?每台机器上的ES进程不都可以对一部分数据搜索?这不就是分布式的搜索?是的,这就是所谓的分布式搜索引擎:把大量的索引数据拆散成多块,每台机器放一部分,然后利用多台机器对分散之后的数据进行搜索,所有操作全部是分布在多台机器上进行,形成了完整的分布式的架构。同样,我们来看下面的图,直观的感受一下。


3、shard的数据分片机制

那么这个时候大家考虑一下,比如有一个index,专门存放论坛的帖子,现在论坛的帖子有1亿,占用了1T的磁盘空间,这个还好说。如果这个帖子有10亿,100亿,占用了10TB、甚至100TB的磁盘空间呢?那这个index还能放到一台机器上存储吗?肯定不行的。这个时候,必须得支持这个index的数据分布式存储在多台机器上,利用多台机器的磁盘空间来承载这么大的数据量。

而且,需要保证每台机器上对这个index存储的数据量不要太大,因为控制单台机器上这个index的数量,可以保证他的搜索性能更高。所以就引入一个新的概念:shard数据分片结构、每个index都可以指定创建多少个shard,每个shard就是一个数据分片,会负责存储这个index的一部分数据。

比如说index里有3亿帖子,占据3TB数据。然后这个index你设置了3个shard。那么每个shard就可以包含一个1TB大小的数据分片,每个shard在集群里的一台机器上,这样就形成了利用3台机器来分布式存储一个index的数据的效果了。大家看下面的图:

现在index里的3TB数据分布式存储在了3台机器上,每台机器上有一个shard,每个shard负责管理这个index的其中1TB数据的分片。而且,另外一个好处是,假设我们要对这个index的3TB数据运行一个搜索,是不是可以发送请求到3台机器上去?3台机器上的shard直接可以分布式的并行对一部分数据进行搜索,起到一个分布式搜索的效果,大幅度提升海量数据的搜索性能和吞吐量。

4、Replica多副本数据冗余机制

但是现在有一个问题,假如说3台机器中的其中一台宕机了,此时怎么办呢?是不是这个index的3TB数据的1/3就丢失了?因为上面有1TB的数据分片没了。所以说,还需要为了实现高可用使用Replica多副本数据冗余机制。在Elasticsearch里,就是支持对每个index设置一个replica数量的,也就是每个shard对应的replica副本的数量。比如说你现在一个index有3个shard,你设置对每个shard做1个replica副本,那么此时每个shard都会有一个replica shard。这个初始的shard就是primary shard,而且primary shard和replica shard是绝对不会放在一台机器上的,避免一台机器宕机直接一个shard的副本也同时丢失了。我们再来看下面的图,感受一下:


在上述的replica机制下,每个primary shard都有一个replica shard在别的机器上,任何一台机器宕机,都可以保证数据不会丢失,分布式搜索引擎继续可用。Elasticsearch默认支持每个index是5个primary shard,每个primary shard有1个replica shard为副本。

长期以来,集中式系统给我们的生活带来了很多改变。它对我们的日常生活产生了影响,影响了我们如何阅读新闻,我们可以搜索到多少信息,甚至可以影响我们访问的内容。过去几年,区块链技术有了巨大的增长,给一直坚守它的人们带来了希望。但是,垄断使得那些持有他们的公司处于一种强势地位。垄断公司可以随时改变政策,窃取用户数据。更可怕的事情正在发生:丧失数据所有权。

IPSOU(interplanet Search)是基于IPFS协议的分布式存储和区块链技术的新型搜索引擎,通过关注用户隐私,分散化和搜索效率来构建新的体验。IPSOU允许用户通过加密技术和智能合约控制他们的个人数据.使用IPSOU可以享受无限制和不受审查的浏览,您可以通过该站点发出请求,您可以获取IPFS资源并将其发送回您的计算机和移动设备。

在IPSOU上,用户可以免费搜索IPFS网络文件,并使用IPFS和其他底层协议访问内容,而不需要依赖于集中的服务(和服务器),如谷歌或百度。用户将再次拥有自己的数据,没有广告跟踪,没有针对性的广告,也没有隐私问题。IPSOU使用区块链技术保护隐私。

集中式系统改变我们的生活,但我们对数据的所有权也在逐渐消减,分布式系统带来的应用,会使我们在生活、工作更加隐私、安全、高效、可信。