1493 lines
87 KiB
HTML
1493 lines
87 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="AAZbPiHlT0AY/vbes0CRLg==" data-multiproduct-name="lithograph-publish-frontend" data-service-name="lithograph-publish-frontend" data-browser-id="4a26ca90-1780-4a8a-8d71-bf5ff362d4e3" data-is-bot="false" data-page-instance="urn:li:page:d_lithograph_content;cUxx3rp3Quie4mw45vfkqw==" 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/optimization/eliminating-toil-with-fully-automated-load-testing">
|
||
<!----><!---->
|
||
<!---->
|
||
<!---->
|
||
<!---->
|
||
<!---->
|
||
<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>Eliminating toil with fully automated load testing</title>
|
||
<!---->
|
||
<meta property="og:type" content="website">
|
||
<meta property="og:title" content="Eliminating toil with fully automated load testing">
|
||
<!---->
|
||
<meta property="og:url" content="https://www.linkedin.com/blog/engineering/optimization/eliminating-toil-with-fully-automated-load-testing">
|
||
<meta property="og:image" content="https://media.licdn.com/dms/image/v2/D4D08AQEeXClDWtn9OQ/croft-frontend-shrinkToFit1024/croft-frontend-shrinkToFit1024/0/1700687652329?e=2147483647&v=beta&t=qagr9tby7NBt6etfZUAWHFH3rtRVfap5faWiJ5KEKb8">
|
||
<meta name="twitter:title" content="Eliminating toil with fully automated load testing">
|
||
<meta name="twitter:site" content="@linkedin">
|
||
<!---->
|
||
<!---->
|
||
<meta name="robots" content="noarchive">
|
||
|
||
<meta name="linkedin:pageTag" content="/blog/engineering/optimization/eliminating-toil-with-fully-automated-load-testing">
|
||
<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/optimization">Optimization</a>
|
||
</p>
|
||
|
||
<h1 class="article-headline t-40" data-article-title="Eliminating toil with fully automated load testing">Eliminating toil with fully automated load testing</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/nishant0singh" target="_blank" class="t-14 t-bold"><span class="screen-reader">Authored by</span>Nishant Singh</a>
|
||
<p class="t-14">Engineering@LinkedIn | Observability | Reliability | Author</p>
|
||
|
||
<p class="t-14 t-black--light" data-published-date="2019-12-6">
|
||
December 6, 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">
|
||
<h2>Introduction</h2>
|
||
<p>In 2013, when LinkedIn moved to multiple data centers across the globe, we needed a way to redirect traffic from one data center to another in order to mitigate potential member impact in the event of a disturbance to our services. This need led to the birth of one of the most important pieces of engineering at LinkedIn, called <a href="https://engineering.linkedin.com/blog/2017/05/trafficshift--load-testing-at-scale" target="_blank" data-tracking-control-name="_anchor_link">TrafficShift</a>. It provides the ability to move live production traffic from one data center to another in an effortless manner. </p>
|
||
<p>As we evolved with new services and saw exponential growth in traffic, keeping the site up remained critical in order to serve our members. It is our job as SREs to ensure the member experience is consistent and reliable. To do that, we need to make certain that our data centers are able to handle the growing demand, while simultaneously being prepared and having the ability to deal with an unexpected disaster scenario. Therefore, we incorporated load testing as a part of our daily operations work so that we can take a proactive approach to identifying our capabilities. Load testing not only helps us to identify the maximum operating capacity of our services, but also highlights any bottlenecks in our process and helps us determine if any services are degrading. </p>
|
||
<p>To provide a bit of context, load testing is the practice of targeting a server with simulated HTTP traffic in order to measure capacity and performance of the system. At LinkedIn, we achieve the same effect by targeting our data centers with redirected live user traffic from other LinkedIn data centers to help us identify the maximum queries per second (QPS) a data center can handle. In this blog, we’ll discuss the evolution of our manual load testing process and our journey to fully automating that process. We’ll also review the major challenges we faced while trying to achieve automation, which eventually helped our Site Operations team work more efficiently and save hours from their days. </p>
|
||
<h2>LinkedIn traffic routing</h2>
|
||
<p>Whenever a member navigates to <a href="https://www.linkedin.com" target="_blank" data-tracking-control-name="_anchor_link">https://www.linkedin.com</a> in their browser, they connect to one of our PoPs (Point of Presence) using <a href="https://en.wikipedia.org/wiki/GeoDNS" target="_blank" data-tracking-control-name="_anchor_link">GeoDNS</a>. These PoPs are the link between members and our data centers. If you’re not familiar with PoPs, think of them as miniature data centers consisting of IP virtual servers (IPVS) and Apache Traffic Servers (ATS) that act as the proxy between our members and data centers. </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/D4D08AQEkblWbO7RNIg/croft-frontend-shrinkToFit1024/croft-frontend-shrinkToFit1024/0/1700687652484?e=2147483647&v=beta&t=9Pr5x4EhsTrGhcqNznEgyKxsL1BzKswzWCSGUwXprQg" alt="traffic-routing-architecture">
|
||
<!----> </figure>
|
||
</div>
|
||
|
||
</div>
|
||
<div id class="component component-migratedContent" data-component-type="migratedContent">
|
||
|
||
|
||
|
||
|
||
<div class="rich-text">
|
||
<p><i>Figure 1: Stickyrouting and LinkedIn traffic routing architecture <br> </i></p>
|
||
<p>From there, our Stickyrouting service assigns a primary data center and secondary data center for each member. This assignment takes place using a Hadoop job that runs in a regular interval and assigns each member a primary and secondary data center based on geographic distances between members and the data center, while also considering the capacity constraints of each data center. When a primary data center for a member is offline, the secondary data center is used in order to ensure there is no member impact.</p>
|
||
<p>A special cookie is used to route the member to their primary colo. This cookie is set by the Apache Traffic Servers (ATS). This cookie contains routing information that indicates a "bucket" within a data center. Buckets are subpartitions of a Stickyrouting partition and a member is assigned a bucket in a data center. In the event the cookie is expired, not available, or if the data center information that the cookie had is itself offline, then the Stickyrouting plugin talks to the backend to fetch information on which data center the member should be redirected to. Stickyrouting is therefore an important service that manages the mapping between member and data center mapping.</p>
|
||
<h2>Manual load test approach</h2>
|
||
<p>As mentioned earlier, load testing for us is a daily practice and, for a long time, was a rather manual process. It required setting a predefined amount of production traffic as the target queries per second (QPS) for the load test and then manually figuring out how much QPS needed to be moved from other data centers to the current data center. </p>
|
||
<p>This was done by marking the corresponding Stickyrouting buckets in other data centers as offline and using Stickyrouting in a controlled way to ensure we didn’t cause a disturbance to the member experience. </p>
|
||
<p>However, before all this comes into the picture, we defined a target QPS for the load test based on historic peak traffic trends and business initiatives planned for the future. We also defined another target for the total QPS while the test was running, to account for live traffic that’s not part of the load test. To expand on that concept, if x is our final QPS, we generally set the target QPS slightly lower, to somewhere near x-y QPS, to accommodate live traffic increments, where y is lower threshold. </p>
|
||
<p>We also had a high watermark set, where we encouraged service owners to plan for some extra amount of QPS over the actual load test target. This gave us leverage to anticipate any upticks in site traffic that could happen during the load test. </p>
|
||
<p>Furthermore, the engineer defines additional parameters, such as: </p>
|
||
<ul>
|
||
<li><p><b>Bucket groups</b> that define the number of buckets that will be offlined in one jump to reach target QPS, </p> </li>
|
||
<li><p><b>Group intervals</b> that define the time to wait after we jump to target QPS,</p> </li>
|
||
<li><p><b>Bucket intervals</b> that define the time interval between each action being performed on a bucket, and </p> </li>
|
||
<li><p><b>Duration of load test</b> that specifies how long a load test needs to be performed. </p> </li>
|
||
</ul>
|
||
<p>After the target QPS was reached, the engineer manually took control to reach the final QPS and sustain the target QPS for load test duration. </p>
|
||
<p>During this time, the engineer would keep an eye on our monitoring dashboards to understand traffic levels and increase or decrease traffic flow to reach the target QPS. The engineer was also responsible for reviewing internal channels in the event that a service owner raised concerns, tracking any error notes, and understanding the latency of the overall site. In the event of an escalation, the engineer was also in charge of connecting with relevant SREs to review a potential issue. </p>
|
||
<p>Given all of this was done with live traffic on a daily basis, it could be a nerve-racking experience and required a lot of manual effort. To address this, we explored how we could automate the load test process and save engineers from the 2-3 hours every day that a manual load test requires. </p>
|
||
<h2>Load test automation and challenges</h2>
|
||
<p>We decided to tackle this problem in three stages: </p>
|
||
<ul>
|
||
<li><p><b>Stage one:</b> ramp to 75% of the load test QPS.</p> </li>
|
||
<li><p><b>Stage two:</b> ramp to 90% of the load test QPS</p> </li>
|
||
<li><p><b>Stage three:</b> reach our load test target QPS. </p> </li>
|
||
</ul>
|
||
<p>The idea was that the first two stages would ramp quickly and we’d need to spend more time carefully ramping traffic in the last stage to reach the target. Given the fact that our automation calculates the number of buckets to offline in the other data centers based on logic already defined, our assumption that the first two stages would ramp quickly proved to be true. </p>
|
||
<p>It’s important to note we placed a sleep interval after the stage one and two ramps so that we could get an accurate report from our monitoring systems. We also considered the primary incoming traffic on the particular data center being load tested at these two stages to inform our decision to increase or decrease traffic. </p>
|
||
<p>Once we completed stage two, we started trending in a more measured manner toward the target. In addition to having a high watermark of target QPS plus the threshold QPS, we introduced a lower watermark, which was the same threshold subtracted from the target QPS. This gave us a window of where we had to be in order to call the load test successful for a data center.</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/D4D08AQFTjAzASxCgcA/croft-frontend-shrinkToFit1024/croft-frontend-shrinkToFit1024/0/1700687653900?e=2147483647&v=beta&t=c8FS15F1-gTxrbxihpS70HyOi4V-1dvgolopVArFdy0" alt="graph-showing-load-test-impact">
|
||
<!----> </figure>
|
||
</div>
|
||
|
||
</div>
|
||
<div id class="component component-migratedContent" data-component-type="migratedContent">
|
||
|
||
|
||
|
||
|
||
<div class="rich-text">
|
||
<p><i>Figure 2: A fully-automated load test being performed<br> </i></p>
|
||
<p>Therefore, with our focus on these two watermarks, we came up with two small step functions. The first step function would increase the traffic, while the other function would decrease the traffic through the movement of buckets. Stage three made use of these two methods to detect the current traffic and make the decision. </p>
|
||
<p>While trying to reach stage three, we needed to address the delay from our monitoring system pipeline, which caused our engineers to take less accurate decisions while shifting traffic from one data center to another. The delay was causing us to rely on outdated traffic metric numbers and this couldn't be fixed at the source itself. </p>
|
||
<p>To fetch the most accurate traffic QPS possible, we decided to query the pipeline more frequently, and as we honed in on fetching the most accurate data, we eventually achieved the precise step algorithms. </p>
|
||
<p>It was also important to make sure we could control and intervene at any point in the process. Therefore, we built functionalities such as “pause,” where an engineer could look into an alert or a concern from the SRE service owner, or “terminate,” which we could execute at any point in the load test.</p>
|
||
<h2>Conclusion</h2>
|
||
<p>Load testing for any organization, especially for those at such a large scale, can be a daunting task for an engineer, but it’s an essential part of our daily routine in assessing our ability to serve our members. As SREs, we strive to eliminate toil as much as we can, which not only helps the organization but also increases the productivity of our engineers and teams. This is why automating the load test process became an essential part of how we operate. </p>
|
||
<p><br> <i>Editor’s note: In case you missed the news, we’ve begun a multi-year journey to the public cloud with Microsoft Azure. Read more about our journey <a href="https://engineering.linkedin.com/blog/2019/building-next-infra" target="_blank" data-tracking-control-name="_anchor_link">here</a>.</i> </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/developer-experience-productivity">
|
||
Developer Experience/Productivity
|
||
</a>
|
||
<a class="simple-topic-list__topic" href="https://www.linkedin.com/blog/engineering/automation">
|
||
Automation
|
||
</a>
|
||
<a class="simple-topic-list__topic" href="https://www.linkedin.com/blog/engineering/data-management">
|
||
Data Management
|
||
</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">
|
||
<!---->
|
||
<div class="list-post__content-container__title">
|
||
<a class="list-post__link t-20 t-black" href="https://www.linkedin.com/blog/engineering/platform-platformization/accelerating-go-to-market-velocity-with-the-product-configuration-center">
|
||
Accelerating Go-To-Market Velocity with the Product Configurat...
|
||
</a>
|
||
</div>
|
||
|
||
<div class="list-post__content-container__byline">
|
||
<p class="list-post__content-container__author t-14 t-bold t-black">
|
||
Tanmay Khemka
|
||
</p>
|
||
|
||
<p class="list-post__content-container__date t-14 t-black--light">
|
||
Jun 12, 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/D4D08AQFOqEs5bho66Q/croft-frontend-shrinkToFit1920/B4DZ64OKZFKAAM-/0/1781207181422?e=2147483647&v=beta&t=rjSx77PGu8owDXBzSBjbV_W0ZbtYnq5c3Zu8LYbmOtM" 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">
|
||
<!---->
|
||
<div class="list-post__content-container__title">
|
||
<a class="list-post__link t-20 t-black" href="https://www.linkedin.com/blog/engineering/trust-and-safety/managing-software-license-lifecycles-the-sllm-journey">
|
||
Managing software license lifecycles: the SLLM journey
|
||
</a>
|
||
</div>
|
||
|
||
<div class="list-post__content-container__byline">
|
||
<p class="list-post__content-container__author t-14 t-bold t-black">
|
||
Vinil Chandru
|
||
</p>
|
||
<!----><!----><!----><!---->
|
||
<p class="list-post__content-container__date t-14 t-black--light">
|
||
Apr 14, 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/D4D08AQEn4b5zXrvo2A/croft-frontend-shrinkToFit1200/B4DZ1zsp_XHMAg-/0/1775762580066?e=2147483647&v=beta&t=cy0-RNpwK2TR6o10cOKNsjMibDE9nHRXUseWNXG7sdA" 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/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/contextual-agent-playbooks-and-tools-how-linkedin-gave-ai-coding-agents-organizational-context">
|
||
Contextual agent playbooks and tools: How LinkedIn gave AI cod...
|
||
</a>
|
||
</div>
|
||
|
||
<div class="list-post__content-container__byline">
|
||
<p class="list-post__content-container__author t-14 t-bold t-black">
|
||
Ajay Prakash
|
||
</p>
|
||
<!---->
|
||
<p class="list-post__content-container__date t-14 t-black--light">
|
||
Jan 27, 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/D4D08AQEYEJheuYX8pA/croft-frontend-shrinkToFit480/B4DZv7AA_DG4AU-/0/1769442645450?e=2147483647&v=beta&t=a7xfm45P3iT2ibTjnnGQifNxyl_KMf1woeigTTdxw08" 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>
|
||
|
||
|
||
|