写点什么

豌豆荚工程师谈其新版应用搜索技术

  • 2012 年 12 月 06 日
  • 本文字数:3475 字

    阅读完需:约 11 分钟

豌豆荚近日发布了应用搜索的新版本,主要针对安全、隐私等问题做出了改善,InfoQ 就相关技术问题对其工程师进行了采访。

InfoQ:首先请二位做下自我介绍?

陈兴润:我叫陈兴润,是豌豆荚的后台工程师,和吉昌一样也是早期的团队成员,主要负责应用搜索。

丁吉昌:我叫丁吉昌,我跟兴润是同期来豌豆荚的,现在我们也在一个团队,我现在算是应用搜索的负责人。

InfoQ:豌豆荚应用搜索迄今在架构上经历了几个阶段?

陈兴润:主要是三个阶段,第一个阶段,我们当时是为了追求全,就收录尽可能多的应用。在这个阶段我们会有爬虫不断的去爬取各大市场的应用。当时机器比较少,人也比较少,所以更新频率不是很快,大概是一天更新一次,就是从爬虫到最后展现给用户需要一天的时间;第二个阶段,因为对实时性要求不断提高,我们对架构进行了一些调整,大概从爬虫爬到以后,到最后展现给用户需要六个小时;第三个阶段是从今年 6 月份开始做的,现在从爬虫爬到到最后展现给用户,能够在秒级完成,大概五秒以内就能够在首页出现,用户在 30 秒内就能够搜到。

InfoQ:搜索的实时性是怎么来做提高的?

陈兴润:第一个阶段实时性不高是因为我们做了页面的静态化,所有用户看到的内容是一样的;第二个阶段,我们去掉了页面静态化的逻辑,加入了一些后端数据库的缓存,这样子在性能没有太多损失的情况下,提高了实时性;第三阶段我们用了一系列的消息中间件,还有使用订阅和发布机制来保证整套系统能够在秒级的时间内更新。 并且最早的时候我们主要是靠爬虫去各个应用商店抓取内容,最近有很多应用商店愿意和我们合作,他们会把数据主动的推给我们,这样能够更快、更实时的拿到最新的数据。

InfoQ:豌豆荚应用搜索这次发布的“绿色标签”和“优质开发者认证”主要是在安全方面做出了改善,这些背后是怎样一个机制?

陈兴润:我们主要有四个标签:

第一个是安全标签,我们接入了三家安全厂商,每收录一个应用,就会把这个应用交给这些厂商,请他们帮我们做病毒扫描。如果全部都能扫描通过的话,我们就会打上“安全”标记;如果有一家不通过,其他家通过的话,我们就会标上“可疑”标记;如果两家或全部都不通过就会标上“危险”标记,标记为“危险”的应用不会出现在页面上、用户也是搜索不到的;

第二个是广告标签,我们会收集一些广告 SDK 的特征清单,对我们拿到的每个应用,利用这个清单进行过滤,如果应用用到了这个清单中的 SDK,我们就认为这个应用里面有广告。同样,如果有那种比较恶劣的通知栏广告应用,我们也是不会让它出现在应用搜索的首页上;

第三个是权限标签,我们整理了一些可能危害用户隐私的权限,比如说打电话、发短信、访问他的联系人数据等,如果一个应用用到了这些权限,我们就认为他有可能会触犯用户的隐私,除非他有很好的理由说用这个权限的确是合理的;

第四个标签是 Google Play 验证标签,主要是针对有些在 Google Play 上的国外应用。它的原理是:豌豆荚会去爬 Google Play 上的应用安装包,拿到以后会分析出这个应用的签名,把它存在数据库里,对我们爬到的每一个应用做签名认证。如果他的签名和它在 Google Play 上的签名是一样的,我们就会给他打上 Google Play 认证标签。因为有些应用可能会经过国内很多破解或者汉化等加工,加工以后有可能损害用户的利益:破解者可能加一些广告,或者加一些危害用户隐私的代码。如果我们标上了 Google Play 验证的标签,就说明用户看到的这个应用包和 Google Play 上的包是一样的,这样就可以一定程度保证这个包没有被第三方非法篡改过;

