- 架构 秒杀系统优化思路
- 架构 细聊分布式 ID 生成方法
- 互联网架构,如何进行容量设计?
- 线程数究竟设多少合理
- 单点系统架构的可用性与性能优化
- 一分钟了解负载均衡的一切
- lvs 为何不能完全替代 DNS 轮询
- 如何实施异构服务器的负载均衡及过载保护?
- 究竟啥才是互联网架构 高并发
- 究竟啥才是互联网架构 高可用
- 100 亿数据 1 万属性数据架构设计
- TCP 接入层的负载均衡、高可用、扩展性架构
- 架构师 数据库与缓存
- 数据库软件架构设计些什么
- 细聊冗余表数据一致性
- 缓存架构设计细节二三事
- 缓存与数据库一致性优化
- 主从 DB 与 cache 一致性优化
- DB 主从一致性架构优化 4 种方法
- 多库多事务降低数据不一致概率
- mysql 并行复制降低主从同步延时的思路与启示
- 互联网公司为啥不使用 mysql 分区表?
- 即使删了全库,保证半小时恢复
- 啥,又要为表增加一列属性?
- 这才是真正的表扩展方案
- 一分钟掌握数据库垂直拆分
- 数据库秒级平滑扩容架构方案
- 100 亿数据平滑数据迁移,不影响服务
- 58 到家数据库 30 条军规解读
- 再议 58 到家数据库军规
- 业界难题 跨库分页 的四种方案
- 架构师 服务化与微服务
- 互联网架构为什么要做服务化?
- 微服务架构多 微 才合适?
- 为什么说要搞定微服务架构,先搞定 RPC 框架?
- 微服务架构之 RPC-client 序列化细节
- RPC-client 异步收发核心细节
- 架构师 消息系统
- http 如何像 tcp 一样实时的收消息?
- 微信为什么不丢消息?
- 微信为啥不丢 离线消息?
- 群消息这么复杂,怎么能做到不丢不重?
- QQ 状态同步究竟是推还是拉?
- 微信多点登录与 QQ 消息漫游架构随想
- 消息 时序 与 一致性 为何这么难?
- 58 到家通用实时消息平台架构细节(Qcon2016)
- 微信为啥这么省流量?
- 应用层/安全层/传输层如何进行协议选型?
- 架构师 消息总线架构
- 10w 定时任务,如何高效触发超时
- 1 分钟实现 延迟消息 功能
- 消息总线能否实现消息必达?
- 架构师 搜索架构
- 深入浅出搜索架构引擎、方案与细节(上)
- 如何迅猛的实现搜索需求
- 百度如何能实时检索到 15 分钟前新生成的网页?
- 架构师 架构实践
- 好架构是进化来的,不是设计来的(58 架构演进)
- 58 同城推荐系统架构设计与实现
- 从 0 开始做互联网推荐-以 58 转转为例
- 从 0 开始做垂直 O2O 个性化推荐-以 58 到家美甲为例
- 58 到家入驻微信钱包的技术优化
- 创业公司快速搭建立体化监控之路(WOT2016)
- 巧用 CAS 解决数据一致性问题
- 百度咋做长文本去重
- 如何快速实现高并发短文检索
- 如何实现超高并发的无锁缓存?
- id 串行化 到底是怎么实现的?
- 从 IDC 到云端架构迁移之路(GITC2016)
- 架构师 一分钟系列
- 一张 神图 看懂单机/集群/热备/磁盘阵列(RAID)
- 一分钟学 awk 够用(产品经理都懂了)
- 十分钟学 perl 够用(客服 MM 都懂了)
- 一分钟 sed 入门(一分钟系列)
- 一分钟了解两阶段提交 2PC(运营 MM 也懂了)
- 30 秒懂 SQL 中的 join(2 幅图+30 秒)
- 连接池原来这么简单(一分钟系列)
- 一分钟实现分布式锁
- 这才是真正的分布式锁
- 一分钟一幅图 TCP/IP 搞定
- 一分钟理解负载 LoadAverage
- 1 分钟了解 Leader-Follower 线程模型
- 架构师 通用素质
- 心态:晋升的为什么不是你
- 你的收入取决于你的努力程度
- 老公,我穿这衣服好看吗 终于破解了
- 一分钟经理人
- 架构师到底该不该写代码
- 如何做一场 B 格满满的技术大会演讲
百度如何能实时检索到 15 分钟前新生成的网页?
一、缘起
《 深入浅出搜索架构(上篇) 》详细介绍了前三章:
(1)全网搜索引擎架构与流程
(2)站内搜索引擎架构与流程
(3)搜索原理与核心数据结构
《 深入浅出搜索架构(中篇) 》介绍了:
(4)流量数据量由小到大,常见搜索方案与架构变迁
(5)数据量、并发量、扩展性架构方案
本篇将讨论:
(6)百度为何能实时检索出 15 分钟之前新出的新闻?58 同城为何能实时检索出 1 秒钟之前发布的帖子? 搜索引擎的实时性架构 ,是本文将要讨论的问题。
二、实时搜索引擎架构
大数据量、高并发量情况下的搜索引擎为了保证实时性,架构设计上的两个要点:
(1)索引分级
(2)dump&merge
索引分级
《 深入浅出搜索架构(上篇) 》介绍了搜索引擎的底层原理,在数据量非常大的情况下,为了保证倒排索引的高效检索效率,任何对数据的更新,并不会实时修改索引,一旦产生碎片,会大大降低检索效率。
既然索引数据不能实时修改,如何保证最新的网页能够被索引到呢?
索引分为 全量库、日增量库、小时增量库 。
如下图所述:
(1)300 亿数据在全量索引库中
(2)1000 万 1 天内修改过的数据在天库中
(3)50 万 1 小时内修改过的数据在小时库中
当有修改请求发生时,只会操作最低级别的索引,例如小时库。
当有 查询 请求发生时,会同时查询各个级别的索引,将结果合并,得到最新的数据:
(1)全量库是紧密存储的索引,无碎片,速度快
(2)天库是紧密存储,速度快
(3)小时库数据量小,速度也快
数据的写入和读取都是实时的,所以 58 同城能够检索到 1 秒钟之前发布的帖子,即使全量库有 300 亿的数据。
新的问题来了:小时库数据何时反映到天库中,天库中的数据何时反映到全量库中呢?
dump&merge
这是由两个异步的工具完成的:
dumper :将在线的数据导出
merger :将离线的数据合并到高一级别的索引中去
小时库,一小时一次,合并到天库中去;
天库,一天一次,合并到全量库中去;
这样就保证了小时库和天库的数据量都不会特别大;
如果数据量和并发量更大,还能增加星期库,月库来缓冲。
三、总结
超大数据量,超高并发量,实时搜索引擎的两个架构要点:
(1)索引分级
(2)dump&merge
如《 深入浅出搜索架构(上篇) 》中所述,全网搜索引擎分为 Spider, Search&Index, Rank 三个部分。本文描述的是 Search&Index 如何实时修改和检索,Spider 子系统如何能实时找到全网新生成的网页,又是另外一个问题,未来撰文讲述。
希望大家有收获,帮转哟。
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论