1471 lines
85 KiB
HTML
1471 lines
85 KiB
HTML
<!DOCTYPE html>
|
||
|
||
|
||
|
||
|
||
<html lang="en">
|
||
<head>
|
||
<meta name="pageKey" content="d_lithograph_content">
|
||
<!----><!----><!----> <meta name="locale" content="en_US">
|
||
<!----> <meta id="config" data-app-id="lithograph" data-app-version="0.0.2138" data-call-tree-id="AAZbPfnwycS4Hob4Sb4OMw==" data-multiproduct-name="lithograph-publish-frontend" data-service-name="lithograph-publish-frontend" data-browser-id="76268d9d-c9e4-4b21-8b0d-033df9917fee" data-is-bot="false" data-page-instance="urn:li:page:d_lithograph_content;jx8Qpx7ST6WoycL7HHEQVw==" data-disable-jsbeacon-pagekey-suffix="false" data-dna-member-lix-treatment="control" data-human-member-lix-treatment="control" data-dfp-member-lix-treatment="control" data-sync-apfc-headers-lix-treatment="control" data-sync-apfc-cb-lix-treatment="control" data-recaptcha-v3-integration-lix-value="control" data-network-interceptor-lix-value="control" data-is-epd-audit-event-enabled="false" data-is-feed-sponsored-tracking-kill-switch-enabled="false" data-sequence-auto-redirect-before-request-enabled="true">
|
||
|
||
<link rel="canonical" href="https://www.linkedin.com/blog/engineering/scalability/authorization-at-linkedins-scale">
|
||
<!----><!---->
|
||
<!---->
|
||
<!---->
|
||
<!---->
|
||
<!---->
|
||
<link rel="icon" href="https://static.licdn.com/aero-v1/sc/h/al2o9zrvru7aqj8e1x2rzsrca">
|
||
|
||
|
||
<script>
|
||
function getDfd() {let yFn,nFn;const p=new Promise(function(y, n){yFn=y;nFn=n;});p.resolve=yFn;p.reject=nFn;return p;}
|
||
window.lazyloader = getDfd();
|
||
window.tracking = getDfd();
|
||
window.impressionTracking = getDfd();
|
||
window.ingraphTracking = getDfd();
|
||
window.appDetection = getDfd();
|
||
window.pemTracking = getDfd();
|
||
window.appRedirectCompleted = getDfd();
|
||
</script>
|
||
|
||
<!---->
|
||
|
||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||
|
||
|
||
<title>Authorization at LinkedIn’s Scale</title>
|
||
<!---->
|
||
<meta property="og:type" content="website">
|
||
<meta property="og:title" content="Authorization at LinkedIn’s Scale">
|
||
<!---->
|
||
<meta property="og:url" content="https://www.linkedin.com/blog/engineering/scalability/authorization-at-linkedins-scale">
|
||
<meta property="og:image" content="https://media.licdn.com/dms/image/v2/D4D08AQFeweu99dGeVQ/croft-frontend-shrinkToFit1024/croft-frontend-shrinkToFit1024/0/1700688815639?e=2147483647&v=beta&t=h2zOTmE7HcZACX-c82klh1kV7PpwFVculuMMdpJIbbk">
|
||
<meta name="twitter:title" content="Authorization at LinkedIn’s Scale">
|
||
<meta name="twitter:site" content="@linkedin">
|
||
<!---->
|
||
<!---->
|
||
<meta name="robots" content="noarchive">
|
||
|
||
<meta name="linkedin:pageTag" content="/blog/engineering/scalability/authorization-at-linkedins-scale">
|
||
<meta name="litmsProfileName" content="lithograph">
|
||
|
||
|
||
|
||
<!----> <meta http-equiv="X-UA-Compatible" content="IE=edge">
|
||
<meta name="asset-url" id="artdeco/static/images/icons.svg" content="https://static.licdn.com/aero-v1/sc/h/6sz1e821vgereyxaakx87tt4z ">
|
||
<link rel="stylesheet" href="https://static.licdn.com/aero-v1/sc/h/lbz6744ddd0wsc02ey2a3dhx">
|
||
<!---->
|
||
|
||
<!----> </head>
|
||
<body dir="ltr">
|
||
<!---->
|
||
|
||
|
||
|
||
<a href="#lithograph-app" class="skip-link btn-md btn-primary absolute z-11 -top-[100vh] focus:top-0">
|
||
Skip to main content
|
||
</a>
|
||
|
||
<!---->
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
<div class="page-header__wrapper page-header__wrapper--margin" data-custom-nav-wrapper="true">
|
||
<div class="page-header__container">
|
||
<header id="page-header" class="page-header page-header--hide-dropshadow">
|
||
<div class="page-header__content-container">
|
||
<div class="header__logo">
|
||
<a href="https://www.linkedin.com/blog/engineering" class="custom-nav__logo-link">
|
||
<img class="header__linkedin-logo header__full-logo" src="https://static.licdn.com/aero-v1/sc/h/6zm111mce7vohqze950ilreo4" alt="LinkedIn Logo">
|
||
<img class="header__linkedin-logo header__in-bug" src="https://static.licdn.com/aero-v1/sc/h/5g0hjlcng3j5pgn50n2et1ca2" alt="LinkedIn Logo">
|
||
<span class="t-17 t-black t-bold default-header-title">
|
||
Engineering Blog
|
||
</span>
|
||
</a>
|
||
</div>
|
||
|
||
<!---->
|
||
<!---->
|
||
<button class="stripped header__expand-nav-button" data-mobile-header-navigation-button data-header-expand-navigation-button aria-expanded="false">
|
||
<li-icon class="header__expand-nav-icon" a11y-text="Open navigation" type="hamburger-icon"></li-icon>
|
||
</button>
|
||
<button class="stripped header__expand-nav-button hidden" data-mobile-header-navigation-button data-header-collapse-navigation-button aria-expanded="false">
|
||
<li-icon class="header__expand-nav-icon" a11y-text="Close navigation" type="cancel-icon"></li-icon>
|
||
</button>
|
||
</div>
|
||
</header>
|
||
</div>
|
||
|
||
|
||
|
||
|
||
<nav class="header-nav fixed" aria-label="main" data-header-navigation>
|
||
<ul class="header-nav__list">
|
||
<li>
|
||
|
||
|
||
|
||
<div class="artdeco-dropdown">
|
||
<div class="artdeco-dropdown__trigger">
|
||
<a href="https://www.linkedin.com/blog/engineering/data" class="t-sans t-black--light t-semibold header-nav__toplink" target="_self">
|
||
Data
|
||
</a>
|
||
|
||
<button class="header-navigation__button" aria-label="Expand to show more links for Data" aria-expanded="false" data-trigger-dropdown-menu type="button">
|
||
<li-icon size="small" type="caret-filled-down-icon"></li-icon>
|
||
</button>
|
||
|
||
|
||
<div class="artdeco-dropdown__content header-nav__dropdown-offset">
|
||
<ul>
|
||
<li>
|
||
<div class="artdeco-dropdown__item">
|
||
<a href="https://www.linkedin.com/blog/engineering/graph-systems" class="t-14 t-sans t-black t-bold header-nav__link" target="_self">Graph System</a>
|
||
</div>
|
||
</li>
|
||
<li>
|
||
<div class="artdeco-dropdown__item">
|
||
<a href="https://www.linkedin.com/blog/engineering/economic-graph" class="t-14 t-sans t-black t-bold header-nav__link" target="_self">Economic Graph</a>
|
||
</div>
|
||
</li>
|
||
<li>
|
||
<div class="artdeco-dropdown__item">
|
||
<a href="https://www.linkedin.com/blog/engineering/skills-graph" class="t-14 t-sans t-black t-bold header-nav__link" target="_self">Skills Graph</a>
|
||
</div>
|
||
</li>
|
||
<li>
|
||
<div class="artdeco-dropdown__item">
|
||
<a href="https://www.linkedin.com/blog/engineering/knowledge" class="t-14 t-sans t-black t-bold header-nav__link" target="_self">Knowledge Graph</a>
|
||
</div>
|
||
</li>
|
||
<li>
|
||
<div class="artdeco-dropdown__item">
|
||
<a href="https://www.linkedin.com/blog/engineering/data-management" class="t-14 t-sans t-black t-bold header-nav__link" target="_self">Data Management</a>
|
||
</div>
|
||
</li>
|
||
<li>
|
||
<div class="artdeco-dropdown__item">
|
||
<a href="https://www.linkedin.com/blog/engineering/data-streaming-processing" class="t-14 t-sans t-black t-bold header-nav__link" target="_self">Data Streams/Processing</a>
|
||
</div>
|
||
</li>
|
||
<li>
|
||
<div class="artdeco-dropdown__item">
|
||
<a href="https://www.linkedin.com/blog/engineering/data-science" class="t-14 t-sans t-black t-bold header-nav__link" target="_self">Data Science</a>
|
||
</div>
|
||
</li>
|
||
<li>
|
||
<div class="artdeco-dropdown__item">
|
||
<a href="https://www.linkedin.com/blog/engineering/research" class="t-14 t-sans t-black t-bold header-nav__link" target="_self">Research</a>
|
||
</div>
|
||
</li>
|
||
<li>
|
||
<div class="artdeco-dropdown__item">
|
||
<a href="https://www.linkedin.com/blog/engineering/ab-testing-experimentation" class="t-14 t-sans t-black t-bold header-nav__link" target="_self">A/B Testing/Experimentation</a>
|
||
</div>
|
||
</li>
|
||
</ul>
|
||
</div>
|
||
|
||
</div>
|
||
</div>
|
||
|
||
</li>
|
||
<li>
|
||
|
||
|
||
|
||
<div class="artdeco-dropdown">
|
||
<div class="artdeco-dropdown__trigger">
|
||
<a href="https://www.linkedin.com/blog/engineering/artificial-intelligence" class="t-sans t-black--light t-semibold header-nav__toplink" target="_self">
|
||
AI
|
||
</a>
|
||
|
||
<button class="header-navigation__button" aria-label="Expand to show more links for AI" aria-expanded="false" data-trigger-dropdown-menu type="button">
|
||
<li-icon size="small" type="caret-filled-down-icon"></li-icon>
|
||
</button>
|
||
|
||
|
||
<div class="artdeco-dropdown__content header-nav__dropdown-offset">
|
||
<ul>
|
||
<li>
|
||
<div class="artdeco-dropdown__item">
|
||
<a href="https://www.linkedin.com/blog/engineering/machine-learning" class="t-14 t-sans t-black t-bold header-nav__link" target="_self">Machine Learning</a>
|
||
</div>
|
||
</li>
|
||
<li>
|
||
<div class="artdeco-dropdown__item">
|
||
<a href="https://www.linkedin.com/blog/engineering/natural-language-processing" class="t-14 t-sans t-black t-bold header-nav__link" target="_self">Natural Language Processing</a>
|
||
</div>
|
||
</li>
|
||
<li>
|
||
<div class="artdeco-dropdown__item">
|
||
<a href="https://www.linkedin.com/blog/engineering/generative-ai" class="t-14 t-sans t-black t-bold header-nav__link" target="_self">Generative AI</a>
|
||
</div>
|
||
</li>
|
||
<li>
|
||
<div class="artdeco-dropdown__item">
|
||
<a href="https://www.linkedin.com/blog/engineering/data-modeling" class="t-14 t-sans t-black t-bold header-nav__link" target="_self">Data Modeling</a>
|
||
</div>
|
||
</li>
|
||
<li>
|
||
<div class="artdeco-dropdown__item">
|
||
<a href="https://www.linkedin.com/blog/engineering/responsible-ai" class="t-14 t-sans t-black t-bold header-nav__link" target="_self">Responsible AI</a>
|
||
</div>
|
||
</li>
|
||
</ul>
|
||
</div>
|
||
|
||
</div>
|
||
</div>
|
||
|
||
</li>
|
||
<li>
|
||
|
||
|
||
|
||
<div class="artdeco-dropdown">
|
||
<div class="artdeco-dropdown__trigger">
|
||
<a href="https://www.linkedin.com/blog/engineering/trust-and-safety" class="t-sans t-black--light t-semibold header-nav__toplink" target="_self">
|
||
Trust & Safety
|
||
</a>
|
||
|
||
<button class="header-navigation__button" aria-label="Expand to show more links for Trust &amp; Safety" aria-expanded="false" data-trigger-dropdown-menu type="button">
|
||
<li-icon size="small" type="caret-filled-down-icon"></li-icon>
|
||
</button>
|
||
|
||
|
||
<div class="artdeco-dropdown__content header-nav__dropdown-offset">
|
||
<ul>
|
||
<li>
|
||
<div class="artdeco-dropdown__item">
|
||
<a href="https://www.linkedin.com/blog/engineering/fairness" class="t-14 t-sans t-black t-bold header-nav__link" target="_self">Fairness</a>
|
||
</div>
|
||
</li>
|
||
<li>
|
||
<div class="artdeco-dropdown__item">
|
||
<a href="https://www.linkedin.com/blog/engineering/verification" class="t-14 t-sans t-black t-bold header-nav__link" target="_self">Verification </a>
|
||
</div>
|
||
</li>
|
||
<li>
|
||
<div class="artdeco-dropdown__item">
|
||
<a href="https://www.linkedin.com/blog/engineering/security" class="t-14 t-sans t-black t-bold header-nav__link" target="_self">Security</a>
|
||
</div>
|
||
</li>
|
||
</ul>
|
||
</div>
|
||
|
||
</div>
|
||
</div>
|
||
|
||
</li>
|
||
<li>
|
||
|
||
|
||
|
||
<div class="artdeco-dropdown">
|
||
<div class="artdeco-dropdown__trigger">
|
||
<a href="https://www.linkedin.com/blog/engineering/product-design" class="t-sans t-black--light t-semibold header-nav__toplink" target="_self">
|
||
Product Design
|
||
</a>
|
||
|
||
<button class="header-navigation__button" aria-label="Expand to show more links for Product Design" aria-expanded="false" data-trigger-dropdown-menu type="button">
|
||
<li-icon size="small" type="caret-filled-down-icon"></li-icon>
|
||
</button>
|
||
|
||
|
||
<div class="artdeco-dropdown__content header-nav__dropdown-offset">
|
||
<ul>
|
||
<li>
|
||
<div class="artdeco-dropdown__item">
|
||
<a href="https://www.linkedin.com/blog/engineering/marketing" class="t-14 t-sans t-black t-bold header-nav__link" target="_self">Marketing </a>
|
||
</div>
|
||
</li>
|
||
<li>
|
||
<div class="artdeco-dropdown__item">
|
||
<a href="https://www.linkedin.com/blog/engineering/sales" class="t-14 t-sans t-black t-bold header-nav__link" target="_self">Sales</a>
|
||
</div>
|
||
</li>
|
||
<li>
|
||
<div class="artdeco-dropdown__item">
|
||
<a href="https://www.linkedin.com/blog/engineering/learning" class="t-14 t-sans t-black t-bold header-nav__link" target="_self">Learning</a>
|
||
</div>
|
||
</li>
|
||
<li>
|
||
<div class="artdeco-dropdown__item">
|
||
<a href="https://www.linkedin.com/blog/engineering/hiring" class="t-14 t-sans t-black t-bold header-nav__link" target="_self">Hiring</a>
|
||
</div>
|
||
</li>
|
||
<li>
|
||
<div class="artdeco-dropdown__item">
|
||
<a href="https://www.linkedin.com/blog/engineering/profile" class="t-14 t-sans t-black t-bold header-nav__link" target="_self">Profile</a>
|
||
</div>
|
||
</li>
|
||
<li>
|
||
<div class="artdeco-dropdown__item">
|
||
<a href="https://www.linkedin.com/blog/engineering/messaging-notifications" class="t-14 t-sans t-black t-bold header-nav__link" target="_self">Messaging/Notifications</a>
|
||
</div>
|
||
</li>
|
||
<li>
|
||
<div class="artdeco-dropdown__item">
|
||
<a href="https://www.linkedin.com/blog/engineering/feed" class="t-14 t-sans t-black t-bold header-nav__link" target="_self">Feed</a>
|
||
</div>
|
||
</li>
|
||
<li>
|
||
<div class="artdeco-dropdown__item">
|
||
<a href="https://www.linkedin.com/blog/engineering/profile" class="t-14 t-sans t-black t-bold header-nav__link" target="_self">Profile</a>
|
||
</div>
|
||
</li>
|
||
<li>
|
||
<div class="artdeco-dropdown__item">
|
||
<a href="https://www.linkedin.com/blog/engineering/groups" class="t-14 t-sans t-black t-bold header-nav__link" target="_self">Groups</a>
|
||
</div>
|
||
</li>
|
||
<li>
|
||
<div class="artdeco-dropdown__item">
|
||
<a href="https://www.linkedin.com/blog/engineering/accessibility" class="t-14 t-sans t-black t-bold header-nav__link" target="_self">Accessibility</a>
|
||
</div>
|
||
</li>
|
||
<li>
|
||
<div class="artdeco-dropdown__item">
|
||
<a href="https://www.linkedin.com/blog/engineering/member-customer-experience" class="t-14 t-sans t-black t-bold header-nav__link" target="_self">Member/Customer Experience</a>
|
||
</div>
|
||
</li>
|
||
<li>
|
||
<div class="artdeco-dropdown__item">
|
||
<a href="https://www.linkedin.com/blog/engineering/search" class="t-14 t-sans t-black t-bold header-nav__link" target="_self">Search</a>
|
||
</div>
|
||
</li>
|
||
<li>
|
||
<div class="artdeco-dropdown__item">
|
||
<a href="https://www.linkedin.com/blog/engineering/recommendations" class="t-14 t-sans t-black t-bold header-nav__link" target="_self">Recommendations</a>
|
||
</div>
|
||
</li>
|
||
<li>
|
||
<div class="artdeco-dropdown__item">
|
||
<a href="https://www.linkedin.com/blog/engineering/skills" class="t-14 t-sans t-black t-bold header-nav__link" target="_self">Skills</a>
|
||
</div>
|
||
</li>
|
||
</ul>
|
||
</div>
|
||
|
||
</div>
|
||
</div>
|
||
|
||
</li>
|
||
<li>
|
||
|
||
|
||
|
||
<div class="artdeco-dropdown">
|
||
<div class="artdeco-dropdown__trigger">
|
||
<a href="https://www.linkedin.com/blog/engineering/infrastructure" class="t-sans t-black--light t-semibold header-nav__toplink" target="_self">
|
||
Infrastructure
|
||
</a>
|
||
|
||
<button class="header-navigation__button" aria-label="Expand to show more links for Infrastructure" aria-expanded="false" data-trigger-dropdown-menu type="button">
|
||
<li-icon size="small" type="caret-filled-down-icon"></li-icon>
|
||
</button>
|
||
|
||
|
||
<div class="artdeco-dropdown__content header-nav__dropdown-offset">
|
||
<ul>
|
||
<li>
|
||
<div class="artdeco-dropdown__item">
|
||
<a href="https://www.linkedin.com/blog/engineering/code" class="t-14 t-sans t-black t-bold header-nav__link" target="_self">Code</a>
|
||
</div>
|
||
</li>
|
||
<li>
|
||
<div class="artdeco-dropdown__item">
|
||
<a href="https://www.linkedin.com/blog/engineering/scalability" class="t-14 t-sans t-black t-bold header-nav__link" target="_self">Scalability</a>
|
||
</div>
|
||
</li>
|
||
<li>
|
||
<div class="artdeco-dropdown__item">
|
||
<a href="https://www.linkedin.com/blog/engineering/distributed-systems" class="t-14 t-sans t-black t-bold header-nav__link" target="_self">Distributed Systems</a>
|
||
</div>
|
||
</li>
|
||
<li>
|
||
<div class="artdeco-dropdown__item">
|
||
<a href="https://www.linkedin.com/blog/engineering/graph-systems" class="t-14 t-sans t-black t-bold header-nav__link" target="_self">Graph Systems</a>
|
||
</div>
|
||
</li>
|
||
<li>
|
||
<div class="artdeco-dropdown__item">
|
||
<a href="https://www.linkedin.com/blog/engineering/architecture" class="t-14 t-sans t-black t-bold header-nav__link" target="_self">Architecture</a>
|
||
</div>
|
||
</li>
|
||
<li>
|
||
<div class="artdeco-dropdown__item">
|
||
<a href="https://www.linkedin.com/blog/engineering/analytics" class="t-14 t-sans t-black t-bold header-nav__link" target="_self">Analytics</a>
|
||
</div>
|
||
</li>
|
||
<li>
|
||
<div class="artdeco-dropdown__item">
|
||
<a href="https://www.linkedin.com/blog/engineering/automation" class="t-14 t-sans t-black t-bold header-nav__link" target="_self">Automation</a>
|
||
</div>
|
||
</li>
|
||
<li>
|
||
<div class="artdeco-dropdown__item">
|
||
<a href="https://www.linkedin.com/blog/engineering/platform-platformization" class="t-14 t-sans t-black t-bold header-nav__link" target="_self">Platforms/Platformization</a>
|
||
</div>
|
||
</li>
|
||
<li>
|
||
<div class="artdeco-dropdown__item">
|
||
<a href="https://www.linkedin.com/blog/engineering/cloud-computing" class="t-14 t-sans t-black t-bold header-nav__link" target="_self">Cloud Computing</a>
|
||
</div>
|
||
</li>
|
||
<li>
|
||
<div class="artdeco-dropdown__item">
|
||
<a href="https://www.linkedin.com/blog/engineering/open-source" class="t-14 t-sans t-black t-bold header-nav__link" target="_self">Open Source</a>
|
||
</div>
|
||
</li>
|
||
<li>
|
||
<div class="artdeco-dropdown__item">
|
||
<a href="https://www.linkedin.com/blog/engineering/additional-innovations" class="t-14 t-sans t-black t-bold header-nav__link" target="_self">Additional Innovations</a>
|
||
</div>
|
||
</li>
|
||
</ul>
|
||
</div>
|
||
|
||
</div>
|
||
</div>
|
||
|
||
</li>
|
||
<li>
|
||
|
||
|
||
|
||
<div class="artdeco-dropdown">
|
||
<div class="artdeco-dropdown__trigger">
|
||
<a href="https://www.linkedin.com/blog/engineering/talent" class="t-sans t-black--light t-semibold header-nav__toplink" target="_self">
|
||
Talent
|
||
</a>
|
||
|
||
<button class="header-navigation__button" aria-label="Expand to show more links for Talent" aria-expanded="false" data-trigger-dropdown-menu type="button">
|
||
<li-icon size="small" type="caret-filled-down-icon"></li-icon>
|
||
</button>
|
||
|
||
|
||
<div class="artdeco-dropdown__content header-nav__dropdown-offset">
|
||
<ul>
|
||
<li>
|
||
<div class="artdeco-dropdown__item">
|
||
<a href="https://www.linkedin.com/blog/engineering/culture" class="t-14 t-sans t-black t-bold header-nav__link" target="_self">Culture</a>
|
||
</div>
|
||
</li>
|
||
<li>
|
||
<div class="artdeco-dropdown__item">
|
||
<a href="https://www.linkedin.com/blog/engineering/developer-experience-productivity" class="t-14 t-sans t-black t-bold header-nav__link" target="_self">Developer Experience/Productivity</a>
|
||
</div>
|
||
</li>
|
||
<li>
|
||
<div class="artdeco-dropdown__item">
|
||
<a href="https://www.linkedin.com/blog/engineering/leadership" class="t-14 t-sans t-black t-bold header-nav__link" target="_self">Leadership</a>
|
||
</div>
|
||
</li>
|
||
</ul>
|
||
</div>
|
||
|
||
</div>
|
||
</div>
|
||
|
||
</li>
|
||
</ul>
|
||
</nav>
|
||
|
||
|
||
|
||
|
||
|
||
<nav class="custom-header__nav--mobile invisible" data-mobile-navigation="true" aria-label="main">
|
||
|
||
<ul class="custom-header__list--mobile">
|
||
<li class="custom-header__list-item--mobile" data-mobile-navigation-list-item="true">
|
||
|
||
|
||
|
||
|
||
<a href="https://www.linkedin.com/blog/engineering/data" class="t-16 t-sans t-black t-semibold header-nav__toplink" target="_self">
|
||
Data
|
||
</a>
|
||
|
||
<button class="header-navigation__button" aria-label="Expand to show more links for Data" aria-expanded="false" data-label-expand="Expand to show more links for Data" data-label-collapse="Collapse to show less links for Data" data-mobile-dropdown-trigger type="button">
|
||
<li-icon size="small" type="chevron-down-icon"></li-icon>
|
||
</button>
|
||
|
||
<ul class="custom-header__dropdownlink-list--mobile hidden" data-dropdownlinks-list="true">
|
||
<li>
|
||
<a href="https://www.linkedin.com/blog/engineering/graph-systems" class="t-sans t-black t-normal header-nav__link" target="_self">Graph System</a>
|
||
</li>
|
||
<li>
|
||
<a href="https://www.linkedin.com/blog/engineering/economic-graph" class="t-sans t-black t-normal header-nav__link" target="_self">Economic Graph</a>
|
||
</li>
|
||
<li>
|
||
<a href="https://www.linkedin.com/blog/engineering/skills-graph" class="t-sans t-black t-normal header-nav__link" target="_self">Skills Graph</a>
|
||
</li>
|
||
<li>
|
||
<a href="https://www.linkedin.com/blog/engineering/knowledge" class="t-sans t-black t-normal header-nav__link" target="_self">Knowledge Graph</a>
|
||
</li>
|
||
<li>
|
||
<a href="https://www.linkedin.com/blog/engineering/data-management" class="t-sans t-black t-normal header-nav__link" target="_self">Data Management</a>
|
||
</li>
|
||
<li>
|
||
<a href="https://www.linkedin.com/blog/engineering/data-streaming-processing" class="t-sans t-black t-normal header-nav__link" target="_self">Data Streams/Processing</a>
|
||
</li>
|
||
<li>
|
||
<a href="https://www.linkedin.com/blog/engineering/data-science" class="t-sans t-black t-normal header-nav__link" target="_self">Data Science</a>
|
||
</li>
|
||
<li>
|
||
<a href="https://www.linkedin.com/blog/engineering/research" class="t-sans t-black t-normal header-nav__link" target="_self">Research</a>
|
||
</li>
|
||
<li>
|
||
<a href="https://www.linkedin.com/blog/engineering/ab-testing-experimentation" class="t-sans t-black t-normal header-nav__link" target="_self">A/B Testing/Experimentation</a>
|
||
</li>
|
||
</ul>
|
||
|
||
|
||
</li>
|
||
<li class="custom-header__list-item--mobile" data-mobile-navigation-list-item="true">
|
||
|
||
|
||
|
||
|
||
<a href="https://www.linkedin.com/blog/engineering/artificial-intelligence" class="t-16 t-sans t-black t-semibold header-nav__toplink" target="_self">
|
||
AI
|
||
</a>
|
||
|
||
<button class="header-navigation__button" aria-label="Expand to show more links for AI" aria-expanded="false" data-label-expand="Expand to show more links for AI" data-label-collapse="Collapse to show less links for AI" data-mobile-dropdown-trigger type="button">
|
||
<li-icon size="small" type="chevron-down-icon"></li-icon>
|
||
</button>
|
||
|
||
<ul class="custom-header__dropdownlink-list--mobile hidden" data-dropdownlinks-list="true">
|
||
<li>
|
||
<a href="https://www.linkedin.com/blog/engineering/machine-learning" class="t-sans t-black t-normal header-nav__link" target="_self">Machine Learning</a>
|
||
</li>
|
||
<li>
|
||
<a href="https://www.linkedin.com/blog/engineering/natural-language-processing" class="t-sans t-black t-normal header-nav__link" target="_self">Natural Language Processing</a>
|
||
</li>
|
||
<li>
|
||
<a href="https://www.linkedin.com/blog/engineering/generative-ai" class="t-sans t-black t-normal header-nav__link" target="_self">Generative AI</a>
|
||
</li>
|
||
<li>
|
||
<a href="https://www.linkedin.com/blog/engineering/data-modeling" class="t-sans t-black t-normal header-nav__link" target="_self">Data Modeling</a>
|
||
</li>
|
||
<li>
|
||
<a href="https://www.linkedin.com/blog/engineering/responsible-ai" class="t-sans t-black t-normal header-nav__link" target="_self">Responsible AI</a>
|
||
</li>
|
||
</ul>
|
||
|
||
|
||
</li>
|
||
<li class="custom-header__list-item--mobile" data-mobile-navigation-list-item="true">
|
||
|
||
|
||
|
||
|
||
<a href="https://www.linkedin.com/blog/engineering/trust-and-safety" class="t-16 t-sans t-black t-semibold header-nav__toplink" target="_self">
|
||
Trust & Safety
|
||
</a>
|
||
|
||
<button class="header-navigation__button" aria-label="Expand to show more links for Trust &amp; Safety" aria-expanded="false" data-label-expand="Expand to show more links for Trust &amp; Safety" data-label-collapse="Collapse to show less links for Trust &amp; Safety" data-mobile-dropdown-trigger type="button">
|
||
<li-icon size="small" type="chevron-down-icon"></li-icon>
|
||
</button>
|
||
|
||
<ul class="custom-header__dropdownlink-list--mobile hidden" data-dropdownlinks-list="true">
|
||
<li>
|
||
<a href="https://www.linkedin.com/blog/engineering/fairness" class="t-sans t-black t-normal header-nav__link" target="_self">Fairness</a>
|
||
</li>
|
||
<li>
|
||
<a href="https://www.linkedin.com/blog/engineering/verification" class="t-sans t-black t-normal header-nav__link" target="_self">Verification </a>
|
||
</li>
|
||
<li>
|
||
<a href="https://www.linkedin.com/blog/engineering/security" class="t-sans t-black t-normal header-nav__link" target="_self">Security</a>
|
||
</li>
|
||
</ul>
|
||
|
||
|
||
</li>
|
||
<li class="custom-header__list-item--mobile" data-mobile-navigation-list-item="true">
|
||
|
||
|
||
|
||
|
||
<a href="https://www.linkedin.com/blog/engineering/product-design" class="t-16 t-sans t-black t-semibold header-nav__toplink" target="_self">
|
||
Product Design
|
||
</a>
|
||
|
||
<button class="header-navigation__button" aria-label="Expand to show more links for Product Design" aria-expanded="false" data-label-expand="Expand to show more links for Product Design" data-label-collapse="Collapse to show less links for Product Design" data-mobile-dropdown-trigger type="button">
|
||
<li-icon size="small" type="chevron-down-icon"></li-icon>
|
||
</button>
|
||
|
||
<ul class="custom-header__dropdownlink-list--mobile hidden" data-dropdownlinks-list="true">
|
||
<li>
|
||
<a href="https://www.linkedin.com/blog/engineering/marketing" class="t-sans t-black t-normal header-nav__link" target="_self">Marketing </a>
|
||
</li>
|
||
<li>
|
||
<a href="https://www.linkedin.com/blog/engineering/sales" class="t-sans t-black t-normal header-nav__link" target="_self">Sales</a>
|
||
</li>
|
||
<li>
|
||
<a href="https://www.linkedin.com/blog/engineering/learning" class="t-sans t-black t-normal header-nav__link" target="_self">Learning</a>
|
||
</li>
|
||
<li>
|
||
<a href="https://www.linkedin.com/blog/engineering/hiring" class="t-sans t-black t-normal header-nav__link" target="_self">Hiring</a>
|
||
</li>
|
||
<li>
|
||
<a href="https://www.linkedin.com/blog/engineering/profile" class="t-sans t-black t-normal header-nav__link" target="_self">Profile</a>
|
||
</li>
|
||
<li>
|
||
<a href="https://www.linkedin.com/blog/engineering/messaging-notifications" class="t-sans t-black t-normal header-nav__link" target="_self">Messaging/Notifications</a>
|
||
</li>
|
||
<li>
|
||
<a href="https://www.linkedin.com/blog/engineering/feed" class="t-sans t-black t-normal header-nav__link" target="_self">Feed</a>
|
||
</li>
|
||
<li>
|
||
<a href="https://www.linkedin.com/blog/engineering/profile" class="t-sans t-black t-normal header-nav__link" target="_self">Profile</a>
|
||
</li>
|
||
<li>
|
||
<a href="https://www.linkedin.com/blog/engineering/groups" class="t-sans t-black t-normal header-nav__link" target="_self">Groups</a>
|
||
</li>
|
||
<li>
|
||
<a href="https://www.linkedin.com/blog/engineering/accessibility" class="t-sans t-black t-normal header-nav__link" target="_self">Accessibility</a>
|
||
</li>
|
||
<li>
|
||
<a href="https://www.linkedin.com/blog/engineering/member-customer-experience" class="t-sans t-black t-normal header-nav__link" target="_self">Member/Customer Experience</a>
|
||
</li>
|
||
<li>
|
||
<a href="https://www.linkedin.com/blog/engineering/search" class="t-sans t-black t-normal header-nav__link" target="_self">Search</a>
|
||
</li>
|
||
<li>
|
||
<a href="https://www.linkedin.com/blog/engineering/recommendations" class="t-sans t-black t-normal header-nav__link" target="_self">Recommendations</a>
|
||
</li>
|
||
<li>
|
||
<a href="https://www.linkedin.com/blog/engineering/skills" class="t-sans t-black t-normal header-nav__link" target="_self">Skills</a>
|
||
</li>
|
||
</ul>
|
||
|
||
|
||
</li>
|
||
<li class="custom-header__list-item--mobile" data-mobile-navigation-list-item="true">
|
||
|
||
|
||
|
||
|
||
<a href="https://www.linkedin.com/blog/engineering/infrastructure" class="t-16 t-sans t-black t-semibold header-nav__toplink" target="_self">
|
||
Infrastructure
|
||
</a>
|
||
|
||
<button class="header-navigation__button" aria-label="Expand to show more links for Infrastructure" aria-expanded="false" data-label-expand="Expand to show more links for Infrastructure" data-label-collapse="Collapse to show less links for Infrastructure" data-mobile-dropdown-trigger type="button">
|
||
<li-icon size="small" type="chevron-down-icon"></li-icon>
|
||
</button>
|
||
|
||
<ul class="custom-header__dropdownlink-list--mobile hidden" data-dropdownlinks-list="true">
|
||
<li>
|
||
<a href="https://www.linkedin.com/blog/engineering/code" class="t-sans t-black t-normal header-nav__link" target="_self">Code</a>
|
||
</li>
|
||
<li>
|
||
<a href="https://www.linkedin.com/blog/engineering/scalability" class="t-sans t-black t-normal header-nav__link" target="_self">Scalability</a>
|
||
</li>
|
||
<li>
|
||
<a href="https://www.linkedin.com/blog/engineering/distributed-systems" class="t-sans t-black t-normal header-nav__link" target="_self">Distributed Systems</a>
|
||
</li>
|
||
<li>
|
||
<a href="https://www.linkedin.com/blog/engineering/graph-systems" class="t-sans t-black t-normal header-nav__link" target="_self">Graph Systems</a>
|
||
</li>
|
||
<li>
|
||
<a href="https://www.linkedin.com/blog/engineering/architecture" class="t-sans t-black t-normal header-nav__link" target="_self">Architecture</a>
|
||
</li>
|
||
<li>
|
||
<a href="https://www.linkedin.com/blog/engineering/analytics" class="t-sans t-black t-normal header-nav__link" target="_self">Analytics</a>
|
||
</li>
|
||
<li>
|
||
<a href="https://www.linkedin.com/blog/engineering/automation" class="t-sans t-black t-normal header-nav__link" target="_self">Automation</a>
|
||
</li>
|
||
<li>
|
||
<a href="https://www.linkedin.com/blog/engineering/platform-platformization" class="t-sans t-black t-normal header-nav__link" target="_self">Platforms/Platformization</a>
|
||
</li>
|
||
<li>
|
||
<a href="https://www.linkedin.com/blog/engineering/cloud-computing" class="t-sans t-black t-normal header-nav__link" target="_self">Cloud Computing</a>
|
||
</li>
|
||
<li>
|
||
<a href="https://www.linkedin.com/blog/engineering/open-source" class="t-sans t-black t-normal header-nav__link" target="_self">Open Source</a>
|
||
</li>
|
||
<li>
|
||
<a href="https://www.linkedin.com/blog/engineering/additional-innovations" class="t-sans t-black t-normal header-nav__link" target="_self">Additional Innovations</a>
|
||
</li>
|
||
</ul>
|
||
|
||
|
||
</li>
|
||
<li class="custom-header__list-item--mobile" data-mobile-navigation-list-item="true">
|
||
|
||
|
||
|
||
|
||
<a href="https://www.linkedin.com/blog/engineering/talent" class="t-16 t-sans t-black t-semibold header-nav__toplink" target="_self">
|
||
Talent
|
||
</a>
|
||
|
||
<button class="header-navigation__button" aria-label="Expand to show more links for Talent" aria-expanded="false" data-label-expand="Expand to show more links for Talent" data-label-collapse="Collapse to show less links for Talent" data-mobile-dropdown-trigger type="button">
|
||
<li-icon size="small" type="chevron-down-icon"></li-icon>
|
||
</button>
|
||
|
||
<ul class="custom-header__dropdownlink-list--mobile hidden" data-dropdownlinks-list="true">
|
||
<li>
|
||
<a href="https://www.linkedin.com/blog/engineering/culture" class="t-sans t-black t-normal header-nav__link" target="_self">Culture</a>
|
||
</li>
|
||
<li>
|
||
<a href="https://www.linkedin.com/blog/engineering/developer-experience-productivity" class="t-sans t-black t-normal header-nav__link" target="_self">Developer Experience/Productivity</a>
|
||
</li>
|
||
<li>
|
||
<a href="https://www.linkedin.com/blog/engineering/leadership" class="t-sans t-black t-normal header-nav__link" target="_self">Leadership</a>
|
||
</li>
|
||
</ul>
|
||
|
||
|
||
</li>
|
||
</ul>
|
||
|
||
|
||
<div class="custom-header__button-share-container--mobile">
|
||
<!---->
|
||
</div>
|
||
</nav>
|
||
|
||
</div>
|
||
|
||
|
||
<main role="main">
|
||
|
||
<div id="lithograph-app">
|
||
|
||
|
||
<section id="component-container" data-attach-collapse-behavior="true">
|
||
|
||
|
||
<div id class="component component-articleHeadline" data-component-type="articleHeadline">
|
||
|
||
|
||
|
||
|
||
<div class="article-headline-container">
|
||
<p class="article-headline__topic">
|
||
<a class="t-14" href="https://www.linkedin.com/blog/engineering/scalability">Scalability</a>
|
||
</p>
|
||
|
||
<h1 class="article-headline t-40" data-article-title="Authorization at LinkedIn’s Scale">Authorization at LinkedIn’s Scale</h1>
|
||
<div class="article-meta t-14 article-meta__hairline">
|
||
<div class="article-meta__byline-container">
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
<div class="author-profile__author-container">
|
||
<!----> <div class="author-profile__author-text-container">
|
||
<a href="https://www.linkedin.com/in/michael-leong-23aabb13" target="_blank" class="t-14 t-bold"><span class="screen-reader">Authored by</span>Michael Leong</a>
|
||
<p class="t-14">Senior Staff Software Engineer at LinkedIn</p>
|
||
|
||
<p class="t-14 t-black--light" data-published-date="2019-3-19">
|
||
March 19, 2019
|
||
</p>
|
||
</div>
|
||
</div>
|
||
<!---->
|
||
</div>
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
<div class="social-share">
|
||
<ul class="social-share__list share-list" title="Share via" data-share-list>
|
||
|
||
|
||
<li class="share-list__item share-item">
|
||
<a href="#" class="share-item__link medium-round-muted-tertiary-button" role="button" data-tracking-control-name="_linkedin_share" data-share-type="linkedin" aria-label="Share on LinkedIn, New window will open">
|
||
<li-icon class="share-item__icon" type="linkedin-icon"></li-icon>
|
||
</a>
|
||
</li>
|
||
|
||
|
||
<li class="share-list__item share-item">
|
||
<a href="#" class="share-item__link medium-round-muted-tertiary-button" role="button" data-tracking-control-name="_facebook_share" data-share-type="facebook" aria-label="Share on Facebook, New window will open">
|
||
<li-icon class="share-item__icon" type="facebook-icon"></li-icon>
|
||
</a>
|
||
</li>
|
||
|
||
|
||
<li class="share-list__item share-item">
|
||
<a href="#" class="share-item__link medium-round-muted-tertiary-button" role="button" data-tracking-control-name="_twitter_share" data-share-type="twitter" aria-label="Share on X, New window will open">
|
||
<svg class="share-item__icon share-item__icon--twitter" viewbox="0 0 24 24" xmlns="http://www.w3.org/2000/svg" fill="currentColor" focusable="false" aria-hidden="true" role="none">
|
||
<path d="M13.9 10.47L21.35 2h-1.76l-6.46 7.35L7.96 2H2l7.81 11.12L2 22h1.76l6.83-7.77L16.04 22H22l-8.1-11.53zm-2.42 2.75l-.79-1.11L4.4 3.3h2.71l5.08 7.11.79 1.11 6.6 9.24h-2.71l-5.39-7.54z"></path>
|
||
</svg>
|
||
</a>
|
||
</li>
|
||
</ul>
|
||
</div>
|
||
|
||
</div>
|
||
</div>
|
||
|
||
|
||
</div>
|
||
<div id class="component component-migratedContent" data-component-type="migratedContent">
|
||
|
||
|
||
|
||
|
||
<div class="rich-text">
|
||
<p>LinkedIn members entrust us with their personal data and we are committed to working hard every day to maintain that trust within a safe, professional environment. One crucial aspect to earn and maintain that trust lies in how well we secure our online systems and protect our data from unauthorized exposure. LinkedIn runs a microservice architecture, in which each microservice retrieves data from other sources and serves it to its clients. These calls often retrieve or process data that our members have entrusted to us. Our mission to securely handle members’ data highlights the importance of authorization controls in these microservices. Microservices can only access data with a valid business use case. This prevents the unnecessary spreading of data and minimizes the damage if one of our internal services were to be compromised.</p>
|
||
<p>One common solution for this challenge is to define Access Control Lists (ACLs), which contain a list of entities that are either allowed or denied access to a given resource.</p>
|
||
<p>For a <a href="https://github.com/linkedin/rest.li/blob/master/restli-int-test-server/src/main/java/com/linkedin/restli/examples/greetings/server/SimpleResourceUnderCollectionResource.java" target="_blank" data-tracking-control-name="_anchor_link">sample Rest.li resource</a>, this might look like the following:</p>
|
||
<p>greeting:<br> (client-service, GET, ALLOW)<br> (client-service, PUT, DENY)<br> (admin-service, GET, ALLOW)<br> (admin-service, PUT, ALLOW)</p>
|
||
<p>In this case, client-service can read but not write, while admin-service can both read and write to Greeting.</p>
|
||
<p>The concept of an ACL-based authorization system is simple enough, but can be a challenge to maintain at scale. At LinkedIn, we have over 700 microservices, which communicate at a total average rate of tens of millions of calls per second. Our volume of internal traffic is also growing rapidly. New features means more services collecting and accessing more data; new services or call paths require new ACLs. As more members join the platform and their usages increase, the overall volume of requests ramps up as well.</p>
|
||
<p>Therefore, in order to authorize the volume of requests at LinkedIn’s scale, we need to:</p>
|
||
<ul>
|
||
<li><p>Check authorization quickly</p> </li>
|
||
<li><p>Deliver ACL changes quickly</p> </li>
|
||
<li><p>Track and manage a large number of ACLs</p> </li>
|
||
</ul>
|
||
<h2>Making authorization checks quick</h2>
|
||
<p>We provide an authorization client module that runs on every service at LinkedIn. This module is used to decide whether an action should be allowed or denied before proceeding. We have integrated the client into the basic service architecture at LinkedIn so that new services pick up our client by default.</p>
|
||
<p>Given the ubiquitous nature of our client and its authorization checks, latency is critical. A network call can’t incur another network call to check authorization. If the check were to take even a full second, every request would see this delay and the delay would compound across the site, preventing any chance at scaling.</p>
|
||
<p>Therefore, when a service receives an inbound request, it needs to already have the information it needs to make a decision; in other words, all relevant ACL data must be kept in-memory by the service. Since any given service only needs to know the rules governing its own behavior, the actual amount of data needed is small enough to be cached in-memory.</p>
|
||
<h2>Delivering ACL changes</h2>
|
||
<p>Since we can’t retrieve ACL data synchronously, we rely on a periodic refresh rate in the background. At intervals, every client will reach out to the ACL server to update its ACLs. We need to maintain a fast enough cadence for changes to be realized, but this inevitably produces more load. We discuss this further below.</p>
|
||
<p>We have hundreds of thousands of resources which are protected by ACLs, and those ACLs all need to be stored somewhere. We use LinkedIn’s <a href="https://engineering.linkedin.com/blog/topic/espresso" target="_blank" data-tracking-control-name="_anchor_link">Espresso</a> database, which provides a simple interface with reliability by design, remote replication, and scaling capabilities.</p>
|
||
<p>We also have a Couchbase cache in front of Espresso, so even on the server side, most of the data is served from memory. Having a cache helps with our latency and scalability, but it also poses a problem—what if an ACL is edited and the cache goes stale? Our solution is to use a Change Data Capture system based on LinkedIn’s <a href="https://engineering.linkedin.com/blog/2017/10/streaming-data-pipelines-with-brooklin" target="_blank" data-tracking-control-name="_anchor_link">Brooklin</a> to notify the service when an ACL has changed so we can clear the cache.</p>
|
||
<h2>Tracking and managing</h2>
|
||
<p>Every authorization check is logged in the background. This allows us to debug, to analyze traffic in our ecosystem, and to support any necessary audits or investigations. We leverage LinkedIn’s <a href="https://engineering.linkedin.com/blog/search?q=kafka" target="_blank" data-tracking-control-name="_anchor_link">Kafka</a> message queue to allow for asynchronous, high-scale logging. Engineers can gain insight into a service by checking the data we push to our <a href="https://engineering.linkedin.com/blog/2017/08/ingraphs--monitoring-and-unexpected-artwork" target="_blank" data-tracking-control-name="_anchor_link">inGraphs</a> monitoring system.</p>
|
||
<p>While the enforcement is done by each application in a decentralized manner for scalability reasons, we store the ACL data at a central point: the ACL server.</p>
|
||
<p>The ACL server publishes a REST API—using LinkedIn’s rest.li framework—to create, delete, edit, and read ACLs. End-users typically manage ACLs through <a href="https://engineering.linkedin.com/blog/2018/08/nuage--making-data-systems-management-scalable" target="_blank" data-tracking-control-name="_anchor_link">Nuage</a>, our cloud management interface, or a command line tool.</p>
|
||
<p>Centralized control of ACLs allows us to nimbly enforce new security policies through a normalization process. For example, in the event of an ongoing production issue, engineers can be granted temporary access to all resources they may require for debugging. Such access grants are subject to approvals and are controlled to expire after a short time.</p>
|
||
</div>
|
||
|
||
</div>
|
||
<div id class="component component-standaloneImage" data-component-type="standaloneImage">
|
||
|
||
|
||
|
||
|
||
<div class="standalone-image-component standalone-image-component--article-width">
|
||
<figure>
|
||
<img class="standalone-image-component__image" sizes="(max-width: 480px) 480px, (max-width: 767px) 767px, (max-width: 1024px) 1024px, 1920px" data-delayed-url="https://media.licdn.com/dms/image/v2/D4D08AQHcxj2vp0kNoQ/croft-frontend-shrinkToFit1024/croft-frontend-shrinkToFit1024/0/1700688817007?e=2147483647&v=beta&t=Gog6kSN5_8qU0Trl1n5shQAgwE8cLf41RUDcwK3iWxg" alt="authorization2">
|
||
<!----> </figure>
|
||
</div>
|
||
|
||
</div>
|
||
<div id class="component component-migratedContent" data-component-type="migratedContent">
|
||
|
||
|
||
|
||
|
||
<div class="rich-text">
|
||
<p><i>An overview of our authorization architecture<br> <br> </i></p>
|
||
<h2>Future improvements</h2>
|
||
<p>Above, we discussed one challenge of the system: increasing the refresh rate also increases the QPS and throughput on our service and downstream Couchbase instances. We’re looking to build out a push-based solution that can dramatically decrease the time for an updated ACL to be delivered, while also reducing the total amount of traffic between ACL clients and the server.</p>
|
||
<p>Our system tracks and generates a vast amount of data about LinkedIn’s deployments and infrastructure. We aim to leverage this data set to draw novel insights about LinkedIn’s backend.</p>
|
||
<h2>Acknowledgements</h2>
|
||
<p>The ACL system would not have been possible without the tireless and dedicated work of our team members: <a href="https://www.linkedin.com/in/himanshu-sharma-8743b41/" target="_blank" data-tracking-control-name="_anchor_link">Himanshu Sharma</a>, <a href="https://www.linkedin.com/in/bimmerbear/" target="_blank" data-tracking-control-name="_anchor_link">Alok Yadav</a>, <a href="https://www.linkedin.com/in/tanmay-khemka-21b86646/" target="_blank" data-tracking-control-name="_anchor_link">Tanmay Khemka</a>, <a href="https://www.linkedin.com/in/hao-zhang-a4280ab0/" target="_blank" data-tracking-control-name="_anchor_link">Hao Zhang</a>, <a href="https://www.linkedin.com/in/mbriskar/" target="_blank" data-tracking-control-name="_anchor_link">Matej Briskar</a>, <a href="https://www.linkedin.com/in/yangwang2015/" target="_blank" data-tracking-control-name="_anchor_link">Yang Wang</a>, <a href="https://www.linkedin.com/in/wenjun-gu-b9a5b76b/" target="_blank" data-tracking-control-name="_anchor_link">Wenjun Gu</a>, and <a href="https://www.linkedin.com/in/ming-liao/" target="_blank" data-tracking-control-name="_anchor_link">Ming Liao</a>. Several other engineers have also provided critical improvements: <a href="https://www.linkedin.com/in/leestimedotcom/" target="_blank" data-tracking-control-name="_anchor_link">Peter (Yuefeng) Lee</a>, <a href="https://www.linkedin.com/in/siagarwal/" target="_blank" data-tracking-control-name="_anchor_link">Siddharth Agarwal</a>, <a href="https://www.linkedin.com/in/pathik-raval-0b953469/" target="_blank" data-tracking-control-name="_anchor_link">Pathik Raval</a>, and <a href="https://www.linkedin.com/in/wei-zhang-27b42791/" target="_blank" data-tracking-control-name="_anchor_link">Wei Zhang</a>. Finally, we would like to recognize the support of our management: <a href="https://www.linkedin.com/in/chad-lake-96757990/" target="_blank" data-tracking-control-name="_anchor_link">Chad Lake</a>, <a href="https://www.linkedin.com/in/bnakamoto/" target="_blank" data-tracking-control-name="_anchor_link">Bobby Nakamoto</a>, and <a href="https://www.linkedin.com/in/cpeterso/" target="_blank" data-tracking-control-name="_anchor_link">Chris Peterson</a>.</p>
|
||
</div>
|
||
|
||
</div>
|
||
<div id class="component component-postList" data-component-type="postList">
|
||
|
||
|
||
|
||
|
||
<section id="postList0FocusPoint" class="component__content-container list-layout" data-post-list>
|
||
<section class="simple-topic-list">
|
||
<p class="t-14 t-bold">Topics:
|
||
<a class="simple-topic-list__topic" href="https://www.linkedin.com/blog/engineering/security">
|
||
Security
|
||
</a>
|
||
<a class="simple-topic-list__topic" href="https://www.linkedin.com/blog/engineering/scalability">
|
||
Scalability
|
||
</a>
|
||
<a class="simple-topic-list__topic" href="https://www.linkedin.com/blog/engineering/data">
|
||
Data
|
||
</a>
|
||
</p>
|
||
</section>
|
||
|
||
<hr class="artdeco-divider">
|
||
|
||
<section class="list-layout__headline-container">
|
||
|
||
|
||
<p class="list-layout__headline t-32 t-sans">Related articles</p>
|
||
|
||
|
||
|
||
<!---->
|
||
</section>
|
||
|
||
<ul class="list-layout__posts">
|
||
|
||
|
||
<li class="post-list__item list-post">
|
||
<div class="list-post__content-container">
|
||
<p class="list-post__content-container__topic">
|
||
<a class="t-14 t-bold" href="https://www.linkedin.com/blog/engineering/ai">
|
||
AI
|
||
</a>
|
||
</p>
|
||
|
||
<div class="list-post__content-container__title">
|
||
<a class="list-post__link t-20 t-black" href="https://www.linkedin.com/blog/engineering/ai/semantic-search-for-ai-agents-at-scale-retrieval-and-ranking-for-linkedins-hiring-assistant">
|
||
Semantic Search for AI Agents at Scale: Retrieval and Ranking ...
|
||
</a>
|
||
</div>
|
||
|
||
<div class="list-post__content-container__byline">
|
||
<p class="list-post__content-container__author t-14 t-bold t-black">
|
||
Nikita Zhiltsov
|
||
</p>
|
||
<!----><!----><!---->
|
||
<p class="list-post__content-container__date t-14 t-black--light">
|
||
Jun 11, 2026
|
||
</p>
|
||
</div>
|
||
</div>
|
||
|
||
<div class="list-post__image-container">
|
||
<figure class="post__image-figure">
|
||
|
||
|
||
<img class="post__image" alt data-delayed-url="https://media.licdn.com/dms/image/v2/D4D08AQHAsjUtnBJaYQ/croft-frontend-shrinkToFit600/B4DZ63SodJKUAQ-/0/1781191575689?e=2147483647&v=beta&t=ZSkWv52hb7UicG83swSFJOBuufQOg00flcoavcpOVtw" data-ghost-url="https://static.licdn.com/aero-v1/sc/h/8pouyb1ly746xtru0x7p2axm0" sizes="(max-width: 480px) 480px, (max-width: 767px) 767px, (max-width: 1024px) 1024px, 480px">
|
||
|
||
</figure>
|
||
</div>
|
||
</li>
|
||
|
||
|
||
|
||
<li class="post-list__item list-post">
|
||
<div class="list-post__content-container">
|
||
<p class="list-post__content-container__topic">
|
||
<a class="t-14 t-bold" href="https://www.linkedin.com/blog/engineering/infrastructure">
|
||
Infrastructure
|
||
</a>
|
||
</p>
|
||
|
||
<div class="list-post__content-container__title">
|
||
<a class="list-post__link t-20 t-black" href="https://www.linkedin.com/blog/engineering/infrastructure/securing-every-kubernetes-workload-at-scale">
|
||
Securing every Kubernetes workload at scale
|
||
</a>
|
||
</div>
|
||
|
||
<div class="list-post__content-container__byline">
|
||
<p class="list-post__content-container__author t-14 t-bold t-black">
|
||
Rahul Godha
|
||
</p>
|
||
<!---->
|
||
<p class="list-post__content-container__date t-14 t-black--light">
|
||
Feb 26, 2026
|
||
</p>
|
||
</div>
|
||
</div>
|
||
|
||
<div class="list-post__image-container">
|
||
<figure class="post__image-figure">
|
||
|
||
|
||
<img class="post__image" alt data-delayed-url="https://media.licdn.com/dms/image/v2/D4D08AQHGlbqIdcaUEA/croft-frontend-shrinkToFit480/B4DZyce4RyIUAM-/0/1772151867406?e=2147483647&v=beta&t=AvfLgsWceXF3mbMr3kVIBearV-VGH19Wj7GR2SOapR8" data-ghost-url="https://static.licdn.com/aero-v1/sc/h/8pouyb1ly746xtru0x7p2axm0" sizes="(max-width: 480px) 480px, (max-width: 767px) 767px, (max-width: 1024px) 1024px, 480px">
|
||
|
||
</figure>
|
||
</div>
|
||
</li>
|
||
|
||
|
||
|
||
<li class="post-list__item list-post">
|
||
<div class="list-post__content-container">
|
||
<p class="list-post__content-container__topic">
|
||
<a class="t-14 t-bold" href="https://www.linkedin.com/blog/engineering/infrastructure">
|
||
Infrastructure
|
||
</a>
|
||
</p>
|
||
|
||
<div class="list-post__content-container__title">
|
||
<a class="list-post__link t-20 t-black" href="https://www.linkedin.com/blog/engineering/infrastructure/engineering-linkedins-job-ingestion-system-at-scale">
|
||
Engineering LinkedIn's job ingestion system at scale
|
||
</a>
|
||
</div>
|
||
|
||
<div class="list-post__content-container__byline">
|
||
<p class="list-post__content-container__author t-14 t-bold t-black">
|
||
Rishav Kumar
|
||
</p>
|
||
<!----><!---->
|
||
<p class="list-post__content-container__date t-14 t-black--light">
|
||
Jan 29, 2026
|
||
</p>
|
||
</div>
|
||
</div>
|
||
|
||
<div class="list-post__image-container">
|
||
<figure class="post__image-figure">
|
||
|
||
|
||
<img class="post__image" alt data-delayed-url="https://media.licdn.com/dms/image/v2/D4D08AQF5pjeIYCib_A/croft-frontend-shrinkToFit480/B4DZwHa.FIKIAM-/0/1769651037872?e=2147483647&v=beta&t=pnn1LfGnO3Mjv8A-tirpe_6Yj428JtrVBSmekuIsgwk" data-ghost-url="https://static.licdn.com/aero-v1/sc/h/8pouyb1ly746xtru0x7p2axm0" sizes="(max-width: 480px) 480px, (max-width: 767px) 767px, (max-width: 1024px) 1024px, 480px">
|
||
|
||
</figure>
|
||
</div>
|
||
</li>
|
||
|
||
</ul>
|
||
|
||
<!----> </section>
|
||
|
||
|
||
</div>
|
||
|
||
|
||
<!----> </section>
|
||
</div>
|
||
|
||
<script src="https://static.licdn.com/aero-v1/sc/h/8hfbuq1ftcvnnx4dd5067pi0t" async></script>
|
||
<script src="https://static.licdn.com/aero-v1/sc/h/bknx7jzs0ylu540sn4wuo6bue" async></script>
|
||
<script src="https://static.licdn.com/aero-v1/sc/h/egqq1vs0784qd3h3801e2w9lr" async></script>
|
||
|
||
</main>
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
<footer class="li-footer bg-transparent w-full ">
|
||
<ul class="li-footer__list flex flex-wrap flex-row items-start justify-start w-full h-auto min-h-[50px] my-[0px] mx-auto py-3 px-2 papabear:p-0">
|
||
|
||
<li class="li-footer__item font-sans text-xs text-color-text-solid-secondary flex flex-shrink-0 justify-start p-1 relative w-50% papabear:justify-center papabear:w-auto">
|
||
|
||
<span class="sr-only">LinkedIn</span>
|
||
<icon class="li-footer__copy-logo text-color-logo-brand-alt inline-block self-center h-[14px] w-[56px] mr-1" data-delayed-url="https://static.licdn.com/aero-v1/sc/h/5mebydpuuijm3uhv1q375inqh"></icon>
|
||
<span class="li-footer__copy-text flex items-center">© 2026</span>
|
||
|
||
</li>
|
||
|
||
|
||
<li class="li-footer__item font-sans text-xs text-color-text-solid-secondary flex flex-shrink-0 justify-start p-1 relative w-50% papabear:justify-center papabear:w-auto">
|
||
<a class="li-footer__item-link flex items-center font-sans text-xs font-bold text-color-text-solid-secondary hover:text-color-link-hover focus:text-color-link-focus" href="https://about.linkedin.com?trk=content_footer-about" data-tracking-control-name="content_footer-about" data-tracking-will-navigate>
|
||
|
||
About
|
||
|
||
</a>
|
||
</li>
|
||
|
||
|
||
<li class="li-footer__item font-sans text-xs text-color-text-solid-secondary flex flex-shrink-0 justify-start p-1 relative w-50% papabear:justify-center papabear:w-auto">
|
||
<a class="li-footer__item-link flex items-center font-sans text-xs font-bold text-color-text-solid-secondary hover:text-color-link-hover focus:text-color-link-focus" href="https://www.linkedin.com/accessibility?trk=content_footer-accessibility" data-tracking-control-name="content_footer-accessibility" data-tracking-will-navigate>
|
||
|
||
Accessibility
|
||
|
||
</a>
|
||
</li>
|
||
|
||
|
||
<li class="li-footer__item font-sans text-xs text-color-text-solid-secondary flex flex-shrink-0 justify-start p-1 relative w-50% papabear:justify-center papabear:w-auto">
|
||
<a class="li-footer__item-link flex items-center font-sans text-xs font-bold text-color-text-solid-secondary hover:text-color-link-hover focus:text-color-link-focus" href="https://www.linkedin.com/legal/user-agreement?trk=content_footer-user-agreement" data-tracking-control-name="content_footer-user-agreement" data-tracking-will-navigate>
|
||
|
||
User Agreement
|
||
|
||
</a>
|
||
</li>
|
||
|
||
|
||
<li class="li-footer__item font-sans text-xs text-color-text-solid-secondary flex flex-shrink-0 justify-start p-1 relative w-50% papabear:justify-center papabear:w-auto">
|
||
<a class="li-footer__item-link flex items-center font-sans text-xs font-bold text-color-text-solid-secondary hover:text-color-link-hover focus:text-color-link-focus" href="https://www.linkedin.com/legal/privacy-policy?trk=content_footer-privacy-policy" data-tracking-control-name="content_footer-privacy-policy" data-tracking-will-navigate>
|
||
|
||
Privacy Policy
|
||
|
||
</a>
|
||
</li>
|
||
|
||
<!---->
|
||
<li class="li-footer__item font-sans text-xs text-color-text-solid-secondary flex flex-shrink-0 justify-start p-1 relative w-50% papabear:justify-center papabear:w-auto">
|
||
<a class="li-footer__item-link flex items-center font-sans text-xs font-bold text-color-text-solid-secondary hover:text-color-link-hover focus:text-color-link-focus" href="https://www.linkedin.com/legal/cookie-policy?trk=content_footer-cookie-policy" data-tracking-control-name="content_footer-cookie-policy" data-tracking-will-navigate>
|
||
|
||
Cookie Policy
|
||
|
||
</a>
|
||
</li>
|
||
|
||
|
||
<li class="li-footer__item font-sans text-xs text-color-text-solid-secondary flex flex-shrink-0 justify-start p-1 relative w-50% papabear:justify-center papabear:w-auto">
|
||
<a class="li-footer__item-link flex items-center font-sans text-xs font-bold text-color-text-solid-secondary hover:text-color-link-hover focus:text-color-link-focus" href="https://www.linkedin.com/legal/copyright-policy?trk=content_footer-copyright-policy" data-tracking-control-name="content_footer-copyright-policy" data-tracking-will-navigate>
|
||
|
||
Copyright Policy
|
||
|
||
</a>
|
||
</li>
|
||
|
||
|
||
<li class="li-footer__item font-sans text-xs text-color-text-solid-secondary flex flex-shrink-0 justify-start p-1 relative w-50% papabear:justify-center papabear:w-auto">
|
||
<a class="li-footer__item-link flex items-center font-sans text-xs font-bold text-color-text-solid-secondary hover:text-color-link-hover focus:text-color-link-focus" href="https://brand.linkedin.com/policies?trk=content_footer-brand-policy" data-tracking-control-name="content_footer-brand-policy" data-tracking-will-navigate>
|
||
|
||
Brand Policy
|
||
|
||
</a>
|
||
</li>
|
||
|
||
|
||
<li class="li-footer__item font-sans text-xs text-color-text-solid-secondary flex flex-shrink-0 justify-start p-1 relative w-50% papabear:justify-center papabear:w-auto">
|
||
<a class="li-footer__item-link flex items-center font-sans text-xs font-bold text-color-text-solid-secondary hover:text-color-link-hover focus:text-color-link-focus" href="https://www.linkedin.com/psettings/guest-controls?trk=content_footer-guest-controls" data-tracking-control-name="content_footer-guest-controls" data-tracking-will-navigate>
|
||
|
||
Guest Controls
|
||
|
||
</a>
|
||
</li>
|
||
|
||
|
||
<li class="li-footer__item font-sans text-xs text-color-text-solid-secondary flex flex-shrink-0 justify-start p-1 relative w-50% papabear:justify-center papabear:w-auto">
|
||
<a class="li-footer__item-link flex items-center font-sans text-xs font-bold text-color-text-solid-secondary hover:text-color-link-hover focus:text-color-link-focus" href="https://www.linkedin.com/help/linkedin/answer/34593?trk=content_footer-community-guide" data-tracking-control-name="content_footer-community-guide" data-tracking-will-navigate>
|
||
|
||
Community Guidelines
|
||
|
||
</a>
|
||
</li>
|
||
|
||
|
||
<!---->
|
||
|
||
|
||
<li class="li-footer__item font-sans text-xs text-color-text-solid-secondary flex flex-shrink-0 justify-start p-1 relative w-50% papabear:justify-center papabear:w-auto">
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
<div class="collapsible-dropdown collapsible-dropdown--footer collapsible-dropdown--up flex items-center relative hyphens-auto language-selector z-2">
|
||
<!---->
|
||
<ul class="collapsible-dropdown__list hidden container-raised absolute w-auto overflow-y-auto flex-col items-stretch z-[9999] bottom-[100%] top-auto" role="menu" tabindex="-1">
|
||
|
||
<li class="language-selector__item" role="presentation">
|
||
<!-- Adding aria-label to both the li and the button because screen reader focus goes to button on desktop and li on mobile-->
|
||
<button aria-label="العربية (Arabic)" class="font-sans text-xs link block py-[5px] px-2 w-full hover:cursor-pointer hover:bg-color-action hover:text-color-text-on-dark focus:bg-color-action focus:text-color-text-on-dark
|
||
language-selector__link !font-regular" data-tracking-control-name="language-selector-ar_AE" data-locale="ar_AE" role="menuitem" lang="ar_AE">
|
||
العربية (Arabic)
|
||
</button>
|
||
</li>
|
||
<li class="language-selector__item" role="presentation">
|
||
<!-- Adding aria-label to both the li and the button because screen reader focus goes to button on desktop and li on mobile-->
|
||
<button aria-label="বাংলা (Bangla)" class="font-sans text-xs link block py-[5px] px-2 w-full hover:cursor-pointer hover:bg-color-action hover:text-color-text-on-dark focus:bg-color-action focus:text-color-text-on-dark
|
||
language-selector__link !font-regular" data-tracking-control-name="language-selector-bn_IN" data-locale="bn_IN" role="menuitem" lang="bn_IN">
|
||
বাংলা (Bangla)
|
||
</button>
|
||
</li>
|
||
<li class="language-selector__item" role="presentation">
|
||
<!-- Adding aria-label to both the li and the button because screen reader focus goes to button on desktop and li on mobile-->
|
||
<button aria-label="Čeština (Czech)" class="font-sans text-xs link block py-[5px] px-2 w-full hover:cursor-pointer hover:bg-color-action hover:text-color-text-on-dark focus:bg-color-action focus:text-color-text-on-dark
|
||
language-selector__link !font-regular" data-tracking-control-name="language-selector-cs_CZ" data-locale="cs_CZ" role="menuitem" lang="cs_CZ">
|
||
Čeština (Czech)
|
||
</button>
|
||
</li>
|
||
<li class="language-selector__item" role="presentation">
|
||
<!-- Adding aria-label to both the li and the button because screen reader focus goes to button on desktop and li on mobile-->
|
||
<button aria-label="Dansk (Danish)" class="font-sans text-xs link block py-[5px] px-2 w-full hover:cursor-pointer hover:bg-color-action hover:text-color-text-on-dark focus:bg-color-action focus:text-color-text-on-dark
|
||
language-selector__link !font-regular" data-tracking-control-name="language-selector-da_DK" data-locale="da_DK" role="menuitem" lang="da_DK">
|
||
Dansk (Danish)
|
||
</button>
|
||
</li>
|
||
<li class="language-selector__item" role="presentation">
|
||
<!-- Adding aria-label to both the li and the button because screen reader focus goes to button on desktop and li on mobile-->
|
||
<button aria-label="Deutsch (German)" class="font-sans text-xs link block py-[5px] px-2 w-full hover:cursor-pointer hover:bg-color-action hover:text-color-text-on-dark focus:bg-color-action focus:text-color-text-on-dark
|
||
language-selector__link !font-regular" data-tracking-control-name="language-selector-de_DE" data-locale="de_DE" role="menuitem" lang="de_DE">
|
||
Deutsch (German)
|
||
</button>
|
||
</li>
|
||
<li class="language-selector__item" role="presentation">
|
||
<!-- Adding aria-label to both the li and the button because screen reader focus goes to button on desktop and li on mobile-->
|
||
<button aria-label="Ελληνικά (Greek)" class="font-sans text-xs link block py-[5px] px-2 w-full hover:cursor-pointer hover:bg-color-action hover:text-color-text-on-dark focus:bg-color-action focus:text-color-text-on-dark
|
||
language-selector__link !font-regular" data-tracking-control-name="language-selector-el_GR" data-locale="el_GR" role="menuitem" lang="el_GR">
|
||
Ελληνικά (Greek)
|
||
</button>
|
||
</li>
|
||
<li class="language-selector__item" role="presentation">
|
||
<!-- Adding aria-label to both the li and the button because screen reader focus goes to button on desktop and li on mobile-->
|
||
<button aria-label="English (English) selected" class="font-sans text-xs link block py-[5px] px-2 w-full hover:cursor-pointer hover:bg-color-action hover:text-color-text-on-dark focus:bg-color-action focus:text-color-text-on-dark
|
||
language-selector__link--selected" data-tracking-control-name="language-selector-en_US" data-locale="en_US" role="menuitem" lang="en_US">
|
||
<strong>English (English)</strong>
|
||
</button>
|
||
</li>
|
||
<li class="language-selector__item" role="presentation">
|
||
<!-- Adding aria-label to both the li and the button because screen reader focus goes to button on desktop and li on mobile-->
|
||
<button aria-label="Español (Spanish)" class="font-sans text-xs link block py-[5px] px-2 w-full hover:cursor-pointer hover:bg-color-action hover:text-color-text-on-dark focus:bg-color-action focus:text-color-text-on-dark
|
||
language-selector__link !font-regular" data-tracking-control-name="language-selector-es_ES" data-locale="es_ES" role="menuitem" lang="es_ES">
|
||
Español (Spanish)
|
||
</button>
|
||
</li>
|
||
<li class="language-selector__item" role="presentation">
|
||
<!-- Adding aria-label to both the li and the button because screen reader focus goes to button on desktop and li on mobile-->
|
||
<button aria-label="فارسی (Persian)" class="font-sans text-xs link block py-[5px] px-2 w-full hover:cursor-pointer hover:bg-color-action hover:text-color-text-on-dark focus:bg-color-action focus:text-color-text-on-dark
|
||
language-selector__link !font-regular" data-tracking-control-name="language-selector-fa_IR" data-locale="fa_IR" role="menuitem" lang="fa_IR">
|
||
فارسی (Persian)
|
||
</button>
|
||
</li>
|
||
<li class="language-selector__item" role="presentation">
|
||
<!-- Adding aria-label to both the li and the button because screen reader focus goes to button on desktop and li on mobile-->
|
||
<button aria-label="Suomi (Finnish)" class="font-sans text-xs link block py-[5px] px-2 w-full hover:cursor-pointer hover:bg-color-action hover:text-color-text-on-dark focus:bg-color-action focus:text-color-text-on-dark
|
||
language-selector__link !font-regular" data-tracking-control-name="language-selector-fi_FI" data-locale="fi_FI" role="menuitem" lang="fi_FI">
|
||
Suomi (Finnish)
|
||
</button>
|
||
</li>
|
||
<li class="language-selector__item" role="presentation">
|
||
<!-- Adding aria-label to both the li and the button because screen reader focus goes to button on desktop and li on mobile-->
|
||
<button aria-label="Français (French)" class="font-sans text-xs link block py-[5px] px-2 w-full hover:cursor-pointer hover:bg-color-action hover:text-color-text-on-dark focus:bg-color-action focus:text-color-text-on-dark
|
||
language-selector__link !font-regular" data-tracking-control-name="language-selector-fr_FR" data-locale="fr_FR" role="menuitem" lang="fr_FR">
|
||
Français (French)
|
||
</button>
|
||
</li>
|
||
<li class="language-selector__item" role="presentation">
|
||
<!-- Adding aria-label to both the li and the button because screen reader focus goes to button on desktop and li on mobile-->
|
||
<button aria-label="हिंदी (Hindi)" class="font-sans text-xs link block py-[5px] px-2 w-full hover:cursor-pointer hover:bg-color-action hover:text-color-text-on-dark focus:bg-color-action focus:text-color-text-on-dark
|
||
language-selector__link !font-regular" data-tracking-control-name="language-selector-hi_IN" data-locale="hi_IN" role="menuitem" lang="hi_IN">
|
||
हिंदी (Hindi)
|
||
</button>
|
||
</li>
|
||
<li class="language-selector__item" role="presentation">
|
||
<!-- Adding aria-label to both the li and the button because screen reader focus goes to button on desktop and li on mobile-->
|
||
<button aria-label="Magyar (Hungarian)" class="font-sans text-xs link block py-[5px] px-2 w-full hover:cursor-pointer hover:bg-color-action hover:text-color-text-on-dark focus:bg-color-action focus:text-color-text-on-dark
|
||
language-selector__link !font-regular" data-tracking-control-name="language-selector-hu_HU" data-locale="hu_HU" role="menuitem" lang="hu_HU">
|
||
Magyar (Hungarian)
|
||
</button>
|
||
</li>
|
||
<li class="language-selector__item" role="presentation">
|
||
<!-- Adding aria-label to both the li and the button because screen reader focus goes to button on desktop and li on mobile-->
|
||
<button aria-label="Bahasa Indonesia (Indonesian)" class="font-sans text-xs link block py-[5px] px-2 w-full hover:cursor-pointer hover:bg-color-action hover:text-color-text-on-dark focus:bg-color-action focus:text-color-text-on-dark
|
||
language-selector__link !font-regular" data-tracking-control-name="language-selector-in_ID" data-locale="in_ID" role="menuitem" lang="in_ID">
|
||
Bahasa Indonesia (Indonesian)
|
||
</button>
|
||
</li>
|
||
<li class="language-selector__item" role="presentation">
|
||
<!-- Adding aria-label to both the li and the button because screen reader focus goes to button on desktop and li on mobile-->
|
||
<button aria-label="Italiano (Italian)" class="font-sans text-xs link block py-[5px] px-2 w-full hover:cursor-pointer hover:bg-color-action hover:text-color-text-on-dark focus:bg-color-action focus:text-color-text-on-dark
|
||
language-selector__link !font-regular" data-tracking-control-name="language-selector-it_IT" data-locale="it_IT" role="menuitem" lang="it_IT">
|
||
Italiano (Italian)
|
||
</button>
|
||
</li>
|
||
<li class="language-selector__item" role="presentation">
|
||
<!-- Adding aria-label to both the li and the button because screen reader focus goes to button on desktop and li on mobile-->
|
||
<button aria-label="עברית (Hebrew)" class="font-sans text-xs link block py-[5px] px-2 w-full hover:cursor-pointer hover:bg-color-action hover:text-color-text-on-dark focus:bg-color-action focus:text-color-text-on-dark
|
||
language-selector__link !font-regular" data-tracking-control-name="language-selector-iw_IL" data-locale="iw_IL" role="menuitem" lang="iw_IL">
|
||
עברית (Hebrew)
|
||
</button>
|
||
</li>
|
||
<li class="language-selector__item" role="presentation">
|
||
<!-- Adding aria-label to both the li and the button because screen reader focus goes to button on desktop and li on mobile-->
|
||
<button aria-label="日本語 (Japanese)" class="font-sans text-xs link block py-[5px] px-2 w-full hover:cursor-pointer hover:bg-color-action hover:text-color-text-on-dark focus:bg-color-action focus:text-color-text-on-dark
|
||
language-selector__link !font-regular" data-tracking-control-name="language-selector-ja_JP" data-locale="ja_JP" role="menuitem" lang="ja_JP">
|
||
日本語 (Japanese)
|
||
</button>
|
||
</li>
|
||
<li class="language-selector__item" role="presentation">
|
||
<!-- Adding aria-label to both the li and the button because screen reader focus goes to button on desktop and li on mobile-->
|
||
<button aria-label="한국어 (Korean)" class="font-sans text-xs link block py-[5px] px-2 w-full hover:cursor-pointer hover:bg-color-action hover:text-color-text-on-dark focus:bg-color-action focus:text-color-text-on-dark
|
||
language-selector__link !font-regular" data-tracking-control-name="language-selector-ko_KR" data-locale="ko_KR" role="menuitem" lang="ko_KR">
|
||
한국어 (Korean)
|
||
</button>
|
||
</li>
|
||
<li class="language-selector__item" role="presentation">
|
||
<!-- Adding aria-label to both the li and the button because screen reader focus goes to button on desktop and li on mobile-->
|
||
<button aria-label="मराठी (Marathi)" class="font-sans text-xs link block py-[5px] px-2 w-full hover:cursor-pointer hover:bg-color-action hover:text-color-text-on-dark focus:bg-color-action focus:text-color-text-on-dark
|
||
language-selector__link !font-regular" data-tracking-control-name="language-selector-mr_IN" data-locale="mr_IN" role="menuitem" lang="mr_IN">
|
||
मराठी (Marathi)
|
||
</button>
|
||
</li>
|
||
<li class="language-selector__item" role="presentation">
|
||
<!-- Adding aria-label to both the li and the button because screen reader focus goes to button on desktop and li on mobile-->
|
||
<button aria-label="Bahasa Malaysia (Malay)" class="font-sans text-xs link block py-[5px] px-2 w-full hover:cursor-pointer hover:bg-color-action hover:text-color-text-on-dark focus:bg-color-action focus:text-color-text-on-dark
|
||
language-selector__link !font-regular" data-tracking-control-name="language-selector-ms_MY" data-locale="ms_MY" role="menuitem" lang="ms_MY">
|
||
Bahasa Malaysia (Malay)
|
||
</button>
|
||
</li>
|
||
<li class="language-selector__item" role="presentation">
|
||
<!-- Adding aria-label to both the li and the button because screen reader focus goes to button on desktop and li on mobile-->
|
||
<button aria-label="Nederlands (Dutch)" class="font-sans text-xs link block py-[5px] px-2 w-full hover:cursor-pointer hover:bg-color-action hover:text-color-text-on-dark focus:bg-color-action focus:text-color-text-on-dark
|
||
language-selector__link !font-regular" data-tracking-control-name="language-selector-nl_NL" data-locale="nl_NL" role="menuitem" lang="nl_NL">
|
||
Nederlands (Dutch)
|
||
</button>
|
||
</li>
|
||
<li class="language-selector__item" role="presentation">
|
||
<!-- Adding aria-label to both the li and the button because screen reader focus goes to button on desktop and li on mobile-->
|
||
<button aria-label="Norsk (Norwegian)" class="font-sans text-xs link block py-[5px] px-2 w-full hover:cursor-pointer hover:bg-color-action hover:text-color-text-on-dark focus:bg-color-action focus:text-color-text-on-dark
|
||
language-selector__link !font-regular" data-tracking-control-name="language-selector-no_NO" data-locale="no_NO" role="menuitem" lang="no_NO">
|
||
Norsk (Norwegian)
|
||
</button>
|
||
</li>
|
||
<li class="language-selector__item" role="presentation">
|
||
<!-- Adding aria-label to both the li and the button because screen reader focus goes to button on desktop and li on mobile-->
|
||
<button aria-label="ਪੰਜਾਬੀ (Punjabi)" class="font-sans text-xs link block py-[5px] px-2 w-full hover:cursor-pointer hover:bg-color-action hover:text-color-text-on-dark focus:bg-color-action focus:text-color-text-on-dark
|
||
language-selector__link !font-regular" data-tracking-control-name="language-selector-pa_IN" data-locale="pa_IN" role="menuitem" lang="pa_IN">
|
||
ਪੰਜਾਬੀ (Punjabi)
|
||
</button>
|
||
</li>
|
||
<li class="language-selector__item" role="presentation">
|
||
<!-- Adding aria-label to both the li and the button because screen reader focus goes to button on desktop and li on mobile-->
|
||
<button aria-label="Polski (Polish)" class="font-sans text-xs link block py-[5px] px-2 w-full hover:cursor-pointer hover:bg-color-action hover:text-color-text-on-dark focus:bg-color-action focus:text-color-text-on-dark
|
||
language-selector__link !font-regular" data-tracking-control-name="language-selector-pl_PL" data-locale="pl_PL" role="menuitem" lang="pl_PL">
|
||
Polski (Polish)
|
||
</button>
|
||
</li>
|
||
<li class="language-selector__item" role="presentation">
|
||
<!-- Adding aria-label to both the li and the button because screen reader focus goes to button on desktop and li on mobile-->
|
||
<button aria-label="Português (Portuguese)" class="font-sans text-xs link block py-[5px] px-2 w-full hover:cursor-pointer hover:bg-color-action hover:text-color-text-on-dark focus:bg-color-action focus:text-color-text-on-dark
|
||
language-selector__link !font-regular" data-tracking-control-name="language-selector-pt_BR" data-locale="pt_BR" role="menuitem" lang="pt_BR">
|
||
Português (Portuguese)
|
||
</button>
|
||
</li>
|
||
<li class="language-selector__item" role="presentation">
|
||
<!-- Adding aria-label to both the li and the button because screen reader focus goes to button on desktop and li on mobile-->
|
||
<button aria-label="Română (Romanian)" class="font-sans text-xs link block py-[5px] px-2 w-full hover:cursor-pointer hover:bg-color-action hover:text-color-text-on-dark focus:bg-color-action focus:text-color-text-on-dark
|
||
language-selector__link !font-regular" data-tracking-control-name="language-selector-ro_RO" data-locale="ro_RO" role="menuitem" lang="ro_RO">
|
||
Română (Romanian)
|
||
</button>
|
||
</li>
|
||
<li class="language-selector__item" role="presentation">
|
||
<!-- Adding aria-label to both the li and the button because screen reader focus goes to button on desktop and li on mobile-->
|
||
<button aria-label="Русский (Russian)" class="font-sans text-xs link block py-[5px] px-2 w-full hover:cursor-pointer hover:bg-color-action hover:text-color-text-on-dark focus:bg-color-action focus:text-color-text-on-dark
|
||
language-selector__link !font-regular" data-tracking-control-name="language-selector-ru_RU" data-locale="ru_RU" role="menuitem" lang="ru_RU">
|
||
Русский (Russian)
|
||
</button>
|
||
</li>
|
||
<li class="language-selector__item" role="presentation">
|
||
<!-- Adding aria-label to both the li and the button because screen reader focus goes to button on desktop and li on mobile-->
|
||
<button aria-label="Svenska (Swedish)" class="font-sans text-xs link block py-[5px] px-2 w-full hover:cursor-pointer hover:bg-color-action hover:text-color-text-on-dark focus:bg-color-action focus:text-color-text-on-dark
|
||
language-selector__link !font-regular" data-tracking-control-name="language-selector-sv_SE" data-locale="sv_SE" role="menuitem" lang="sv_SE">
|
||
Svenska (Swedish)
|
||
</button>
|
||
</li>
|
||
<li class="language-selector__item" role="presentation">
|
||
<!-- Adding aria-label to both the li and the button because screen reader focus goes to button on desktop and li on mobile-->
|
||
<button aria-label="తెలుగు (Telugu)" class="font-sans text-xs link block py-[5px] px-2 w-full hover:cursor-pointer hover:bg-color-action hover:text-color-text-on-dark focus:bg-color-action focus:text-color-text-on-dark
|
||
language-selector__link !font-regular" data-tracking-control-name="language-selector-te_IN" data-locale="te_IN" role="menuitem" lang="te_IN">
|
||
తెలుగు (Telugu)
|
||
</button>
|
||
</li>
|
||
<li class="language-selector__item" role="presentation">
|
||
<!-- Adding aria-label to both the li and the button because screen reader focus goes to button on desktop and li on mobile-->
|
||
<button aria-label="ภาษาไทย (Thai)" class="font-sans text-xs link block py-[5px] px-2 w-full hover:cursor-pointer hover:bg-color-action hover:text-color-text-on-dark focus:bg-color-action focus:text-color-text-on-dark
|
||
language-selector__link !font-regular" data-tracking-control-name="language-selector-th_TH" data-locale="th_TH" role="menuitem" lang="th_TH">
|
||
ภาษาไทย (Thai)
|
||
</button>
|
||
</li>
|
||
<li class="language-selector__item" role="presentation">
|
||
<!-- Adding aria-label to both the li and the button because screen reader focus goes to button on desktop and li on mobile-->
|
||
<button aria-label="Tagalog (Tagalog)" class="font-sans text-xs link block py-[5px] px-2 w-full hover:cursor-pointer hover:bg-color-action hover:text-color-text-on-dark focus:bg-color-action focus:text-color-text-on-dark
|
||
language-selector__link !font-regular" data-tracking-control-name="language-selector-tl_PH" data-locale="tl_PH" role="menuitem" lang="tl_PH">
|
||
Tagalog (Tagalog)
|
||
</button>
|
||
</li>
|
||
<li class="language-selector__item" role="presentation">
|
||
<!-- Adding aria-label to both the li and the button because screen reader focus goes to button on desktop and li on mobile-->
|
||
<button aria-label="Türkçe (Turkish)" class="font-sans text-xs link block py-[5px] px-2 w-full hover:cursor-pointer hover:bg-color-action hover:text-color-text-on-dark focus:bg-color-action focus:text-color-text-on-dark
|
||
language-selector__link !font-regular" data-tracking-control-name="language-selector-tr_TR" data-locale="tr_TR" role="menuitem" lang="tr_TR">
|
||
Türkçe (Turkish)
|
||
</button>
|
||
</li>
|
||
<li class="language-selector__item" role="presentation">
|
||
<!-- Adding aria-label to both the li and the button because screen reader focus goes to button on desktop and li on mobile-->
|
||
<button aria-label="Українська (Ukrainian)" class="font-sans text-xs link block py-[5px] px-2 w-full hover:cursor-pointer hover:bg-color-action hover:text-color-text-on-dark focus:bg-color-action focus:text-color-text-on-dark
|
||
language-selector__link !font-regular" data-tracking-control-name="language-selector-uk_UA" data-locale="uk_UA" role="menuitem" lang="uk_UA">
|
||
Українська (Ukrainian)
|
||
</button>
|
||
</li>
|
||
<li class="language-selector__item" role="presentation">
|
||
<!-- Adding aria-label to both the li and the button because screen reader focus goes to button on desktop and li on mobile-->
|
||
<button aria-label="Tiếng Việt (Vietnamese)" class="font-sans text-xs link block py-[5px] px-2 w-full hover:cursor-pointer hover:bg-color-action hover:text-color-text-on-dark focus:bg-color-action focus:text-color-text-on-dark
|
||
language-selector__link !font-regular" data-tracking-control-name="language-selector-vi_VN" data-locale="vi_VN" role="menuitem" lang="vi_VN">
|
||
Tiếng Việt (Vietnamese)
|
||
</button>
|
||
</li>
|
||
<li class="language-selector__item" role="presentation">
|
||
<!-- Adding aria-label to both the li and the button because screen reader focus goes to button on desktop and li on mobile-->
|
||
<button aria-label="简体中文 (Chinese (Simplified))" class="font-sans text-xs link block py-[5px] px-2 w-full hover:cursor-pointer hover:bg-color-action hover:text-color-text-on-dark focus:bg-color-action focus:text-color-text-on-dark
|
||
language-selector__link !font-regular" data-tracking-control-name="language-selector-zh_CN" data-locale="zh_CN" role="menuitem" lang="zh_CN">
|
||
简体中文 (Chinese (Simplified))
|
||
</button>
|
||
</li>
|
||
<li class="language-selector__item" role="presentation">
|
||
<!-- Adding aria-label to both the li and the button because screen reader focus goes to button on desktop and li on mobile-->
|
||
<button aria-label="正體中文 (Chinese (Traditional))" class="font-sans text-xs link block py-[5px] px-2 w-full hover:cursor-pointer hover:bg-color-action hover:text-color-text-on-dark focus:bg-color-action focus:text-color-text-on-dark
|
||
language-selector__link !font-regular" data-tracking-control-name="language-selector-zh_TW" data-locale="zh_TW" role="menuitem" lang="zh_TW">
|
||
正體中文 (Chinese (Traditional))
|
||
</button>
|
||
</li>
|
||
<!---->
|
||
</ul>
|
||
|
||
|
||
<button class="language-selector__button select-none relative pr-2 font-sans text-xs font-bold text-color-text-low-emphasis hover:text-color-link-hover hover:cursor-pointer focus:text-color-link-focus focus:outline-dotted focus:outline-1" aria-expanded="false" data-tracking-control-name="footer-lang-dropdown_trigger">
|
||
<span class="language-selector__label-text mr-0.5 break-words">
|
||
Language
|
||
</span>
|
||
<icon class="language-selector__label-chevron w-2 h-2 absolute top-0 right-0" data-delayed-url="https://static.licdn.com/aero-v1/sc/h/cyolgscd0imw2ldqppkrb84vo"></icon>
|
||
</button>
|
||
|
||
</div>
|
||
|
||
|
||
|
||
</li>
|
||
|
||
</ul>
|
||
|
||
<!----> </footer>
|
||
|
||
|
||
|
||
<script src="https://static.licdn.com/aero-v1/sc/h/e69gtg8c61dzqklxridy0htl9" async></script>
|
||
<!---->
|
||
|
||
<!----><!---->
|
||
</body>
|
||
</html>
|
||
|
||
|
||
|