红帽白皮书新鲜出炉!点击获取,让你的云战略更胜一筹! 了解详情
写点什么

重新思考 LinkedIn 的认证模块架构

  • 2016-11-01
  • 本文字数:2513 字

    阅读完需:约 8 分钟

如果你是 LinkedIn 的用户,你一定知道它的认证系统。目前为止全球已经有数千万专业人员点击了“认证”按钮,通过他们的关系连接分享了超过 100 亿个技能认证。LinkedIn 上线认证系统的目的很简单——创造一种让其他人辨认人们的技能的方式。

当很大一部分 LinkedIn 用户都使用认证功能的时候,我们意识到,想到达到产品的初衷,还有许多工作需要完成。我们注意到,一些认证相比其他要更具价值,所以我们准备打造一个更好的产品来帮助我们的会员理解利用认证能带给他们的潜在价值。

实现一个为我们的用户提供更多价值的认证系统,需要多方面的调研、新的机器学习模型以及重新架构的能够服务和推荐新认证的后端系统。我们需要的不仅仅是更快的认证服务,还能让我们基于用户的关系和技能为他们提供更多的见解。我们相信,有了新的认证模块架构奠定的基础,我们最终将能够实现上述目标。

当前的架构

依据历史经验来说,LinkedIn 的认证体验主要依赖于两大支柱:其一是推荐认证,其二是认证服务。推荐认证流程在后端架构的体现是,产生一组推荐给我们的用户,引导关系网中的用户去帮助认证。这些推荐为用户提供了一个便捷途径来奖励他们同事的技能。

认证系统的第二个支柱是,当用户看其他人的档案的时候,简单地允许他们认证他们关系网中的人,然后为这些认证服务。

认证服务

在 LinkedIn,我们使用微服务架构:大的功能(比如认证)会被封装到一个单独的服务中,然后只暴露出所有可以进行的操作。这样,就可以在保持后端兼容性的基础上让服务在内部进行演进。

自该方案实施之后,认证产品只是依赖于一个简单的架构,即使用一个单独的 SQL 实例来服务所有的认证。为了在每秒数千请求(QPS)的情况下扩展到 100 亿认证,我们不得不极度优化数据库使用到的索引。

例如,由于最常见的使用场景是基于一个给定用户进行认证服务,我们创建了一个结构化的索引,层级如下:

Recipient Id (1) → Endorsed Item (2) → Endorser Id (3)

利用这些索引,下面这些操作会变得非常简单:

  • 遍历用户“Joey”的所有认证:我们使用索引(1),然后遍历它的所有数据项。
  • 遍历用户“Joey”的所有“Java”技能的认证:我们使用索引(1)和(2)的组合,然后列出所有数据项。
  • 遍历用户“Yolanda”给予“Joey”的所有“Java”技能的认证(假设“Yolanda”是个推荐人):这次我们使用索引(1)、(2)和(3)的组合,然后遍历找到的数据项。

当然,这种方法会有一些瓶颈。例如,如果我们想要找出“Jie”给出的所有认证,我们将不得不遍历一遍数据库中的 100 亿条数据。

推荐认证

有两条推荐认证流程:

  • 可认证技能:这个流程会预测一个用户可能拥有或想要发展的技能条目。
  • 推荐认证:这个流程会提供每个用户可以认证的(接受者,技能)元组列表。

这两个流水线能够在离线状态下的 Hadoop 工作流中,利用机器学习和合并特征(例如相互关联、档案信息和历史认证)产生推荐。这些“认证技能”和“推荐认证”数据会被推送到两个不同的 Voldemort 存储中。认证服务将会对键值对存储进行在线查询,拉取可能的认证,然后将他们交付给用户。

(点击放大图像)

多年来,机器学习算法驱动的推荐系统一直在进行微调,以优化扩散和技能多样性。认证系统已经生成了许多用户参与,并已经驱动了 LinkedIn 的许多其他行动。迄今为止,认证的数量和参与此项功能的用户数见证了这个模型的成功。

鉴于认证模块在许多国家已经非常成熟,我们认为现在是时候来重新设计我们的架构,打开为我们的用户提供更多相关内容的大门。我们走上了寻求重建认证模块的愿景。

优化正确的目标指标

使用我们的用户给出的认证数量来衡量认证系统的成功已然过时,我们希望定义一个新指标来更好地代表认证产品的目标。在本文中,我们将这个新指标称之为“高评分的认证”。

获取用户的反馈

在 LinkedIn,我们是一个“用户至上”的组织,意味着我们相信应该让用户的声音来引导我们的产品设计。为了优化算法来尽可能交付最好的用户体验,我们想了解哪些认证的用户评价最高。

我们提供了一个功能,让会员可以在应用内对收到的新认证通知予以反馈。我们会问一些问题,类似于“它与你的技能的关联度有多少?”、“这个认证价值几何?”等。这些调查遵循 LinkedIn 严格的隐私政策,收集到的数据仅仅用于提升我们的模型。

用反馈来构建一个目标指标

我们开发一个目标指标的目的是捕获那些能为用户的技能提供有价值的确认的认证。根据我们获得的用户反馈,我们注意到认证通常来自于那些同时知道此接受者和此技能的推荐人。

为了定义更为具体的目标指标,最开始我们选择了关于推荐人、接受人和他们的关系的 80 多种对定义有用的候选指标。

