当前位置: 首页 > 编程日记 > 正文

支撑亿级用户“刷手机”​,百度Feed流背后的新技术装备有多牛?

导读:截止到2018年底,我国网民使用手机上网的比例已高达98.6%,移动互联网基本全方位覆盖。智能手机的操作模式让我们更倾向于通过简单的“划屏”动作,相对于传统的文本交互方式来获取信息,用户更希望一拿起手机就能刷到自己感兴趣的新闻资讯、短视频和促销信息。因此,基于信息自动聚合,能向用户推送个性化内容的Feed流服务也越来越受青睐,同时正在成为越来越多互联网公司赢得用户的重要手段。

作为全球IT和互联网行业的领先企业,百度始终致力于成为最懂用户的高科技公司。为了向用户提供更高效、更流畅的Feed流服务,百度基于自身在搜索引擎,人工智能等方面的技术优势,构建了核心内存数据库Feed-Cube,来为Feed流服务提供高并发、大容量和高性能的数据存取服务。但是随着百度业务进一步拓展,Feed-Cub也需要为之部署更大容量的内存来承载规模激增的数据,而动态随机存取存储器(DRAM)内存昂贵的价格,使内存扩展带来的总拥有成本 (TCO)压力不断抬升。

在此背景下,为了保证性能的同时有效降低TCO,百度与英特尔展开深入技术合作,引入了全新的英特尔傲腾数据中心及持久内存,并将Feed-Cube的核心工作场景迁移至傲腾构建的全新内存平台上。自此,百度全新Feed-Cube诞生了。

百度Feed流服务的进阶之路

数以亿计的用户规模,促使百度在构建其 Feed 流服务系统时,必须考虑千万量级的并发服务,以及更低延迟的数据处理性能,而这其中的关键,就是存储和信息查询能力的建设。

640?wx_fmt=png

百度核心应用中的Feed流服务

基于 DRAM 内存构建的百度 Feed-Cube 虽然在高/大并发(每秒千万次查询)、海量数据存储(PB 级)环境下一直有着优异的性能表现,但随着百度 Feed 流服务规模的不断扩大,也在不断面临新的挑战。一方面,使用价格较为昂贵的 DRAM 内存来构建大内存池,正使得百度的 TCO 不断抬升;另一方面,单位 DRAM 内存有限的容量,也限制了 Feed-Cube流处理能力的进一步提升。

640?wx_fmt=png

百度 Feed-Cube 工作示意图

为应对上述挑战,百度Feed-Cube开始尝试仅配置DRAM内存的模式和使用DRAM内存与英特尔®傲腾数据中心级持久内存的混合配置模式,再到全面部置在英特尔®傲腾数据中心级持久内存上的模式的测试,我们接下来一起看看这一系列测试结果如何。

首先使用性能不断提升的、基于非易失性存储(NVM)技术的存储设备,如 NVMe固态盘,来存储 Feed-Cube 中的数据文件和哈希表。为验证使用 NVMe 固态盘后的系统性能,百度分别基于 DRAM 内存和 NVMe 固态盘构建了两个 Feed-Cube 集群来进行对比性测试。测试结果表明,与 DRAM 内存相比,下沉到 NVMe 固态盘的Feed-Cube 出现了多方面的问题。

基于英特尔 3D XPoint 存储技术打造的英特尔®傲腾数据中心级持久内存,则为这些问题的破解提供了全新路径,这种旨在革新内存和存储架构的全新产品类别相比固态盘,拥有更高的读写性能、更低的访问延时以及更高的耐用性,在多用户、高并发和大容量的场景下有着非常突出的综合应用优势。

有鉴于此,百度首先引入英特尔®傲腾数据中心级持久内存,用于存储 Feed-Cube 中的数据文件部分,而哈希表仍使用 DRAM 内存。采用这一混合配置的目的,一方面是为了验证英特尔®傲腾数据中心级持久内存在 Feed-Cube 中的性能表现;另一方面,Feed-Cube 在查询 Value 值的过程中,读哈希表的次数要远大于读数据文件,因此先在数据文件部分进行替换,可以尽可能减少对 Feed-Cube 性能的影响。

为了使英特尔®傲腾数据中心级持久内存能够成功地应用于Feed-Cube,百度与英特尔一起围绕系统硬件、操作系统、内核等组件进行了全方位的优化。

