mirror of
https://github.com/linkedin/school-of-sre
synced 2026-01-19 23:18:02 +00:00
6347 lines
127 KiB
HTML
6347 lines
127 KiB
HTML
|
||
<!doctype html>
|
||
<html lang="en" class="no-js">
|
||
<head>
|
||
|
||
<meta charset="utf-8">
|
||
<meta name="viewport" content="width=device-width,initial-scale=1">
|
||
|
||
|
||
|
||
<link rel="canonical" href="https://linkedin.github.io/school-of-sre/level101/databases_nosql/key_concepts/">
|
||
|
||
|
||
<link rel="prev" href="../intro/">
|
||
|
||
|
||
<link rel="next" href="../further_reading/">
|
||
|
||
|
||
<link rel="icon" href="../../../img/favicon.ico">
|
||
<meta name="generator" content="mkdocs-1.5.3, mkdocs-material-9.5.12">
|
||
|
||
|
||
|
||
<title>Key Concepts - School Of SRE</title>
|
||
|
||
|
||
|
||
<link rel="stylesheet" href="../../../assets/stylesheets/main.7e359304.min.css">
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
|
||
<link rel="stylesheet" href="https://fonts.googleapis.com/css?family=Roboto:300,300i,400,400i,700,700i%7CRoboto+Mono:400,400i,700,700i&display=fallback">
|
||
<style>:root{--md-text-font:"Roboto";--md-code-font:"Roboto Mono"}</style>
|
||
|
||
|
||
|
||
<link rel="stylesheet" href="../../../stylesheets/custom.css">
|
||
|
||
<script>__md_scope=new URL("../../..",location),__md_hash=e=>[...e].reduce((e,_)=>(e<<5)-e+_.charCodeAt(0),0),__md_get=(e,_=localStorage,t=__md_scope)=>JSON.parse(_.getItem(t.pathname+"."+e)),__md_set=(e,_,t=localStorage,a=__md_scope)=>{try{t.setItem(a.pathname+"."+e,JSON.stringify(_))}catch(e){}}</script>
|
||
|
||
|
||
|
||
|
||
|
||
|
||
</head>
|
||
|
||
|
||
<body dir="ltr">
|
||
|
||
|
||
<input class="md-toggle" data-md-toggle="drawer" type="checkbox" id="__drawer" autocomplete="off">
|
||
<input class="md-toggle" data-md-toggle="search" type="checkbox" id="__search" autocomplete="off">
|
||
<label class="md-overlay" for="__drawer"></label>
|
||
<div data-md-component="skip">
|
||
|
||
|
||
<a href="#key-concepts" class="md-skip">
|
||
Skip to content
|
||
</a>
|
||
|
||
</div>
|
||
<div data-md-component="announce">
|
||
|
||
</div>
|
||
|
||
|
||
|
||
<script async defer data-domain="linkedin.github.io" src="https://tracking.eskratch.com/js/plausible.js"></script>
|
||
<script>document.addEventListener("DOMContentLoaded", function() {
|
||
if (document.getElementById("nav-2").checked!=true && document.getElementById("nav-3").checked!=true && window.innerWidth>1220){
|
||
document.getElementById("nav-2").checked=true;
|
||
document.getElementById("nav-3").checked=true;
|
||
|
||
}
|
||
});</script>
|
||
|
||
|
||
|
||
<header class="md-header" data-md-component="header">
|
||
<nav class="md-header__inner md-grid" aria-label="header.title">
|
||
<a href="https://linkedin.github.io/school-of-sre/" title="School Of SRE" class="md-header__button md-logo" aria-label="School Of SRE">
|
||
|
||
<img src="../../../img/sos.png" alt="logo">
|
||
|
||
</a>
|
||
<!-- Button to open drawer -->
|
||
<label class="md-header__button md-icon" for="__drawer">
|
||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M3 6h18v2H3V6m0 5h18v2H3v-2m0 5h18v2H3v-2Z"/></svg>
|
||
</label>
|
||
<div class="md-header__title" data-md-component="header-title">
|
||
|
||
<div class="md-header__ellipsis">
|
||
<span class="md-header__topic md-ellipsis">
|
||
<a href="https://linkedin.github.io/school-of-sre/" title="School Of SRE" >
|
||
School Of SRE
|
||
</a>
|
||
</span>
|
||
<span class="md-header__topic md-ellipsis">
|
||
|
||
Key Concepts
|
||
|
||
</span>
|
||
</div>
|
||
|
||
</div>
|
||
|
||
<label class="md-header__button md-icon" for="__search">
|
||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M9.5 3A6.5 6.5 0 0 1 16 9.5c0 1.61-.59 3.09-1.56 4.23l.27.27h.79l5 5-1.5 1.5-5-5v-.79l-.27-.27A6.516 6.516 0 0 1 9.5 16 6.5 6.5 0 0 1 3 9.5 6.5 6.5 0 0 1 9.5 3m0 2C7 5 5 7 5 9.5S7 14 9.5 14 14 12 14 9.5 12 5 9.5 5Z"/></svg>
|
||
</label>
|
||
<div class="md-search" data-md-component="search" role="dialog">
|
||
<label class="md-search__overlay" for="__search"></label>
|
||
<div class="md-search__inner" role="search">
|
||
<form class="md-search__form" name="search">
|
||
<input type="text" class="md-search__input" name="query" aria-label="Search" placeholder="Search" autocapitalize="off" autocorrect="off" autocomplete="off" spellcheck="false" data-md-component="search-query" required>
|
||
<label class="md-search__icon md-icon" for="__search">
|
||
|
||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M9.5 3A6.5 6.5 0 0 1 16 9.5c0 1.61-.59 3.09-1.56 4.23l.27.27h.79l5 5-1.5 1.5-5-5v-.79l-.27-.27A6.516 6.516 0 0 1 9.5 16 6.5 6.5 0 0 1 3 9.5 6.5 6.5 0 0 1 9.5 3m0 2C7 5 5 7 5 9.5S7 14 9.5 14 14 12 14 9.5 12 5 9.5 5Z"/></svg>
|
||
|
||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M20 11v2H8l5.5 5.5-1.42 1.42L4.16 12l7.92-7.92L13.5 5.5 8 11h12Z"/></svg>
|
||
</label>
|
||
<nav class="md-search__options" aria-label="Search">
|
||
|
||
<button type="reset" class="md-search__icon md-icon" title="Clear" aria-label="Clear" tabindex="-1">
|
||
|
||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M19 6.41 17.59 5 12 10.59 6.41 5 5 6.41 10.59 12 5 17.59 6.41 19 12 13.41 17.59 19 19 17.59 13.41 12 19 6.41Z"/></svg>
|
||
</button>
|
||
</nav>
|
||
|
||
</form>
|
||
<div class="md-search__output">
|
||
<div class="md-search__scrollwrap" data-md-scrollfix>
|
||
<div class="md-search-result" data-md-component="search-result">
|
||
<div class="md-search-result__meta">
|
||
Initializing search
|
||
</div>
|
||
<ol class="md-search-result__list" role="presentation"></ol>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
|
||
|
||
</nav>
|
||
</header>
|
||
|
||
<div class="md-container" data-md-component="container">
|
||
|
||
|
||
|
||
|
||
|
||
|
||
<main class="md-main" data-md-component="main">
|
||
<div class="md-main__inner md-grid">
|
||
|
||
|
||
|
||
<div class="md-sidebar md-sidebar--primary" data-md-component="sidebar" data-md-type="navigation" >
|
||
<div class="md-sidebar__scrollwrap">
|
||
<div class="md-sidebar__inner">
|
||
|
||
|
||
<!-- Determine classes -->
|
||
|
||
|
||
|
||
|
||
<!-- Navigation -->
|
||
<nav
|
||
class="md-nav md-nav--primary"
|
||
aria-label="Navigation"
|
||
data-md-level="0"
|
||
>
|
||
|
||
<!-- Repository information -->
|
||
|
||
|
||
<!-- Navigation list -->
|
||
<ul class="md-nav__list" data-md-scrollfix>
|
||
|
||
|
||
|
||
|
||
<!-- Determine classes -->
|
||
|
||
|
||
|
||
<!-- Determine active page for paginated views -->
|
||
|
||
|
||
<!-- Navigation item with nested items -->
|
||
|
||
<li class="md-nav__item">
|
||
<a href="../../.." class="md-nav__link">
|
||
|
||
|
||
<!-- Navigation link icon -->
|
||
|
||
|
||
<!-- Navigation link title -->
|
||
<span class="md-ellipsis">
|
||
Home
|
||
</span>
|
||
|
||
<!-- Navigation link status -->
|
||
|
||
|
||
</a>
|
||
</li>
|
||
|
||
|
||
|
||
|
||
|
||
|
||
<!-- Determine classes -->
|
||
|
||
|
||
|
||
|
||
|
||
<!-- Determine active page for paginated views -->
|
||
|
||
|
||
<!-- Navigation item with nested items -->
|
||
|
||
|
||
<!-- Determine all nested items that are index pages -->
|
||
|
||
|
||
|
||
<!-- Navigation tabs -->
|
||
|
||
|
||
<!-- Render 1st level items with nested items as sections -->
|
||
|
||
|
||
|
||
|
||
|
||
|
||
<!-- Navigation pruning -->
|
||
|
||
|
||
<!-- Nested navigation item -->
|
||
<li class="md-nav__item md-nav__item--active md-nav__item--section md-nav__item--nested">
|
||
|
||
|
||
|
||
<!-- Determine checked and indeterminate state -->
|
||
|
||
|
||
<!-- Active checkbox expands items contained within nested section -->
|
||
<input
|
||
class="md-nav__toggle md-toggle "
|
||
type="checkbox"
|
||
id="__nav_2"
|
||
checked
|
||
/>
|
||
|
||
<!-- Toggle to expand nested items -->
|
||
|
||
|
||
<label
|
||
class="md-nav__link"
|
||
for="__nav_2"
|
||
id="__nav_2_label"
|
||
tabindex=""
|
||
>
|
||
|
||
|
||
<!-- Navigation link icon -->
|
||
|
||
|
||
<!-- Navigation link title -->
|
||
<span class="md-ellipsis">
|
||
Level 101
|
||
</span>
|
||
|
||
<!-- Navigation link status -->
|
||
|
||
|
||
<span class="md-nav__icon md-icon"></span>
|
||
</label>
|
||
|
||
<!-- Toggle to expand nested items with link to index page -->
|
||
|
||
|
||
<!-- Nested navigation -->
|
||
<nav
|
||
class="md-nav"
|
||
data-md-level="1"
|
||
aria-labelledby="__nav_2_label"
|
||
aria-expanded="true"
|
||
>
|
||
<label class="md-nav__title" for="__nav_2">
|
||
<span class="md-nav__icon md-icon"></span>
|
||
Level 101
|
||
</label>
|
||
<ul class="md-nav__list" data-md-scrollfix>
|
||
|
||
<!-- Nested navigation item -->
|
||
|
||
|
||
|
||
|
||
<!-- Determine classes -->
|
||
|
||
|
||
|
||
<!-- Determine active page for paginated views -->
|
||
|
||
|
||
<!-- Navigation item with nested items -->
|
||
|
||
|
||
<!-- Determine all nested items that are index pages -->
|
||
|
||
|
||
|
||
<!-- Navigation tabs -->
|
||
|
||
|
||
<!-- Render 1st level items with nested items as sections -->
|
||
|
||
|
||
|
||
<!-- Navigation pruning -->
|
||
|
||
|
||
<!-- Nested navigation item -->
|
||
<li class="md-nav__item md-nav__item--nested">
|
||
|
||
|
||
|
||
<!-- Determine checked and indeterminate state -->
|
||
|
||
|
||
<!-- Active checkbox expands items contained within nested section -->
|
||
<input
|
||
class="md-nav__toggle md-toggle "
|
||
type="checkbox"
|
||
id="__nav_2_1"
|
||
|
||
/>
|
||
|
||
<!-- Toggle to expand nested items -->
|
||
|
||
|
||
<label
|
||
class="md-nav__link"
|
||
for="__nav_2_1"
|
||
id="__nav_2_1_label"
|
||
tabindex="0"
|
||
>
|
||
|
||
|
||
<!-- Navigation link icon -->
|
||
|
||
|
||
<!-- Navigation link title -->
|
||
<span class="md-ellipsis">
|
||
Fundamentals Series
|
||
</span>
|
||
|
||
<!-- Navigation link status -->
|
||
|
||
|
||
<span class="md-nav__icon md-icon"></span>
|
||
</label>
|
||
|
||
<!-- Toggle to expand nested items with link to index page -->
|
||
|
||
|
||
<!-- Nested navigation -->
|
||
<nav
|
||
class="md-nav"
|
||
data-md-level="2"
|
||
aria-labelledby="__nav_2_1_label"
|
||
aria-expanded="false"
|
||
>
|
||
<label class="md-nav__title" for="__nav_2_1">
|
||
<span class="md-nav__icon md-icon"></span>
|
||
Fundamentals Series
|
||
</label>
|
||
<ul class="md-nav__list" data-md-scrollfix>
|
||
|
||
<!-- Nested navigation item -->
|
||
|
||
|
||
|
||
|
||
<!-- Determine classes -->
|
||
|
||
|
||
|
||
<!-- Determine active page for paginated views -->
|
||
|
||
|
||
<!-- Navigation item with nested items -->
|
||
|
||
|
||
<!-- Determine all nested items that are index pages -->
|
||
|
||
|
||
|
||
<!-- Navigation tabs -->
|
||
|
||
|
||
<!-- Render 1st level items with nested items as sections -->
|
||
|
||
|
||
|
||
<!-- Navigation pruning -->
|
||
|
||
|
||
<!-- Nested navigation item -->
|
||
<li class="md-nav__item md-nav__item--nested">
|
||
|
||
|
||
|
||
<!-- Determine checked and indeterminate state -->
|
||
|
||
|
||
<!-- Active checkbox expands items contained within nested section -->
|
||
<input
|
||
class="md-nav__toggle md-toggle "
|
||
type="checkbox"
|
||
id="__nav_2_1_1"
|
||
|
||
/>
|
||
|
||
<!-- Toggle to expand nested items -->
|
||
|
||
|
||
<label
|
||
class="md-nav__link"
|
||
for="__nav_2_1_1"
|
||
id="__nav_2_1_1_label"
|
||
tabindex="0"
|
||
>
|
||
|
||
|
||
<!-- Navigation link icon -->
|
||
|
||
|
||
<!-- Navigation link title -->
|
||
<span class="md-ellipsis">
|
||
Linux Basics
|
||
</span>
|
||
|
||
<!-- Navigation link status -->
|
||
|
||
|
||
<span class="md-nav__icon md-icon"></span>
|
||
</label>
|
||
|
||
<!-- Toggle to expand nested items with link to index page -->
|
||
|
||
|
||
<!-- Nested navigation -->
|
||
<nav
|
||
class="md-nav"
|
||
data-md-level="3"
|
||
aria-labelledby="__nav_2_1_1_label"
|
||
aria-expanded="false"
|
||
>
|
||
<label class="md-nav__title" for="__nav_2_1_1">
|
||
<span class="md-nav__icon md-icon"></span>
|
||
Linux Basics
|
||
</label>
|
||
<ul class="md-nav__list" data-md-scrollfix>
|
||
|
||
<!-- Nested navigation item -->
|
||
|
||
|
||
|
||
|
||
<!-- Determine classes -->
|
||
|
||
|
||
|
||
<!-- Determine active page for paginated views -->
|
||
|
||
|
||
<!-- Navigation item with nested items -->
|
||
|
||
<li class="md-nav__item">
|
||
<a href="../../linux_basics/intro/" class="md-nav__link">
|
||
|
||
|
||
<!-- Navigation link icon -->
|
||
|
||
|
||
<!-- Navigation link title -->
|
||
<span class="md-ellipsis">
|
||
Introduction
|
||
</span>
|
||
|
||
<!-- Navigation link status -->
|
||
|
||
|
||
</a>
|
||
</li>
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
<!-- Determine classes -->
|
||
|
||
|
||
|
||
<!-- Determine active page for paginated views -->
|
||
|
||
|
||
<!-- Navigation item with nested items -->
|
||
|
||
<li class="md-nav__item">
|
||
<a href="../../linux_basics/command_line_basics/" class="md-nav__link">
|
||
|
||
|
||
<!-- Navigation link icon -->
|
||
|
||
|
||
<!-- Navigation link title -->
|
||
<span class="md-ellipsis">
|
||
Command Line Basics
|
||
</span>
|
||
|
||
<!-- Navigation link status -->
|
||
|
||
|
||
</a>
|
||
</li>
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
<!-- Determine classes -->
|
||
|
||
|
||
|
||
<!-- Determine active page for paginated views -->
|
||
|
||
|
||
<!-- Navigation item with nested items -->
|
||
|
||
<li class="md-nav__item">
|
||
<a href="../../linux_basics/linux_server_administration/" class="md-nav__link">
|
||
|
||
|
||
<!-- Navigation link icon -->
|
||
|
||
|
||
<!-- Navigation link title -->
|
||
<span class="md-ellipsis">
|
||
Server Administration
|
||
</span>
|
||
|
||
<!-- Navigation link status -->
|
||
|
||
|
||
</a>
|
||
</li>
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
<!-- Determine classes -->
|
||
|
||
|
||
|
||
<!-- Determine active page for paginated views -->
|
||
|
||
|
||
<!-- Navigation item with nested items -->
|
||
|
||
<li class="md-nav__item">
|
||
<a href="../../linux_basics/conclusion/" class="md-nav__link">
|
||
|
||
|
||
<!-- Navigation link icon -->
|
||
|
||
|
||
<!-- Navigation link title -->
|
||
<span class="md-ellipsis">
|
||
Conclusion
|
||
</span>
|
||
|
||
<!-- Navigation link status -->
|
||
|
||
|
||
</a>
|
||
</li>
|
||
|
||
|
||
|
||
|
||
</ul>
|
||
</nav>
|
||
|
||
<!-- Pruned navigation item -->
|
||
|
||
</li>
|
||
|
||
<!-- Currently active page -->
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
<!-- Determine classes -->
|
||
|
||
|
||
|
||
<!-- Determine active page for paginated views -->
|
||
|
||
|
||
<!-- Navigation item with nested items -->
|
||
|
||
|
||
<!-- Determine all nested items that are index pages -->
|
||
|
||
|
||
|
||
<!-- Navigation tabs -->
|
||
|
||
|
||
<!-- Render 1st level items with nested items as sections -->
|
||
|
||
|
||
|
||
<!-- Navigation pruning -->
|
||
|
||
|
||
<!-- Nested navigation item -->
|
||
<li class="md-nav__item md-nav__item--nested">
|
||
|
||
|
||
|
||
<!-- Determine checked and indeterminate state -->
|
||
|
||
|
||
<!-- Active checkbox expands items contained within nested section -->
|
||
<input
|
||
class="md-nav__toggle md-toggle "
|
||
type="checkbox"
|
||
id="__nav_2_1_2"
|
||
|
||
/>
|
||
|
||
<!-- Toggle to expand nested items -->
|
||
|
||
|
||
<label
|
||
class="md-nav__link"
|
||
for="__nav_2_1_2"
|
||
id="__nav_2_1_2_label"
|
||
tabindex="0"
|
||
>
|
||
|
||
|
||
<!-- Navigation link icon -->
|
||
|
||
|
||
<!-- Navigation link title -->
|
||
<span class="md-ellipsis">
|
||
Git
|
||
</span>
|
||
|
||
<!-- Navigation link status -->
|
||
|
||
|
||
<span class="md-nav__icon md-icon"></span>
|
||
</label>
|
||
|
||
<!-- Toggle to expand nested items with link to index page -->
|
||
|
||
|
||
<!-- Nested navigation -->
|
||
<nav
|
||
class="md-nav"
|
||
data-md-level="3"
|
||
aria-labelledby="__nav_2_1_2_label"
|
||
aria-expanded="false"
|
||
>
|
||
<label class="md-nav__title" for="__nav_2_1_2">
|
||
<span class="md-nav__icon md-icon"></span>
|
||
Git
|
||
</label>
|
||
<ul class="md-nav__list" data-md-scrollfix>
|
||
|
||
<!-- Nested navigation item -->
|
||
|
||
|
||
|
||
|
||
<!-- Determine classes -->
|
||
|
||
|
||
|
||
<!-- Determine active page for paginated views -->
|
||
|
||
|
||
<!-- Navigation item with nested items -->
|
||
|
||
<li class="md-nav__item">
|
||
<a href="../../git/git-basics/" class="md-nav__link">
|
||
|
||
|
||
<!-- Navigation link icon -->
|
||
|
||
|
||
<!-- Navigation link title -->
|
||
<span class="md-ellipsis">
|
||
Git Basics
|
||
</span>
|
||
|
||
<!-- Navigation link status -->
|
||
|
||
|
||
</a>
|
||
</li>
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
<!-- Determine classes -->
|
||
|
||
|
||
|
||
<!-- Determine active page for paginated views -->
|
||
|
||
|
||
<!-- Navigation item with nested items -->
|
||
|
||
<li class="md-nav__item">
|
||
<a href="../../git/branches/" class="md-nav__link">
|
||
|
||
|
||
<!-- Navigation link icon -->
|
||
|
||
|
||
<!-- Navigation link title -->
|
||
<span class="md-ellipsis">
|
||
Working With Branches
|
||
</span>
|
||
|
||
<!-- Navigation link status -->
|
||
|
||
|
||
</a>
|
||
</li>
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
<!-- Determine classes -->
|
||
|
||
|
||
|
||
<!-- Determine active page for paginated views -->
|
||
|
||
|
||
<!-- Navigation item with nested items -->
|
||
|
||
<li class="md-nav__item">
|
||
<a href="../../git/github-hooks/" class="md-nav__link">
|
||
|
||
|
||
<!-- Navigation link icon -->
|
||
|
||
|
||
<!-- Navigation link title -->
|
||
<span class="md-ellipsis">
|
||
Github and Hooks
|
||
</span>
|
||
|
||
<!-- Navigation link status -->
|
||
|
||
|
||
</a>
|
||
</li>
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
<!-- Determine classes -->
|
||
|
||
|
||
|
||
<!-- Determine active page for paginated views -->
|
||
|
||
|
||
<!-- Navigation item with nested items -->
|
||
|
||
<li class="md-nav__item">
|
||
<a href="../../git/conclusion/" class="md-nav__link">
|
||
|
||
|
||
<!-- Navigation link icon -->
|
||
|
||
|
||
<!-- Navigation link title -->
|
||
<span class="md-ellipsis">
|
||
Conclusion
|
||
</span>
|
||
|
||
<!-- Navigation link status -->
|
||
|
||
|
||
</a>
|
||
</li>
|
||
|
||
|
||
|
||
|
||
</ul>
|
||
</nav>
|
||
|
||
<!-- Pruned navigation item -->
|
||
|
||
</li>
|
||
|
||
<!-- Currently active page -->
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
<!-- Determine classes -->
|
||
|
||
|
||
|
||
<!-- Determine active page for paginated views -->
|
||
|
||
|
||
<!-- Navigation item with nested items -->
|
||
|
||
|
||
<!-- Determine all nested items that are index pages -->
|
||
|
||
|
||
|
||
<!-- Navigation tabs -->
|
||
|
||
|
||
<!-- Render 1st level items with nested items as sections -->
|
||
|
||
|
||
|
||
<!-- Navigation pruning -->
|
||
|
||
|
||
<!-- Nested navigation item -->
|
||
<li class="md-nav__item md-nav__item--nested">
|
||
|
||
|
||
|
||
<!-- Determine checked and indeterminate state -->
|
||
|
||
|
||
<!-- Active checkbox expands items contained within nested section -->
|
||
<input
|
||
class="md-nav__toggle md-toggle "
|
||
type="checkbox"
|
||
id="__nav_2_1_3"
|
||
|
||
/>
|
||
|
||
<!-- Toggle to expand nested items -->
|
||
|
||
|
||
<label
|
||
class="md-nav__link"
|
||
for="__nav_2_1_3"
|
||
id="__nav_2_1_3_label"
|
||
tabindex="0"
|
||
>
|
||
|
||
|
||
<!-- Navigation link icon -->
|
||
|
||
|
||
<!-- Navigation link title -->
|
||
<span class="md-ellipsis">
|
||
Linux Networking
|
||
</span>
|
||
|
||
<!-- Navigation link status -->
|
||
|
||
|
||
<span class="md-nav__icon md-icon"></span>
|
||
</label>
|
||
|
||
<!-- Toggle to expand nested items with link to index page -->
|
||
|
||
|
||
<!-- Nested navigation -->
|
||
<nav
|
||
class="md-nav"
|
||
data-md-level="3"
|
||
aria-labelledby="__nav_2_1_3_label"
|
||
aria-expanded="false"
|
||
>
|
||
<label class="md-nav__title" for="__nav_2_1_3">
|
||
<span class="md-nav__icon md-icon"></span>
|
||
Linux Networking
|
||
</label>
|
||
<ul class="md-nav__list" data-md-scrollfix>
|
||
|
||
<!-- Nested navigation item -->
|
||
|
||
|
||
|
||
|
||
<!-- Determine classes -->
|
||
|
||
|
||
|
||
<!-- Determine active page for paginated views -->
|
||
|
||
|
||
<!-- Navigation item with nested items -->
|
||
|
||
<li class="md-nav__item">
|
||
<a href="../../linux_networking/intro/" class="md-nav__link">
|
||
|
||
|
||
<!-- Navigation link icon -->
|
||
|
||
|
||
<!-- Navigation link title -->
|
||
<span class="md-ellipsis">
|
||
Introduction
|
||
</span>
|
||
|
||
<!-- Navigation link status -->
|
||
|
||
|
||
</a>
|
||
</li>
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
<!-- Determine classes -->
|
||
|
||
|
||
|
||
<!-- Determine active page for paginated views -->
|
||
|
||
|
||
<!-- Navigation item with nested items -->
|
||
|
||
<li class="md-nav__item">
|
||
<a href="../../linux_networking/dns/" class="md-nav__link">
|
||
|
||
|
||
<!-- Navigation link icon -->
|
||
|
||
|
||
<!-- Navigation link title -->
|
||
<span class="md-ellipsis">
|
||
DNS
|
||
</span>
|
||
|
||
<!-- Navigation link status -->
|
||
|
||
|
||
</a>
|
||
</li>
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
<!-- Determine classes -->
|
||
|
||
|
||
|
||
<!-- Determine active page for paginated views -->
|
||
|
||
|
||
<!-- Navigation item with nested items -->
|
||
|
||
<li class="md-nav__item">
|
||
<a href="../../linux_networking/udp/" class="md-nav__link">
|
||
|
||
|
||
<!-- Navigation link icon -->
|
||
|
||
|
||
<!-- Navigation link title -->
|
||
<span class="md-ellipsis">
|
||
UDP
|
||
</span>
|
||
|
||
<!-- Navigation link status -->
|
||
|
||
|
||
</a>
|
||
</li>
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
<!-- Determine classes -->
|
||
|
||
|
||
|
||
<!-- Determine active page for paginated views -->
|
||
|
||
|
||
<!-- Navigation item with nested items -->
|
||
|
||
<li class="md-nav__item">
|
||
<a href="../../linux_networking/http/" class="md-nav__link">
|
||
|
||
|
||
<!-- Navigation link icon -->
|
||
|
||
|
||
<!-- Navigation link title -->
|
||
<span class="md-ellipsis">
|
||
HTTP
|
||
</span>
|
||
|
||
<!-- Navigation link status -->
|
||
|
||
|
||
</a>
|
||
</li>
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
<!-- Determine classes -->
|
||
|
||
|
||
|
||
<!-- Determine active page for paginated views -->
|
||
|
||
|
||
<!-- Navigation item with nested items -->
|
||
|
||
<li class="md-nav__item">
|
||
<a href="../../linux_networking/tcp/" class="md-nav__link">
|
||
|
||
|
||
<!-- Navigation link icon -->
|
||
|
||
|
||
<!-- Navigation link title -->
|
||
<span class="md-ellipsis">
|
||
TCP
|
||
</span>
|
||
|
||
<!-- Navigation link status -->
|
||
|
||
|
||
</a>
|
||
</li>
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
<!-- Determine classes -->
|
||
|
||
|
||
|
||
<!-- Determine active page for paginated views -->
|
||
|
||
|
||
<!-- Navigation item with nested items -->
|
||
|
||
<li class="md-nav__item">
|
||
<a href="../../linux_networking/ipr/" class="md-nav__link">
|
||
|
||
|
||
<!-- Navigation link icon -->
|
||
|
||
|
||
<!-- Navigation link title -->
|
||
<span class="md-ellipsis">
|
||
Routing
|
||
</span>
|
||
|
||
<!-- Navigation link status -->
|
||
|
||
|
||
</a>
|
||
</li>
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
<!-- Determine classes -->
|
||
|
||
|
||
|
||
<!-- Determine active page for paginated views -->
|
||
|
||
|
||
<!-- Navigation item with nested items -->
|
||
|
||
<li class="md-nav__item">
|
||
<a href="../../linux_networking/conclusion/" class="md-nav__link">
|
||
|
||
|
||
<!-- Navigation link icon -->
|
||
|
||
|
||
<!-- Navigation link title -->
|
||
<span class="md-ellipsis">
|
||
Conclusion
|
||
</span>
|
||
|
||
<!-- Navigation link status -->
|
||
|
||
|
||
</a>
|
||
</li>
|
||
|
||
|
||
|
||
|
||
</ul>
|
||
</nav>
|
||
|
||
<!-- Pruned navigation item -->
|
||
|
||
</li>
|
||
|
||
<!-- Currently active page -->
|
||
|
||
|
||
|
||
|
||
</ul>
|
||
</nav>
|
||
|
||
<!-- Pruned navigation item -->
|
||
|
||
</li>
|
||
|
||
<!-- Currently active page -->
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
<!-- Determine classes -->
|
||
|
||
|
||
|
||
<!-- Determine active page for paginated views -->
|
||
|
||
|
||
<!-- Navigation item with nested items -->
|
||
|
||
|
||
<!-- Determine all nested items that are index pages -->
|
||
|
||
|
||
|
||
<!-- Navigation tabs -->
|
||
|
||
|
||
<!-- Render 1st level items with nested items as sections -->
|
||
|
||
|
||
|
||
<!-- Navigation pruning -->
|
||
|
||
|
||
<!-- Nested navigation item -->
|
||
<li class="md-nav__item md-nav__item--nested">
|
||
|
||
|
||
|
||
<!-- Determine checked and indeterminate state -->
|
||
|
||
|
||
<!-- Active checkbox expands items contained within nested section -->
|
||
<input
|
||
class="md-nav__toggle md-toggle "
|
||
type="checkbox"
|
||
id="__nav_2_2"
|
||
|
||
/>
|
||
|
||
<!-- Toggle to expand nested items -->
|
||
|
||
|
||
<label
|
||
class="md-nav__link"
|
||
for="__nav_2_2"
|
||
id="__nav_2_2_label"
|
||
tabindex="0"
|
||
>
|
||
|
||
|
||
<!-- Navigation link icon -->
|
||
|
||
|
||
<!-- Navigation link title -->
|
||
<span class="md-ellipsis">
|
||
Python and Web
|
||
</span>
|
||
|
||
<!-- Navigation link status -->
|
||
|
||
|
||
<span class="md-nav__icon md-icon"></span>
|
||
</label>
|
||
|
||
<!-- Toggle to expand nested items with link to index page -->
|
||
|
||
|
||
<!-- Nested navigation -->
|
||
<nav
|
||
class="md-nav"
|
||
data-md-level="2"
|
||
aria-labelledby="__nav_2_2_label"
|
||
aria-expanded="false"
|
||
>
|
||
<label class="md-nav__title" for="__nav_2_2">
|
||
<span class="md-nav__icon md-icon"></span>
|
||
Python and Web
|
||
</label>
|
||
<ul class="md-nav__list" data-md-scrollfix>
|
||
|
||
<!-- Nested navigation item -->
|
||
|
||
|
||
|
||
|
||
<!-- Determine classes -->
|
||
|
||
|
||
|
||
<!-- Determine active page for paginated views -->
|
||
|
||
|
||
<!-- Navigation item with nested items -->
|
||
|
||
<li class="md-nav__item">
|
||
<a href="../../python_web/intro/" class="md-nav__link">
|
||
|
||
|
||
<!-- Navigation link icon -->
|
||
|
||
|
||
<!-- Navigation link title -->
|
||
<span class="md-ellipsis">
|
||
Introduction
|
||
</span>
|
||
|
||
<!-- Navigation link status -->
|
||
|
||
|
||
</a>
|
||
</li>
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
<!-- Determine classes -->
|
||
|
||
|
||
|
||
<!-- Determine active page for paginated views -->
|
||
|
||
|
||
<!-- Navigation item with nested items -->
|
||
|
||
<li class="md-nav__item">
|
||
<a href="../../python_web/python-concepts/" class="md-nav__link">
|
||
|
||
|
||
<!-- Navigation link icon -->
|
||
|
||
|
||
<!-- Navigation link title -->
|
||
<span class="md-ellipsis">
|
||
Some Python Concepts
|
||
</span>
|
||
|
||
<!-- Navigation link status -->
|
||
|
||
|
||
</a>
|
||
</li>
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
<!-- Determine classes -->
|
||
|
||
|
||
|
||
<!-- Determine active page for paginated views -->
|
||
|
||
|
||
<!-- Navigation item with nested items -->
|
||
|
||
<li class="md-nav__item">
|
||
<a href="../../python_web/python-web-flask/" class="md-nav__link">
|
||
|
||
|
||
<!-- Navigation link icon -->
|
||
|
||
|
||
<!-- Navigation link title -->
|
||
<span class="md-ellipsis">
|
||
Python, Web and Flask
|
||
</span>
|
||
|
||
<!-- Navigation link status -->
|
||
|
||
|
||
</a>
|
||
</li>
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
<!-- Determine classes -->
|
||
|
||
|
||
|
||
<!-- Determine active page for paginated views -->
|
||
|
||
|
||
<!-- Navigation item with nested items -->
|
||
|
||
<li class="md-nav__item">
|
||
<a href="../../python_web/url-shorten-app/" class="md-nav__link">
|
||
|
||
|
||
<!-- Navigation link icon -->
|
||
|
||
|
||
<!-- Navigation link title -->
|
||
<span class="md-ellipsis">
|
||
The URL Shortening App
|
||
</span>
|
||
|
||
<!-- Navigation link status -->
|
||
|
||
|
||
</a>
|
||
</li>
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
<!-- Determine classes -->
|
||
|
||
|
||
|
||
<!-- Determine active page for paginated views -->
|
||
|
||
|
||
<!-- Navigation item with nested items -->
|
||
|
||
<li class="md-nav__item">
|
||
<a href="../../python_web/sre-conclusion/" class="md-nav__link">
|
||
|
||
|
||
<!-- Navigation link icon -->
|
||
|
||
|
||
<!-- Navigation link title -->
|
||
<span class="md-ellipsis">
|
||
Conclusion
|
||
</span>
|
||
|
||
<!-- Navigation link status -->
|
||
|
||
|
||
</a>
|
||
</li>
|
||
|
||
|
||
|
||
|
||
</ul>
|
||
</nav>
|
||
|
||
<!-- Pruned navigation item -->
|
||
|
||
</li>
|
||
|
||
<!-- Currently active page -->
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
<!-- Determine classes -->
|
||
|
||
|
||
|
||
|
||
|
||
<!-- Determine active page for paginated views -->
|
||
|
||
|
||
<!-- Navigation item with nested items -->
|
||
|
||
|
||
<!-- Determine all nested items that are index pages -->
|
||
|
||
|
||
|
||
<!-- Navigation tabs -->
|
||
|
||
|
||
<!-- Render 1st level items with nested items as sections -->
|
||
|
||
|
||
|
||
<!-- Navigation pruning -->
|
||
|
||
|
||
<!-- Nested navigation item -->
|
||
<li class="md-nav__item md-nav__item--active md-nav__item--nested">
|
||
|
||
|
||
|
||
<!-- Determine checked and indeterminate state -->
|
||
|
||
|
||
<!-- Active checkbox expands items contained within nested section -->
|
||
<input
|
||
class="md-nav__toggle md-toggle "
|
||
type="checkbox"
|
||
id="__nav_2_3"
|
||
checked
|
||
/>
|
||
|
||
<!-- Toggle to expand nested items -->
|
||
|
||
|
||
<label
|
||
class="md-nav__link"
|
||
for="__nav_2_3"
|
||
id="__nav_2_3_label"
|
||
tabindex="0"
|
||
>
|
||
|
||
|
||
<!-- Navigation link icon -->
|
||
|
||
|
||
<!-- Navigation link title -->
|
||
<span class="md-ellipsis">
|
||
Data
|
||
</span>
|
||
|
||
<!-- Navigation link status -->
|
||
|
||
|
||
<span class="md-nav__icon md-icon"></span>
|
||
</label>
|
||
|
||
<!-- Toggle to expand nested items with link to index page -->
|
||
|
||
|
||
<!-- Nested navigation -->
|
||
<nav
|
||
class="md-nav"
|
||
data-md-level="2"
|
||
aria-labelledby="__nav_2_3_label"
|
||
aria-expanded="true"
|
||
>
|
||
<label class="md-nav__title" for="__nav_2_3">
|
||
<span class="md-nav__icon md-icon"></span>
|
||
Data
|
||
</label>
|
||
<ul class="md-nav__list" data-md-scrollfix>
|
||
|
||
<!-- Nested navigation item -->
|
||
|
||
|
||
|
||
|
||
<!-- Determine classes -->
|
||
|
||
|
||
|
||
<!-- Determine active page for paginated views -->
|
||
|
||
|
||
<!-- Navigation item with nested items -->
|
||
|
||
|
||
<!-- Determine all nested items that are index pages -->
|
||
|
||
|
||
|
||
<!-- Navigation tabs -->
|
||
|
||
|
||
<!-- Render 1st level items with nested items as sections -->
|
||
|
||
|
||
|
||
<!-- Navigation pruning -->
|
||
|
||
|
||
<!-- Nested navigation item -->
|
||
<li class="md-nav__item md-nav__item--nested">
|
||
|
||
|
||
|
||
<!-- Determine checked and indeterminate state -->
|
||
|
||
|
||
<!-- Active checkbox expands items contained within nested section -->
|
||
<input
|
||
class="md-nav__toggle md-toggle "
|
||
type="checkbox"
|
||
id="__nav_2_3_1"
|
||
|
||
/>
|
||
|
||
<!-- Toggle to expand nested items -->
|
||
|
||
|
||
<label
|
||
class="md-nav__link"
|
||
for="__nav_2_3_1"
|
||
id="__nav_2_3_1_label"
|
||
tabindex="0"
|
||
>
|
||
|
||
|
||
<!-- Navigation link icon -->
|
||
|
||
|
||
<!-- Navigation link title -->
|
||
<span class="md-ellipsis">
|
||
Relational Databases
|
||
</span>
|
||
|
||
<!-- Navigation link status -->
|
||
|
||
|
||
<span class="md-nav__icon md-icon"></span>
|
||
</label>
|
||
|
||
<!-- Toggle to expand nested items with link to index page -->
|
||
|
||
|
||
<!-- Nested navigation -->
|
||
<nav
|
||
class="md-nav"
|
||
data-md-level="3"
|
||
aria-labelledby="__nav_2_3_1_label"
|
||
aria-expanded="false"
|
||
>
|
||
<label class="md-nav__title" for="__nav_2_3_1">
|
||
<span class="md-nav__icon md-icon"></span>
|
||
Relational Databases
|
||
</label>
|
||
<ul class="md-nav__list" data-md-scrollfix>
|
||
|
||
<!-- Nested navigation item -->
|
||
|
||
|
||
|
||
|
||
<!-- Determine classes -->
|
||
|
||
|
||
|
||
<!-- Determine active page for paginated views -->
|
||
|
||
|
||
<!-- Navigation item with nested items -->
|
||
|
||
<li class="md-nav__item">
|
||
<a href="../../databases_sql/intro/" class="md-nav__link">
|
||
|
||
|
||
<!-- Navigation link icon -->
|
||
|
||
|
||
<!-- Navigation link title -->
|
||
<span class="md-ellipsis">
|
||
Introduction
|
||
</span>
|
||
|
||
<!-- Navigation link status -->
|
||
|
||
|
||
</a>
|
||
</li>
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
<!-- Determine classes -->
|
||
|
||
|
||
|
||
<!-- Determine active page for paginated views -->
|
||
|
||
|
||
<!-- Navigation item with nested items -->
|
||
|
||
<li class="md-nav__item">
|
||
<a href="../../databases_sql/concepts/" class="md-nav__link">
|
||
|
||
|
||
<!-- Navigation link icon -->
|
||
|
||
|
||
<!-- Navigation link title -->
|
||
<span class="md-ellipsis">
|
||
Key Concepts
|
||
</span>
|
||
|
||
<!-- Navigation link status -->
|
||
|
||
|
||
</a>
|
||
</li>
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
<!-- Determine classes -->
|
||
|
||
|
||
|
||
<!-- Determine active page for paginated views -->
|
||
|
||
|
||
<!-- Navigation item with nested items -->
|
||
|
||
<li class="md-nav__item">
|
||
<a href="../../databases_sql/mysql/" class="md-nav__link">
|
||
|
||
|
||
<!-- Navigation link icon -->
|
||
|
||
|
||
<!-- Navigation link title -->
|
||
<span class="md-ellipsis">
|
||
MySQL
|
||
</span>
|
||
|
||
<!-- Navigation link status -->
|
||
|
||
|
||
</a>
|
||
</li>
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
<!-- Determine classes -->
|
||
|
||
|
||
|
||
<!-- Determine active page for paginated views -->
|
||
|
||
|
||
<!-- Navigation item with nested items -->
|
||
|
||
<li class="md-nav__item">
|
||
<a href="../../databases_sql/innodb/" class="md-nav__link">
|
||
|
||
|
||
<!-- Navigation link icon -->
|
||
|
||
|
||
<!-- Navigation link title -->
|
||
<span class="md-ellipsis">
|
||
InnoDB
|
||
</span>
|
||
|
||
<!-- Navigation link status -->
|
||
|
||
|
||
</a>
|
||
</li>
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
<!-- Determine classes -->
|
||
|
||
|
||
|
||
<!-- Determine active page for paginated views -->
|
||
|
||
|
||
<!-- Navigation item with nested items -->
|
||
|
||
<li class="md-nav__item">
|
||
<a href="../../databases_sql/backup_recovery/" class="md-nav__link">
|
||
|
||
|
||
<!-- Navigation link icon -->
|
||
|
||
|
||
<!-- Navigation link title -->
|
||
<span class="md-ellipsis">
|
||
Backup and Recovery
|
||
</span>
|
||
|
||
<!-- Navigation link status -->
|
||
|
||
|
||
</a>
|
||
</li>
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
<!-- Determine classes -->
|
||
|
||
|
||
|
||
<!-- Determine active page for paginated views -->
|
||
|
||
|
||
<!-- Navigation item with nested items -->
|
||
|
||
<li class="md-nav__item">
|
||
<a href="../../databases_sql/replication/" class="md-nav__link">
|
||
|
||
|
||
<!-- Navigation link icon -->
|
||
|
||
|
||
<!-- Navigation link title -->
|
||
<span class="md-ellipsis">
|
||
MySQL Replication
|
||
</span>
|
||
|
||
<!-- Navigation link status -->
|
||
|
||
|
||
</a>
|
||
</li>
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
<!-- Determine classes -->
|
||
|
||
|
||
|
||
<!-- Determine active page for paginated views -->
|
||
|
||
|
||
<!-- Navigation item with nested items -->
|
||
|
||
<li class="md-nav__item">
|
||
<a href="../../databases_sql/operations/" class="md-nav__link">
|
||
|
||
|
||
<!-- Navigation link icon -->
|
||
|
||
|
||
<!-- Navigation link title -->
|
||
<span class="md-ellipsis">
|
||
Operational Concepts
|
||
</span>
|
||
|
||
<!-- Navigation link status -->
|
||
|
||
|
||
</a>
|
||
</li>
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
<!-- Determine classes -->
|
||
|
||
|
||
|
||
<!-- Determine active page for paginated views -->
|
||
|
||
|
||
<!-- Navigation item with nested items -->
|
||
|
||
<li class="md-nav__item">
|
||
<a href="../../databases_sql/select_query/" class="md-nav__link">
|
||
|
||
|
||
<!-- Navigation link icon -->
|
||
|
||
|
||
<!-- Navigation link title -->
|
||
<span class="md-ellipsis">
|
||
Select Query
|
||
</span>
|
||
|
||
<!-- Navigation link status -->
|
||
|
||
|
||
</a>
|
||
</li>
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
<!-- Determine classes -->
|
||
|
||
|
||
|
||
<!-- Determine active page for paginated views -->
|
||
|
||
|
||
<!-- Navigation item with nested items -->
|
||
|
||
<li class="md-nav__item">
|
||
<a href="../../databases_sql/query_performance/" class="md-nav__link">
|
||
|
||
|
||
<!-- Navigation link icon -->
|
||
|
||
|
||
<!-- Navigation link title -->
|
||
<span class="md-ellipsis">
|
||
Query Performance
|
||
</span>
|
||
|
||
<!-- Navigation link status -->
|
||
|
||
|
||
</a>
|
||
</li>
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
<!-- Determine classes -->
|
||
|
||
|
||
|
||
<!-- Determine active page for paginated views -->
|
||
|
||
|
||
<!-- Navigation item with nested items -->
|
||
|
||
<li class="md-nav__item">
|
||
<a href="../../databases_sql/lab/" class="md-nav__link">
|
||
|
||
|
||
<!-- Navigation link icon -->
|
||
|
||
|
||
<!-- Navigation link title -->
|
||
<span class="md-ellipsis">
|
||
Lab
|
||
</span>
|
||
|
||
<!-- Navigation link status -->
|
||
|
||
|
||
</a>
|
||
</li>
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
<!-- Determine classes -->
|
||
|
||
|
||
|
||
<!-- Determine active page for paginated views -->
|
||
|
||
|
||
<!-- Navigation item with nested items -->
|
||
|
||
<li class="md-nav__item">
|
||
<a href="../../databases_sql/conclusion/" class="md-nav__link">
|
||
|
||
|
||
<!-- Navigation link icon -->
|
||
|
||
|
||
<!-- Navigation link title -->
|
||
<span class="md-ellipsis">
|
||
Conclusion
|
||
</span>
|
||
|
||
<!-- Navigation link status -->
|
||
|
||
|
||
</a>
|
||
</li>
|
||
|
||
|
||
|
||
|
||
</ul>
|
||
</nav>
|
||
|
||
<!-- Pruned navigation item -->
|
||
|
||
</li>
|
||
|
||
<!-- Currently active page -->
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
<!-- Determine classes -->
|
||
|
||
|
||
|
||
|
||
|
||
<!-- Determine active page for paginated views -->
|
||
|
||
|
||
<!-- Navigation item with nested items -->
|
||
|
||
|
||
<!-- Determine all nested items that are index pages -->
|
||
|
||
|
||
|
||
<!-- Navigation tabs -->
|
||
|
||
|
||
<!-- Render 1st level items with nested items as sections -->
|
||
|
||
|
||
|
||
<!-- Navigation pruning -->
|
||
|
||
|
||
<!-- Nested navigation item -->
|
||
<li class="md-nav__item md-nav__item--active md-nav__item--nested">
|
||
|
||
|
||
|
||
<!-- Determine checked and indeterminate state -->
|
||
|
||
|
||
<!-- Active checkbox expands items contained within nested section -->
|
||
<input
|
||
class="md-nav__toggle md-toggle "
|
||
type="checkbox"
|
||
id="__nav_2_3_2"
|
||
checked
|
||
/>
|
||
|
||
<!-- Toggle to expand nested items -->
|
||
|
||
|
||
<label
|
||
class="md-nav__link"
|
||
for="__nav_2_3_2"
|
||
id="__nav_2_3_2_label"
|
||
tabindex="0"
|
||
>
|
||
|
||
|
||
<!-- Navigation link icon -->
|
||
|
||
|
||
<!-- Navigation link title -->
|
||
<span class="md-ellipsis">
|
||
NoSQL
|
||
</span>
|
||
|
||
<!-- Navigation link status -->
|
||
|
||
|
||
<span class="md-nav__icon md-icon"></span>
|
||
</label>
|
||
|
||
<!-- Toggle to expand nested items with link to index page -->
|
||
|
||
|
||
<!-- Nested navigation -->
|
||
<nav
|
||
class="md-nav"
|
||
data-md-level="3"
|
||
aria-labelledby="__nav_2_3_2_label"
|
||
aria-expanded="true"
|
||
>
|
||
<label class="md-nav__title" for="__nav_2_3_2">
|
||
<span class="md-nav__icon md-icon"></span>
|
||
NoSQL
|
||
</label>
|
||
<ul class="md-nav__list" data-md-scrollfix>
|
||
|
||
<!-- Nested navigation item -->
|
||
|
||
|
||
|
||
|
||
<!-- Determine classes -->
|
||
|
||
|
||
|
||
<!-- Determine active page for paginated views -->
|
||
|
||
|
||
<!-- Navigation item with nested items -->
|
||
|
||
<li class="md-nav__item">
|
||
<a href="../intro/" class="md-nav__link">
|
||
|
||
|
||
<!-- Navigation link icon -->
|
||
|
||
|
||
<!-- Navigation link title -->
|
||
<span class="md-ellipsis">
|
||
Introduction
|
||
</span>
|
||
|
||
<!-- Navigation link status -->
|
||
|
||
|
||
</a>
|
||
</li>
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
<!-- Determine classes -->
|
||
|
||
|
||
|
||
|
||
|
||
<!-- Determine active page for paginated views -->
|
||
|
||
|
||
<!-- Navigation item with nested items -->
|
||
|
||
<li class="md-nav__item md-nav__item--active">
|
||
|
||
|
||
<!-- State toggle -->
|
||
<input
|
||
class="md-nav__toggle md-toggle"
|
||
type="checkbox"
|
||
id="__toc"
|
||
/>
|
||
|
||
<!-- Hack: see partials/toc.html for more information -->
|
||
|
||
|
||
|
||
|
||
|
||
<!-- Navigation link to table of contents -->
|
||
|
||
<label class="md-nav__link md-nav__link--active" for="__toc">
|
||
|
||
|
||
<!-- Navigation link icon -->
|
||
|
||
|
||
<!-- Navigation link title -->
|
||
<span class="md-ellipsis">
|
||
Key Concepts
|
||
</span>
|
||
|
||
<!-- Navigation link status -->
|
||
|
||
|
||
<span class="md-nav__icon md-icon"></span>
|
||
</label>
|
||
|
||
<a
|
||
href="./"
|
||
class="md-nav__link md-nav__link--active"
|
||
>
|
||
|
||
|
||
<!-- Navigation link icon -->
|
||
|
||
|
||
<!-- Navigation link title -->
|
||
<span class="md-ellipsis">
|
||
Key Concepts
|
||
</span>
|
||
|
||
<!-- Navigation link status -->
|
||
|
||
|
||
</a>
|
||
|
||
<!-- Table of contents -->
|
||
|
||
|
||
|
||
<nav class="md-nav md-nav--secondary" aria-label="Table of contents">
|
||
|
||
|
||
|
||
|
||
|
||
|
||
<label class="md-nav__title" for="__toc">
|
||
<span class="md-nav__icon md-icon"></span>
|
||
Table of contents
|
||
</label>
|
||
<ul class="md-nav__list" data-md-component="toc" data-md-scrollfix>
|
||
|
||
<li class="md-nav__item">
|
||
<a href="#cap-theorem" class="md-nav__link">
|
||
<span class="md-ellipsis">
|
||
CAP Theorem
|
||
</span>
|
||
</a>
|
||
|
||
</li>
|
||
|
||
<li class="md-nav__item">
|
||
<a href="#versioning-of-data-in-distributed-systems" class="md-nav__link">
|
||
<span class="md-ellipsis">
|
||
Versioning of Data in distributed systems
|
||
</span>
|
||
</a>
|
||
|
||
</li>
|
||
|
||
<li class="md-nav__item">
|
||
<a href="#partitioning" class="md-nav__link">
|
||
<span class="md-ellipsis">
|
||
Partitioning
|
||
</span>
|
||
</a>
|
||
|
||
</li>
|
||
|
||
<li class="md-nav__item">
|
||
<a href="#hashing" class="md-nav__link">
|
||
<span class="md-ellipsis">
|
||
Hashing
|
||
</span>
|
||
</a>
|
||
|
||
<nav class="md-nav" aria-label="Hashing">
|
||
<ul class="md-nav__list">
|
||
|
||
<li class="md-nav__item">
|
||
<a href="#consistent-hashing" class="md-nav__link">
|
||
<span class="md-ellipsis">
|
||
Consistent Hashing
|
||
</span>
|
||
</a>
|
||
|
||
</li>
|
||
|
||
</ul>
|
||
</nav>
|
||
|
||
</li>
|
||
|
||
<li class="md-nav__item">
|
||
<a href="#quorum" class="md-nav__link">
|
||
<span class="md-ellipsis">
|
||
Quorum
|
||
</span>
|
||
</a>
|
||
|
||
</li>
|
||
|
||
</ul>
|
||
|
||
</nav>
|
||
|
||
</li>
|
||
|
||
<!-- Navigation item -->
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
<!-- Determine classes -->
|
||
|
||
|
||
|
||
<!-- Determine active page for paginated views -->
|
||
|
||
|
||
<!-- Navigation item with nested items -->
|
||
|
||
<li class="md-nav__item">
|
||
<a href="../further_reading/" class="md-nav__link">
|
||
|
||
|
||
<!-- Navigation link icon -->
|
||
|
||
|
||
<!-- Navigation link title -->
|
||
<span class="md-ellipsis">
|
||
Conclusion
|
||
</span>
|
||
|
||
<!-- Navigation link status -->
|
||
|
||
|
||
</a>
|
||
</li>
|
||
|
||
|
||
|
||
|
||
</ul>
|
||
</nav>
|
||
|
||
<!-- Pruned navigation item -->
|
||
|
||
</li>
|
||
|
||
<!-- Currently active page -->
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
<!-- Determine classes -->
|
||
|
||
|
||
|
||
<!-- Determine active page for paginated views -->
|
||
|
||
|
||
<!-- Navigation item with nested items -->
|
||
|
||
|
||
<!-- Determine all nested items that are index pages -->
|
||
|
||
|
||
|
||
<!-- Navigation tabs -->
|
||
|
||
|
||
<!-- Render 1st level items with nested items as sections -->
|
||
|
||
|
||
|
||
<!-- Navigation pruning -->
|
||
|
||
|
||
<!-- Nested navigation item -->
|
||
<li class="md-nav__item md-nav__item--nested">
|
||
|
||
|
||
|
||
<!-- Determine checked and indeterminate state -->
|
||
|
||
|
||
<!-- Active checkbox expands items contained within nested section -->
|
||
<input
|
||
class="md-nav__toggle md-toggle "
|
||
type="checkbox"
|
||
id="__nav_2_3_3"
|
||
|
||
/>
|
||
|
||
<!-- Toggle to expand nested items -->
|
||
|
||
|
||
<label
|
||
class="md-nav__link"
|
||
for="__nav_2_3_3"
|
||
id="__nav_2_3_3_label"
|
||
tabindex="0"
|
||
>
|
||
|
||
|
||
<!-- Navigation link icon -->
|
||
|
||
|
||
<!-- Navigation link title -->
|
||
<span class="md-ellipsis">
|
||
Message Queue
|
||
</span>
|
||
|
||
<!-- Navigation link status -->
|
||
|
||
|
||
<span class="md-nav__icon md-icon"></span>
|
||
</label>
|
||
|
||
<!-- Toggle to expand nested items with link to index page -->
|
||
|
||
|
||
<!-- Nested navigation -->
|
||
<nav
|
||
class="md-nav"
|
||
data-md-level="3"
|
||
aria-labelledby="__nav_2_3_3_label"
|
||
aria-expanded="false"
|
||
>
|
||
<label class="md-nav__title" for="__nav_2_3_3">
|
||
<span class="md-nav__icon md-icon"></span>
|
||
Message Queue
|
||
</label>
|
||
<ul class="md-nav__list" data-md-scrollfix>
|
||
|
||
<!-- Nested navigation item -->
|
||
|
||
|
||
|
||
|
||
<!-- Determine classes -->
|
||
|
||
|
||
|
||
<!-- Determine active page for paginated views -->
|
||
|
||
|
||
<!-- Navigation item with nested items -->
|
||
|
||
<li class="md-nav__item">
|
||
<a href="../../messagequeue/intro/" class="md-nav__link">
|
||
|
||
|
||
<!-- Navigation link icon -->
|
||
|
||
|
||
<!-- Navigation link title -->
|
||
<span class="md-ellipsis">
|
||
Introduction
|
||
</span>
|
||
|
||
<!-- Navigation link status -->
|
||
|
||
|
||
</a>
|
||
</li>
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
<!-- Determine classes -->
|
||
|
||
|
||
|
||
<!-- Determine active page for paginated views -->
|
||
|
||
|
||
<!-- Navigation item with nested items -->
|
||
|
||
<li class="md-nav__item">
|
||
<a href="../../messagequeue/key_concepts/" class="md-nav__link">
|
||
|
||
|
||
<!-- Navigation link icon -->
|
||
|
||
|
||
<!-- Navigation link title -->
|
||
<span class="md-ellipsis">
|
||
Key Concepts
|
||
</span>
|
||
|
||
<!-- Navigation link status -->
|
||
|
||
|
||
</a>
|
||
</li>
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
<!-- Determine classes -->
|
||
|
||
|
||
|
||
<!-- Determine active page for paginated views -->
|
||
|
||
|
||
<!-- Navigation item with nested items -->
|
||
|
||
<li class="md-nav__item">
|
||
<a href="../../messagequeue/further_reading/" class="md-nav__link">
|
||
|
||
|
||
<!-- Navigation link icon -->
|
||
|
||
|
||
<!-- Navigation link title -->
|
||
<span class="md-ellipsis">
|
||
Conclusion
|
||
</span>
|
||
|
||
<!-- Navigation link status -->
|
||
|
||
|
||
</a>
|
||
</li>
|
||
|
||
|
||
|
||
|
||
</ul>
|
||
</nav>
|
||
|
||
<!-- Pruned navigation item -->
|
||
|
||
</li>
|
||
|
||
<!-- Currently active page -->
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
<!-- Determine classes -->
|
||
|
||
|
||
|
||
<!-- Determine active page for paginated views -->
|
||
|
||
|
||
<!-- Navigation item with nested items -->
|
||
|
||
|
||
<!-- Determine all nested items that are index pages -->
|
||
|
||
|
||
|
||
<!-- Navigation tabs -->
|
||
|
||
|
||
<!-- Render 1st level items with nested items as sections -->
|
||
|
||
|
||
|
||
<!-- Navigation pruning -->
|
||
|
||
|
||
<!-- Nested navigation item -->
|
||
<li class="md-nav__item md-nav__item--nested">
|
||
|
||
|
||
|
||
<!-- Determine checked and indeterminate state -->
|
||
|
||
|
||
<!-- Active checkbox expands items contained within nested section -->
|
||
<input
|
||
class="md-nav__toggle md-toggle "
|
||
type="checkbox"
|
||
id="__nav_2_3_4"
|
||
|
||
/>
|
||
|
||
<!-- Toggle to expand nested items -->
|
||
|
||
|
||
<label
|
||
class="md-nav__link"
|
||
for="__nav_2_3_4"
|
||
id="__nav_2_3_4_label"
|
||
tabindex="0"
|
||
>
|
||
|
||
|
||
<!-- Navigation link icon -->
|
||
|
||
|
||
<!-- Navigation link title -->
|
||
<span class="md-ellipsis">
|
||
Big Data
|
||
</span>
|
||
|
||
<!-- Navigation link status -->
|
||
|
||
|
||
<span class="md-nav__icon md-icon"></span>
|
||
</label>
|
||
|
||
<!-- Toggle to expand nested items with link to index page -->
|
||
|
||
|
||
<!-- Nested navigation -->
|
||
<nav
|
||
class="md-nav"
|
||
data-md-level="3"
|
||
aria-labelledby="__nav_2_3_4_label"
|
||
aria-expanded="false"
|
||
>
|
||
<label class="md-nav__title" for="__nav_2_3_4">
|
||
<span class="md-nav__icon md-icon"></span>
|
||
Big Data
|
||
</label>
|
||
<ul class="md-nav__list" data-md-scrollfix>
|
||
|
||
<!-- Nested navigation item -->
|
||
|
||
|
||
|
||
|
||
<!-- Determine classes -->
|
||
|
||
|
||
|
||
<!-- Determine active page for paginated views -->
|
||
|
||
|
||
<!-- Navigation item with nested items -->
|
||
|
||
<li class="md-nav__item">
|
||
<a href="../../big_data/intro/" class="md-nav__link">
|
||
|
||
|
||
<!-- Navigation link icon -->
|
||
|
||
|
||
<!-- Navigation link title -->
|
||
<span class="md-ellipsis">
|
||
Introduction
|
||
</span>
|
||
|
||
<!-- Navigation link status -->
|
||
|
||
|
||
</a>
|
||
</li>
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
<!-- Determine classes -->
|
||
|
||
|
||
|
||
<!-- Determine active page for paginated views -->
|
||
|
||
|
||
<!-- Navigation item with nested items -->
|
||
|
||
<li class="md-nav__item">
|
||
<a href="../../big_data/evolution/" class="md-nav__link">
|
||
|
||
|
||
<!-- Navigation link icon -->
|
||
|
||
|
||
<!-- Navigation link title -->
|
||
<span class="md-ellipsis">
|
||
Evolution and Architecture of Hadoop
|
||
</span>
|
||
|
||
<!-- Navigation link status -->
|
||
|
||
|
||
</a>
|
||
</li>
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
<!-- Determine classes -->
|
||
|
||
|
||
|
||
<!-- Determine active page for paginated views -->
|
||
|
||
|
||
<!-- Navigation item with nested items -->
|
||
|
||
<li class="md-nav__item">
|
||
<a href="../../big_data/tasks/" class="md-nav__link">
|
||
|
||
|
||
<!-- Navigation link icon -->
|
||
|
||
|
||
<!-- Navigation link title -->
|
||
<span class="md-ellipsis">
|
||
Conclusion
|
||
</span>
|
||
|
||
<!-- Navigation link status -->
|
||
|
||
|
||
</a>
|
||
</li>
|
||
|
||
|
||
|
||
|
||
</ul>
|
||
</nav>
|
||
|
||
<!-- Pruned navigation item -->
|
||
|
||
</li>
|
||
|
||
<!-- Currently active page -->
|
||
|
||
|
||
|
||
|
||
</ul>
|
||
</nav>
|
||
|
||
<!-- Pruned navigation item -->
|
||
|
||
</li>
|
||
|
||
<!-- Currently active page -->
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
<!-- Determine classes -->
|
||
|
||
|
||
|
||
<!-- Determine active page for paginated views -->
|
||
|
||
|
||
<!-- Navigation item with nested items -->
|
||
|
||
|
||
<!-- Determine all nested items that are index pages -->
|
||
|
||
|
||
|
||
<!-- Navigation tabs -->
|
||
|
||
|
||
<!-- Render 1st level items with nested items as sections -->
|
||
|
||
|
||
|
||
<!-- Navigation pruning -->
|
||
|
||
|
||
<!-- Nested navigation item -->
|
||
<li class="md-nav__item md-nav__item--nested">
|
||
|
||
|
||
|
||
<!-- Determine checked and indeterminate state -->
|
||
|
||
|
||
<!-- Active checkbox expands items contained within nested section -->
|
||
<input
|
||
class="md-nav__toggle md-toggle "
|
||
type="checkbox"
|
||
id="__nav_2_4"
|
||
|
||
/>
|
||
|
||
<!-- Toggle to expand nested items -->
|
||
|
||
|
||
<label
|
||
class="md-nav__link"
|
||
for="__nav_2_4"
|
||
id="__nav_2_4_label"
|
||
tabindex="0"
|
||
>
|
||
|
||
|
||
<!-- Navigation link icon -->
|
||
|
||
|
||
<!-- Navigation link title -->
|
||
<span class="md-ellipsis">
|
||
Systems Design
|
||
</span>
|
||
|
||
<!-- Navigation link status -->
|
||
|
||
|
||
<span class="md-nav__icon md-icon"></span>
|
||
</label>
|
||
|
||
<!-- Toggle to expand nested items with link to index page -->
|
||
|
||
|
||
<!-- Nested navigation -->
|
||
<nav
|
||
class="md-nav"
|
||
data-md-level="2"
|
||
aria-labelledby="__nav_2_4_label"
|
||
aria-expanded="false"
|
||
>
|
||
<label class="md-nav__title" for="__nav_2_4">
|
||
<span class="md-nav__icon md-icon"></span>
|
||
Systems Design
|
||
</label>
|
||
<ul class="md-nav__list" data-md-scrollfix>
|
||
|
||
<!-- Nested navigation item -->
|
||
|
||
|
||
|
||
|
||
<!-- Determine classes -->
|
||
|
||
|
||
|
||
<!-- Determine active page for paginated views -->
|
||
|
||
|
||
<!-- Navigation item with nested items -->
|
||
|
||
<li class="md-nav__item">
|
||
<a href="../../systems_design/intro/" class="md-nav__link">
|
||
|
||
|
||
<!-- Navigation link icon -->
|
||
|
||
|
||
<!-- Navigation link title -->
|
||
<span class="md-ellipsis">
|
||
Introduction
|
||
</span>
|
||
|
||
<!-- Navigation link status -->
|
||
|
||
|
||
</a>
|
||
</li>
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
<!-- Determine classes -->
|
||
|
||
|
||
|
||
<!-- Determine active page for paginated views -->
|
||
|
||
|
||
<!-- Navigation item with nested items -->
|
||
|
||
<li class="md-nav__item">
|
||
<a href="../../systems_design/scalability/" class="md-nav__link">
|
||
|
||
|
||
<!-- Navigation link icon -->
|
||
|
||
|
||
<!-- Navigation link title -->
|
||
<span class="md-ellipsis">
|
||
Scalability
|
||
</span>
|
||
|
||
<!-- Navigation link status -->
|
||
|
||
|
||
</a>
|
||
</li>
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
<!-- Determine classes -->
|
||
|
||
|
||
|
||
<!-- Determine active page for paginated views -->
|
||
|
||
|
||
<!-- Navigation item with nested items -->
|
||
|
||
<li class="md-nav__item">
|
||
<a href="../../systems_design/availability/" class="md-nav__link">
|
||
|
||
|
||
<!-- Navigation link icon -->
|
||
|
||
|
||
<!-- Navigation link title -->
|
||
<span class="md-ellipsis">
|
||
Availability
|
||
</span>
|
||
|
||
<!-- Navigation link status -->
|
||
|
||
|
||
</a>
|
||
</li>
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
<!-- Determine classes -->
|
||
|
||
|
||
|
||
<!-- Determine active page for paginated views -->
|
||
|
||
|
||
<!-- Navigation item with nested items -->
|
||
|
||
<li class="md-nav__item">
|
||
<a href="../../systems_design/fault-tolerance/" class="md-nav__link">
|
||
|
||
|
||
<!-- Navigation link icon -->
|
||
|
||
|
||
<!-- Navigation link title -->
|
||
<span class="md-ellipsis">
|
||
Fault Tolerance
|
||
</span>
|
||
|
||
<!-- Navigation link status -->
|
||
|
||
|
||
</a>
|
||
</li>
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
<!-- Determine classes -->
|
||
|
||
|
||
|
||
<!-- Determine active page for paginated views -->
|
||
|
||
|
||
<!-- Navigation item with nested items -->
|
||
|
||
<li class="md-nav__item">
|
||
<a href="../../systems_design/conclusion/" class="md-nav__link">
|
||
|
||
|
||
<!-- Navigation link icon -->
|
||
|
||
|
||
<!-- Navigation link title -->
|
||
<span class="md-ellipsis">
|
||
Conclusion
|
||
</span>
|
||
|
||
<!-- Navigation link status -->
|
||
|
||
|
||
</a>
|
||
</li>
|
||
|
||
|
||
|
||
|
||
</ul>
|
||
</nav>
|
||
|
||
<!-- Pruned navigation item -->
|
||
|
||
</li>
|
||
|
||
<!-- Currently active page -->
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
<!-- Determine classes -->
|
||
|
||
|
||
|
||
<!-- Determine active page for paginated views -->
|
||
|
||
|
||
<!-- Navigation item with nested items -->
|
||
|
||
|
||
<!-- Determine all nested items that are index pages -->
|
||
|
||
|
||
|
||
<!-- Navigation tabs -->
|
||
|
||
|
||
<!-- Render 1st level items with nested items as sections -->
|
||
|
||
|
||
|
||
<!-- Navigation pruning -->
|
||
|
||
|
||
<!-- Nested navigation item -->
|
||
<li class="md-nav__item md-nav__item--nested">
|
||
|
||
|
||
|
||
<!-- Determine checked and indeterminate state -->
|
||
|
||
|
||
<!-- Active checkbox expands items contained within nested section -->
|
||
<input
|
||
class="md-nav__toggle md-toggle "
|
||
type="checkbox"
|
||
id="__nav_2_5"
|
||
|
||
/>
|
||
|
||
<!-- Toggle to expand nested items -->
|
||
|
||
|
||
<label
|
||
class="md-nav__link"
|
||
for="__nav_2_5"
|
||
id="__nav_2_5_label"
|
||
tabindex="0"
|
||
>
|
||
|
||
|
||
<!-- Navigation link icon -->
|
||
|
||
|
||
<!-- Navigation link title -->
|
||
<span class="md-ellipsis">
|
||
Metrics and Monitoring
|
||
</span>
|
||
|
||
<!-- Navigation link status -->
|
||
|
||
|
||
<span class="md-nav__icon md-icon"></span>
|
||
</label>
|
||
|
||
<!-- Toggle to expand nested items with link to index page -->
|
||
|
||
|
||
<!-- Nested navigation -->
|
||
<nav
|
||
class="md-nav"
|
||
data-md-level="2"
|
||
aria-labelledby="__nav_2_5_label"
|
||
aria-expanded="false"
|
||
>
|
||
<label class="md-nav__title" for="__nav_2_5">
|
||
<span class="md-nav__icon md-icon"></span>
|
||
Metrics and Monitoring
|
||
</label>
|
||
<ul class="md-nav__list" data-md-scrollfix>
|
||
|
||
<!-- Nested navigation item -->
|
||
|
||
|
||
|
||
|
||
<!-- Determine classes -->
|
||
|
||
|
||
|
||
<!-- Determine active page for paginated views -->
|
||
|
||
|
||
<!-- Navigation item with nested items -->
|
||
|
||
<li class="md-nav__item">
|
||
<a href="../../metrics_and_monitoring/introduction/" class="md-nav__link">
|
||
|
||
|
||
<!-- Navigation link icon -->
|
||
|
||
|
||
<!-- Navigation link title -->
|
||
<span class="md-ellipsis">
|
||
Introduction
|
||
</span>
|
||
|
||
<!-- Navigation link status -->
|
||
|
||
|
||
</a>
|
||
</li>
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
<!-- Determine classes -->
|
||
|
||
|
||
|
||
<!-- Determine active page for paginated views -->
|
||
|
||
|
||
<!-- Navigation item with nested items -->
|
||
|
||
<li class="md-nav__item">
|
||
<a href="../../metrics_and_monitoring/command-line_tools/" class="md-nav__link">
|
||
|
||
|
||
<!-- Navigation link icon -->
|
||
|
||
|
||
<!-- Navigation link title -->
|
||
<span class="md-ellipsis">
|
||
Command-line Tools
|
||
</span>
|
||
|
||
<!-- Navigation link status -->
|
||
|
||
|
||
</a>
|
||
</li>
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
<!-- Determine classes -->
|
||
|
||
|
||
|
||
<!-- Determine active page for paginated views -->
|
||
|
||
|
||
<!-- Navigation item with nested items -->
|
||
|
||
<li class="md-nav__item">
|
||
<a href="../../metrics_and_monitoring/third-party_monitoring/" class="md-nav__link">
|
||
|
||
|
||
<!-- Navigation link icon -->
|
||
|
||
|
||
<!-- Navigation link title -->
|
||
<span class="md-ellipsis">
|
||
Third-party Monitoring
|
||
</span>
|
||
|
||
<!-- Navigation link status -->
|
||
|
||
|
||
</a>
|
||
</li>
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
<!-- Determine classes -->
|
||
|
||
|
||
|
||
<!-- Determine active page for paginated views -->
|
||
|
||
|
||
<!-- Navigation item with nested items -->
|
||
|
||
<li class="md-nav__item">
|
||
<a href="../../metrics_and_monitoring/alerts/" class="md-nav__link">
|
||
|
||
|
||
<!-- Navigation link icon -->
|
||
|
||
|
||
<!-- Navigation link title -->
|
||
<span class="md-ellipsis">
|
||
Proactive Monitoring with Alerts
|
||
</span>
|
||
|
||
<!-- Navigation link status -->
|
||
|
||
|
||
</a>
|
||
</li>
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
<!-- Determine classes -->
|
||
|
||
|
||
|
||
<!-- Determine active page for paginated views -->
|
||
|
||
|
||
<!-- Navigation item with nested items -->
|
||
|
||
<li class="md-nav__item">
|
||
<a href="../../metrics_and_monitoring/best_practices/" class="md-nav__link">
|
||
|
||
|
||
<!-- Navigation link icon -->
|
||
|
||
|
||
<!-- Navigation link title -->
|
||
<span class="md-ellipsis">
|
||
Best Practices for Monitoring
|
||
</span>
|
||
|
||
<!-- Navigation link status -->
|
||
|
||
|
||
</a>
|
||
</li>
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
<!-- Determine classes -->
|
||
|
||
|
||
|
||
<!-- Determine active page for paginated views -->
|
||
|
||
|
||
<!-- Navigation item with nested items -->
|
||
|
||
<li class="md-nav__item">
|
||
<a href="../../metrics_and_monitoring/observability/" class="md-nav__link">
|
||
|
||
|
||
<!-- Navigation link icon -->
|
||
|
||
|
||
<!-- Navigation link title -->
|
||
<span class="md-ellipsis">
|
||
Observability
|
||
</span>
|
||
|
||
<!-- Navigation link status -->
|
||
|
||
|
||
</a>
|
||
</li>
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
<!-- Determine classes -->
|
||
|
||
|
||
|
||
<!-- Determine active page for paginated views -->
|
||
|
||
|
||
<!-- Navigation item with nested items -->
|
||
|
||
<li class="md-nav__item">
|
||
<a href="../../metrics_and_monitoring/conclusion/" class="md-nav__link">
|
||
|
||
|
||
<!-- Navigation link icon -->
|
||
|
||
|
||
<!-- Navigation link title -->
|
||
<span class="md-ellipsis">
|
||
Conclusion
|
||
</span>
|
||
|
||
<!-- Navigation link status -->
|
||
|
||
|
||
</a>
|
||
</li>
|
||
|
||
|
||
|
||
|
||
</ul>
|
||
</nav>
|
||
|
||
<!-- Pruned navigation item -->
|
||
|
||
</li>
|
||
|
||
<!-- Currently active page -->
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
<!-- Determine classes -->
|
||
|
||
|
||
|
||
<!-- Determine active page for paginated views -->
|
||
|
||
|
||
<!-- Navigation item with nested items -->
|
||
|
||
|
||
<!-- Determine all nested items that are index pages -->
|
||
|
||
|
||
|
||
<!-- Navigation tabs -->
|
||
|
||
|
||
<!-- Render 1st level items with nested items as sections -->
|
||
|
||
|
||
|
||
<!-- Navigation pruning -->
|
||
|
||
|
||
<!-- Nested navigation item -->
|
||
<li class="md-nav__item md-nav__item--nested">
|
||
|
||
|
||
|
||
<!-- Determine checked and indeterminate state -->
|
||
|
||
|
||
<!-- Active checkbox expands items contained within nested section -->
|
||
<input
|
||
class="md-nav__toggle md-toggle "
|
||
type="checkbox"
|
||
id="__nav_2_6"
|
||
|
||
/>
|
||
|
||
<!-- Toggle to expand nested items -->
|
||
|
||
|
||
<label
|
||
class="md-nav__link"
|
||
for="__nav_2_6"
|
||
id="__nav_2_6_label"
|
||
tabindex="0"
|
||
>
|
||
|
||
|
||
<!-- Navigation link icon -->
|
||
|
||
|
||
<!-- Navigation link title -->
|
||
<span class="md-ellipsis">
|
||
Security
|
||
</span>
|
||
|
||
<!-- Navigation link status -->
|
||
|
||
|
||
<span class="md-nav__icon md-icon"></span>
|
||
</label>
|
||
|
||
<!-- Toggle to expand nested items with link to index page -->
|
||
|
||
|
||
<!-- Nested navigation -->
|
||
<nav
|
||
class="md-nav"
|
||
data-md-level="2"
|
||
aria-labelledby="__nav_2_6_label"
|
||
aria-expanded="false"
|
||
>
|
||
<label class="md-nav__title" for="__nav_2_6">
|
||
<span class="md-nav__icon md-icon"></span>
|
||
Security
|
||
</label>
|
||
<ul class="md-nav__list" data-md-scrollfix>
|
||
|
||
<!-- Nested navigation item -->
|
||
|
||
|
||
|
||
|
||
<!-- Determine classes -->
|
||
|
||
|
||
|
||
<!-- Determine active page for paginated views -->
|
||
|
||
|
||
<!-- Navigation item with nested items -->
|
||
|
||
<li class="md-nav__item">
|
||
<a href="../../security/intro/" class="md-nav__link">
|
||
|
||
|
||
<!-- Navigation link icon -->
|
||
|
||
|
||
<!-- Navigation link title -->
|
||
<span class="md-ellipsis">
|
||
Introduction
|
||
</span>
|
||
|
||
<!-- Navigation link status -->
|
||
|
||
|
||
</a>
|
||
</li>
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
<!-- Determine classes -->
|
||
|
||
|
||
|
||
<!-- Determine active page for paginated views -->
|
||
|
||
|
||
<!-- Navigation item with nested items -->
|
||
|
||
<li class="md-nav__item">
|
||
<a href="../../security/fundamentals/" class="md-nav__link">
|
||
|
||
|
||
<!-- Navigation link icon -->
|
||
|
||
|
||
<!-- Navigation link title -->
|
||
<span class="md-ellipsis">
|
||
Fundamentals of Security
|
||
</span>
|
||
|
||
<!-- Navigation link status -->
|
||
|
||
|
||
</a>
|
||
</li>
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
<!-- Determine classes -->
|
||
|
||
|
||
|
||
<!-- Determine active page for paginated views -->
|
||
|
||
|
||
<!-- Navigation item with nested items -->
|
||
|
||
<li class="md-nav__item">
|
||
<a href="../../security/network_security/" class="md-nav__link">
|
||
|
||
|
||
<!-- Navigation link icon -->
|
||
|
||
|
||
<!-- Navigation link title -->
|
||
<span class="md-ellipsis">
|
||
Network Security
|
||
</span>
|
||
|
||
<!-- Navigation link status -->
|
||
|
||
|
||
</a>
|
||
</li>
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
<!-- Determine classes -->
|
||
|
||
|
||
|
||
<!-- Determine active page for paginated views -->
|
||
|
||
|
||
<!-- Navigation item with nested items -->
|
||
|
||
<li class="md-nav__item">
|
||
<a href="../../security/threats_attacks_defences/" class="md-nav__link">
|
||
|
||
|
||
<!-- Navigation link icon -->
|
||
|
||
|
||
<!-- Navigation link title -->
|
||
<span class="md-ellipsis">
|
||
Threat, Attacks & Defences
|
||
</span>
|
||
|
||
<!-- Navigation link status -->
|
||
|
||
|
||
</a>
|
||
</li>
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
<!-- Determine classes -->
|
||
|
||
|
||
|
||
<!-- Determine active page for paginated views -->
|
||
|
||
|
||
<!-- Navigation item with nested items -->
|
||
|
||
<li class="md-nav__item">
|
||
<a href="../../security/writing_secure_code/" class="md-nav__link">
|
||
|
||
|
||
<!-- Navigation link icon -->
|
||
|
||
|
||
<!-- Navigation link title -->
|
||
<span class="md-ellipsis">
|
||
Writing Secure code
|
||
</span>
|
||
|
||
<!-- Navigation link status -->
|
||
|
||
|
||
</a>
|
||
</li>
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
<!-- Determine classes -->
|
||
|
||
|
||
|
||
<!-- Determine active page for paginated views -->
|
||
|
||
|
||
<!-- Navigation item with nested items -->
|
||
|
||
<li class="md-nav__item">
|
||
<a href="../../security/conclusion/" class="md-nav__link">
|
||
|
||
|
||
<!-- Navigation link icon -->
|
||
|
||
|
||
<!-- Navigation link title -->
|
||
<span class="md-ellipsis">
|
||
Conclusion
|
||
</span>
|
||
|
||
<!-- Navigation link status -->
|
||
|
||
|
||
</a>
|
||
</li>
|
||
|
||
|
||
|
||
|
||
</ul>
|
||
</nav>
|
||
|
||
<!-- Pruned navigation item -->
|
||
|
||
</li>
|
||
|
||
<!-- Currently active page -->
|
||
|
||
|
||
|
||
|
||
</ul>
|
||
</nav>
|
||
|
||
<!-- Pruned navigation item -->
|
||
|
||
</li>
|
||
|
||
<!-- Currently active page -->
|
||
|
||
|
||
|
||
|
||
|
||
|
||
<!-- Determine classes -->
|
||
|
||
|
||
|
||
<!-- Determine active page for paginated views -->
|
||
|
||
|
||
<!-- Navigation item with nested items -->
|
||
|
||
|
||
<!-- Determine all nested items that are index pages -->
|
||
|
||
|
||
|
||
<!-- Navigation tabs -->
|
||
|
||
|
||
<!-- Render 1st level items with nested items as sections -->
|
||
|
||
|
||
|
||
|
||
|
||
|
||
<!-- Navigation pruning -->
|
||
|
||
|
||
<!-- Nested navigation item -->
|
||
<li class="md-nav__item md-nav__item--section md-nav__item--nested">
|
||
|
||
|
||
|
||
<!-- Determine checked and indeterminate state -->
|
||
|
||
|
||
<!-- Active checkbox expands items contained within nested section -->
|
||
<input
|
||
class="md-nav__toggle md-toggle "
|
||
type="checkbox"
|
||
id="__nav_3"
|
||
|
||
/>
|
||
|
||
<!-- Toggle to expand nested items -->
|
||
|
||
|
||
<label
|
||
class="md-nav__link"
|
||
for="__nav_3"
|
||
id="__nav_3_label"
|
||
tabindex=""
|
||
>
|
||
|
||
|
||
<!-- Navigation link icon -->
|
||
|
||
|
||
<!-- Navigation link title -->
|
||
<span class="md-ellipsis">
|
||
Level 102
|
||
</span>
|
||
|
||
<!-- Navigation link status -->
|
||
|
||
|
||
<span class="md-nav__icon md-icon"></span>
|
||
</label>
|
||
|
||
<!-- Toggle to expand nested items with link to index page -->
|
||
|
||
|
||
<!-- Nested navigation -->
|
||
<nav
|
||
class="md-nav"
|
||
data-md-level="1"
|
||
aria-labelledby="__nav_3_label"
|
||
aria-expanded="false"
|
||
>
|
||
<label class="md-nav__title" for="__nav_3">
|
||
<span class="md-nav__icon md-icon"></span>
|
||
Level 102
|
||
</label>
|
||
<ul class="md-nav__list" data-md-scrollfix>
|
||
|
||
<!-- Nested navigation item -->
|
||
|
||
|
||
|
||
|
||
<!-- Determine classes -->
|
||
|
||
|
||
|
||
<!-- Determine active page for paginated views -->
|
||
|
||
|
||
<!-- Navigation item with nested items -->
|
||
|
||
|
||
<!-- Determine all nested items that are index pages -->
|
||
|
||
|
||
|
||
<!-- Navigation tabs -->
|
||
|
||
|
||
<!-- Render 1st level items with nested items as sections -->
|
||
|
||
|
||
|
||
<!-- Navigation pruning -->
|
||
|
||
|
||
<!-- Nested navigation item -->
|
||
<li class="md-nav__item md-nav__item--nested">
|
||
|
||
|
||
|
||
<!-- Determine checked and indeterminate state -->
|
||
|
||
|
||
<!-- Active checkbox expands items contained within nested section -->
|
||
<input
|
||
class="md-nav__toggle md-toggle "
|
||
type="checkbox"
|
||
id="__nav_3_1"
|
||
|
||
/>
|
||
|
||
<!-- Toggle to expand nested items -->
|
||
|
||
|
||
<label
|
||
class="md-nav__link"
|
||
for="__nav_3_1"
|
||
id="__nav_3_1_label"
|
||
tabindex="0"
|
||
>
|
||
|
||
|
||
<!-- Navigation link icon -->
|
||
|
||
|
||
<!-- Navigation link title -->
|
||
<span class="md-ellipsis">
|
||
Linux Intermediate
|
||
</span>
|
||
|
||
<!-- Navigation link status -->
|
||
|
||
|
||
<span class="md-nav__icon md-icon"></span>
|
||
</label>
|
||
|
||
<!-- Toggle to expand nested items with link to index page -->
|
||
|
||
|
||
<!-- Nested navigation -->
|
||
<nav
|
||
class="md-nav"
|
||
data-md-level="2"
|
||
aria-labelledby="__nav_3_1_label"
|
||
aria-expanded="false"
|
||
>
|
||
<label class="md-nav__title" for="__nav_3_1">
|
||
<span class="md-nav__icon md-icon"></span>
|
||
Linux Intermediate
|
||
</label>
|
||
<ul class="md-nav__list" data-md-scrollfix>
|
||
|
||
<!-- Nested navigation item -->
|
||
|
||
|
||
|
||
|
||
<!-- Determine classes -->
|
||
|
||
|
||
|
||
<!-- Determine active page for paginated views -->
|
||
|
||
|
||
<!-- Navigation item with nested items -->
|
||
|
||
<li class="md-nav__item">
|
||
<a href="../../../level102/linux_intermediate/introduction/" class="md-nav__link">
|
||
|
||
|
||
<!-- Navigation link icon -->
|
||
|
||
|
||
<!-- Navigation link title -->
|
||
<span class="md-ellipsis">
|
||
Introduction
|
||
</span>
|
||
|
||
<!-- Navigation link status -->
|
||
|
||
|
||
</a>
|
||
</li>
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
<!-- Determine classes -->
|
||
|
||
|
||
|
||
<!-- Determine active page for paginated views -->
|
||
|
||
|
||
<!-- Navigation item with nested items -->
|
||
|
||
<li class="md-nav__item">
|
||
<a href="../../../level102/linux_intermediate/package_management/" class="md-nav__link">
|
||
|
||
|
||
<!-- Navigation link icon -->
|
||
|
||
|
||
<!-- Navigation link title -->
|
||
<span class="md-ellipsis">
|
||
Package Management
|
||
</span>
|
||
|
||
<!-- Navigation link status -->
|
||
|
||
|
||
</a>
|
||
</li>
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
<!-- Determine classes -->
|
||
|
||
|
||
|
||
<!-- Determine active page for paginated views -->
|
||
|
||
|
||
<!-- Navigation item with nested items -->
|
||
|
||
<li class="md-nav__item">
|
||
<a href="../../../level102/linux_intermediate/storage_media/" class="md-nav__link">
|
||
|
||
|
||
<!-- Navigation link icon -->
|
||
|
||
|
||
<!-- Navigation link title -->
|
||
<span class="md-ellipsis">
|
||
Storage Media
|
||
</span>
|
||
|
||
<!-- Navigation link status -->
|
||
|
||
|
||
</a>
|
||
</li>
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
<!-- Determine classes -->
|
||
|
||
|
||
|
||
<!-- Determine active page for paginated views -->
|
||
|
||
|
||
<!-- Navigation item with nested items -->
|
||
|
||
<li class="md-nav__item">
|
||
<a href="../../../level102/linux_intermediate/archiving_backup/" class="md-nav__link">
|
||
|
||
|
||
<!-- Navigation link icon -->
|
||
|
||
|
||
<!-- Navigation link title -->
|
||
<span class="md-ellipsis">
|
||
Archiving and Backup
|
||
</span>
|
||
|
||
<!-- Navigation link status -->
|
||
|
||
|
||
</a>
|
||
</li>
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
<!-- Determine classes -->
|
||
|
||
|
||
|
||
<!-- Determine active page for paginated views -->
|
||
|
||
|
||
<!-- Navigation item with nested items -->
|
||
|
||
<li class="md-nav__item">
|
||
<a href="../../../level102/linux_intermediate/introvim/" class="md-nav__link">
|
||
|
||
|
||
<!-- Navigation link icon -->
|
||
|
||
|
||
<!-- Navigation link title -->
|
||
<span class="md-ellipsis">
|
||
Introduction to Vim
|
||
</span>
|
||
|
||
<!-- Navigation link status -->
|
||
|
||
|
||
</a>
|
||
</li>
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
<!-- Determine classes -->
|
||
|
||
|
||
|
||
<!-- Determine active page for paginated views -->
|
||
|
||
|
||
<!-- Navigation item with nested items -->
|
||
|
||
<li class="md-nav__item">
|
||
<a href="../../../level102/linux_intermediate/bashscripting/" class="md-nav__link">
|
||
|
||
|
||
<!-- Navigation link icon -->
|
||
|
||
|
||
<!-- Navigation link title -->
|
||
<span class="md-ellipsis">
|
||
Bash Scripting
|
||
</span>
|
||
|
||
<!-- Navigation link status -->
|
||
|
||
|
||
</a>
|
||
</li>
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
<!-- Determine classes -->
|
||
|
||
|
||
|
||
<!-- Determine active page for paginated views -->
|
||
|
||
|
||
<!-- Navigation item with nested items -->
|
||
|
||
<li class="md-nav__item">
|
||
<a href="../../../level102/linux_intermediate/conclusion/" class="md-nav__link">
|
||
|
||
|
||
<!-- Navigation link icon -->
|
||
|
||
|
||
<!-- Navigation link title -->
|
||
<span class="md-ellipsis">
|
||
Conclusion
|
||
</span>
|
||
|
||
<!-- Navigation link status -->
|
||
|
||
|
||
</a>
|
||
</li>
|
||
|
||
|
||
|
||
|
||
</ul>
|
||
</nav>
|
||
|
||
<!-- Pruned navigation item -->
|
||
|
||
</li>
|
||
|
||
<!-- Currently active page -->
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
<!-- Determine classes -->
|
||
|
||
|
||
|
||
<!-- Determine active page for paginated views -->
|
||
|
||
|
||
<!-- Navigation item with nested items -->
|
||
|
||
|
||
<!-- Determine all nested items that are index pages -->
|
||
|
||
|
||
|
||
<!-- Navigation tabs -->
|
||
|
||
|
||
<!-- Render 1st level items with nested items as sections -->
|
||
|
||
|
||
|
||
<!-- Navigation pruning -->
|
||
|
||
|
||
<!-- Nested navigation item -->
|
||
<li class="md-nav__item md-nav__item--nested">
|
||
|
||
|
||
|
||
<!-- Determine checked and indeterminate state -->
|
||
|
||
|
||
<!-- Active checkbox expands items contained within nested section -->
|
||
<input
|
||
class="md-nav__toggle md-toggle "
|
||
type="checkbox"
|
||
id="__nav_3_2"
|
||
|
||
/>
|
||
|
||
<!-- Toggle to expand nested items -->
|
||
|
||
|
||
<label
|
||
class="md-nav__link"
|
||
for="__nav_3_2"
|
||
id="__nav_3_2_label"
|
||
tabindex="0"
|
||
>
|
||
|
||
|
||
<!-- Navigation link icon -->
|
||
|
||
|
||
<!-- Navigation link title -->
|
||
<span class="md-ellipsis">
|
||
Linux Advanced
|
||
</span>
|
||
|
||
<!-- Navigation link status -->
|
||
|
||
|
||
<span class="md-nav__icon md-icon"></span>
|
||
</label>
|
||
|
||
<!-- Toggle to expand nested items with link to index page -->
|
||
|
||
|
||
<!-- Nested navigation -->
|
||
<nav
|
||
class="md-nav"
|
||
data-md-level="2"
|
||
aria-labelledby="__nav_3_2_label"
|
||
aria-expanded="false"
|
||
>
|
||
<label class="md-nav__title" for="__nav_3_2">
|
||
<span class="md-nav__icon md-icon"></span>
|
||
Linux Advanced
|
||
</label>
|
||
<ul class="md-nav__list" data-md-scrollfix>
|
||
|
||
<!-- Nested navigation item -->
|
||
|
||
|
||
|
||
|
||
<!-- Determine classes -->
|
||
|
||
|
||
|
||
<!-- Determine active page for paginated views -->
|
||
|
||
|
||
<!-- Navigation item with nested items -->
|
||
|
||
|
||
<!-- Determine all nested items that are index pages -->
|
||
|
||
|
||
|
||
<!-- Navigation tabs -->
|
||
|
||
|
||
<!-- Render 1st level items with nested items as sections -->
|
||
|
||
|
||
|
||
<!-- Navigation pruning -->
|
||
|
||
|
||
<!-- Nested navigation item -->
|
||
<li class="md-nav__item md-nav__item--nested">
|
||
|
||
|
||
|
||
<!-- Determine checked and indeterminate state -->
|
||
|
||
|
||
<!-- Active checkbox expands items contained within nested section -->
|
||
<input
|
||
class="md-nav__toggle md-toggle "
|
||
type="checkbox"
|
||
id="__nav_3_2_1"
|
||
|
||
/>
|
||
|
||
<!-- Toggle to expand nested items -->
|
||
|
||
|
||
<label
|
||
class="md-nav__link"
|
||
for="__nav_3_2_1"
|
||
id="__nav_3_2_1_label"
|
||
tabindex="0"
|
||
>
|
||
|
||
|
||
<!-- Navigation link icon -->
|
||
|
||
|
||
<!-- Navigation link title -->
|
||
<span class="md-ellipsis">
|
||
Containerization And Orchestration
|
||
</span>
|
||
|
||
<!-- Navigation link status -->
|
||
|
||
|
||
<span class="md-nav__icon md-icon"></span>
|
||
</label>
|
||
|
||
<!-- Toggle to expand nested items with link to index page -->
|
||
|
||
|
||
<!-- Nested navigation -->
|
||
<nav
|
||
class="md-nav"
|
||
data-md-level="3"
|
||
aria-labelledby="__nav_3_2_1_label"
|
||
aria-expanded="false"
|
||
>
|
||
<label class="md-nav__title" for="__nav_3_2_1">
|
||
<span class="md-nav__icon md-icon"></span>
|
||
Containerization And Orchestration
|
||
</label>
|
||
<ul class="md-nav__list" data-md-scrollfix>
|
||
|
||
<!-- Nested navigation item -->
|
||
|
||
|
||
|
||
|
||
<!-- Determine classes -->
|
||
|
||
|
||
|
||
<!-- Determine active page for paginated views -->
|
||
|
||
|
||
<!-- Navigation item with nested items -->
|
||
|
||
<li class="md-nav__item">
|
||
<a href="../../../level102/containerization_and_orchestration/intro/" class="md-nav__link">
|
||
|
||
|
||
<!-- Navigation link icon -->
|
||
|
||
|
||
<!-- Navigation link title -->
|
||
<span class="md-ellipsis">
|
||
Introduction
|
||
</span>
|
||
|
||
<!-- Navigation link status -->
|
||
|
||
|
||
</a>
|
||
</li>
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
<!-- Determine classes -->
|
||
|
||
|
||
|
||
<!-- Determine active page for paginated views -->
|
||
|
||
|
||
<!-- Navigation item with nested items -->
|
||
|
||
<li class="md-nav__item">
|
||
<a href="../../../level102/containerization_and_orchestration/intro_to_containers/" class="md-nav__link">
|
||
|
||
|
||
<!-- Navigation link icon -->
|
||
|
||
|
||
<!-- Navigation link title -->
|
||
<span class="md-ellipsis">
|
||
Introduction To Containers
|
||
</span>
|
||
|
||
<!-- Navigation link status -->
|
||
|
||
|
||
</a>
|
||
</li>
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
<!-- Determine classes -->
|
||
|
||
|
||
|
||
<!-- Determine active page for paginated views -->
|
||
|
||
|
||
<!-- Navigation item with nested items -->
|
||
|
||
<li class="md-nav__item">
|
||
<a href="../../../level102/containerization_and_orchestration/containerization_with_docker/" class="md-nav__link">
|
||
|
||
|
||
<!-- Navigation link icon -->
|
||
|
||
|
||
<!-- Navigation link title -->
|
||
<span class="md-ellipsis">
|
||
Containerization With Docker
|
||
</span>
|
||
|
||
<!-- Navigation link status -->
|
||
|
||
|
||
</a>
|
||
</li>
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
<!-- Determine classes -->
|
||
|
||
|
||
|
||
<!-- Determine active page for paginated views -->
|
||
|
||
|
||
<!-- Navigation item with nested items -->
|
||
|
||
<li class="md-nav__item">
|
||
<a href="../../../level102/containerization_and_orchestration/orchestration_with_kubernetes/" class="md-nav__link">
|
||
|
||
|
||
<!-- Navigation link icon -->
|
||
|
||
|
||
<!-- Navigation link title -->
|
||
<span class="md-ellipsis">
|
||
Orchestration With Kubernetes
|
||
</span>
|
||
|
||
<!-- Navigation link status -->
|
||
|
||
|
||
</a>
|
||
</li>
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
<!-- Determine classes -->
|
||
|
||
|
||
|
||
<!-- Determine active page for paginated views -->
|
||
|
||
|
||
<!-- Navigation item with nested items -->
|
||
|
||
<li class="md-nav__item">
|
||
<a href="../../../level102/containerization_and_orchestration/conclusion/" class="md-nav__link">
|
||
|
||
|
||
<!-- Navigation link icon -->
|
||
|
||
|
||
<!-- Navigation link title -->
|
||
<span class="md-ellipsis">
|
||
Conclusion
|
||
</span>
|
||
|
||
<!-- Navigation link status -->
|
||
|
||
|
||
</a>
|
||
</li>
|
||
|
||
|
||
|
||
|
||
</ul>
|
||
</nav>
|
||
|
||
<!-- Pruned navigation item -->
|
||
|
||
</li>
|
||
|
||
<!-- Currently active page -->
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
<!-- Determine classes -->
|
||
|
||
|
||
|
||
<!-- Determine active page for paginated views -->
|
||
|
||
|
||
<!-- Navigation item with nested items -->
|
||
|
||
|
||
<!-- Determine all nested items that are index pages -->
|
||
|
||
|
||
|
||
<!-- Navigation tabs -->
|
||
|
||
|
||
<!-- Render 1st level items with nested items as sections -->
|
||
|
||
|
||
|
||
<!-- Navigation pruning -->
|
||
|
||
|
||
<!-- Nested navigation item -->
|
||
<li class="md-nav__item md-nav__item--nested">
|
||
|
||
|
||
|
||
<!-- Determine checked and indeterminate state -->
|
||
|
||
|
||
<!-- Active checkbox expands items contained within nested section -->
|
||
<input
|
||
class="md-nav__toggle md-toggle "
|
||
type="checkbox"
|
||
id="__nav_3_2_2"
|
||
|
||
/>
|
||
|
||
<!-- Toggle to expand nested items -->
|
||
|
||
|
||
<label
|
||
class="md-nav__link"
|
||
for="__nav_3_2_2"
|
||
id="__nav_3_2_2_label"
|
||
tabindex="0"
|
||
>
|
||
|
||
|
||
<!-- Navigation link icon -->
|
||
|
||
|
||
<!-- Navigation link title -->
|
||
<span class="md-ellipsis">
|
||
System Calls and Signals
|
||
</span>
|
||
|
||
<!-- Navigation link status -->
|
||
|
||
|
||
<span class="md-nav__icon md-icon"></span>
|
||
</label>
|
||
|
||
<!-- Toggle to expand nested items with link to index page -->
|
||
|
||
|
||
<!-- Nested navigation -->
|
||
<nav
|
||
class="md-nav"
|
||
data-md-level="3"
|
||
aria-labelledby="__nav_3_2_2_label"
|
||
aria-expanded="false"
|
||
>
|
||
<label class="md-nav__title" for="__nav_3_2_2">
|
||
<span class="md-nav__icon md-icon"></span>
|
||
System Calls and Signals
|
||
</label>
|
||
<ul class="md-nav__list" data-md-scrollfix>
|
||
|
||
<!-- Nested navigation item -->
|
||
|
||
|
||
|
||
|
||
<!-- Determine classes -->
|
||
|
||
|
||
|
||
<!-- Determine active page for paginated views -->
|
||
|
||
|
||
<!-- Navigation item with nested items -->
|
||
|
||
<li class="md-nav__item">
|
||
<a href="../../../level102/system_calls_and_signals/intro/" class="md-nav__link">
|
||
|
||
|
||
<!-- Navigation link icon -->
|
||
|
||
|
||
<!-- Navigation link title -->
|
||
<span class="md-ellipsis">
|
||
Introduction
|
||
</span>
|
||
|
||
<!-- Navigation link status -->
|
||
|
||
|
||
</a>
|
||
</li>
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
<!-- Determine classes -->
|
||
|
||
|
||
|
||
<!-- Determine active page for paginated views -->
|
||
|
||
|
||
<!-- Navigation item with nested items -->
|
||
|
||
<li class="md-nav__item">
|
||
<a href="../../../level102/system_calls_and_signals/signals/" class="md-nav__link">
|
||
|
||
|
||
<!-- Navigation link icon -->
|
||
|
||
|
||
<!-- Navigation link title -->
|
||
<span class="md-ellipsis">
|
||
Signals
|
||
</span>
|
||
|
||
<!-- Navigation link status -->
|
||
|
||
|
||
</a>
|
||
</li>
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
<!-- Determine classes -->
|
||
|
||
|
||
|
||
<!-- Determine active page for paginated views -->
|
||
|
||
|
||
<!-- Navigation item with nested items -->
|
||
|
||
<li class="md-nav__item">
|
||
<a href="../../../level102/system_calls_and_signals/system_calls/" class="md-nav__link">
|
||
|
||
|
||
<!-- Navigation link icon -->
|
||
|
||
|
||
<!-- Navigation link title -->
|
||
<span class="md-ellipsis">
|
||
System Calls
|
||
</span>
|
||
|
||
<!-- Navigation link status -->
|
||
|
||
|
||
</a>
|
||
</li>
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
<!-- Determine classes -->
|
||
|
||
|
||
|
||
<!-- Determine active page for paginated views -->
|
||
|
||
|
||
<!-- Navigation item with nested items -->
|
||
|
||
<li class="md-nav__item">
|
||
<a href="../../../level102/system_calls_and_signals/conclusion/" class="md-nav__link">
|
||
|
||
|
||
<!-- Navigation link icon -->
|
||
|
||
|
||
<!-- Navigation link title -->
|
||
<span class="md-ellipsis">
|
||
Conclusion
|
||
</span>
|
||
|
||
<!-- Navigation link status -->
|
||
|
||
|
||
</a>
|
||
</li>
|
||
|
||
|
||
|
||
|
||
</ul>
|
||
</nav>
|
||
|
||
<!-- Pruned navigation item -->
|
||
|
||
</li>
|
||
|
||
<!-- Currently active page -->
|
||
|
||
|
||
|
||
|
||
</ul>
|
||
</nav>
|
||
|
||
<!-- Pruned navigation item -->
|
||
|
||
</li>
|
||
|
||
<!-- Currently active page -->
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
<!-- Determine classes -->
|
||
|
||
|
||
|
||
<!-- Determine active page for paginated views -->
|
||
|
||
|
||
<!-- Navigation item with nested items -->
|
||
|
||
|
||
<!-- Determine all nested items that are index pages -->
|
||
|
||
|
||
|
||
<!-- Navigation tabs -->
|
||
|
||
|
||
<!-- Render 1st level items with nested items as sections -->
|
||
|
||
|
||
|
||
<!-- Navigation pruning -->
|
||
|
||
|
||
<!-- Nested navigation item -->
|
||
<li class="md-nav__item md-nav__item--nested">
|
||
|
||
|
||
|
||
<!-- Determine checked and indeterminate state -->
|
||
|
||
|
||
<!-- Active checkbox expands items contained within nested section -->
|
||
<input
|
||
class="md-nav__toggle md-toggle "
|
||
type="checkbox"
|
||
id="__nav_3_3"
|
||
|
||
/>
|
||
|
||
<!-- Toggle to expand nested items -->
|
||
|
||
|
||
<label
|
||
class="md-nav__link"
|
||
for="__nav_3_3"
|
||
id="__nav_3_3_label"
|
||
tabindex="0"
|
||
>
|
||
|
||
|
||
<!-- Navigation link icon -->
|
||
|
||
|
||
<!-- Navigation link title -->
|
||
<span class="md-ellipsis">
|
||
Networking
|
||
</span>
|
||
|
||
<!-- Navigation link status -->
|
||
|
||
|
||
<span class="md-nav__icon md-icon"></span>
|
||
</label>
|
||
|
||
<!-- Toggle to expand nested items with link to index page -->
|
||
|
||
|
||
<!-- Nested navigation -->
|
||
<nav
|
||
class="md-nav"
|
||
data-md-level="2"
|
||
aria-labelledby="__nav_3_3_label"
|
||
aria-expanded="false"
|
||
>
|
||
<label class="md-nav__title" for="__nav_3_3">
|
||
<span class="md-nav__icon md-icon"></span>
|
||
Networking
|
||
</label>
|
||
<ul class="md-nav__list" data-md-scrollfix>
|
||
|
||
<!-- Nested navigation item -->
|
||
|
||
|
||
|
||
|
||
<!-- Determine classes -->
|
||
|
||
|
||
|
||
<!-- Determine active page for paginated views -->
|
||
|
||
|
||
<!-- Navigation item with nested items -->
|
||
|
||
<li class="md-nav__item">
|
||
<a href="../../../level102/networking/introduction/" class="md-nav__link">
|
||
|
||
|
||
<!-- Navigation link icon -->
|
||
|
||
|
||
<!-- Navigation link title -->
|
||
<span class="md-ellipsis">
|
||
Introduction
|
||
</span>
|
||
|
||
<!-- Navigation link status -->
|
||
|
||
|
||
</a>
|
||
</li>
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
<!-- Determine classes -->
|
||
|
||
|
||
|
||
<!-- Determine active page for paginated views -->
|
||
|
||
|
||
<!-- Navigation item with nested items -->
|
||
|
||
<li class="md-nav__item">
|
||
<a href="../../../level102/networking/security/" class="md-nav__link">
|
||
|
||
|
||
<!-- Navigation link icon -->
|
||
|
||
|
||
<!-- Navigation link title -->
|
||
<span class="md-ellipsis">
|
||
Security
|
||
</span>
|
||
|
||
<!-- Navigation link status -->
|
||
|
||
|
||
</a>
|
||
</li>
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
<!-- Determine classes -->
|
||
|
||
|
||
|
||
<!-- Determine active page for paginated views -->
|
||
|
||
|
||
<!-- Navigation item with nested items -->
|
||
|
||
<li class="md-nav__item">
|
||
<a href="../../../level102/networking/scale/" class="md-nav__link">
|
||
|
||
|
||
<!-- Navigation link icon -->
|
||
|
||
|
||
<!-- Navigation link title -->
|
||
<span class="md-ellipsis">
|
||
Scale
|
||
</span>
|
||
|
||
<!-- Navigation link status -->
|
||
|
||
|
||
</a>
|
||
</li>
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
<!-- Determine classes -->
|
||
|
||
|
||
|
||
<!-- Determine active page for paginated views -->
|
||
|
||
|
||
<!-- Navigation item with nested items -->
|
||
|
||
<li class="md-nav__item">
|
||
<a href="../../../level102/networking/rtt/" class="md-nav__link">
|
||
|
||
|
||
<!-- Navigation link icon -->
|
||
|
||
|
||
<!-- Navigation link title -->
|
||
<span class="md-ellipsis">
|
||
RTT
|
||
</span>
|
||
|
||
<!-- Navigation link status -->
|
||
|
||
|
||
</a>
|
||
</li>
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
<!-- Determine classes -->
|
||
|
||
|
||
|
||
<!-- Determine active page for paginated views -->
|
||
|
||
|
||
<!-- Navigation item with nested items -->
|
||
|
||
<li class="md-nav__item">
|
||
<a href="../../../level102/networking/infrastructure-features/" class="md-nav__link">
|
||
|
||
|
||
<!-- Navigation link icon -->
|
||
|
||
|
||
<!-- Navigation link title -->
|
||
<span class="md-ellipsis">
|
||
Infrastructure Services
|
||
</span>
|
||
|
||
<!-- Navigation link status -->
|
||
|
||
|
||
</a>
|
||
</li>
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
<!-- Determine classes -->
|
||
|
||
|
||
|
||
<!-- Determine active page for paginated views -->
|
||
|
||
|
||
<!-- Navigation item with nested items -->
|
||
|
||
<li class="md-nav__item">
|
||
<a href="../../../level102/networking/conclusion/" class="md-nav__link">
|
||
|
||
|
||
<!-- Navigation link icon -->
|
||
|
||
|
||
<!-- Navigation link title -->
|
||
<span class="md-ellipsis">
|
||
Conclusion
|
||
</span>
|
||
|
||
<!-- Navigation link status -->
|
||
|
||
|
||
</a>
|
||
</li>
|
||
|
||
|
||
|
||
|
||
</ul>
|
||
</nav>
|
||
|
||
<!-- Pruned navigation item -->
|
||
|
||
</li>
|
||
|
||
<!-- Currently active page -->
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
<!-- Determine classes -->
|
||
|
||
|
||
|
||
<!-- Determine active page for paginated views -->
|
||
|
||
|
||
<!-- Navigation item with nested items -->
|
||
|
||
|
||
<!-- Determine all nested items that are index pages -->
|
||
|
||
|
||
|
||
<!-- Navigation tabs -->
|
||
|
||
|
||
<!-- Render 1st level items with nested items as sections -->
|
||
|
||
|
||
|
||
<!-- Navigation pruning -->
|
||
|
||
|
||
<!-- Nested navigation item -->
|
||
<li class="md-nav__item md-nav__item--nested">
|
||
|
||
|
||
|
||
<!-- Determine checked and indeterminate state -->
|
||
|
||
|
||
<!-- Active checkbox expands items contained within nested section -->
|
||
<input
|
||
class="md-nav__toggle md-toggle "
|
||
type="checkbox"
|
||
id="__nav_3_4"
|
||
|
||
/>
|
||
|
||
<!-- Toggle to expand nested items -->
|
||
|
||
|
||
<label
|
||
class="md-nav__link"
|
||
for="__nav_3_4"
|
||
id="__nav_3_4_label"
|
||
tabindex="0"
|
||
>
|
||
|
||
|
||
<!-- Navigation link icon -->
|
||
|
||
|
||
<!-- Navigation link title -->
|
||
<span class="md-ellipsis">
|
||
System Design
|
||
</span>
|
||
|
||
<!-- Navigation link status -->
|
||
|
||
|
||
<span class="md-nav__icon md-icon"></span>
|
||
</label>
|
||
|
||
<!-- Toggle to expand nested items with link to index page -->
|
||
|
||
|
||
<!-- Nested navigation -->
|
||
<nav
|
||
class="md-nav"
|
||
data-md-level="2"
|
||
aria-labelledby="__nav_3_4_label"
|
||
aria-expanded="false"
|
||
>
|
||
<label class="md-nav__title" for="__nav_3_4">
|
||
<span class="md-nav__icon md-icon"></span>
|
||
System Design
|
||
</label>
|
||
<ul class="md-nav__list" data-md-scrollfix>
|
||
|
||
<!-- Nested navigation item -->
|
||
|
||
|
||
|
||
|
||
<!-- Determine classes -->
|
||
|
||
|
||
|
||
<!-- Determine active page for paginated views -->
|
||
|
||
|
||
<!-- Navigation item with nested items -->
|
||
|
||
<li class="md-nav__item">
|
||
<a href="../../../level102/system_design/intro/" class="md-nav__link">
|
||
|
||
|
||
<!-- Navigation link icon -->
|
||
|
||
|
||
<!-- Navigation link title -->
|
||
<span class="md-ellipsis">
|
||
Introduction
|
||
</span>
|
||
|
||
<!-- Navigation link status -->
|
||
|
||
|
||
</a>
|
||
</li>
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
<!-- Determine classes -->
|
||
|
||
|
||
|
||
<!-- Determine active page for paginated views -->
|
||
|
||
|
||
<!-- Navigation item with nested items -->
|
||
|
||
<li class="md-nav__item">
|
||
<a href="../../../level102/system_design/large-system-design/" class="md-nav__link">
|
||
|
||
|
||
<!-- Navigation link icon -->
|
||
|
||
|
||
<!-- Navigation link title -->
|
||
<span class="md-ellipsis">
|
||
Large System Design
|
||
</span>
|
||
|
||
<!-- Navigation link status -->
|
||
|
||
|
||
</a>
|
||
</li>
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
<!-- Determine classes -->
|
||
|
||
|
||
|
||
<!-- Determine active page for paginated views -->
|
||
|
||
|
||
<!-- Navigation item with nested items -->
|
||
|
||
<li class="md-nav__item">
|
||
<a href="../../../level102/system_design/scaling/" class="md-nav__link">
|
||
|
||
|
||
<!-- Navigation link icon -->
|
||
|
||
|
||
<!-- Navigation link title -->
|
||
<span class="md-ellipsis">
|
||
Scaling
|
||
</span>
|
||
|
||
<!-- Navigation link status -->
|
||
|
||
|
||
</a>
|
||
</li>
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
<!-- Determine classes -->
|
||
|
||
|
||
|
||
<!-- Determine active page for paginated views -->
|
||
|
||
|
||
<!-- Navigation item with nested items -->
|
||
|
||
<li class="md-nav__item">
|
||
<a href="../../../level102/system_design/scaling-beyond-the-datacenter/" class="md-nav__link">
|
||
|
||
|
||
<!-- Navigation link icon -->
|
||
|
||
|
||
<!-- Navigation link title -->
|
||
<span class="md-ellipsis">
|
||
Scaling Beyond the Data Center
|
||
</span>
|
||
|
||
<!-- Navigation link status -->
|
||
|
||
|
||
</a>
|
||
</li>
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
<!-- Determine classes -->
|
||
|
||
|
||
|
||
<!-- Determine active page for paginated views -->
|
||
|
||
|
||
<!-- Navigation item with nested items -->
|
||
|
||
<li class="md-nav__item">
|
||
<a href="../../../level102/system_design/resiliency/" class="md-nav__link">
|
||
|
||
|
||
<!-- Navigation link icon -->
|
||
|
||
|
||
<!-- Navigation link title -->
|
||
<span class="md-ellipsis">
|
||
Resiliency
|
||
</span>
|
||
|
||
<!-- Navigation link status -->
|
||
|
||
|
||
</a>
|
||
</li>
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
<!-- Determine classes -->
|
||
|
||
|
||
|
||
<!-- Determine active page for paginated views -->
|
||
|
||
|
||
<!-- Navigation item with nested items -->
|
||
|
||
<li class="md-nav__item">
|
||
<a href="../../../level102/system_design/conclusion/" class="md-nav__link">
|
||
|
||
|
||
<!-- Navigation link icon -->
|
||
|
||
|
||
<!-- Navigation link title -->
|
||
<span class="md-ellipsis">
|
||
Conclusion
|
||
</span>
|
||
|
||
<!-- Navigation link status -->
|
||
|
||
|
||
</a>
|
||
</li>
|
||
|
||
|
||
|
||
|
||
</ul>
|
||
</nav>
|
||
|
||
<!-- Pruned navigation item -->
|
||
|
||
</li>
|
||
|
||
<!-- Currently active page -->
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
<!-- Determine classes -->
|
||
|
||
|
||
|
||
<!-- Determine active page for paginated views -->
|
||
|
||
|
||
<!-- Navigation item with nested items -->
|
||
|
||
|
||
<!-- Determine all nested items that are index pages -->
|
||
|
||
|
||
|
||
<!-- Navigation tabs -->
|
||
|
||
|
||
<!-- Render 1st level items with nested items as sections -->
|
||
|
||
|
||
|
||
<!-- Navigation pruning -->
|
||
|
||
|
||
<!-- Nested navigation item -->
|
||
<li class="md-nav__item md-nav__item--nested">
|
||
|
||
|
||
|
||
<!-- Determine checked and indeterminate state -->
|
||
|
||
|
||
<!-- Active checkbox expands items contained within nested section -->
|
||
<input
|
||
class="md-nav__toggle md-toggle "
|
||
type="checkbox"
|
||
id="__nav_3_5"
|
||
|
||
/>
|
||
|
||
<!-- Toggle to expand nested items -->
|
||
|
||
|
||
<label
|
||
class="md-nav__link"
|
||
for="__nav_3_5"
|
||
id="__nav_3_5_label"
|
||
tabindex="0"
|
||
>
|
||
|
||
|
||
<!-- Navigation link icon -->
|
||
|
||
|
||
<!-- Navigation link title -->
|
||
<span class="md-ellipsis">
|
||
System Troubleshooting and Performance Improvements
|
||
</span>
|
||
|
||
<!-- Navigation link status -->
|
||
|
||
|
||
<span class="md-nav__icon md-icon"></span>
|
||
</label>
|
||
|
||
<!-- Toggle to expand nested items with link to index page -->
|
||
|
||
|
||
<!-- Nested navigation -->
|
||
<nav
|
||
class="md-nav"
|
||
data-md-level="2"
|
||
aria-labelledby="__nav_3_5_label"
|
||
aria-expanded="false"
|
||
>
|
||
<label class="md-nav__title" for="__nav_3_5">
|
||
<span class="md-nav__icon md-icon"></span>
|
||
System Troubleshooting and Performance Improvements
|
||
</label>
|
||
<ul class="md-nav__list" data-md-scrollfix>
|
||
|
||
<!-- Nested navigation item -->
|
||
|
||
|
||
|
||
|
||
<!-- Determine classes -->
|
||
|
||
|
||
|
||
<!-- Determine active page for paginated views -->
|
||
|
||
|
||
<!-- Navigation item with nested items -->
|
||
|
||
<li class="md-nav__item">
|
||
<a href="../../../level102/system_troubleshooting_and_performance/introduction/" class="md-nav__link">
|
||
|
||
|
||
<!-- Navigation link icon -->
|
||
|
||
|
||
<!-- Navigation link title -->
|
||
<span class="md-ellipsis">
|
||
Introduction
|
||
</span>
|
||
|
||
<!-- Navigation link status -->
|
||
|
||
|
||
</a>
|
||
</li>
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
<!-- Determine classes -->
|
||
|
||
|
||
|
||
<!-- Determine active page for paginated views -->
|
||
|
||
|
||
<!-- Navigation item with nested items -->
|
||
|
||
<li class="md-nav__item">
|
||
<a href="../../../level102/system_troubleshooting_and_performance/troubleshooting/" class="md-nav__link">
|
||
|
||
|
||
<!-- Navigation link icon -->
|
||
|
||
|
||
<!-- Navigation link title -->
|
||
<span class="md-ellipsis">
|
||
Troubleshooting
|
||
</span>
|
||
|
||
<!-- Navigation link status -->
|
||
|
||
|
||
</a>
|
||
</li>
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
<!-- Determine classes -->
|
||
|
||
|
||
|
||
<!-- Determine active page for paginated views -->
|
||
|
||
|
||
<!-- Navigation item with nested items -->
|
||
|
||
<li class="md-nav__item">
|
||
<a href="../../../level102/system_troubleshooting_and_performance/important-tools/" class="md-nav__link">
|
||
|
||
|
||
<!-- Navigation link icon -->
|
||
|
||
|
||
<!-- Navigation link title -->
|
||
<span class="md-ellipsis">
|
||
Important Tools
|
||
</span>
|
||
|
||
<!-- Navigation link status -->
|
||
|
||
|
||
</a>
|
||
</li>
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
<!-- Determine classes -->
|
||
|
||
|
||
|
||
<!-- Determine active page for paginated views -->
|
||
|
||
|
||
<!-- Navigation item with nested items -->
|
||
|
||
<li class="md-nav__item">
|
||
<a href="../../../level102/system_troubleshooting_and_performance/performance-improvements/" class="md-nav__link">
|
||
|
||
|
||
<!-- Navigation link icon -->
|
||
|
||
|
||
<!-- Navigation link title -->
|
||
<span class="md-ellipsis">
|
||
Performance Improvements
|
||
</span>
|
||
|
||
<!-- Navigation link status -->
|
||
|
||
|
||
</a>
|
||
</li>
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
<!-- Determine classes -->
|
||
|
||
|
||
|
||
<!-- Determine active page for paginated views -->
|
||
|
||
|
||
<!-- Navigation item with nested items -->
|
||
|
||
<li class="md-nav__item">
|
||
<a href="../../../level102/system_troubleshooting_and_performance/troubleshooting-example/" class="md-nav__link">
|
||
|
||
|
||
<!-- Navigation link icon -->
|
||
|
||
|
||
<!-- Navigation link title -->
|
||
<span class="md-ellipsis">
|
||
Troubleshooting Example
|
||
</span>
|
||
|
||
<!-- Navigation link status -->
|
||
|
||
|
||
</a>
|
||
</li>
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
<!-- Determine classes -->
|
||
|
||
|
||
|
||
<!-- Determine active page for paginated views -->
|
||
|
||
|
||
<!-- Navigation item with nested items -->
|
||
|
||
<li class="md-nav__item">
|
||
<a href="../../../level102/system_troubleshooting_and_performance/conclusion/" class="md-nav__link">
|
||
|
||
|
||
<!-- Navigation link icon -->
|
||
|
||
|
||
<!-- Navigation link title -->
|
||
<span class="md-ellipsis">
|
||
Conclusion
|
||
</span>
|
||
|
||
<!-- Navigation link status -->
|
||
|
||
|
||
</a>
|
||
</li>
|
||
|
||
|
||
|
||
|
||
</ul>
|
||
</nav>
|
||
|
||
<!-- Pruned navigation item -->
|
||
|
||
</li>
|
||
|
||
<!-- Currently active page -->
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
<!-- Determine classes -->
|
||
|
||
|
||
|
||
<!-- Determine active page for paginated views -->
|
||
|
||
|
||
<!-- Navigation item with nested items -->
|
||
|
||
|
||
<!-- Determine all nested items that are index pages -->
|
||
|
||
|
||
|
||
<!-- Navigation tabs -->
|
||
|
||
|
||
<!-- Render 1st level items with nested items as sections -->
|
||
|
||
|
||
|
||
<!-- Navigation pruning -->
|
||
|
||
|
||
<!-- Nested navigation item -->
|
||
<li class="md-nav__item md-nav__item--nested">
|
||
|
||
|
||
|
||
<!-- Determine checked and indeterminate state -->
|
||
|
||
|
||
<!-- Active checkbox expands items contained within nested section -->
|
||
<input
|
||
class="md-nav__toggle md-toggle "
|
||
type="checkbox"
|
||
id="__nav_3_6"
|
||
|
||
/>
|
||
|
||
<!-- Toggle to expand nested items -->
|
||
|
||
|
||
<label
|
||
class="md-nav__link"
|
||
for="__nav_3_6"
|
||
id="__nav_3_6_label"
|
||
tabindex="0"
|
||
>
|
||
|
||
|
||
<!-- Navigation link icon -->
|
||
|
||
|
||
<!-- Navigation link title -->
|
||
<span class="md-ellipsis">
|
||
Continuous Integration and Continuous Delivery
|
||
</span>
|
||
|
||
<!-- Navigation link status -->
|
||
|
||
|
||
<span class="md-nav__icon md-icon"></span>
|
||
</label>
|
||
|
||
<!-- Toggle to expand nested items with link to index page -->
|
||
|
||
|
||
<!-- Nested navigation -->
|
||
<nav
|
||
class="md-nav"
|
||
data-md-level="2"
|
||
aria-labelledby="__nav_3_6_label"
|
||
aria-expanded="false"
|
||
>
|
||
<label class="md-nav__title" for="__nav_3_6">
|
||
<span class="md-nav__icon md-icon"></span>
|
||
Continuous Integration and Continuous Delivery
|
||
</label>
|
||
<ul class="md-nav__list" data-md-scrollfix>
|
||
|
||
<!-- Nested navigation item -->
|
||
|
||
|
||
|
||
|
||
<!-- Determine classes -->
|
||
|
||
|
||
|
||
<!-- Determine active page for paginated views -->
|
||
|
||
|
||
<!-- Navigation item with nested items -->
|
||
|
||
<li class="md-nav__item">
|
||
<a href="../../../level102/continuous_integration_and_continuous_delivery/introduction/" class="md-nav__link">
|
||
|
||
|
||
<!-- Navigation link icon -->
|
||
|
||
|
||
<!-- Navigation link title -->
|
||
<span class="md-ellipsis">
|
||
Introduction
|
||
</span>
|
||
|
||
<!-- Navigation link status -->
|
||
|
||
|
||
</a>
|
||
</li>
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
<!-- Determine classes -->
|
||
|
||
|
||
|
||
<!-- Determine active page for paginated views -->
|
||
|
||
|
||
<!-- Navigation item with nested items -->
|
||
|
||
<li class="md-nav__item">
|
||
<a href="../../../level102/continuous_integration_and_continuous_delivery/introduction_to_cicd/" class="md-nav__link">
|
||
|
||
|
||
<!-- Navigation link icon -->
|
||
|
||
|
||
<!-- Navigation link title -->
|
||
<span class="md-ellipsis">
|
||
What is CI/CD?
|
||
</span>
|
||
|
||
<!-- Navigation link status -->
|
||
|
||
|
||
</a>
|
||
</li>
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
<!-- Determine classes -->
|
||
|
||
|
||
|
||
<!-- Determine active page for paginated views -->
|
||
|
||
|
||
<!-- Navigation item with nested items -->
|
||
|
||
<li class="md-nav__item">
|
||
<a href="../../../level102/continuous_integration_and_continuous_delivery/cicd_brief_history/" class="md-nav__link">
|
||
|
||
|
||
<!-- Navigation link icon -->
|
||
|
||
|
||
<!-- Navigation link title -->
|
||
<span class="md-ellipsis">
|
||
Brief History
|
||
</span>
|
||
|
||
<!-- Navigation link status -->
|
||
|
||
|
||
</a>
|
||
</li>
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
<!-- Determine classes -->
|
||
|
||
|
||
|
||
<!-- Determine active page for paginated views -->
|
||
|
||
|
||
<!-- Navigation item with nested items -->
|
||
|
||
<li class="md-nav__item">
|
||
<a href="../../../level102/continuous_integration_and_continuous_delivery/continuous_integration_build_pipeline/" class="md-nav__link">
|
||
|
||
|
||
<!-- Navigation link icon -->
|
||
|
||
|
||
<!-- Navigation link title -->
|
||
<span class="md-ellipsis">
|
||
Continuous Integration
|
||
</span>
|
||
|
||
<!-- Navigation link status -->
|
||
|
||
|
||
</a>
|
||
</li>
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
<!-- Determine classes -->
|
||
|
||
|
||
|
||
<!-- Determine active page for paginated views -->
|
||
|
||
|
||
<!-- Navigation item with nested items -->
|
||
|
||
<li class="md-nav__item">
|
||
<a href="../../../level102/continuous_integration_and_continuous_delivery/continuous_delivery_release_pipeline/" class="md-nav__link">
|
||
|
||
|
||
<!-- Navigation link icon -->
|
||
|
||
|
||
<!-- Navigation link title -->
|
||
<span class="md-ellipsis">
|
||
Continuous Delivery and Deployment
|
||
</span>
|
||
|
||
<!-- Navigation link status -->
|
||
|
||
|
||
</a>
|
||
</li>
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
<!-- Determine classes -->
|
||
|
||
|
||
|
||
<!-- Determine active page for paginated views -->
|
||
|
||
|
||
<!-- Navigation item with nested items -->
|
||
|
||
<li class="md-nav__item">
|
||
<a href="../../../level102/continuous_integration_and_continuous_delivery/jenkins_cicd_pipeline_hands_on_lab/" class="md-nav__link">
|
||
|
||
|
||
<!-- Navigation link icon -->
|
||
|
||
|
||
<!-- Navigation link title -->
|
||
<span class="md-ellipsis">
|
||
CI/CD Pipeline - Hands-on
|
||
</span>
|
||
|
||
<!-- Navigation link status -->
|
||
|
||
|
||
</a>
|
||
</li>
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
<!-- Determine classes -->
|
||
|
||
|
||
|
||
<!-- Determine active page for paginated views -->
|
||
|
||
|
||
<!-- Navigation item with nested items -->
|
||
|
||
<li class="md-nav__item">
|
||
<a href="../../../level102/continuous_integration_and_continuous_delivery/conclusion/" class="md-nav__link">
|
||
|
||
|
||
<!-- Navigation link icon -->
|
||
|
||
|
||
<!-- Navigation link title -->
|
||
<span class="md-ellipsis">
|
||
Conclusion
|
||
</span>
|
||
|
||
<!-- Navigation link status -->
|
||
|
||
|
||
</a>
|
||
</li>
|
||
|
||
|
||
|
||
|
||
</ul>
|
||
</nav>
|
||
|
||
<!-- Pruned navigation item -->
|
||
|
||
</li>
|
||
|
||
<!-- Currently active page -->
|
||
|
||
|
||
|
||
|
||
</ul>
|
||
</nav>
|
||
|
||
<!-- Pruned navigation item -->
|
||
|
||
</li>
|
||
|
||
<!-- Currently active page -->
|
||
|
||
|
||
|
||
|
||
|
||
|
||
<!-- Determine classes -->
|
||
|
||
|
||
|
||
<!-- Determine active page for paginated views -->
|
||
|
||
|
||
<!-- Navigation item with nested items -->
|
||
|
||
<li class="md-nav__item">
|
||
<a href="../../../CONTRIBUTING/" class="md-nav__link">
|
||
|
||
|
||
<!-- Navigation link icon -->
|
||
|
||
|
||
<!-- Navigation link title -->
|
||
<span class="md-ellipsis">
|
||
Contribute
|
||
</span>
|
||
|
||
<!-- Navigation link status -->
|
||
|
||
|
||
</a>
|
||
</li>
|
||
|
||
|
||
|
||
|
||
|
||
|
||
<!-- Determine classes -->
|
||
|
||
|
||
|
||
<!-- Determine active page for paginated views -->
|
||
|
||
|
||
<!-- Navigation item with nested items -->
|
||
|
||
<li class="md-nav__item">
|
||
<a href="../../../CODE_OF_CONDUCT/" class="md-nav__link">
|
||
|
||
|
||
<!-- Navigation link icon -->
|
||
|
||
|
||
<!-- Navigation link title -->
|
||
<span class="md-ellipsis">
|
||
Code of Conduct
|
||
</span>
|
||
|
||
<!-- Navigation link status -->
|
||
|
||
|
||
</a>
|
||
</li>
|
||
|
||
|
||
|
||
|
||
|
||
|
||
<!-- Determine classes -->
|
||
|
||
|
||
|
||
<!-- Determine active page for paginated views -->
|
||
|
||
|
||
<!-- Navigation item with nested items -->
|
||
|
||
<li class="md-nav__item">
|
||
<a href="../../../sre_community/" class="md-nav__link">
|
||
|
||
|
||
<!-- Navigation link icon -->
|
||
|
||
|
||
<!-- Navigation link title -->
|
||
<span class="md-ellipsis">
|
||
SRE Community
|
||
</span>
|
||
|
||
<!-- Navigation link status -->
|
||
|
||
|
||
</a>
|
||
</li>
|
||
|
||
|
||
|
||
</ul>
|
||
</nav>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
|
||
|
||
|
||
<div class="md-sidebar md-sidebar--secondary" data-md-component="sidebar" data-md-type="toc" >
|
||
<div class="md-sidebar__scrollwrap">
|
||
<div class="md-sidebar__inner">
|
||
|
||
|
||
<nav class="md-nav md-nav--secondary" aria-label="Table of contents">
|
||
|
||
|
||
|
||
|
||
|
||
|
||
<label class="md-nav__title" for="__toc">
|
||
<span class="md-nav__icon md-icon"></span>
|
||
Table of contents
|
||
</label>
|
||
<ul class="md-nav__list" data-md-component="toc" data-md-scrollfix>
|
||
|
||
<li class="md-nav__item">
|
||
<a href="#cap-theorem" class="md-nav__link">
|
||
<span class="md-ellipsis">
|
||
CAP Theorem
|
||
</span>
|
||
</a>
|
||
|
||
</li>
|
||
|
||
<li class="md-nav__item">
|
||
<a href="#versioning-of-data-in-distributed-systems" class="md-nav__link">
|
||
<span class="md-ellipsis">
|
||
Versioning of Data in distributed systems
|
||
</span>
|
||
</a>
|
||
|
||
</li>
|
||
|
||
<li class="md-nav__item">
|
||
<a href="#partitioning" class="md-nav__link">
|
||
<span class="md-ellipsis">
|
||
Partitioning
|
||
</span>
|
||
</a>
|
||
|
||
</li>
|
||
|
||
<li class="md-nav__item">
|
||
<a href="#hashing" class="md-nav__link">
|
||
<span class="md-ellipsis">
|
||
Hashing
|
||
</span>
|
||
</a>
|
||
|
||
<nav class="md-nav" aria-label="Hashing">
|
||
<ul class="md-nav__list">
|
||
|
||
<li class="md-nav__item">
|
||
<a href="#consistent-hashing" class="md-nav__link">
|
||
<span class="md-ellipsis">
|
||
Consistent Hashing
|
||
</span>
|
||
</a>
|
||
|
||
</li>
|
||
|
||
</ul>
|
||
</nav>
|
||
|
||
</li>
|
||
|
||
<li class="md-nav__item">
|
||
<a href="#quorum" class="md-nav__link">
|
||
<span class="md-ellipsis">
|
||
Quorum
|
||
</span>
|
||
</a>
|
||
|
||
</li>
|
||
|
||
</ul>
|
||
|
||
</nav>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
|
||
|
||
|
||
<div class="md-content" data-md-component="content">
|
||
<article class="md-content__inner md-typeset">
|
||
|
||
|
||
|
||
|
||
<h1 id="key-concepts">Key Concepts</h1>
|
||
<p>Lets looks at some of the key concepts when we talk about NoSQL or distributed systems.</p>
|
||
<h3 id="cap-theorem">CAP Theorem</h3>
|
||
<p>In a keynote titled “<a href="https://sites.cs.ucsb.edu/~rich/class/cs293b-cloud/papers/Brewer_podc_keynote_2000.pdf">Towards Robust Distributed Systems</a>” at ACM’s PODC symposium in 2000, Eric Brewer came up with the so-called CAP-theorem which is widely adopted today by large web companies as well as in the NoSQL community. The CAP acronym stands for <strong>C</strong>onsistency, <strong>A</strong>vailability & <strong>P</strong>artition Tolerance.</p>
|
||
<ul>
|
||
<li>
|
||
<p><strong>Consistency</strong></p>
|
||
<p>It refers to how consistent a system is after an execution. A distributed system is called consistent when a write made by a source is available for all readers of that shared data. Different NoSQL systems support different levels of consistency.</p>
|
||
</li>
|
||
<li>
|
||
<p><strong>Availability</strong></p>
|
||
<p>It refers to how a system responds to loss of functionality of different systems due to hardware and software failures. A high availability implies that a system is still available to handle operations (reads and writes) when a certain part of the system is down due to a failure or upgrade.</p>
|
||
</li>
|
||
<li>
|
||
<p><strong>Partition Tolerance</strong></p>
|
||
<p>It is the ability of the system to continue operations in the event of a network partition. A network partition occurs when a failure causes two or more islands of networks where the systems can’t talk to each other across the islands temporarily or permanently. </p>
|
||
</li>
|
||
</ul>
|
||
<p>Brewer alleges that one can at most choose two of these three characteristics in a shared-data system. The CAP-theorem states that a choice can only be made for two options out of consistency, availability and partition tolerance. A growing number of use cases in large scale applications tend to value reliability implying that availability & redundancy are more valuable than consistency. As a result these systems struggle to meet ACID properties. They attain this by loosening on the consistency requirement, i.e Eventual Consistency. </p>
|
||
<p><strong>Eventual Consistency</strong> means that all readers will see writes, as time goes on: “In a steady state, the system will eventually return the last written value”. Clients therefore may face an inconsistent state of data as updates are in progress. For instance, in a replicated database updates may go to one node which replicates the latest version to all other nodes that contain a replica of the modified dataset so that the replica nodes eventually will have the latest version. </p>
|
||
<p>NoSQL systems support different levels of eventual consistency models. For example:</p>
|
||
<ul>
|
||
<li>
|
||
<p><strong>Read Your Own Writes Consistency</strong></p>
|
||
<p>Clients will see their updates immediately after they are written. The reads can hit nodes other than the one where it was written. However, they might not see updates by other clients immediately.</p>
|
||
</li>
|
||
<li>
|
||
<p><strong>Session Consistency</strong></p>
|
||
<p>Clients will see the updates to their data within a session scope. This generally indicates that reads & writes occur on the same server. Other clients using the same nodes will receive the same updates.</p>
|
||
</li>
|
||
<li>
|
||
<p><strong>Casual Consistency</strong></p>
|
||
<p>A system provides causal consistency if the following condition holds: write operations that are related by potential causality are seen by each process of the system in order. Different processes may observe concurrent writes in different orders </p>
|
||
</li>
|
||
</ul>
|
||
<p>Eventual consistency is useful if concurrent updates of the same partitions of data are unlikely and if clients do not immediately depend on reading updates issued by themselves or by other clients.</p>
|
||
<p>Depending on what consistency model was chosen for the system (or parts of it), determines where the requests are routed, ex: replicas. </p>
|
||
<p><strong>CAP alternatives illustration</strong></p>
|
||
<table>
|
||
<tr>
|
||
<td>Choice
|
||
</td>
|
||
<td>Traits
|
||
</td>
|
||
<td>Examples
|
||
</td>
|
||
</tr>
|
||
<tr>
|
||
<td>Consistency + Availability
|
||
<p>
|
||
(Forfeit Partitions)
|
||
</td>
|
||
<td>2-phase commits
|
||
<p>
|
||
Cache invalidation protocols
|
||
</td>
|
||
<td>Single-site databases Cluster databases
|
||
<p>
|
||
LDAP
|
||
<p>
|
||
xFS file system
|
||
</td>
|
||
</tr>
|
||
<tr>
|
||
<td>Consistency + Partition tolerance
|
||
<p>
|
||
(Forfeit Availability)
|
||
</td>
|
||
<td>Pessimistic locking
|
||
<p>
|
||
Make minority partitions unavailable
|
||
</td>
|
||
<td>Distributed databases Distributed locking Majority protocols
|
||
</td>
|
||
</tr>
|
||
<tr>
|
||
<td>Availability + Partition tolerance (Forfeit Consistency)
|
||
</td>
|
||
<td>expirations/leases
|
||
<p>
|
||
conflict resolution optimistic
|
||
</td>
|
||
<td>DNS
|
||
<p>
|
||
Web caching
|
||
</td>
|
||
</tr>
|
||
</table>
|
||
|
||
<h3 id="versioning-of-data-in-distributed-systems">Versioning of Data in distributed systems</h3>
|
||
<p>When data is distributed across nodes, it can be modified on different nodes at the same time (assuming strict consistency is enforced). Questions arise on conflict resolution for concurrent updates. Some of the popular conflict resolution mechanism are</p>
|
||
<ul>
|
||
<li>
|
||
<p><strong>Timestamps</strong></p>
|
||
<p>This is the most obvious solution. You sort updates based on chronological order and choose the latest update. However, this relies on clock synchronization across different parts of the infrastructure. This gets even more complicated when parts of systems are spread across different geographic locations. </p>
|
||
</li>
|
||
<li>
|
||
<p><strong>Optimistic Locking</strong></p>
|
||
<p>You associate a unique value like a clock or counter with every data update. When a client wants to update data, it has to specify which version of data needs to be updated. This would mean you need to keep track of history of the data versions. </p>
|
||
</li>
|
||
<li>
|
||
<p><strong>Vector Clocks</strong></p>
|
||
<p>A vector clock is defined as a tuple of clock values from each node. In a distributed environment, each node maintains a tuple of such clock values which represent the state of the nodes itself and its peers/replicas. A clock value may be real timestamps derived from local clock or version no. </p>
|
||
</li>
|
||
</ul>
|
||
<p id="gdcalert1" ><span style="color: red; font-weight: bold" images/vector_clocks.png> </span></p>
|
||
|
||
<p><img alt="alt_text" src="../images/vector_clocks.png" title="Vector Clocks" /></p>
|
||
<p align="center"><span style="text-decoration:underline; font-weight:bold;">Vector clocks illustration</span></p>
|
||
|
||
<p>Vector clocks have the following advantages over other conflict resolution mechanism:</p>
|
||
<ol>
|
||
<li>No dependency on synchronized clocks</li>
|
||
<li>No total ordering of revision nos required for casual reasoning </li>
|
||
</ol>
|
||
<p>No need to store and maintain multiple versions of the data on different nodes.** **</p>
|
||
<h3 id="partitioning">Partitioning</h3>
|
||
<p>When the amount of data crosses the capacity of a single node, we need to think of splitting data, creating replicas for load balancing & disaster recovery. Depending on how dynamic the infrastructure is, we have a few approaches that we can take.</p>
|
||
<ol>
|
||
<li>
|
||
<p><strong>Memory cached</strong></p>
|
||
<p>These are partitioned in-memory databases that are primarily used for transient data. These databases are generally used as a front for traditional RDBMS. Most frequently used data is replicated from a RDBMS into a memory database to facilitate fast queries and to take the load off from backend DB’s. A very common example is Memcached or Couchbase. </p>
|
||
</li>
|
||
<li>
|
||
<p><strong>Clustering</strong></p>
|
||
<p>Traditional cluster mechanisms abstract away the cluster topology from clients. A client need not know where the actual data is residing and which node it is talking to. Clustering is very commonly used in traditional RDBMS where it can help scaling the persistent layer to a certain extent. </p>
|
||
</li>
|
||
<li>
|
||
<p><strong>Separating reads from writes</strong></p>
|
||
<p>In this method, you will have multiple replicas hosting the same data. The incoming writes are typically sent to a single node (Leader) or multiple nodes (multi-Leader), while the rest of the replicas (Follower) handle reads requests. The leader replicates writes asynchronously to all followers. However, the write lag can’t be completely avoided. Sometimes a leader can crash before it replicates all the data to a follower. When this happens, a follower with the most consistent data can be turned into a leader. As you can realize now, it is hard to enforce full consistency in this model. You also need to consider the ratio of read vs write traffic. This model won’t make sense when writes are higher than reads. The replication methods can also vary widely. Some systems do a complete transfer of state periodically, while others use a delta state transfer approach. You could also transfer the state by transferring the operations in order. The followers can then apply the same operations as the leader to catch up.</p>
|
||
</li>
|
||
<li>
|
||
<p><strong>Sharding</strong></p>
|
||
<p>Sharing refers to dividing data in such a way that data is distributed evenly (both in terms of storage & processing power) across a cluster of nodes. It can also imply data locality, which means similar & related data is stored together to facilitate faster access. A shard in turn can be further replicated to meet load balancing or disaster recovery requirements. A single shard replica might take in all writes (single leader) or multiple replicas can take writes (multi-leader). Reads can be distributed across multiple replicas. Since data is now distributed across multiple nodes, clients should be able to consistently figure out where data is hosted. We will look at some of the common techniques below. The downside of sharding is that joins between shards is not possible. So an upstream/downstream application has to aggregate the results from multiple shards.</p>
|
||
</li>
|
||
</ol>
|
||
<p id="gdcalert2" ><span style="color: red; font-weight: bold" images/database_sharding.png></span></p>
|
||
|
||
<p><img alt="alt_text" src="../images/database_sharding.png" title="Sharding" /></p>
|
||
<p align="center"><span style="text-decoration:underline; font-weight:bold;">Sharding example</span> </p>
|
||
|
||
<h3 id="hashing">Hashing</h3>
|
||
<p>A hash function is a function that maps one piece of data—typically describing some kind of object, often of arbitrary size—to another piece of data, typically an integer, known as <em>hash code</em>, or simply <em>hash</em>. In a partitioned database, it is important to consistently map a key to a server/replica. </p>
|
||
<p>For ex: you can use a very simple hash as a modulo function.</p>
|
||
<pre><code>_p = k mod n_
|
||
</code></pre>
|
||
<p>Where </p>
|
||
<pre><code>p -> partition,
|
||
|
||
|
||
k -> primary key
|
||
|
||
|
||
n -> no of nodes
|
||
</code></pre>
|
||
<p>The downside of this simple hash is that, whenever the cluster topology changes, the data distribution also changes. When you are dealing with memory caches, it will be easy to distribute partitions around. Whenever a node joins/leaves a topology, partitions can reorder themselves, a cache miss can be re-populated from backend DB. However, when you look at persistent data, it is not possible as the new node doesn’t have the data needed to serve it. This brings us to consistent hashing.</p>
|
||
<h4 id="consistent-hashing">Consistent Hashing</h4>
|
||
<p>Consistent hashing is a distributed hashing scheme that operates independently of the number of servers or objects in a distributed <em>hash table</em> by assigning them a position on an abstract circle, or <em>hash ring</em>. This allows servers and objects to scale without affecting the overall system.</p>
|
||
<p>Say that our hash function <em>h</em>() generates a 32-bit integer. Then, to determine to which server we will send a key <em>k</em>, we find the server <em>s</em> whose hash <em>h</em>(<em>s</em>) is the smallest integer that is larger than <em>h</em>(<em>k</em>). To make the process simpler, we assume the table is circular, which means that if we cannot find a server with a hash larger than <em>h</em>(<em>k</em>), we wrap around and start looking from the beginning of the array.</p>
|
||
<p id="gdcalert3" ><span style="color: red; font-weight: bold" images/consistent_hashing.png> </span></p>
|
||
|
||
<p><img alt="alt_text" src="../images/consistent_hashing.png" title="Consistent Hashing" /></p>
|
||
<p align="center"><span style="text-decoration:underline; font-weight:bold;">Consistent hashing illustration</span></p>
|
||
|
||
<p>In consistent hashing, when a server is removed or added, then only the keys from that server are relocated. For example, if server S<sub>3</sub> is removed then, all keys from server S<sub>3</sub> will be moved to server S<sub>4</sub> but keys stored on server S<sub>4</sub> and S<sub>2</sub> are not relocated. But there is one problem, when server S<sub>3</sub> is removed then keys from S<sub>3</sub> are not equally distributed among remaining servers S<sub>4</sub> and S<sub>2</sub>. They are only assigned to server S<sub>4</sub> which increases the load on server S<sub>4</sub>.</p>
|
||
<p>To evenly distribute the load among servers when a server is added or removed, it creates a fixed number of replicas (known as virtual nodes) of each server and distributes it along the circle. So instead of server labels S<sub>1</sub>, S<sub>2</sub> and S<sub>3</sub>, we will have S<sub>10</sub>,S<sub>11</sub>,…,S<sub>19</sub>, S<sub>20</sub>,S<sub>21</sub>,…,S<sub>29</sub> and S<sub>30</sub>,S<sub>31</sub>,…,S<sub>39</sub>. The factor for a number of replicas is also known as <em>weight</em>, depending on the situation.</p>
|
||
<p>All keys which are mapped to replicas S<sub>ij</sub> are stored on server S<sub>i</sub>. To find a key, we do the same thing, find the position of the key on the circle and then move forward until you find a server replica. If the server replica is S<sub>ij</sub>, then the key is stored in server S<sub>i</sub>.</p>
|
||
<p>Suppose server S<sub>3</sub> is removed, then all S<sub>3</sub> replicas with labels S<sub>30</sub>,S<sub>31</sub>,…,S<sub>39</sub> must be removed. Now, the objects keys adjacent to S<sub>3X</sub> labels will be automatically re-assigned to S<sub>1X</sub>, S<sub>2X</sub> and S<sub>4X</sub>. All keys originally assigned to S<sub>1</sub>, S<sub>2</sub> & S<sub>4</sub> will not be moved. </p>
|
||
<p>Similar things happen if we add a server. Suppose we want to add a server S<sub>5</sub> as a replacement of S<sub>3</sub>, then we need to add labels S<sub>50</sub>,S<sub>51</sub>,…,S<sub>59</sub>. In the ideal case, one-fourth of keys from S<sub>1</sub>, S<sub>2</sub> and S<sub>4</sub> will be reassigned to S<sub>5</sub>.</p>
|
||
<p>When applied to persistent storages, further issues arise: if a node has left the scene, data stored on this node becomes unavailable, unless it has been replicated to other nodes before; in the opposite case of a new node joining the others, adjacent nodes are no longer responsible for some pieces of data which they still store but not get asked for anymore as the corresponding objects are no longer hashed to them by requesting clients. In order to address this issue, a replication factor (r) can be introduced. </p>
|
||
<p>Introducing replicas in a partitioning scheme—besides reliability benefits—also makes it possible to spread workload for read requests that can go to any physical node responsible for a requested piece of data. Scalability doesn’t work if the clients have to decide between multiple versions of the dataset, because they need to read from a quorum of servers which in turn reduces the efficiency of load balancing. </p>
|
||
<h3 id="quorum">Quorum</h3>
|
||
<p>Quorum is the minimum number of nodes in a cluster that must be online and be able to communicate with each other. If any additional node failure occurs beyond this threshold, the cluster will stop running.</p>
|
||
<p>To attain a quorum, you need a majority of the nodes. Commonly, it is (N/2 + 1), where <em>N</em> is the total no of nodes in the system. For example, </p>
|
||
<ul>
|
||
<li>
|
||
<p>In a 3-node cluster, you need 2 nodes for a majority.</p>
|
||
</li>
|
||
<li>
|
||
<p>In a 5-node cluster, you need 3 nodes for a majority.</p>
|
||
</li>
|
||
<li>
|
||
<p>In a 6-node cluster, you need 4 nodes for a majority. </p>
|
||
</li>
|
||
</ul>
|
||
<p id="gdcalert4" ><span style="color: red; font-weight: bold" images/Quorum.png > </span></p>
|
||
|
||
<p><img alt="alt_text" src="../images/Quorum.png" title="image_tooltip" /></p>
|
||
<p align="center"> <span style="text-decoration:underline; font-weight:bold;">Quorum example</span> </p>
|
||
|
||
<p>Network problems can cause communication failures among cluster nodes. One set of nodes might be able to communicate together across a functioning part of a network but not be able to communicate with a different set of nodes in another part of the network. This is known as split brain in cluster or cluster partitioning.</p>
|
||
<p>Now the partition which has quorum is allowed to continue running the application. The other partitions are removed from the cluster.</p>
|
||
<p>Eg: In a 5-node cluster, consider what happens if nodes 1, 2, and 3 can communicate with each other but not with nodes 4 and 5. Nodes 1, 2, and 3 constitute a majority, and they continue running as a cluster. Nodes 4 and 5, being a minority, stop running as a cluster. If node 3 loses communication with other nodes, all nodes stop running as a cluster. However, all functioning nodes will continue to listen for communication, so that when the network begins working again, the cluster can form and begin to run.</p>
|
||
<p>Below diagram demonstrates Quorum selection on a cluster partitioned into two sets.</p>
|
||
<p id="gdcalert5" ><span style="color: red; font-weight: bold" images/cluster_quorum.png> </span></p>
|
||
|
||
<p><img alt="alt_text" src="../images/cluster_quorum.png" title="image_tooltip" /></p>
|
||
<p><strong><p align="center"><span style="text-decoration:underline; font-weight:bold;">Cluster Quorum example</span></p></strong></p>
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
</article>
|
||
</div>
|
||
|
||
|
||
<script>var target=document.getElementById(location.hash.slice(1));target&&target.name&&(target.checked=target.name.startsWith("__tabbed_"))</script>
|
||
</div>
|
||
|
||
</main>
|
||
|
||
<footer class="md-footer">
|
||
|
||
<div class="md-footer-meta md-typeset">
|
||
<div class="md-footer-meta__inner md-grid">
|
||
<div class="md-copyright">
|
||
|
||
<div class="md-copyright__highlight">
|
||
Copyright 2020 LinkedIn Corporation. All Rights Reserved. Licensed under the Creative Commons Attribution 4.0 International Public License
|
||
</div>
|
||
|
||
|
||
Made with
|
||
<a href="https://squidfunk.github.io/mkdocs-material/" target="_blank" rel="noopener">
|
||
Material for MkDocs
|
||
</a>
|
||
|
||
</div>
|
||
|
||
<div class="md-social">
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
<a href="https://github.com/linkedin/school-of-sre" target="_blank" rel="noopener" title="github.com" class="md-social__link">
|
||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 496 512"><!--! Font Awesome Free 6.5.1 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2023 Fonticons, Inc.--><path d="M165.9 397.4c0 2-2.3 3.6-5.2 3.6-3.3.3-5.6-1.3-5.6-3.6 0-2 2.3-3.6 5.2-3.6 3-.3 5.6 1.3 5.6 3.6zm-31.1-4.5c-.7 2 1.3 4.3 4.3 4.9 2.6 1 5.6 0 6.2-2s-1.3-4.3-4.3-5.2c-2.6-.7-5.5.3-6.2 2.3zm44.2-1.7c-2.9.7-4.9 2.6-4.6 4.9.3 2 2.9 3.3 5.9 2.6 2.9-.7 4.9-2.6 4.6-4.6-.3-1.9-3-3.2-5.9-2.9zM244.8 8C106.1 8 0 113.3 0 252c0 110.9 69.8 205.8 169.5 239.2 12.8 2.3 17.3-5.6 17.3-12.1 0-6.2-.3-40.4-.3-61.4 0 0-70 15-84.7-29.8 0 0-11.4-29.1-27.8-36.6 0 0-22.9-15.7 1.6-15.4 0 0 24.9 2 38.6 25.8 21.9 38.6 58.6 27.5 72.9 20.9 2.3-16 8.8-27.1 16-33.7-55.9-6.2-112.3-14.3-112.3-110.5 0-27.5 7.6-41.3 23.6-58.9-2.6-6.5-11.1-33.3 2.6-67.9 20.9-6.5 69 27 69 27 20-5.6 41.5-8.5 62.8-8.5s42.8 2.9 62.8 8.5c0 0 48.1-33.6 69-27 13.7 34.7 5.2 61.4 2.6 67.9 16 17.7 25.8 31.5 25.8 58.9 0 96.5-58.9 104.2-114.8 110.5 9.2 7.9 17 22.9 17 46.4 0 33.7-.3 75.4-.3 83.6 0 6.5 4.6 14.4 17.3 12.1C428.2 457.8 496 362.9 496 252 496 113.3 383.5 8 244.8 8zM97.2 352.9c-1.3 1-1 3.3.7 5.2 1.6 1.6 3.9 2.3 5.2 1 1.3-1 1-3.3-.7-5.2-1.6-1.6-3.9-2.3-5.2-1zm-10.8-8.1c-.7 1.3.3 2.9 2.3 3.9 1.6 1 3.6.7 4.3-.7.7-1.3-.3-2.9-2.3-3.9-2-.6-3.6-.3-4.3.7zm32.4 35.6c-1.6 1.3-1 4.3 1.3 6.2 2.3 2.3 5.2 2.6 6.5 1 1.3-1.3.7-4.3-1.3-6.2-2.2-2.3-5.2-2.6-6.5-1zm-11.4-14.7c-1.6 1-1.6 3.6 0 5.9 1.6 2.3 4.3 3.3 5.6 2.3 1.6-1.3 1.6-3.9 0-6.2-1.4-2.3-4-3.3-5.6-2z"/></svg>
|
||
</a>
|
||
|
||
</div>
|
||
|
||
</div>
|
||
</div>
|
||
</footer>
|
||
|
||
</div>
|
||
<div class="md-dialog" data-md-component="dialog">
|
||
<div class="md-dialog__inner md-typeset"></div>
|
||
</div>
|
||
|
||
|
||
<script id="__config" type="application/json">{"base": "../../..", "features": ["navigation.sections"], "search": "../../../assets/javascripts/workers/search.b8dbb3d2.min.js", "translations": {"clipboard.copied": "Copied to clipboard", "clipboard.copy": "Copy to clipboard", "search.result.more.one": "1 more on this page", "search.result.more.other": "# more on this page", "search.result.none": "No matching documents", "search.result.one": "1 matching document", "search.result.other": "# matching documents", "search.result.placeholder": "Type to start searching", "search.result.term.missing": "Missing", "select.version": "Select version"}}</script>
|
||
|
||
|
||
<script src="../../../assets/javascripts/bundle.c8d2eff1.min.js"></script>
|
||
|
||
|
||
</body>
|
||
</html> |