丁吉昌:还有一个优质开发者标签。其实刚才兴润基本上把原理都讲了,像安全就是我们为什么引入三家、四家?因为我们发现所收录的应用,每家安全厂商对其判断标准还是挺不一样的,比如 29% 的应用腾讯觉得没问题,360 却觉得有问题;同样有接近 30% 的应用,360 觉得没有问题,腾讯觉得有问题,所以我们也就引入了多家安全厂商来做辅助判断。对于广告,豌豆荚会针对超过 1000 个广告特征进行扫描,是国内做的比较早的。这四个标签对我们的分析来说都比较重要,因为没有任何一个指标能完全保证应用质量是靠谱的,既使是像 Google Play 这种审核比较严格的市场,也有 3% 左右的应用是有安全问题的,所以我们就把更多标签都放上去。除了这些标签之外,我们还做了一个用户不可见的事情:相信“用户投票”的结果,用户好评低于 30% 的应用也不会出现在首页。在做应用排序的时候会通过 4 个绿色标签和优质开发者认证来做一个优先级排序,这是一个智能的筛选策略,也是本次重构的重点。

InfoQ:你们在实现这些绿色标签的时候,技术上会有哪些挑战?

丁吉昌:安全方面,我们觉得实现的难点可能是商务谈判上,即如何把不同的安全厂商接入进来,让他们愿意合作;第二就是广告扫描,如何跟的上广告特征增加的速度,因为广告平台在不停的增加,包括他们的特征也不停的增加,这些是需要持续维护的一件事情。

InfoQ:实际上对于广告和权限就是直接看它是否有声明?

丁吉昌:我们会解开他的代码来解析;同时我们还在使用“用户投票”的结果,就是我们会根据用户自己的选择结果来判断哪个应用最受欢迎、哪个应用的签名最受欢迎。对于我们完全没有办法进行验证的应用,我们会用这个策略来判断,同时这里面涉及到的计算量会比较大,因为我们有几千万用户,所以这里面也有些技术难度。

InfoQ:这个是做实时计算吗?

丁吉昌:对,实时计算。

InfoQ:现在我们怎么来做这一块的?有多大的一个集群?

陈兴润:我们是有一个集群,现在其实是有数十台机器跑在 Hadoop 上。

丁吉昌:主要是 Hadoop,一开始我们计算的时候要两天,后来重构算法以后可以做到几乎实时,包括现在豌豆荚上看到那些安装量也都是实时的,当然现在还没有做到每秒去更新,因为计算量比较大;

InfoQ:当应用被收录之后豌豆荚会做哪些工作?

陈兴润:我们的爬虫是以全为目的,尽可能多的收录应用。但是收录进来的应用不一定能让用户看到。会根据一些原则来进行处理,例如违法等应用不会显示也不能搜索到;

丁吉昌:其实收录以后会进行安全、广告校验,也会对完整性、非法性做基本的校验,只有满足这些条件的,才会入到我们最终的库里面展现给用户。

InfoQ:豌豆荚的推荐算法是怎么来应用的?

彭跃辉:目前我们做了“豌豆猜”。为什么做这个东西呢?是因为我们发现用户在豌豆荚里面下载应用,Top200 的应用好像就已经占了下载量的 95% 以上,这样会有一个问题,即大部分应用其实用户都接触不到。做“豌豆猜”当时的目的就是想把一些优质的应用展现给用户。另一方面是应用不像音乐,用户的搜索行为不是太多,用户主要是靠浏览去下载应用;还有就是我们想对一些用户历史行为进行挖掘,去发现一些用户的兴趣点,然后把他感兴趣的应用推荐给他。

InfoQ:挖掘这个算法能够稍微介绍一下吗?

彭跃辉:其实上周六的时候,我们去参加了推荐系统的大会,在会上也简单介绍过。我们发现一个很有意思的点是我们做这件事情的过程和 Hulu 做推荐系统的演变过程基本上是一样的。我们在最开始的时候,可能是一种基于 item 的协同过滤算法。随着我们对应用领域的了解,我们发现其实可以把一些应用的特征加进去,就加入了一些基于内容的推荐。这样的话,第二个版本就是一些基于 item 的协同过滤加上一个基于内容的推荐。做完这部分之后,我们发现这两种策略还是有一些 bad case,主要体现就是它经常给出的是一些相似的应用,但不是一些相关的应用。举例来说,比如你下了一个愤怒的小鸟,他会给你推荐一个愤怒的小鸟 2。但是相关的想法是,比如说你下了“知乎”,要可以给你推荐“点点”,或者给你推荐“豆瓣读书”这样的应用。我们为了让应用相关性更强就引进了一些 topic model 的算法。目前我们会对一些应用抽取 topic,建立这些应用和 topic 之间的关联。我们目前就是做到第三步这个阶段;

