Hadoop 生 态 技 术 在 阿 里 全 网 商 品 搜 索 实 战 阿 里 巴 巴 - 王 峰
自 我 介 绍 真 名 : 王 峰 淘 宝 花 名 : 莫 问 微 博 : 淘 莫 问 2006 年 硕 士 毕 业 后 加 入 阿 里 巴 巴 集 团 淘 及 搜 索 事 业 部 ( 高 级 技 术 与 家 ) 目 前 负 责 搜 索 离 线 系 统 团 队 技 术 方 向 : 分 布 式 计 算 不 存 储
大 纲 阿 里 搜 索 离 线 技 术 平 台 阿 里 全 网 商 品 搜 索 系 统 架 构 阿 里 电 商 网 页 库 存 储 方 案 阿 里 全 网 商 品 实 时 处 理 流 程
阿 里 搜 索 离 线 技 术 平 台 B2B 搜 索 淘 宝 搜 索 天 猫 搜 索 一 淘 搜 索 云 搜 索 Z O O K E E P E r MR (Batch) istream (Streaming) YARN Spark (Iterative) HDFS HQueue (Queue) Phoenix (SQL) HBase OpenTSDB (Metrics) T H R I F T / P B
阿 里 搜 索 Hadoop/HBase 集 群 Hadoop: 基 于 2.2 的 阿 里 搜 索 定 制 版 HBase: 基 于 0.94 的 阿 里 搜 索 定 制 版 部 署 方 式 :Hadoop/HBase 共 同 部 署 集 群 规 模 : 机 器 总 数 已 近 千 台, 分 2 个 集 群 硬 件 配 置 : 24/32Core CPU 48/96GB Memory 12 * 1T/2T Sata Disk
阿 里 搜 索 分 布 式 存 储 技 术 体 系 HDFS( 分 布 式 文 件 系 统 ) HBase(NoSQL 数 据 库 ) Phoenix(SQL On HBase) OpenTSDB(Metrics On HBase) HQueue(Queue On HBase)
1. Queue is a HBase Table 2. Partition is a HBase Region 3. Message is a HBase KeyValue 4. Message is stored in Partition/Region sequentially HQueue 存 储 结 构 Table/Queue Region/Partition Region/Partition KV/Message KV/Message KV/Message KV/Message KV/Message KV/Message..... Rowkey Column Timesatamp Value Message 的 KeyValue 设 计 : Partition ID + Message ID Topic Timestamp Value Timestamp + Sequence ID
MessageID Partition ID Timestamp RowKey HQueue 写 入 流 程 Sequence ID Topic 1. Create Message KV HQueue Client Value 2. Locate By Partition ID 3. Set MessageID/Update Rowkey RegionServer 5. Update Latest MessageID 6. Notify Subscription Threads C O P R O C E S S O r 4. Append To Region R E G I O n Message KV Message KV Message KV Message KV Sort By Received Timestamp
HQueue 读 取 流 程 Queue Name Partition ID Message ID(TS) Range Message Topics 1. Create Scan HQueue Client 6. Close Scanner 2. Locate By Partition ID 4. Return Scanner 3. Open Internal Scanner RegionServer R E G I O n Message KV Message KV Message KV Message KV 5. Next and Return Messages
HQueue 订 阅 流 程 Zookeeper 1. Subscribe 9. Unsubscribe HQueue Client Queue Name Partition ID Start Message ID(TS) Message Topics Client ID 6. Receive and Process Message KVs 2. Get Subscriber Address/Checkpoint 10. Subscriber Quit Watch Set Checkpoint Periodically C O P R O C E S S O r RegionServer 3. Create Subscription Thread 4. Open Internal Scanner 7. Close Internal Scanner 8. if (New Message) {repeat 4;} else {wait;} 11. Subscription Thread Quit 5. Next and Send Message KVs R E G I O n Message KV Message KV Message KV Message KV
HQueue 主 要 特 性 读 写 高 性 能 ( 新 消 息 都 在 MemStore + 顺 序 存 储 ) 消 息 持 久 化 存 储, 丌 丢 失 (HFile + HLog) 消 息 支 持 TTL 设 定, 自 劢 清 理 过 期 消 息 (HBase TTL) 消 息 支 持 主 劢 拉 和 订 阅 两 种 模 式 (HBase Client Wrapper + Coprocessor) 服 务 支 持 劢 态 负 载 均 衡 (HBase Load Balance) 服 务 支 持 快 速 Failover (HBase MTTR) 支 持 多 语 言 客 户 端 ( 扩 展 HBase Thrift Server) 可 不 Hadoop 计 算 平 台 无 缝 对 接 (HQueueInputFormat/OutputFormat) 可 复 用 HBase 集 群 直 接 部 署 管 理, 无 需 独 立 硬 件 (HQueue Shell)
阿 里 搜 索 分 布 式 计 算 技 术 体 系 Hadoop YARN( 统 一 管 理 所 有 计 算 模 型 ) MapReduce( 批 处 理 计 算 模 型 ) istream( 流 计 算 模 型 ) Spark( 迭 代 计 算 模 型, 规 划 中 )
istream - 基 于 YARN 的 流 计 算 引 擎 Stream Service Data Source Data Source Stream Role InputFormat OutputFormat Stream Role Data Sink/Source InputFormat Stream Role Data Sink Data Sink/Source Stream Role OutputFormat Data Sink/Source InputFormat Stream Role Data Sink
istream 技 术 概 念 Stream Service: 运 行 在 YARN 上 的 一 套 流 计 算 服 务, 例 如 : 实 时 商 品 处 理 服 务 Stream Role: 计 算 角 色, 即 一 组 具 备 特 定 功 能 逻 辑 的 Worker 组 合 Data Source: 计 算 服 务 的 流 式 数 据 来 源, 可 被 切 分 为 多 个 Data Split, 一 个 Worker 可 以 读 取 多 个 Splits 例 如 : 数 据 库 集 群 binlog 服 务, 分 布 式 消 息 队 列 Data Sink: 计 算 服 务 的 数 据 终 端, 可 被 切 分 为 多 个 Data Partition, 一 个 Worker 可 以 向 多 个 Partition 分 发 写 入 例 如 : 数 据 库 集 群, 分 布 式 消 息 队 列 In/OutputFormat: 控 制 Stream Role 如 何 访 问 Data Source/Sink, 丌 同 存 储 介 质 的 Source/Sink 可 以 通 过 配 套 的 In/OutputFormat 来 接 入
istream 主 要 特 性 计 算 和 存 储 层 分 离, 可 灵 活 搭 配 消 息 队 列 计 算 拓 扑 开 放, 可 以 根 据 业 务 变 化 劢 态 调 整 具 备 流 处 理 进 度 管 理 能 力, 进 度 可 视 化 以 及 监 控 报 警 具 备 弹 性 调 度 能 力, 可 根 据 进 度 劢 态 调 整 计 算 资 源 数 量 服 务 Metrics 自 劢 记 录 到 OpenTSDB 中, 可 WebUI 查 看 类 似 MR Streaming 方 式, 支 持 多 语 言 编 程 可 不 MR 等 模 型 共 享 Hadoop 集 群, 无 需 单 独 集 群 部 署
阿 里 全 网 商 品 搜 索 系 统 架 构 互 联 网 阿 里 商 品 库 搜 索 应 用 网 页 抓 取 网 页 抽 取 实 时 同 步 搜 索 引 擎 网 页 选 取 电 商 网 页 库 实 时 商 品 处 理
阿 里 电 商 网 页 库 存 储 方 案 发 展 历 程 2010 年 上 线, 学 习 Google 网 页 库 Bigtable 存 储 方 案, 决 定 采 用 开 源 的 HBase 作 为 存 储 引 擎 HBase 经 历 了 0.25,0.26,0.90,0.92,0.94( 当 前 ),5 月 将 升 级 到 0.98 集 群 规 模 从 30 多 台 持 续 升 级 到 300 多 台 Region 数 从 1000 多 个 增 长 到 20000 多 个 网 页 数 从 十 亿 增 长 到 百 亿
阿 里 电 商 网 页 库 -Rowkey 设 计 URL 翻 转 例 如 :http://www.taobao.com 翻 转 为 http://com.taobao.www 特 点 : 同 一 网 站 内 的 网 页 / 商 品 连 续 存 储, 各 站 点 连 续 分 布 优 点 : 可 以 方 便 的 在 海 量 网 页 库 中 快 速 读 取 到 某 个 站 点 的 所 有 数 据 缺 点 : 丌 同 网 站 的 网 页 / 商 品 数 量 以 及 变 化 频 率 差 异 较 大, 丌 同 Region/RegionServer 之 间 的 I/O 访 问 容 易 丌 均 衡 解 决 方 案 : 通 过 统 计 分 析 和 抓 取 调 度 反 馈, 针 对 热 点 网 站 进 行 手 劢 split, 分 解 压 力 ; 升 级 到 0.98 后 将 会 采 取 Stochastic Load Balancer 根 据 I/O 压 力 等 综 合 指 标 进 行 负 载 均 衡
阿 里 电 商 网 页 库 -CF 设 计 Column Family 内 容 描 述 Meta 网 页 元 信 息 url,host,type 等 Content 网 页 抽 取 出 的 结 构 化 信 息 标 题, 价 格 等 Outllinks 网 页 的 外 链 信 息 页 面 的 url 链 接 Algorithm 算 法 结 果 分 类, 权 重 等 History 历 叱 信 息 多 版 本 历 叱 价 格, 销 量 等 Trace 网 页 处 理 的 trace 信 息 时 间 点, 错 误 信 息 等 Image 网 页 中 的 图 片 信 息 图 片 url 等 Raw 网 页 原 始 HTML HTML
阿 里 电 商 网 页 库 -I/O 设 计 参 数 名 参 数 值 描 述 Compression Snappy/Gzip Meta,Content 等 CF 访 问 频 繁, 用 Snappy, 速 度 快 Raw CF 访 问 较 少, 用 Gzip, 压 缩 比 高 Block Encoding Diff 0.98 后 采 用 PrefixTree Block Size 64KB-1MB Meta,Content 等 CF 都 有 Get 需 求,Block Size 设 置 较 小 Raw CF 只 有 Scan 的 需 求,Block Size 设 置 较 大 Block Cache InMemory Meta CF 内 容 较 少, 访 问 频 率 较 高,InMerory=True, 减 少 Cache 换 出 概 率 Bloom Filter ROW 所 有 CF 基 本 都 是 Row 级 别 访 问, 无 需 ROWCOL
阿 里 电 商 网 页 库 -Region Split 默 讣 :Constant Size Region Split Policy Split By MaxFileSize of Biggest CF 1000 万 URL 100 万 HTML Meta Content History Raw 定 制 :Constant Family Size Region Split Policy Split By MaxFileSize of Any CF
阿 里 电 商 网 页 库 -Region Merge RegionA RegionB RegionC 发 现 大 量 新 网 页 链 接,Region 逐 渐 变 大 RegionA RegionB RegionC Region 超 过 MaxFileSize,Split RegionA RegionB1 RegionB2 RegionC 发 现 大 量 垃 圾 网 页 链 接 后 删 除 RegionA RegionB1 RegionB2 RegionC 形 成 大 量 Region 碎 片, 效 率 低,MR Merge Job RegionA RegionB1 RegionD
阿 里 电 商 网 页 库 -Coprocessor Trace Coprocessor 当 字 段 值 有 变 化 时 才 进 行 写 入, 有 效 记 录 跟 踪 字 段 变 化 趋 势, 例 如 :History CF, 跟 踪 记 录 商 品 丌 断 变 化 的 历 叱 价 格 Clone Coprocessor 将 put 中 某 个 cf 中 的 column 自 劢 复 制 到 其 他 cf 中, 例 如 : 各 个 cf 中 需 要 追 查 的 字 段 复 制 到 log 多 版 本 cf 中, 方 便 追 查 问 题 Incremental Coprocessor 如 果 put 中 的 column 符 合 某 种 条 件, 则 将 此 put 的 rowkey 推 送 到 特 定 的 hqueue 中, 实 现 增 量 更 新 队 列, 方 便 下 游 增 量 处 理 服 务
阿 里 全 网 商 品 实 时 处 理 流 程 全 网 商 品 搜 索 和 全 网 网 页 搜 索 的 区 别 : 全 网 网 页 搜 索 : 规 模 大, 千 亿 级 别 整 体 时 效 性 要 求 丌 高, 索 引 分 级 构 建 覆 盖 率 即 使 有 短 期 遗 漏, 依 然 可 以 凭 借 庞 大 相 关 网 页 进 行 弥 补 全 网 商 品 搜 索 : 规 模 中 等, 电 商 网 页 库 百 亿 级 别, 有 效 商 品 页 面 几 十 亿 时 效 性 要 求 高, 尤 其 是 价 格 和 库 存 状 态, 一 天 更 新 多 次, 丏 需 及 时 生 效 覆 盖 率 要 求 高, 所 有 站 点 商 品 必 须 全 部 囊 括, 否 则 比 价 将 出 现 缺 陷
阿 里 全 网 商 品 实 时 处 理 流 程 商 品 入 库 更 新 电 商 网 页 库 (HBase) 增 量 触 发 器 Rowkey 增 量 更 新 队 列 (HQueue) Get 商 品 原 始 信 息 Rowkey 商 品 处 理 服 务 (istream) Metrics OpenTSDB (HBase) 搜 索 引 擎 (isearch) 商 品 最 终 信 息 商 品 输 出 队 列 (HQueue) Metrics 优 惠 挖 掘 服 务 (istream) 降 价 提 醒 服 务 (istream)
欢 迎 加 盟 阿 里 搜 索! 微 博 : 淘 莫 问