双方首先将 Feed-Cube 部署在了基于第二代英特尔®至强可扩展处理器的平台上,该处理器不仅能提供更为强劲的计算性能,还是英特尔®傲腾数据中心级持久内存的“良配”;其次,为保证新硬件能充分释放性能潜力,英特尔还根据Feed-Cube 应用场景的需求,在服务器 BIOS 中加入了对英特尔®傲腾数据中心级持久内存的支持驱动,并在百度自研 4 系 Linux内核的基础上,增添了相关的补丁。完成这一系列优化“组合拳”后,百度在随后进行的、对比纯 DRAM内存模式与混合配置模式的测试中,模拟了实际场景中可能出现的大并发两千万级访问压力。测试结果如图所示。

640?wx_fmt=png

可以看出,采用混合配置模式后,Feed-Cube 在 2 千万大并发访问压力下,平均访问耗时仅上升约 24%(30 微秒)处理器消耗整机占比上升7%  ,性能波动均在百度可接受的范围内。而与此同时,单服务器的 DRAM 内存使用量下降过半,这对于 Feed-Cube PB 级的存储容量而言,无疑可大大降低成本。上述混合配置模式的成功,促使百度进一步尝试在 Feed-Cube 中采用全部配置英特尔®傲腾数据中心级持久内存的模式。

Feed-Cube 分别在纯 DRAM 内存模式及 DRAM 内存+ 英特尔®傲腾数据中心级持久内存混合配置模式下的对比测试结果

在全部采用英特尔®傲腾数据中心级持久内存构建 Feed-Cube 后,百度也对其性能表现和资源消耗情况进行了测试。如图所示,以每秒 50 万次查询(QPS)的访问压力为例,测试结果显示:只配置英特尔®傲腾数据中心级持久内存的平均时延与只配置DRAM 内存的方案相比,上升约 9.66% ,性能波动也在百度可接受的范围内。

640?wx_fmt=png

不同配置下处理时延对比

三种模式下,在大并发访问压力下的性能表现以及资源消耗均符合百度预期,测试表明全面部署英特尔傲腾数据中心级持久内存模式完全可为百度 Feed 流服务提供最快最高性能数据存取支撑。

在开展与 Feed 流服务相关的验证及测试的同时,百度还在其他多个业务场景中探索了使用英特尔®傲腾数据中心级持久内存的可行性及使用场景。

以某核心业务模块系统的故障恢复为例,该业务模块在原来采用DRAM内存部署时,一旦遇到停电、宕机等突发故障时,就需要从后台固态盘/HDD硬盘中重新加载数据来恢复服务,这一过程往往需要耗时数十分钟之久,严重影响服务的启动和上线效率。而利用英特尔®傲腾数据中心级持久内存高速的读写性能以及非易失性特性,现在这一加载时间被缩减到了秒级。

回顾上述使用场景,清晰可见的是:英特尔®傲腾数据中心级持久内存带来的高密度内存与热启动特性,正在助推“功能即服务”(FaaS)的持续创新和发展。作为未来云服务的重要方向,FaaS 基于“无服务器”特性的功能框架,其短暂的生命周期(甚至仅有数秒)对启动速度要求更高,对内存需求更多。百度对于 FaaS 的探索,在英特尔傲腾数据中心级持久内存的助力下,在启动速度和 TCO 两方面,有显著提升。

未来,百度与英特尔还计划继续围绕英特尔®傲腾数据中心级持久内存,以及与其搭配的第二代英特尔®至强可扩展处理器等一系列先进产品与技术,开展更多也更为深入的技术交流与协作,让它们能够在更多互联网核心业务场景,以及关键应用和服务中发挥更为重要的作用,释放英特尔傲腾更多价值,也能帮助百度在这些技术的助推之下,向用户提供更为多样和完善的产品用户体验。

相关文章:

玩转高性能超猛防火墙nf-HiPAC

中华国学,用英文讲的,稀里糊涂听了个大概,不得不佩服西方人的缜密的逻辑思维,竟然把玄之又玄的道家思想说的跟牛顿定律一般,佩服。归家,又收到了邮件,还是关于nf-hipac的,不知不觉就…

ios 沙盒 plist 数据的读取和存储