InfoQ:豌豆荚应用搜索下一步有什么打算?

丁吉昌:就如兴润刚才所讲,我们之前目标是做全,现在的目标是要做精。再长远一点,我们会考虑做一些事情:第一个提供给用户的安装包,首先是安全的,没有广告、弹窗,或者隐私这种问题。但同时还要考虑用户手机是不是能够安装上,因为 Android 分裂的特别严重,所以也不是每个开发者都有精力来做到所有的手机适配,我们会将适配加入到应用搜索中;另外是运营方面也有一些策略,比如现在正在做的优质开发者,对于优质开发者的应用将会在各种排序和策略上优先展示;

陈兴润:有些事情其实我们还没有特别确定,比如说我们现在做的事情可能是过去三、五个月摸索的时候,发现用户有很多抱怨或者有需求没有满足的时候才开始做的。最终做成什么样,还要根据用户的反馈;

2012 年 12 月 06 日 06:122813
用户头像

发布了 89 篇内容, 共 27.5 次阅读, 收获喜欢 4 次。

关注

评论

发布
暂无评论
发现更多内容

不一样的面向对象(三)

书旅

php 面向对象 面向对象编程

Spring 5 中文解析数据存储篇-JDBC数据存储(下)

青年IT男

Spring5

java安全编码指南之:异常处理

程序那些事

java安全编码 java安全 java安全编码指南

奈学:Java 和 JavaScript 是什么关系?

古月木易

Java

奈学:Java 和 JavaScript 是什么关系?

奈学教育

Java

聊一下《技术力量-一线技术团队成功启示录》

Man

中台 研发管理

StreamNative 宣布开源 MoP:Apache Pulsar 支持原生 MQTT 协议

Apache Pulsar

开源 云原生 mqtt Apache Pulsar 消息中间件

查看mac电脑的温度信息, 并且给mac电脑降温

lmymirror

macos Mac terminal

架构1期第三周作业二

道长

极客大学架构师训练营

Go编程(一) 怎么写Go代码

dongfanger

编程 开发 Go 语言

图解 K8S 源码 - Deployment Controller 篇

郭旭东

Kubernetes Kubernetes源码

点对点音视频应用场景及优势

anyRTC开发者

音视频 WebRTC 直播 RTC 安卓

架构1期第三周作业一

道长

极客大学架构师训练营

linux 文件权限控制

kcnf

linux 文件权限控制 acl

初学源码之——Spring IOC 应用

Java架构师迁哥

国庆假期快来了,打开8天长假的正确方式是...

老胡爱分享

读书 书籍推荐 随笔杂谈

数据挖掘技术在轨迹数据上的应用实践

滴滴技术

人工智能 数据挖掘 滴滴技术 轨道技术 创新公交

浅谈滴滴需求响应式公交背后的技术

滴滴技术

滴滴技术 创新公交 路径优化

一篇文章搞定 Nginx 反向代理与负载均衡

哈喽沃德先生

nginx 负载均衡 反向代理 服务器 正向代理与反向代理

第 0 次面试

escray

程序员 面试 面经

2020年行摄回忆录(上)

穿过生命散发芬芳

生活 摄影

Java源码系列1——ArrayList

超超不会飞

Java

JAVA集合之ConcurrentHashMap

彭阿三

Java JAVA集合

信息公交服务在滴滴的应用实践

滴滴技术

滴滴技术 人工只能 信息公交 路径优化

2020面试阿里字节跳动90%被问到的JVM面试题附答案

Java架构师迁哥

融云技术分享:基于WebRTC的实时音视频首帧显示时间优化实践

JackJiang

音视频 即时通讯 实时通信

甲方日常 24

句子

工作 随笔杂谈 日常

比曲婉婷云尽孝更可怕的是:2020年,低收入家庭仍然在被收割

成周

心理学 教育 培训 维权 曲婉婷

Go编程(二) 多线程简单斗地主

dongfanger

编程 开发 Go 语言

DàYé玩转数据战略Step By Step

曲水流觞TechRill

数据中台 数字化

10多家公司的Java开发面试常见问题合集

Java架构师迁哥

Flutter 自动化测试

Flutter 自动化测试

豌豆荚工程师谈其新版应用搜索技术-InfoQ