https://mp.weixin.qq.com/s/pBT1ga\_oBZu2Jb\_ZPplchw
MVP 架构
那么,领英是如何最终实现为会员提供相关信息的目标的?在回答这个问题之前,需要首先聊聊最低可行产品(简称 MVP)的实际架构。
设计
MVP 的架构其实非常简单:
iOS 与 Android 移动应用会与 Voyager-API(一个基于 REST 的应用层)进行通信,旨在为特定馈送内容上的某项活动请求相关评论。Voyager-API 会将此请求转发至 Feed Mixer(排名与混合层),用以生成一份相关评论列表。
Feed Mixer 通过向用户信息库扇出请求的方式获取对方的一级连接,从而实现 MP 评论关联性算法。而评论线索库则将获得一份关于特定线索的完整评论列表。该评论线索库为领英 NoSQL 存储库 Espresso 的真相库来源。对于该线索之上的每一条评论,Espresso 都会存储一项示例特征(即合并后的点赞次数)。各评论依靠这样的特征进行排名,并被发送回 Voyager-API 以实现面向观看者的结果显示。
可扩展性挑战
通过架构图可以看到,当用户等待相关评论列表时,会出现在线特征加入的问题。在这种情况下,系统会因延迟问题而导致可排名评论数量受限。极高的计算量与由评论特征检索及处理带来的延迟会令 Espresso 库的后台延迟超过 800 毫秒,这无疑会引发严重的站点性能下滑。可以肯定的是,领英无法将此作为长期性解决方案。
尽管如此,此 MVP 仍然算得上成功。其能够显示排名评论的价值,而不仅仅是根据时间顺序进行简单呈现。另外,其也暴露出这种简单处理方式的弱点——高质量评论可能单纯因为得到的赞较少而被低质量评论所淹没,而且新近发布的评论由于没有足够的时间积累赞与回复而在线索判断层面处于劣势。凭借着积累到的这些宝贵经验,技术团队开始着手对该系统进行生产化调整。
可扩展生产架构
2016 年 8 月,领英决定推出一套不存在上述在线特征生成问题的架构方案。他们还借此机会尝试进一步提升评论排名的实际效果。
特征管道
在起步阶段,技术团队选择了一套能够有效描述评论的特征列表以及作为特征获取来源的数据源。其规模要远远超过只具备单一功能的 MVP。为了实现这项目标,他们从以下三个角度着手:
关于评论者的特征 ;
关于评论内容本身的特征 ;
关于评论参与度的特征。
上述各项特征皆通过对各数据存储库进行近实时查询的方式获取。这些特征通过一条特征添加管道进行推送,而此添加管道又由评论创建与交互进行驱动。另外,这一特征添加管道利用 Apache Samza 构建而成(领英的近线流处理系统)。
最终,技术团队得到了一份已添加特征的可用列表,其中包含每条评论的对应交付系统的单一 SSD/ 内存查找结果。另外,以上全部特征皆驻留在 HDFS 当中以备离线分析与模型训练。
交付基础设施
为了保证评论内容的相关性,需要一套能够满足以下要求的交付子系统:
这套系统应具备一份索引,用以立足某一评论线索(快速)检索全部评论内容。
立足该线索快速访问添加特征列表当中的每条评论。
有能力以规模化方式支持成千上万 QPS 并立足馈送内容为每条请求生成相关评论。
虽然(1)与(2)两项任务比较简单,但(3)才是这项设计的核心驱动因素。以规模化方式交付成千上万 QPS 大大缩小了可选范围,因此最终选项被固定在两套子系统当中:Galene(文档划分式搜索堆栈)以及 FollowFeed(术语划分式馈送堆栈)。
这两套系统在各自的领域中皆拥有良好的实际表现:Galene 为领英的搜索流量与多站点功能(例如工作推荐、人员搜索等)提供支持,而 FollowFeed 则支撑着馈送体系中的全部用户生成内容。在经过审议与一系列基准测试之后,研发人员决定采用 FollowFeed,因为其已经与馈送生态系统完美结合起来。不过这又带来了其它一些值得讨论的设计取舍。
这里解释一下,FoolowFeed 是一套术语划分系统(其中每个叶节点负责存储与某一主要术语相关的文档)。在 FollowFeed 当中,各术语属于围绕 actor(例如会员、企业等等)建立而成的概念以及一份由该 actor 所执行社交操作的列表(评论、赞、分享等)。为了保证 FollowFeed 始终返回相关评论,需要对基础进行重新调整。
重整系统以接入可进行评论的各类条目
与能够在领英生态系统内部生成评论内容的少数 actor 不同(例如会员、高校、企业),这里研发团队面对的是更为广泛的会员可评论对象(例如文章、长篇帖子、分享、纪念活动以及视频等等)。FollowFeed 的核心数据结构能够将每个 MemberID 同一系列活动关联起来。技术专家们以这套数据结构为基础,而后构建起另一套能够将帖子 ID 同一份评论活动列表相关联的数据结构。从概念层面讲,这只是一项小小的调整,但在大型生产系统当中实现这项调整却需要耗费远超想象的时间。
修正前 N 条与扇出概念
在馈送领域当中,技术团队面临的挑战在于如何为特定用户挑选最适合的前 N 条帖子。他们需要根据特定会员及其连接列表生成这些与其需求最契合的前 N 条推荐内容。具体来讲,需要提取该会员的连接集,并根据该会员的每一条连接扇出请求,最终给出前 N 条帖子推荐结果。
不过在评论方面,需要将以上提到的 1:N 扩大到 M:NM。其中的 M 为帖子 ID,而每篇帖子都需要生成前 N 条最佳评论。
尽管可以在 FeedMixer 层上进行 N 次请求扇出并对 FollowFeed 进行 N 次查询,但这显然不是最佳解决方案。
方差和法则告诉技术团队,N 个独立延迟量彼此为加和关系。这意味着:
因此在 FeedMixer 层上进行请求扇出将极大提升延迟水平。最终的尾延迟不仅包含由 FollowFeed-Storage(最底层交付基础设施层)产生的方差,亦包括来自 FollowFeed-Query 层的方差。然而,如果首先对 FollowFeed-Query 执行单批次请求,而后再对 FollowFeed-Storage 进行一次扇出,则可有效控制尾延迟水平。
提供、发布及访问新特征,并利用其进行评论排名
这套系统尚处于早期开发阶段,因此还无法顺畅处理各类特征。在各个交付节点之上设置并使用特征存储库,在各节点间合理发布数据,并根据特定键进行划分。这一流程在基础设施工程层面非常简单:在出现数据时,技术专家们会利用 FollowFeed 出色的模型执行能力对来自机器学习模型内的相关评论进行排名。
领英使用的机器学习模型
为了实现个性化评论排名,领英训练出一套逻辑回归模型,用以预测查看者对于各条评论的参与度水平。这套模型利用领英 Photon ML 库当中的广泛特征储备训练而成。
这套机器学习模型从查看者、评论者以及评论内容处获取特征。任何查看者特定特征(例如评论者与查看者间的亲密度)都会以每日方式被添加至离线 Hadoop 工作流内。这些特征被从 HDFS 中推送至一套在线 Voldemort 存储库以供查询。评论相关特征(例如评论的语言表达)则在评论创建时由一款近线 Samza 处理工具负责生成。如前文所述,这些特征将在 FollowFeed 中进行索引以实现在线交付,并通过 ETL 流程引入以供离线模型训练使用。
评论者特征包含每一位评论者的声誉以及受欢迎程度(基于其个人资料视图中的查看次数及影响力状态等)。领英的这套模型还会根据行业、职位以及其它共享属性对评论者与查看者进行匹配。在领英,能够凭借各类成熟的机器学习信号资源发现两位会员之间的交互关系。技术专家们会考量双方的联系 / 关注关系,其各自个人资料的相似性以及以往馈送内容中的互动记录。这些信号属于关键性输入信息,能够帮助技术团队为每位查看者选定最具个性化考量的高质量评论内容。
而在实际评论内容层面,领英的技术专家利用自己的内部自然语言处理(简称 NLP)库来表达语言、评论长度、语法结构、主题标签的存在 / 不存在以及其它内容特征。他们还尝试推断评论当中是否有提及其他领英会员或者其它职能实体。
馈送信息当中的社交参与特征会根据不同行业进行细分,旨在保证机器学习模型能够准确找到只对特定一部分会员具有吸引力的评论内容。
评论新鲜度特征则源自针对当前评论的近期操作。技术专家们会捕捉评论的创建时间戳、最后回复以及最后点赞。查看者一般更倾向于阅读新鲜评论或者最近进行讨论的话题。
说到这里,还仅仅涉及这项任务的表面。在捕捉并实现在线排名功能的过程当中,实际使用到近 100 项特征,并利用机器学习模型进行特征训练以准确预测会员们对特定评论内容的参与度。对于每一位会员,都会利用其它机器学习模型对评论中的垃圾信息与低质量内容进行分类与检测,并最终选出最适合查看者的内容。
性能指标
这套系统拥有稳定的运行效果:可以看到,其第 50 百分位尾延迟水平为 15 毫秒,第 99 百分位延迟则为 65 毫秒。在获取会员特征时,整体系统的中位数延迟为 60 毫秒,而第 99 百分位端到端延迟则为 190 毫秒。具体来讲,这套系统相较于原本的 MVP,能够仅利用四分之一时间生成高达两倍的评论排名结果——这无疑解决了后者原本的最大短板。
结论
评论关联性这类长期基础设施项目拥有一段有趣的生命周期:首先是孕育期,而后是一段时间的持续评估,接下来投入具体执行,并最终进行稳定生产。回顾此前完成的这一系列工作,同时考虑到领英超过 5 亿会员得以借此获取价值,通过观察,会发现会员们阅读评论、参与内容馈送以及同领英生态系统当中其他会员进行交互与对接的效果皆有所改善。系统的个性化与资讯启发式发现能力得到了会员们的肯定,领英技术团队的工作也取得了良好的反响。
在调整之后,回复当中“赞”的数量开始快速提升。目前 iOS 平台上馈送内容的评论数量增长了 22%,而 Android 平台则提升 14%。
原文链接
https://engineering.linkedin.com/blog/2017/09/serving-top-comments-in-professional-social-networks