plist 只能存储基本的数据类型 和 array 字典 [objc] view plaincopy - (void)saveArray { // 1.获得沙盒根路径 NSString *home NSHomeDirectory(); // 2.document路径 NSString *docPath [home stringByAppendingPathComponent:"Document…

FFmpeg实现获取USB摄像头视频流测试代码

通过USB摄像头(注:windows7/10下使用内置摄像头,linux下接普通的usb摄像头(Logitech))获取视频流用到的模块包括avformat和avdevice。头文件仅include avdevice.h即可,因为avdevice.h中会include avformat.h。libavdevice库是libavformat的一…

重磅!明略发布数据中台战略和三大解决方案

11月15日,明略科技在上海举办以“FASTER 聚变增长新动力”为主题的2019数据智能峰会,宣布“打造智能时代的企业中台”新战略,同时推出了两大新产品“新一代数据中台”和“营销智能平台”,以及三大行业解决方案,分别是“…

Android程序完全退出的三种方法

1. Dalvik VM的本地方法 android.os.Process.killProcess(android.os.Process.myPid()) //获取PID,目前获取自己的也只有该API,否则从/proc中自己的枚举其他进程吧,不过要说明的是,结束其他进程不一定有权限,不然就…

FFmpeg通过摄像头实现对视频流进行解码并显示测试代码(旧接口)

这里通过USB摄像头(注:windows7/10下使用内置摄像头,linux下接普通的usb摄像头(Logitech))获取视频流,然后解码,最后再用opencv显示。用到的模块包括avformat、avcodec和avdevice。libavdevice库是libavformat的一个补充库(comple…

IOS数据存储之文件沙盒存储

前言: 之前学习了数据存储的NSUserDefaults,归档和解档,对于项目开发中如果要存储一些文件,比如图片,音频,视频等文件的时候就需要用到文件存储了。文件沙盒存储主要存储非机密数据,大的数据。 …

剖析Focal Loss损失函数: 消除类别不平衡+挖掘难分样本 | CSDN博文精选

作者 | 图像所浩南哥来源 | CSDN博客论文名称:《 Focal Loss for Dense Object Detection 》论文下载:https://arxiv.org/pdf/1708.02002.pdf论文代码:https://github.com/facebookresearch/Detectron/tree/master/configs/12_2017_baselines…

windows下mysql开启慢查询

mysql在windows系统中的配置文件一般是my.ini,我的路径是c:\mysql\my.ini,你根据自己安装mysql路径去查找[mysqld]#The TCP/IP Port the MySQL Server will listen onport3306#开启慢查询log-slow-queries E:\Program Files\MySQL\MySQL Server 5.5\mysql_slow_query.loglong_…

FFmpeg通过摄像头实现对视频流进行解码并显示测试代码(新接口)

在https://blog.csdn.net/fengbingchun/article/details/93975325 中给出了通过旧接口即FFmpeg中已废弃的接口实现通过摄像头获取视频流然后解码并显示的测试代码,这里通过使用FFmpeg中的新接口再次实现通过的功能,主要涉及到的接口函数包括:…

iOS经典讲解之获取沙盒文件路径写入和读取简单对象

#import "RootViewController.h" interface RootViewController () end 实现文件: implementation RootViewController - (void)viewDidLoad { [super viewDidLoad]; [self path]; [self writeFile]; [self readingFi…

Google最新论文:Youtube视频推荐如何做多目标排序

作者 | 深度传送门来源 | 深度传送门(ID:deep_deliver)导读:本文是“深度推荐系统”专栏的第十五篇文章,这个系列将介绍在深度学习的强力驱动下,给推荐系统工业界所带来的最前沿的变化。本文主要介绍下Google在RecSys …

Jmeter 笔记

Apache JMeter是Apache组织开发的基于Java的压力测试工具。用于对软件做压力测试,它最初被设计用于Web应用测试但后来扩展到其他测试领域。 它可以用于测试静态和动态资源例如静态文件、Java 小服务程序、CGI 脚本、Java 对象、数据库, FTP 服务器&#…

王贻芳院士:为什么中国要探究中微子实验?

演讲嘉宾 | 王贻芳(中国科学院院士、中科院高能物理研究所所长)整理 | 德状出品 | AI科技大本营(ID:rgznai100)日前,在2019腾讯科学WE大会期间,中国科学院院士、高能物理研究所所长王贻芳分享了中微子与光电…

一个苹果证书供多台电脑开发使用——导出p12文件

摘要 在苹果开发者网站申请的证书,是授权mac设备的开发或者发布的证书,这意味着一个设备对应一个证书,但是99美元账号只允许生成3个发布证书,两个开发证书,这满足不了多mac设备的使用,使用p12文件可以解决这…

FFmpeg中AVDictionary介绍

FFmpeg中的AVDictionary是一个结构体,简单的key/value存储,经常使用AVDictionary设置或读取内部参数,声明如下,具体实现在libavutil模块中的dict.c/h,提供此结构体是为了与libav兼容,但它实现效率低下&…

RocketMQ3.2.2生产者发送消息自动创建Topic队列数无法超过4个

问题现象RocketMQ3.2.2版本,测试时尝试发送消息时自动创建Topic,设置了队列数量为8:producer.setDefaultTopicQueueNums(8);同时设置broker服务器的配置文件broker.properties:defaultTopicQueueNums16但实际创建后从控制台及后台…

iOS各种宏定义

#ifndef MacroDefinition_h #define MacroDefinition_h //************************ 获取设备屏幕尺寸********************************************** //宽度 #define SCREEN_WIDTH [UIScreen mainScreen].bounds.size.width //高度 #define SCREENH_HEIGHT [UIScree…

开源库libuuid简介及使用

libuuid是一个开源的用于生成UUID(Universally Unique Identifier,通用唯一标识符)的库,它的源码可从https://sourceforge.net/projects/libuuid/ 下载,最新版本为1.0.3,更新于2013年4月27日,此库仅支持在类Linux下编译…

深度学习会议论文不好找?这个ConfTube网站全都有

BDTC大会官网:https://t.csdnimg.cn/q4TY作者 | 刘畅 出品 | AI科技大本营(ID:rgznai1000)最近跟身边的硕士生、博士生聊天,发现有一个共同话题,大家都想要知道哪款产品能防止掉头发?养发育发已经成了茶余饭…

Java用for循环Map

为什么80%的码农都做不了架构师?>>> 根据JDK5的新特性,用For循环Map,例如循环Map的Key for(String dataKey : paraMap.keySet()) { System.out.println(dataKey ); } 注意的是,paraMap 是怎么样定义的,如果是简单的Map paraMap new …

iOS 应用发布到AppStore流程

iOS开发者,把开发出来的App上传到App Store是必须的。下面就来详细介绍下具体流程。 方法/步骤 1打开苹果开发者中心 打开后点击:Member Center 2如果你的电脑没有保存密码,则会提示你输入开发者帐号和密码,因为我的电脑已经保存了…

FFmpeg中编码类型为rawvideo无须解码直接显示测试代码

在 https://blog.csdn.net/fengbingchun/article/details/93975325 中介绍过通过FFmpeg可以直接获取usb视频流并解码显示的测试代码,当时通过usb获取到的视频流编码类型为AV_CODEC_ID_RAWVIDEO,像素格式为AV_PIX_FMT_YUYV422,其实编码类型为r…

一场高质量的技术盛会怎样炼成?「2019中国大数据技术大会」蓄势待发,还不快上车?...

2019年12月,一场轰动国内产业界、学术界、科研界及投资领域的顶级科技盛会即将拉开帷幕,它涵盖大数据、人工智能、云计算、AIoT、金融科技、智能制造等十几个前沿领域的热门话题。在过去十二年里,这场盛会从最初仅 60 余人参加的技术沙龙到如…

融合应用11.1.8安装,一步一步的引导

融合应用11.1.8安装,一步一步的引导 融合应用11.1.8 安装并不是简单的与电子商务套件11 i / R12安装。 所以我们需要安装划分为许多步骤。 请注意,11.1.8 11.1.7总统发布供应是几乎相同的。 在同一时间的步骤和一些组件11.1.6和11.1.5相比有所不同。 这里我们有实际使用同一个…

FFmpeg中一个线程获取视频流一个线程执行scale测试代码

在https://blog.csdn.net/fengbingchun/article/details/94712986 中介绍过如果usb视频流编码类型为rawvideo则无需进行解码,可直接通过av_read_frame获取视频流然后再通过sws_scale进行像素格式转换,当在高分辨率情况下,有时达不到实时显示&…

医疗影像处理:去除医疗影像中背景的影响2D/3D【numpy-code】| CSDN博文精选

BDTC大会官网:https://t.csdnimg.cn/q4TY作者 | chestnut--来源 | CSDN博客在医疗影像中特别是CT影像,包含大量的背景,在进行器官分割时,首先去除背景对分割的效果有很好的提升。本博客使用Python处理医疗影像并去除背景的影像。使…

iOS APP提交上架最新流程

iOS APP提交上架最新流程 反复提交的过程中对上架流程熟悉了好多,写篇帖子送给同为菜鸟的你,如果里面有很菜的东西,大牛请自动忽略,毕竟这也是还为菜鸟的我的备忘录呢! 首先得描述一下各个证书的定位,作…

Spring mvc Data Redis—Pub/Sub(附Web项目源码)

一、发布和订阅机制 当一个客户端通过 PUBLISH 命令向订阅者发送信息的时候,我们称这个客户端为发布者(publisher)。 而当一个客户端使用 SUBSCRIBE 或者 PSUBSCRIBE 命令接收信息的时候,我们称这个客户端为订阅者(subscriber)。 为了解耦发布者(publish…

iOS分析崩溃日志

前言 iOS分析定位崩溃问题有很多种方式,但是发布到AppStore的应用如果崩溃了,我们该怎么办呢?通常我们都会在系统中接入统计系统,在系统崩溃的时候记录下崩溃日志,下次启动时将日志发送到服务端,比较好的第…