比如商品,在添加商品的时候 将商品信息加入到搜索引擎中,那么如果有一天 搜索
引擎坏了,那么商品就搜索不到了吗?这个东西一般如何处理?
你说的搜索引擎是本地的还是指google bing一类的。如果前者,搜索引擎“坏了”没关系,只要你的索引数据库还在就可以,就算这个也没有了,也可以重新将商品信息添加到索引里。
后者,没有听说搜索引擎会“坏了”。
一般搜索引擎都有设计高可用方案的吧
搜索引擎的后台必须有多台服务器支撑,之前叫集群,现在可以使用微服务,总之你说的问题已经考虑到了,所以早已经有现成的解决方案了。
一般搜索引擎都是以集群的方式构建的,如果其中几台坏了,其他几台也可以正常服务。
同时,每台机器还会有主备同步,如果主坏了,使用备用的服务器,和主服务器基本是同步的。
同时主备或者是服务器集群都会分开放,一般是两个或者多个机房,数据库也会有同步和主备的,防止一个机房断电或者电缆被挖掘机挖断
话说当年淘宝就遇到过电缆被挖断的情况。
现在对分布式的各方面都在不断开发,不断更新,基本不会遇到你说的坏了(服务不可用)的情况了
这个问题很好,一般做搜索都是离线或者近实时indexing。这里面就需要涉及到数据一致性。比方说我们搜索用户的昵称:
1、新增用户昵称是a,这时候搜索引擎还没收录进去,所以查询结果为空。
2、用户昵称有a改为b,这时候搜索引擎还是a,所以查询结果还是a。
再回到你的问题上,搜索引擎坏了。一般来说搜索坏了可能是下面几种情况:
1、数据灌不进去
2、搜索引擎集群部分跪了
3、搜索引擎集群机房跪了
第一种情况,数据灌不进去(或者是数据源跪了),但是集群运行正常,这时候可以提供服务,但是数据可能会失真
第二种情况,集群机器跪了一部分,一般来说机器都是分片机器,也就是说集群数据索引会基于某个规则分片,跪了某一个分片的某一部分机器,完全不会有影响。如果跪了一个分片中的主分片,那这个分片不可写但是可读。
第三种情况,机房跪了(意思是指全部都跪了,如果存在异地机房不在我们讨论范围内),那就只能认倒霉了,服务不可用
当前所谓的高可用其实都是指集群跪了一半,但是整体服务仍然可用。当前搜索引擎中的solr和elasticsearch都能够保证在这种程度上的高可用。