这些特性,与回应相结合,能够让我们将不同的特性与我们通过产品内的反馈接收到的积极信号关联起来。使用各种各样的机器学习算法,我们最终识别出了最有用的 12 种信号。

识别高评价认证最高特性的信号流程

为了开发一个有用的指标来衡量认证系统的健康状态,并引导产品研发,我们希望这个定义是准确的、直观的和全面的。

  • 准确的意味着它与用户调查反馈是强相关的。
  • 直观的意味着它与我们的产品直观相符,并易于和用户沟通。
  • 全面的意味着它能捕获到广泛的高评价认证。

我们没有直接使用机器学习模型作为我们的定义,因为尽管它是准确的和全面的,却不够直观。相反,我们找到了一个更简单的定义,并且它与调查数据相符。从最高的 12 个特性中,我们开始创建高评价认证的候选定义。例如,我们可以认为高评价的认证是那些由在这个技术领域是专家的同事给出的认证。对于每一个候选定义,我们会关注它的查全率和与人类理解它的精确度。

在这个过程结束时,我们开发出了一个目标认证指标,它被描述如下:
一个同时知道这个人和这项技术的关系人做出的认证是高评价的认证。

对于定义的每个部分(了解这项技术和了解这个人),我们基于由机器学习结果支持的直观临界值确定了它们各自的顶部信号的阈值。下周我们将讨论 LinkedIn 服务认证的新后端架构。

查看英文原文 Rethinking Endorsements Infrastructure, Part 1


感谢冬雨对本文的审校。

给InfoQ 中文站投稿或者参与内容翻译工作,请邮件至 editors@cn.infoq.com 。也欢迎大家通过新浪微博( @InfoQ @丁晓昀),微信(微信号: InfoQChina )关注我们。

2016-11-01 17:031975
用户头像

发布了 32 篇内容, 共 18.4 次阅读, 收获喜欢 8 次。

关注

评论

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

看这篇就够了!RabbitMQ如何防止数据丢失,详细讲解,linux教程课后答案孟庆昌

Java 程序员 后端

瞬间霸榜,收藏第一的“kafka学习笔记,java图片转视频

Java 程序员 后端

硬核!逛了5年的Github一口气把我收藏的JAVA开源项目分享给你

Java 程序员 后端

直击阿里“远程面试”现场,linux驱动开发入门与实战

Java 程序员 后端

硬核!阿里内部这份《Java面试核心知识手册,面经解析

Java 程序员 后端

碎片化时间学这些架构知识,月薪20K还不是轻轻松松,教你解决线上频出MySQL死锁问题

Java 程序员 后端

神操:凭借“阿里Java脑图(1),神操作

Java 程序员 后端

看一遍就理解:动态规划详解,双非渣本Java四年磨一剑

Java 程序员 后端

知乎万赞:Java程序员的悲哀竟然是,java编程思想百度云

Java 程序员 后端

知乎:怎么评价程序员35岁了还在撸代码?,java实用教程第五版电子书答案

Java 程序员 后端

碎片化时间学这些架构知识,月薪20K还不是轻轻松松(1),美团高级java面试题

Java 程序员 后端

确定要面试问我JVM吗?我打算聊一个小时的!,目前最全的《Java面试题及解析》

Java 程序员 后端

秀儿!用SSM框架实现了支付宝的支付功能,神操作啊,大型分布式系统架构图

Java 程序员 后端

看完这篇文章,你对Redis持久化的迷惑就全解开了,超全面

Java 程序员 后端

真666!阿里资深架构师熬夜纯手写的238页微服务容器化开发实战笔记

Java 程序员 后端

硬核图解!断网了,还能ping通 127,高性能mysql笔记

Java 程序员 后端

确定要面试问我JVM吗?我打算聊一个小时的!(1),linux驱动架构

Java 程序员 后端

知乎头条。纯干货:深度认识Sharding-JDBC,mybatis连接数据库原理

Java 程序员 后端

真香!前阿里P8甩我一份内部SpringCloud笔记手册,竟然在Github上点击破百万

Java 程序员 后端

硬肝到秃头!Alibaba强推并发编程笔记我跪了,真的学到好多东西

Java 程序员 后端

文本随机打乱工具

入门小站

工具

神操:凭借“阿里Java脑图,mysql数据库教学视频教程

Java 程序员 后端

架构实战营模块2课后作业

断水风春

架构实战营

真香现场!全网首发Spring5秘籍手册+知识导图,记得把每一次面试当做经验积累

Java 程序员 后端

硬核解析,巧用案例学习jQuery框架三种事件绑定方式,最新阿里+头条+腾讯大厂Java笔试真题

Java 程序员 后端

架构实战营- 模块二

瓜子葫芦侠

「架构实战营」

linux中同时移动多种格式文件

入门小站

Linux

疫情降至,我只花了7天,经历三个步骤拿到了腾讯offer,springmvc面试题常问2020

Java 程序员 后端

百度、阿里、美团,java敏捷开发模式面试题

Java 程序员 后端

看完这篇,别人的开源项目结构应该能看懂了,kafka入门与实践百度云

Java 程序员 后端

看完这篇,面试再也不怕被问 Webpack 热更新,java原理及插件

Java 程序员 后端

重新思考 LinkedIn 的认证模块架构_语言 & 开发_百占辉_InfoQ精选文章