【ArchSummit架构师峰会】探讨数据与人工智能相互驱动的关系>>> 了解详情
写点什么

重新思考 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:031986
用户头像

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

关注

评论

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

Fabric.js 元素被选中时保持原有层级🥁

德育处主任

web前端 前端可视化 FabricJS Fabric.js 6月月更

物联网低代码平台如何快捷管理资产?

AIRIOT

C#入门系列(八) -- 方法定义

陈言必行

C# 6月月更

GIT 常见问题

甜甜的白桃

git 版本管理 6月月更

SpringBoot官方支持任务调度框架,轻量级用起来也挺香!

沉默王二

Java springboot

服务管理与通信,基础原理分析

Java 架构 微服务 nacos Feign

Linux驱动开发_倒车影像项目介绍

DS小龙哥

6月月更

数字货币持币生息质押理财dapp系统开发

开发微hkkf5566

优酷端侧弹幕穿人技术实战之:PixelAI移动端实时人像分割

阿里巴巴文娱技术

音视频 弹幕 人像 移动端 移动端开发

Django API 开发:身份认证原理

宇宙之一粟

django 6月月更

深入浅出Spring事务的实现原理

清风

spring 原理 事务 源码学习 深入浅出

什么是加密?有哪些加密类型和加密算法?逆天原创神作,值得一读!

wljslmz

加密 密码学 加密算法 网络技术 6月月更

系统运维 SIG 直播: libbpf 编译平台 LCC——eBPF从入门到享受 | 第 20 期

OpenAnolis小助手

Linux 运维 内核 ebpf LCC

网络七层结构是干啥的? 看这篇文章就够了

郑州埃文科技

TCP/IP 网络结构 传输网络

帮助中心对企业有用吗?要不要做帮助中心页面?

小炮

Apache.commons.lang3 的 isNumber 将会在 lang 4 的时候丢弃

HoneyMoose

【LeetCode】爱吃香蕉的珂珂Java题解

Albert

LeetCode 6月月更

JavaScript原型链继承与盗用构造函数继承

大熊G

JavaScript 前端 6月月更

Web Service进阶(七)浅谈SOAP Webservice和RESTful Webservice

No Silver Bullet

6月月更 SOAP Webservice RESTful Webservice

面试突击55:delete、drop、truncate有什么区别?

王磊

Java 面试

这本书押中了2022北京高考作文题!

博文视点Broadview

架构实战营|模块3

KDA

#架构实战营

在 Flutter 中以编程方式截取任何 Widget

坚果

6月月更

聚焦中国算力大会 | 浪潮集团肖雪: 数字化转型新场景激发算力需求

浪潮云

云计算

一二三线互联网公司划分标准和榜单

laofo

研发效能 互联网公司 一线大厂 二线互联网 一线互联网

【Python技能树共建】正则表达式

梦想橡皮擦

6月月更

基于 spring-cloud-k8s 跨NS坑续集

Damon

微服务架构 云原生 6月月更

OKALEIDO的NFT聚合交易,打造面向艺术家的Web3商业生态

BlockChain先知

架构训练营模块三作业

融冰

spring4.1.8初始化源码学习三部曲之二:setConfigLocations方法

程序员欣宸

Java spring 6月月更

如何搭建短视频app源码,实现短视频内容的播放优化

开源直播系统源码

APP开发 短视频源码

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