CINXE.COM
GitHub - adelnobel/awesome-scalability at patch-1
<!DOCTYPE html> <html lang="en" data-color-mode="auto" data-light-theme="light" data-dark-theme="dark" data-a11y-animated-images="system" data-a11y-link-underlines="true" > <head> <meta charset="utf-8"> <link rel="dns-prefetch" href="https://github.githubassets.com"> <link rel="dns-prefetch" href="https://avatars.githubusercontent.com"> <link rel="dns-prefetch" href="https://github-cloud.s3.amazonaws.com"> <link rel="dns-prefetch" href="https://user-images.githubusercontent.com/"> <link rel="preconnect" href="https://github.githubassets.com" crossorigin> <link rel="preconnect" href="https://avatars.githubusercontent.com"> <link crossorigin="anonymous" media="all" rel="stylesheet" href="https://github.githubassets.com/assets/light-3e154969b9f9.css" /><link crossorigin="anonymous" media="all" rel="stylesheet" href="https://github.githubassets.com/assets/dark-9c5b7a476542.css" /><link data-color-theme="dark_dimmed" crossorigin="anonymous" media="all" rel="stylesheet" data-href="https://github.githubassets.com/assets/dark_dimmed-afda8eb0fb33.css" /><link data-color-theme="dark_high_contrast" crossorigin="anonymous" media="all" rel="stylesheet" data-href="https://github.githubassets.com/assets/dark_high_contrast-2494e44ccdc5.css" /><link data-color-theme="dark_colorblind" crossorigin="anonymous" media="all" rel="stylesheet" data-href="https://github.githubassets.com/assets/dark_colorblind-56fff47acadc.css" /><link data-color-theme="light_colorblind" crossorigin="anonymous" media="all" rel="stylesheet" data-href="https://github.githubassets.com/assets/light_colorblind-71cd4cc132ec.css" /><link data-color-theme="light_high_contrast" crossorigin="anonymous" media="all" rel="stylesheet" data-href="https://github.githubassets.com/assets/light_high_contrast-fd5499848985.css" /><link data-color-theme="light_tritanopia" crossorigin="anonymous" media="all" rel="stylesheet" data-href="https://github.githubassets.com/assets/light_tritanopia-31d17ba3e139.css" /><link data-color-theme="dark_tritanopia" crossorigin="anonymous" media="all" rel="stylesheet" data-href="https://github.githubassets.com/assets/dark_tritanopia-68d6b2c79663.css" /> <link crossorigin="anonymous" media="all" rel="stylesheet" href="https://github.githubassets.com/assets/primer-primitives-4cf0d59ab51a.css" /> <link crossorigin="anonymous" media="all" rel="stylesheet" href="https://github.githubassets.com/assets/primer-af846850481e.css" /> <link crossorigin="anonymous" media="all" rel="stylesheet" href="https://github.githubassets.com/assets/global-8b10f05a77e6.css" /> <link crossorigin="anonymous" media="all" rel="stylesheet" href="https://github.githubassets.com/assets/github-d3b66f11d613.css" /> <link crossorigin="anonymous" media="all" rel="stylesheet" href="https://github.githubassets.com/assets/repository-9c77ed90200e.css" /> <link crossorigin="anonymous" media="all" rel="stylesheet" href="https://github.githubassets.com/assets/code-a0610fd00b47.css" /> <script type="application/json" id="client-env">{"locale":"en","featureFlags":["copilot_new_references_ui","copilot_beta_features_opt_in","copilot_chat_static_thread_suggestions","copilot_conversational_ux_history_refs","copilot_implicit_context","copilot_smell_icebreaker_ux","experimentation_azure_variant_endpoint","failbot_handle_non_errors","geojson_azure_maps","ghost_pilot_confidence_truncation_25","ghost_pilot_confidence_truncation_40","hovercard_accessibility","issues_react_new_timeline","issues_react_avatar_refactor","issues_react_remove_placeholders","issues_react_blur_item_picker_on_close","marketing_pages_search_explore_provider","react_keyboard_shortcuts_dialog","remove_child_patch","sample_network_conn_type","site_metered_billing_update","issues_react_first_time_contribution_banner","ui_commands_respect_modals","lifecycle_label_name_updates"]}</script> <script crossorigin="anonymous" defer="defer" type="application/javascript" src="https://github.githubassets.com/assets/wp-runtime-0c166a63ca9a.js"></script> <script crossorigin="anonymous" defer="defer" type="application/javascript" src="https://github.githubassets.com/assets/vendors-node_modules_dompurify_dist_purify_js-b73fdff77a4e.js"></script> <script crossorigin="anonymous" defer="defer" type="application/javascript" src="https://github.githubassets.com/assets/vendors-node_modules_oddbird_popover-polyfill_dist_popover_js-aff936e590ed.js"></script> <script crossorigin="anonymous" defer="defer" type="application/javascript" src="https://github.githubassets.com/assets/vendors-node_modules_github_arianotify-polyfill_ariaNotify-polyfill_js-node_modules_github_mi-247092-740e4ddd559d.js"></script> <script crossorigin="anonymous" defer="defer" type="application/javascript" src="https://github.githubassets.com/assets/ui_packages_failbot_failbot_ts-93b6a0551aa9.js"></script> <script crossorigin="anonymous" defer="defer" type="application/javascript" src="https://github.githubassets.com/assets/environment-cd35650c2e9c.js"></script> <script crossorigin="anonymous" defer="defer" type="application/javascript" src="https://github.githubassets.com/assets/vendors-node_modules_primer_behaviors_dist_esm_index_mjs-4aa4b0e95669.js"></script> <script crossorigin="anonymous" defer="defer" type="application/javascript" src="https://github.githubassets.com/assets/vendors-node_modules_github_selector-observer_dist_index_esm_js-f690fd9ae3d5.js"></script> <script crossorigin="anonymous" defer="defer" type="application/javascript" src="https://github.githubassets.com/assets/vendors-node_modules_github_relative-time-element_dist_index_js-6d3967acd51c.js"></script> <script crossorigin="anonymous" defer="defer" type="application/javascript" src="https://github.githubassets.com/assets/vendors-node_modules_github_combobox-nav_dist_index_js-node_modules_github_g-emoji-element_di-6ce195-53781cbc550f.js"></script> <script crossorigin="anonymous" defer="defer" type="application/javascript" src="https://github.githubassets.com/assets/vendors-node_modules_github_auto-complete-element_dist_index_js-node_modules_github_catalyst_-6afc16-3cdfa69a0406.js"></script> <script crossorigin="anonymous" defer="defer" type="application/javascript" src="https://github.githubassets.com/assets/vendors-node_modules_github_text-expander-element_dist_index_js-f5498b8d4e5d.js"></script> <script crossorigin="anonymous" defer="defer" type="application/javascript" src="https://github.githubassets.com/assets/vendors-node_modules_github_filter-input-element_dist_index_js-node_modules_github_remote-inp-b5f1d7-492b5042c841.js"></script> <script crossorigin="anonymous" defer="defer" type="application/javascript" src="https://github.githubassets.com/assets/vendors-node_modules_github_mini-throttle_dist_index_js-node_modules_stacktrace-parser_dist_s-1f651a-1e3d784c897c.js"></script> <script crossorigin="anonymous" defer="defer" type="application/javascript" src="https://github.githubassets.com/assets/vendors-node_modules_github_file-attachment-element_dist_index_js-node_modules_primer_view-co-7671f1-dc6cac136d88.js"></script> <script crossorigin="anonymous" defer="defer" type="application/javascript" src="https://github.githubassets.com/assets/github-elements-71486356f507.js"></script> <script crossorigin="anonymous" defer="defer" type="application/javascript" src="https://github.githubassets.com/assets/element-registry-e3ab8405ef80.js"></script> <script crossorigin="anonymous" defer="defer" type="application/javascript" src="https://github.githubassets.com/assets/vendors-node_modules_braintree_browser-detection_dist_browser-detection_js-node_modules_githu-bb80ec-634de60bacfa.js"></script> <script crossorigin="anonymous" defer="defer" type="application/javascript" src="https://github.githubassets.com/assets/vendors-node_modules_lit-html_lit-html_js-ce7225a304c5.js"></script> <script crossorigin="anonymous" defer="defer" type="application/javascript" src="https://github.githubassets.com/assets/vendors-node_modules_github_hydro-analytics-client_dist_analytics-client_js-node_modules_gith-f3aee1-e6893db9c19e.js"></script> <script crossorigin="anonymous" defer="defer" type="application/javascript" src="https://github.githubassets.com/assets/vendors-node_modules_github_mini-throttle_dist_index_js-node_modules_morphdom_dist_morphdom-e-7c534c-f8a5485c982a.js"></script> <script crossorigin="anonymous" defer="defer" type="application/javascript" src="https://github.githubassets.com/assets/vendors-node_modules_github_turbo_dist_turbo_es2017-esm_js-858e043fcf76.js"></script> <script crossorigin="anonymous" defer="defer" type="application/javascript" src="https://github.githubassets.com/assets/vendors-node_modules_github_remote-form_dist_index_js-node_modules_delegated-events_dist_inde-893f9f-6cf3320416b8.js"></script> <script crossorigin="anonymous" defer="defer" type="application/javascript" src="https://github.githubassets.com/assets/vendors-node_modules_scroll-anchoring_dist_scroll-anchoring_esm_js-node_modules_stacktrace-pa-a71630-6f3c4f0189d8.js"></script> <script crossorigin="anonymous" defer="defer" type="application/javascript" src="https://github.githubassets.com/assets/vendors-node_modules_color-convert_index_js-0e07cc183eed.js"></script> <script crossorigin="anonymous" defer="defer" type="application/javascript" src="https://github.githubassets.com/assets/vendors-node_modules_github_quote-selection_dist_index_js-node_modules_github_session-resume_-0b5e12-889cec8cf448.js"></script> <script crossorigin="anonymous" defer="defer" type="application/javascript" src="https://github.githubassets.com/assets/ui_packages_updatable-content_updatable-content_ts-eae9df0dd562.js"></script> <script crossorigin="anonymous" defer="defer" type="application/javascript" src="https://github.githubassets.com/assets/app_assets_modules_github_behaviors_task-list_ts-app_assets_modules_github_sso_ts-ui_packages-900dde-18d1c91a7872.js"></script> <script crossorigin="anonymous" defer="defer" type="application/javascript" src="https://github.githubassets.com/assets/app_assets_modules_github_sticky-scroll-into-view_ts-7cbef09a422c.js"></script> <script crossorigin="anonymous" defer="defer" type="application/javascript" src="https://github.githubassets.com/assets/app_assets_modules_github_behaviors_ajax-error_ts-app_assets_modules_github_behaviors_include-d0d0a6-0e9fa537dc4f.js"></script> <script crossorigin="anonymous" defer="defer" type="application/javascript" src="https://github.githubassets.com/assets/app_assets_modules_github_behaviors_commenting_edit_ts-app_assets_modules_github_behaviors_ht-83c235-c89801ebbe15.js"></script> <script crossorigin="anonymous" defer="defer" type="application/javascript" src="https://github.githubassets.com/assets/behaviors-a6e4c4c86bfa.js"></script> <script crossorigin="anonymous" defer="defer" type="application/javascript" src="https://github.githubassets.com/assets/vendors-node_modules_delegated-events_dist_index_js-node_modules_github_catalyst_lib_index_js-f6223d90c7ba.js"></script> <script crossorigin="anonymous" defer="defer" type="application/javascript" src="https://github.githubassets.com/assets/notifications-global-3366f6b6298e.js"></script> <script crossorigin="anonymous" defer="defer" type="application/javascript" src="https://github.githubassets.com/assets/vendors-node_modules_virtualized-list_es_index_js-node_modules_github_template-parts_lib_index_js-96453a51f920.js"></script> <script crossorigin="anonymous" defer="defer" type="application/javascript" src="https://github.githubassets.com/assets/vendors-node_modules_stacktrace-parser_dist_stack-trace-parser_esm_js-node_modules_github_bro-b0a862-4d8589138d1e.js"></script> <script crossorigin="anonymous" defer="defer" type="application/javascript" src="https://github.githubassets.com/assets/vendors-node_modules_github_remote-form_dist_index_js-node_modules_delegated-events_dist_inde-0e9dbe-d2bcedf65682.js"></script> <script crossorigin="anonymous" defer="defer" type="application/javascript" src="https://github.githubassets.com/assets/app_assets_modules_github_ref-selector_ts-043af64042a1.js"></script> <script crossorigin="anonymous" defer="defer" type="application/javascript" src="https://github.githubassets.com/assets/codespaces-4158520ad4d7.js"></script> <script crossorigin="anonymous" defer="defer" type="application/javascript" src="https://github.githubassets.com/assets/vendors-node_modules_github_mini-throttle_dist_decorators_js-node_modules_delegated-events_di-cc9bcb-ea42a360c5ae.js"></script> <script crossorigin="anonymous" defer="defer" type="application/javascript" src="https://github.githubassets.com/assets/vendors-node_modules_github_file-attachment-element_dist_index_js-node_modules_github_filter--35675b-aff280068839.js"></script> <script crossorigin="anonymous" defer="defer" type="application/javascript" src="https://github.githubassets.com/assets/repositories-ce9ff2a57e1f.js"></script> <script crossorigin="anonymous" defer="defer" type="application/javascript" src="https://github.githubassets.com/assets/vendors-node_modules_github_mini-throttle_dist_index_js-node_modules_github_catalyst_lib_inde-dbbea9-9b97703a4e6a.js"></script> <script crossorigin="anonymous" defer="defer" type="application/javascript" src="https://github.githubassets.com/assets/code-menu-13971a40799a.js"></script> <script crossorigin="anonymous" defer="defer" type="application/javascript" src="https://github.githubassets.com/assets/primer-react-765944243383.js"></script> <script crossorigin="anonymous" defer="defer" type="application/javascript" src="https://github.githubassets.com/assets/react-core-cd0a67881543.js"></script> <script crossorigin="anonymous" defer="defer" type="application/javascript" src="https://github.githubassets.com/assets/react-lib-7b7b5264f6c1.js"></script> <script crossorigin="anonymous" defer="defer" type="application/javascript" src="https://github.githubassets.com/assets/octicons-react-45c3a19dd792.js"></script> <script crossorigin="anonymous" defer="defer" type="application/javascript" src="https://github.githubassets.com/assets/vendors-node_modules_tanstack_query-core_build_modern_queryClient_js-e40bb86d3e93.js"></script> <script crossorigin="anonymous" defer="defer" type="application/javascript" src="https://github.githubassets.com/assets/vendors-node_modules_emotion_is-prop-valid_dist_emotion-is-prop-valid_esm_js-node_modules_emo-37e3d5-31653d7f2342.js"></script> <script crossorigin="anonymous" defer="defer" type="application/javascript" src="https://github.githubassets.com/assets/vendors-node_modules_github_mini-throttle_dist_index_js-node_modules_stacktrace-parser_dist_s-e7dcdd-285fc29e9fa5.js"></script> <script crossorigin="anonymous" defer="defer" type="application/javascript" src="https://github.githubassets.com/assets/vendors-node_modules_oddbird_popover-polyfill_dist_popover-fn_js-4896ddd4b7bb.js"></script> <script crossorigin="anonymous" defer="defer" type="application/javascript" src="https://github.githubassets.com/assets/notifications-subscriptions-menu-3eda30673b32.js"></script> <link crossorigin="anonymous" media="all" rel="stylesheet" href="https://github.githubassets.com/assets/primer-react.9fa170e9435ed4b922b9.module.css" /> <link crossorigin="anonymous" media="all" rel="stylesheet" href="https://github.githubassets.com/assets/notifications-subscriptions-menu.1bcff9205c241e99cff2.module.css" /> <script crossorigin="anonymous" defer="defer" type="application/javascript" src="https://github.githubassets.com/assets/primer-react-765944243383.js"></script> <script crossorigin="anonymous" defer="defer" type="application/javascript" src="https://github.githubassets.com/assets/react-core-cd0a67881543.js"></script> <script crossorigin="anonymous" defer="defer" type="application/javascript" src="https://github.githubassets.com/assets/react-lib-7b7b5264f6c1.js"></script> <script crossorigin="anonymous" defer="defer" type="application/javascript" src="https://github.githubassets.com/assets/octicons-react-45c3a19dd792.js"></script> <script crossorigin="anonymous" defer="defer" type="application/javascript" src="https://github.githubassets.com/assets/vendors-node_modules_tanstack_query-core_build_modern_queryClient_js-e40bb86d3e93.js"></script> <script crossorigin="anonymous" defer="defer" type="application/javascript" src="https://github.githubassets.com/assets/vendors-node_modules_emotion_is-prop-valid_dist_emotion-is-prop-valid_esm_js-node_modules_emo-37e3d5-31653d7f2342.js"></script> <script crossorigin="anonymous" defer="defer" type="application/javascript" src="https://github.githubassets.com/assets/vendors-node_modules_github_mini-throttle_dist_index_js-node_modules_stacktrace-parser_dist_s-e7dcdd-285fc29e9fa5.js"></script> <script crossorigin="anonymous" defer="defer" type="application/javascript" src="https://github.githubassets.com/assets/vendors-node_modules_oddbird_popover-polyfill_dist_popover-fn_js-4896ddd4b7bb.js"></script> <script crossorigin="anonymous" defer="defer" type="application/javascript" src="https://github.githubassets.com/assets/notifications-subscriptions-menu-3eda30673b32.js"></script> <link crossorigin="anonymous" media="all" rel="stylesheet" href="https://github.githubassets.com/assets/primer-react.9fa170e9435ed4b922b9.module.css" /> <link crossorigin="anonymous" media="all" rel="stylesheet" href="https://github.githubassets.com/assets/notifications-subscriptions-menu.1bcff9205c241e99cff2.module.css" /> <title>GitHub - adelnobel/awesome-scalability at patch-1</title> <meta name="route-pattern" content="/:user_id/:repository/tree/*name(/*path)" data-turbo-transient> <meta name="route-controller" content="files" data-turbo-transient> <meta name="route-action" content="disambiguate" data-turbo-transient> <meta name="current-catalog-service-hash" content="f3abb0cc802f3d7b95fc8762b94bdcb13bf39634c40c357301c4aa1d67a256fb"> <meta name="request-id" content="BB60:211C23:100920B:121F2E4:674759C4" data-pjax-transient="true"/><meta name="html-safe-nonce" content="762f22ce93486d700a99132aa925c825710f3afb246ef3d80af4aa7fea422c3a" data-pjax-transient="true"/><meta name="visitor-payload" content="eyJyZWZlcnJlciI6IiIsInJlcXVlc3RfaWQiOiJCQjYwOjIxMUMyMzoxMDA5MjBCOjEyMUYyRTQ6Njc0NzU5QzQiLCJ2aXNpdG9yX2lkIjoiNjE3MTc3NzczODc1NzA2OTI1MiIsInJlZ2lvbl9lZGdlIjoic291dGhlYXN0YXNpYSIsInJlZ2lvbl9yZW5kZXIiOiJzb3V0aGVhc3Rhc2lhIn0=" data-pjax-transient="true"/><meta name="visitor-hmac" content="054e6458c08c24b31927a61f5ad9f7ba8b5b430145dfa31b9c85ecbb6688b477" data-pjax-transient="true"/> <meta name="hovercard-subject-tag" content="repository:440303461" data-turbo-transient> <meta name="github-keyboard-shortcuts" content="repository,source-code,file-tree,copilot" data-turbo-transient="true" /> <meta name="selected-link" value="repo_source" data-turbo-transient> <link rel="assets" href="https://github.githubassets.com/"> <meta name="google-site-verification" content="Apib7-x98H0j5cPqHWwSMm6dNU4GmODRoqxLiDzdx9I"> <meta name="octolytics-url" content="https://collector.github.com/github/collect" /> <meta name="analytics-location" content="/<user-name>/<repo-name>/files/disambiguate" data-turbo-transient="true" /> <meta name="user-login" content=""> <meta name="viewport" content="width=device-width"> <meta name="description" content="The Patterns of Scalable, Reliable, and Performant Large-Scale Systems - GitHub - adelnobel/awesome-scalability at patch-1"> <link rel="search" type="application/opensearchdescription+xml" href="/opensearch.xml" title="GitHub"> <link rel="fluid-icon" href="https://github.com/fluidicon.png" title="GitHub"> <meta property="fb:app_id" content="1401488693436528"> <meta name="apple-itunes-app" content="app-id=1477376905, app-argument=https://github.com/adelnobel/awesome-scalability/tree/patch-1" /> <meta name="twitter:image" content="https://opengraph.githubassets.com/bbc44477dfa47ea863749c0f55b451c5f6fc1308f87b17621f551635406bc17f/adelnobel/awesome-scalability" /><meta name="twitter:site" content="@github" /><meta name="twitter:card" content="summary_large_image" /><meta name="twitter:title" content="GitHub - adelnobel/awesome-scalability at patch-1" /><meta name="twitter:description" content="The Patterns of Scalable, Reliable, and Performant Large-Scale Systems - GitHub - adelnobel/awesome-scalability at patch-1" /> <meta property="og:image" content="https://opengraph.githubassets.com/bbc44477dfa47ea863749c0f55b451c5f6fc1308f87b17621f551635406bc17f/adelnobel/awesome-scalability" /><meta property="og:image:alt" content="The Patterns of Scalable, Reliable, and Performant Large-Scale Systems - GitHub - adelnobel/awesome-scalability at patch-1" /><meta property="og:image:width" content="1200" /><meta property="og:image:height" content="600" /><meta property="og:site_name" content="GitHub" /><meta property="og:type" content="object" /><meta property="og:title" content="GitHub - adelnobel/awesome-scalability at patch-1" /><meta property="og:url" content="https://github.com/adelnobel/awesome-scalability" /><meta property="og:description" content="The Patterns of Scalable, Reliable, and Performant Large-Scale Systems - GitHub - adelnobel/awesome-scalability at patch-1" /> <meta name="hostname" content="github.com"> <meta name="expected-hostname" content="github.com"> <meta http-equiv="x-pjax-version" content="cc7767a0c18d7e936a37ec4b8ef829934f464822634943ba0cbdcb5e25e14f1d" data-turbo-track="reload"> <meta http-equiv="x-pjax-csp-version" content="ace39c3b6632770952207593607e6e0be0db363435a8b877b1f96abe6430f345" data-turbo-track="reload"> <meta http-equiv="x-pjax-css-version" content="15b18460ccb38585911f0182c65a829cc58635f60a4a305813e3a2bc7ff7d158" data-turbo-track="reload"> <meta http-equiv="x-pjax-js-version" content="b683bfe8ba503fb752a8a7e87a8162efe7eaf74732202ad69805baa0fa057db8" data-turbo-track="reload"> <meta name="turbo-cache-control" content="no-preview" data-turbo-transient=""> <meta data-hydrostats="publish"> <meta name="go-import" content="github.com/adelnobel/awesome-scalability git https://github.com/adelnobel/awesome-scalability.git"> <meta name="octolytics-dimension-user_id" content="4480922" /><meta name="octolytics-dimension-user_login" content="adelnobel" /><meta name="octolytics-dimension-repository_id" content="440303461" /><meta name="octolytics-dimension-repository_nwo" content="adelnobel/awesome-scalability" /><meta name="octolytics-dimension-repository_public" content="true" /><meta name="octolytics-dimension-repository_is_fork" content="true" /><meta name="octolytics-dimension-repository_parent_id" content="115478820" /><meta name="octolytics-dimension-repository_parent_nwo" content="binhnguyennus/awesome-scalability" /><meta name="octolytics-dimension-repository_network_root_id" content="115478820" /><meta name="octolytics-dimension-repository_network_root_nwo" content="binhnguyennus/awesome-scalability" /> <link rel="canonical" href="https://github.com/adelnobel/awesome-scalability/tree/patch-1" data-turbo-transient> <meta name="turbo-body-classes" content="logged-out env-production page-responsive"> <meta name="browser-stats-url" content="https://api.github.com/_private/browser/stats"> <meta name="browser-errors-url" content="https://api.github.com/_private/browser/errors"> <link rel="mask-icon" href="https://github.githubassets.com/assets/pinned-octocat-093da3e6fa40.svg" color="#000000"> <link rel="alternate icon" class="js-site-favicon" type="image/png" href="https://github.githubassets.com/favicons/favicon.png"> <link rel="icon" class="js-site-favicon" type="image/svg+xml" href="https://github.githubassets.com/favicons/favicon.svg" data-base-href="https://github.githubassets.com/favicons/favicon"> <meta name="theme-color" content="#1e2327"> <meta name="color-scheme" content="light dark" /> <link rel="manifest" href="/manifest.json" crossOrigin="use-credentials"> </head> <body class="logged-out env-production page-responsive" style="word-wrap: break-word;"> <div data-turbo-body class="logged-out env-production page-responsive" style="word-wrap: break-word;"> <div class="position-relative header-wrapper js-header-wrapper "> <a href="#start-of-content" data-skip-target-assigned="false" class="px-2 py-4 color-bg-accent-emphasis color-fg-on-emphasis show-on-focus js-skip-to-content">Skip to content</a> <span data-view-component="true" class="progress-pjax-loader Progress position-fixed width-full"> <span style="width: 0%;" data-view-component="true" class="Progress-item progress-pjax-loader-bar left-0 top-0 color-bg-accent-emphasis"></span> </span> <script crossorigin="anonymous" defer="defer" type="application/javascript" src="https://github.githubassets.com/assets/keyboard-shortcuts-dialog-78b8b9792a5f.js"></script> <link crossorigin="anonymous" media="all" rel="stylesheet" href="https://github.githubassets.com/assets/primer-react.9fa170e9435ed4b922b9.module.css" /> <react-partial partial-name="keyboard-shortcuts-dialog" data-ssr="false" data-attempted-ssr="false" > <script type="application/json" data-target="react-partial.embeddedData">{"props":{"docsUrl":"https://docs.github.com/get-started/accessibility/keyboard-shortcuts"}}</script> <div data-target="react-partial.reactRoot"></div> </react-partial> <script crossorigin="anonymous" defer="defer" type="application/javascript" src="https://github.githubassets.com/assets/vendors-node_modules_github_remote-form_dist_index_js-node_modules_delegated-events_dist_inde-94fd67-cf3dd69d89eb.js"></script> <script crossorigin="anonymous" defer="defer" type="application/javascript" src="https://github.githubassets.com/assets/sessions-8fa3b694f335.js"></script> <header class="HeaderMktg header-logged-out js-details-container js-header Details f4 py-3" role="banner" data-is-top="true" data-color-mode=light data-light-theme=light data-dark-theme=dark> <h2 class="sr-only">Navigation Menu</h2> <button type="button" class="HeaderMktg-backdrop d-lg-none border-0 position-fixed top-0 left-0 width-full height-full js-details-target" aria-label="Toggle navigation"> <span class="d-none">Toggle navigation</span> </button> <div class="d-flex flex-column flex-lg-row flex-items-center px-3 px-md-4 px-lg-5 height-full position-relative z-1"> <div class="d-flex flex-justify-between flex-items-center width-full width-lg-auto"> <div class="flex-1"> <button aria-label="Toggle navigation" aria-expanded="false" type="button" data-view-component="true" class="js-details-target js-nav-padding-recalculate js-header-menu-toggle Button--link Button--medium Button d-lg-none color-fg-inherit p-1"> <span class="Button-content"> <span class="Button-label"><div class="HeaderMenu-toggle-bar rounded my-1"></div> <div class="HeaderMenu-toggle-bar rounded my-1"></div> <div class="HeaderMenu-toggle-bar rounded my-1"></div></span> </span> </button> </div> <a class="mr-lg-3 color-fg-inherit flex-order-2 js-prevent-focus-on-mobile-nav" href="/" aria-label="Homepage" data-analytics-event="{"category":"Marketing nav","action":"click to go to homepage","label":"ref_page:Marketing;ref_cta:Logomark;ref_loc:Header"}"> <svg height="32" aria-hidden="true" viewBox="0 0 24 24" version="1.1" width="32" data-view-component="true" class="octicon octicon-mark-github"> <path d="M12.5.75C6.146.75 1 5.896 1 12.25c0 5.089 3.292 9.387 7.863 10.91.575.101.79-.244.79-.546 0-.273-.014-1.178-.014-2.142-2.889.532-3.636-.704-3.866-1.35-.13-.331-.69-1.352-1.18-1.625-.402-.216-.977-.748-.014-.762.906-.014 1.553.834 1.769 1.179 1.035 1.74 2.688 1.25 3.349.948.1-.747.402-1.25.733-1.538-2.559-.287-5.232-1.279-5.232-5.678 0-1.25.445-2.285 1.178-3.09-.115-.288-.517-1.467.115-3.048 0 0 .963-.302 3.163 1.179.92-.259 1.897-.388 2.875-.388.977 0 1.955.13 2.875.388 2.2-1.495 3.162-1.179 3.162-1.179.633 1.581.23 2.76.115 3.048.733.805 1.179 1.825 1.179 3.09 0 4.413-2.688 5.39-5.247 5.678.417.36.776 1.05.776 2.128 0 1.538-.014 2.774-.014 3.162 0 .302.216.662.79.547C20.709 21.637 24 17.324 24 12.25 24 5.896 18.854.75 12.5.75Z"></path> </svg> </a> <div class="flex-1 flex-order-2 text-right"> <a href="/login?return_to=https%3A%2F%2Fgithub.com%2Fadelnobel%2Fawesome-scalability%2Ftree%2Fpatch-1" class="HeaderMenu-link HeaderMenu-button d-inline-flex d-lg-none flex-order-1 f5 no-underline border color-border-default rounded-2 px-2 py-1 color-fg-inherit js-prevent-focus-on-mobile-nav" data-hydro-click="{"event_type":"authentication.click","payload":{"location_in_page":"site header menu","repository_id":null,"auth_type":"SIGN_UP","originating_url":"https://github.com/adelnobel/awesome-scalability/tree/patch-1","user_id":null}}" data-hydro-click-hmac="6dbd095eaf9f7cc96254b8c11a890511db1de99e3ec370c4e62646c9cba5cb11" data-analytics-event="{"category":"Marketing nav","action":"click to Sign in","label":"ref_page:Marketing;ref_cta:Sign in;ref_loc:Header"}" > Sign in </a> </div> </div> <div class="HeaderMenu js-header-menu height-fit position-lg-relative d-lg-flex flex-column flex-auto top-0"> <div class="HeaderMenu-wrapper d-flex flex-column flex-self-start flex-lg-row flex-auto rounded rounded-lg-0"> <nav class="HeaderMenu-nav" aria-label="Global"> <ul class="d-lg-flex list-style-none"> <li class="HeaderMenu-item position-relative flex-wrap flex-justify-between flex-items-center d-block d-lg-flex flex-lg-nowrap flex-lg-items-center js-details-container js-header-menu-item"> <button type="button" class="HeaderMenu-link border-0 width-full width-lg-auto px-0 px-lg-2 py-lg-2 no-wrap d-flex flex-items-center flex-justify-between js-details-target" aria-expanded="false"> Product <svg opacity="0.5" aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-chevron-down HeaderMenu-icon ml-1"> <path d="M12.78 5.22a.749.749 0 0 1 0 1.06l-4.25 4.25a.749.749 0 0 1-1.06 0L3.22 6.28a.749.749 0 1 1 1.06-1.06L8 8.939l3.72-3.719a.749.749 0 0 1 1.06 0Z"></path> </svg> </button> <div class="HeaderMenu-dropdown dropdown-menu rounded m-0 p-0 pt-2 pt-lg-4 position-relative position-lg-absolute left-0 left-lg-n3 pb-2 pb-lg-4 d-lg-flex flex-wrap dropdown-menu-wide"> <div class="HeaderMenu-column px-lg-4 border-lg-right mb-4 mb-lg-0 pr-lg-7"> <div class="border-bottom pb-3 pb-lg-0 border-lg-bottom-0"> <ul class="list-style-none f5" > <li> <a class="HeaderMenu-dropdown-link d-block no-underline position-relative py-2 Link--secondary d-flex flex-items-center Link--has-description pb-lg-3" data-analytics-event="{"location":"navbar","action":"github_copilot","context":"product","tag":"link","label":"github_copilot_link_product_navbar"}" href="https://github.com/features/copilot"> <svg aria-hidden="true" height="24" viewBox="0 0 24 24" version="1.1" width="24" data-view-component="true" class="octicon octicon-copilot color-fg-subtle mr-3"> <path d="M23.922 16.992c-.861 1.495-5.859 5.023-11.922 5.023-6.063 0-11.061-3.528-11.922-5.023A.641.641 0 0 1 0 16.736v-2.869a.841.841 0 0 1 .053-.22c.372-.935 1.347-2.292 2.605-2.656.167-.429.414-1.055.644-1.517a10.195 10.195 0 0 1-.052-1.086c0-1.331.282-2.499 1.132-3.368.397-.406.89-.717 1.474-.952 1.399-1.136 3.392-2.093 6.122-2.093 2.731 0 4.767.957 6.166 2.093.584.235 1.077.546 1.474.952.85.869 1.132 2.037 1.132 3.368 0 .368-.014.733-.052 1.086.23.462.477 1.088.644 1.517 1.258.364 2.233 1.721 2.605 2.656a.832.832 0 0 1 .053.22v2.869a.641.641 0 0 1-.078.256ZM12.172 11h-.344a4.323 4.323 0 0 1-.355.508C10.703 12.455 9.555 13 7.965 13c-1.725 0-2.989-.359-3.782-1.259a2.005 2.005 0 0 1-.085-.104L4 11.741v6.585c1.435.779 4.514 2.179 8 2.179 3.486 0 6.565-1.4 8-2.179v-6.585l-.098-.104s-.033.045-.085.104c-.793.9-2.057 1.259-3.782 1.259-1.59 0-2.738-.545-3.508-1.492a4.323 4.323 0 0 1-.355-.508h-.016.016Zm.641-2.935c.136 1.057.403 1.913.878 2.497.442.544 1.134.938 2.344.938 1.573 0 2.292-.337 2.657-.751.384-.435.558-1.15.558-2.361 0-1.14-.243-1.847-.705-2.319-.477-.488-1.319-.862-2.824-1.025-1.487-.161-2.192.138-2.533.529-.269.307-.437.808-.438 1.578v.021c0 .265.021.562.063.893Zm-1.626 0c.042-.331.063-.628.063-.894v-.02c-.001-.77-.169-1.271-.438-1.578-.341-.391-1.046-.69-2.533-.529-1.505.163-2.347.537-2.824 1.025-.462.472-.705 1.179-.705 2.319 0 1.211.175 1.926.558 2.361.365.414 1.084.751 2.657.751 1.21 0 1.902-.394 2.344-.938.475-.584.742-1.44.878-2.497Z"></path><path d="M14.5 14.25a1 1 0 0 1 1 1v2a1 1 0 0 1-2 0v-2a1 1 0 0 1 1-1Zm-5 0a1 1 0 0 1 1 1v2a1 1 0 0 1-2 0v-2a1 1 0 0 1 1-1Z"></path> </svg> <div> <div class="color-fg-default h4">GitHub Copilot</div> Write better code with AI </div> </a></li> <li> <a class="HeaderMenu-dropdown-link d-block no-underline position-relative py-2 Link--secondary d-flex flex-items-center Link--has-description pb-lg-3" data-analytics-event="{"location":"navbar","action":"security","context":"product","tag":"link","label":"security_link_product_navbar"}" href="https://github.com/features/security"> <svg aria-hidden="true" height="24" viewBox="0 0 24 24" version="1.1" width="24" data-view-component="true" class="octicon octicon-shield-check color-fg-subtle mr-3"> <path d="M16.53 9.78a.75.75 0 0 0-1.06-1.06L11 13.19l-1.97-1.97a.75.75 0 0 0-1.06 1.06l2.5 2.5a.75.75 0 0 0 1.06 0l5-5Z"></path><path d="m12.54.637 8.25 2.675A1.75 1.75 0 0 1 22 4.976V10c0 6.19-3.771 10.704-9.401 12.83a1.704 1.704 0 0 1-1.198 0C5.77 20.705 2 16.19 2 10V4.976c0-.758.489-1.43 1.21-1.664L11.46.637a1.748 1.748 0 0 1 1.08 0Zm-.617 1.426-8.25 2.676a.249.249 0 0 0-.173.237V10c0 5.46 3.28 9.483 8.43 11.426a.199.199 0 0 0 .14 0C17.22 19.483 20.5 15.461 20.5 10V4.976a.25.25 0 0 0-.173-.237l-8.25-2.676a.253.253 0 0 0-.154 0Z"></path> </svg> <div> <div class="color-fg-default h4">Security</div> Find and fix vulnerabilities </div> </a></li> <li> <a class="HeaderMenu-dropdown-link d-block no-underline position-relative py-2 Link--secondary d-flex flex-items-center Link--has-description pb-lg-3" data-analytics-event="{"location":"navbar","action":"actions","context":"product","tag":"link","label":"actions_link_product_navbar"}" href="https://github.com/features/actions"> <svg aria-hidden="true" height="24" viewBox="0 0 24 24" version="1.1" width="24" data-view-component="true" class="octicon octicon-workflow color-fg-subtle mr-3"> <path d="M1 3a2 2 0 0 1 2-2h6.5a2 2 0 0 1 2 2v6.5a2 2 0 0 1-2 2H7v4.063C7 16.355 7.644 17 8.438 17H12.5v-2.5a2 2 0 0 1 2-2H21a2 2 0 0 1 2 2V21a2 2 0 0 1-2 2h-6.5a2 2 0 0 1-2-2v-2.5H8.437A2.939 2.939 0 0 1 5.5 15.562V11.5H3a2 2 0 0 1-2-2Zm2-.5a.5.5 0 0 0-.5.5v6.5a.5.5 0 0 0 .5.5h6.5a.5.5 0 0 0 .5-.5V3a.5.5 0 0 0-.5-.5ZM14.5 14a.5.5 0 0 0-.5.5V21a.5.5 0 0 0 .5.5H21a.5.5 0 0 0 .5-.5v-6.5a.5.5 0 0 0-.5-.5Z"></path> </svg> <div> <div class="color-fg-default h4">Actions</div> Automate any workflow </div> </a></li> <li> <a class="HeaderMenu-dropdown-link d-block no-underline position-relative py-2 Link--secondary d-flex flex-items-center Link--has-description pb-lg-3" data-analytics-event="{"location":"navbar","action":"codespaces","context":"product","tag":"link","label":"codespaces_link_product_navbar"}" href="https://github.com/features/codespaces"> <svg aria-hidden="true" height="24" viewBox="0 0 24 24" version="1.1" width="24" data-view-component="true" class="octicon octicon-codespaces color-fg-subtle mr-3"> <path d="M3.5 3.75C3.5 2.784 4.284 2 5.25 2h13.5c.966 0 1.75.784 1.75 1.75v7.5A1.75 1.75 0 0 1 18.75 13H5.25a1.75 1.75 0 0 1-1.75-1.75Zm-2 12c0-.966.784-1.75 1.75-1.75h17.5c.966 0 1.75.784 1.75 1.75v4a1.75 1.75 0 0 1-1.75 1.75H3.25a1.75 1.75 0 0 1-1.75-1.75ZM5.25 3.5a.25.25 0 0 0-.25.25v7.5c0 .138.112.25.25.25h13.5a.25.25 0 0 0 .25-.25v-7.5a.25.25 0 0 0-.25-.25Zm-2 12a.25.25 0 0 0-.25.25v4c0 .138.112.25.25.25h17.5a.25.25 0 0 0 .25-.25v-4a.25.25 0 0 0-.25-.25Z"></path><path d="M10 17.75a.75.75 0 0 1 .75-.75h6.5a.75.75 0 0 1 0 1.5h-6.5a.75.75 0 0 1-.75-.75Zm-4 0a.75.75 0 0 1 .75-.75h.5a.75.75 0 0 1 0 1.5h-.5a.75.75 0 0 1-.75-.75Z"></path> </svg> <div> <div class="color-fg-default h4">Codespaces</div> Instant dev environments </div> </a></li> <li> <a class="HeaderMenu-dropdown-link d-block no-underline position-relative py-2 Link--secondary d-flex flex-items-center Link--has-description pb-lg-3" data-analytics-event="{"location":"navbar","action":"issues","context":"product","tag":"link","label":"issues_link_product_navbar"}" href="https://github.com/features/issues"> <svg aria-hidden="true" height="24" viewBox="0 0 24 24" version="1.1" width="24" data-view-component="true" class="octicon octicon-issue-opened color-fg-subtle mr-3"> <path d="M12 1c6.075 0 11 4.925 11 11s-4.925 11-11 11S1 18.075 1 12 5.925 1 12 1ZM2.5 12a9.5 9.5 0 0 0 9.5 9.5 9.5 9.5 0 0 0 9.5-9.5A9.5 9.5 0 0 0 12 2.5 9.5 9.5 0 0 0 2.5 12Zm9.5 2a2 2 0 1 1-.001-3.999A2 2 0 0 1 12 14Z"></path> </svg> <div> <div class="color-fg-default h4">Issues</div> Plan and track work </div> </a></li> <li> <a class="HeaderMenu-dropdown-link d-block no-underline position-relative py-2 Link--secondary d-flex flex-items-center Link--has-description pb-lg-3" data-analytics-event="{"location":"navbar","action":"code_review","context":"product","tag":"link","label":"code_review_link_product_navbar"}" href="https://github.com/features/code-review"> <svg aria-hidden="true" height="24" viewBox="0 0 24 24" version="1.1" width="24" data-view-component="true" class="octicon octicon-code-review color-fg-subtle mr-3"> <path d="M10.3 6.74a.75.75 0 0 1-.04 1.06l-2.908 2.7 2.908 2.7a.75.75 0 1 1-1.02 1.1l-3.5-3.25a.75.75 0 0 1 0-1.1l3.5-3.25a.75.75 0 0 1 1.06.04Zm3.44 1.06a.75.75 0 1 1 1.02-1.1l3.5 3.25a.75.75 0 0 1 0 1.1l-3.5 3.25a.75.75 0 1 1-1.02-1.1l2.908-2.7-2.908-2.7Z"></path><path d="M1.5 4.25c0-.966.784-1.75 1.75-1.75h17.5c.966 0 1.75.784 1.75 1.75v12.5a1.75 1.75 0 0 1-1.75 1.75h-9.69l-3.573 3.573A1.458 1.458 0 0 1 5 21.043V18.5H3.25a1.75 1.75 0 0 1-1.75-1.75ZM3.25 4a.25.25 0 0 0-.25.25v12.5c0 .138.112.25.25.25h2.5a.75.75 0 0 1 .75.75v3.19l3.72-3.72a.749.749 0 0 1 .53-.22h10a.25.25 0 0 0 .25-.25V4.25a.25.25 0 0 0-.25-.25Z"></path> </svg> <div> <div class="color-fg-default h4">Code Review</div> Manage code changes </div> </a></li> <li> <a class="HeaderMenu-dropdown-link d-block no-underline position-relative py-2 Link--secondary d-flex flex-items-center Link--has-description pb-lg-3" data-analytics-event="{"location":"navbar","action":"discussions","context":"product","tag":"link","label":"discussions_link_product_navbar"}" href="https://github.com/features/discussions"> <svg aria-hidden="true" height="24" viewBox="0 0 24 24" version="1.1" width="24" data-view-component="true" class="octicon octicon-comment-discussion color-fg-subtle mr-3"> <path d="M1.75 1h12.5c.966 0 1.75.784 1.75 1.75v9.5A1.75 1.75 0 0 1 14.25 14H8.061l-2.574 2.573A1.458 1.458 0 0 1 3 15.543V14H1.75A1.75 1.75 0 0 1 0 12.25v-9.5C0 1.784.784 1 1.75 1ZM1.5 2.75v9.5c0 .138.112.25.25.25h2a.75.75 0 0 1 .75.75v2.19l2.72-2.72a.749.749 0 0 1 .53-.22h6.5a.25.25 0 0 0 .25-.25v-9.5a.25.25 0 0 0-.25-.25H1.75a.25.25 0 0 0-.25.25Z"></path><path d="M22.5 8.75a.25.25 0 0 0-.25-.25h-3.5a.75.75 0 0 1 0-1.5h3.5c.966 0 1.75.784 1.75 1.75v9.5A1.75 1.75 0 0 1 22.25 20H21v1.543a1.457 1.457 0 0 1-2.487 1.03L15.939 20H10.75A1.75 1.75 0 0 1 9 18.25v-1.465a.75.75 0 0 1 1.5 0v1.465c0 .138.112.25.25.25h5.5a.75.75 0 0 1 .53.22l2.72 2.72v-2.19a.75.75 0 0 1 .75-.75h2a.25.25 0 0 0 .25-.25v-9.5Z"></path> </svg> <div> <div class="color-fg-default h4">Discussions</div> Collaborate outside of code </div> </a></li> <li> <a class="HeaderMenu-dropdown-link d-block no-underline position-relative py-2 Link--secondary d-flex flex-items-center Link--has-description" data-analytics-event="{"location":"navbar","action":"code_search","context":"product","tag":"link","label":"code_search_link_product_navbar"}" href="https://github.com/features/code-search"> <svg aria-hidden="true" height="24" viewBox="0 0 24 24" version="1.1" width="24" data-view-component="true" class="octicon octicon-code-square color-fg-subtle mr-3"> <path d="M10.3 8.24a.75.75 0 0 1-.04 1.06L7.352 12l2.908 2.7a.75.75 0 1 1-1.02 1.1l-3.5-3.25a.75.75 0 0 1 0-1.1l3.5-3.25a.75.75 0 0 1 1.06.04Zm3.44 1.06a.75.75 0 1 1 1.02-1.1l3.5 3.25a.75.75 0 0 1 0 1.1l-3.5 3.25a.75.75 0 1 1-1.02-1.1l2.908-2.7-2.908-2.7Z"></path><path d="M2 3.75C2 2.784 2.784 2 3.75 2h16.5c.966 0 1.75.784 1.75 1.75v16.5A1.75 1.75 0 0 1 20.25 22H3.75A1.75 1.75 0 0 1 2 20.25Zm1.75-.25a.25.25 0 0 0-.25.25v16.5c0 .138.112.25.25.25h16.5a.25.25 0 0 0 .25-.25V3.75a.25.25 0 0 0-.25-.25Z"></path> </svg> <div> <div class="color-fg-default h4">Code Search</div> Find more, search less </div> </a></li> </ul> </div> </div> <div class="HeaderMenu-column px-lg-4"> <div class="border-bottom pb-3 pb-lg-0 border-lg-bottom-0 border-bottom-0"> <span class="d-block h4 color-fg-default my-1" id="product-explore-heading">Explore</span> <ul class="list-style-none f5" aria-labelledby="product-explore-heading"> <li> <a class="HeaderMenu-dropdown-link d-block no-underline position-relative py-2 Link--secondary" data-analytics-event="{"location":"navbar","action":"all_features","context":"product","tag":"link","label":"all_features_link_product_navbar"}" href="https://github.com/features"> All features </a></li> <li> <a class="HeaderMenu-dropdown-link d-block no-underline position-relative py-2 Link--secondary Link--external" target="_blank" data-analytics-event="{"location":"navbar","action":"documentation","context":"product","tag":"link","label":"documentation_link_product_navbar"}" href="https://docs.github.com"> Documentation <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-link-external HeaderMenu-external-icon color-fg-subtle"> <path d="M3.75 2h3.5a.75.75 0 0 1 0 1.5h-3.5a.25.25 0 0 0-.25.25v8.5c0 .138.112.25.25.25h8.5a.25.25 0 0 0 .25-.25v-3.5a.75.75 0 0 1 1.5 0v3.5A1.75 1.75 0 0 1 12.25 14h-8.5A1.75 1.75 0 0 1 2 12.25v-8.5C2 2.784 2.784 2 3.75 2Zm6.854-1h4.146a.25.25 0 0 1 .25.25v4.146a.25.25 0 0 1-.427.177L13.03 4.03 9.28 7.78a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042l3.75-3.75-1.543-1.543A.25.25 0 0 1 10.604 1Z"></path> </svg> </a></li> <li> <a class="HeaderMenu-dropdown-link d-block no-underline position-relative py-2 Link--secondary Link--external" target="_blank" data-analytics-event="{"location":"navbar","action":"github_skills","context":"product","tag":"link","label":"github_skills_link_product_navbar"}" href="https://skills.github.com"> GitHub Skills <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-link-external HeaderMenu-external-icon color-fg-subtle"> <path d="M3.75 2h3.5a.75.75 0 0 1 0 1.5h-3.5a.25.25 0 0 0-.25.25v8.5c0 .138.112.25.25.25h8.5a.25.25 0 0 0 .25-.25v-3.5a.75.75 0 0 1 1.5 0v3.5A1.75 1.75 0 0 1 12.25 14h-8.5A1.75 1.75 0 0 1 2 12.25v-8.5C2 2.784 2.784 2 3.75 2Zm6.854-1h4.146a.25.25 0 0 1 .25.25v4.146a.25.25 0 0 1-.427.177L13.03 4.03 9.28 7.78a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042l3.75-3.75-1.543-1.543A.25.25 0 0 1 10.604 1Z"></path> </svg> </a></li> <li> <a class="HeaderMenu-dropdown-link d-block no-underline position-relative py-2 Link--secondary Link--external" target="_blank" data-analytics-event="{"location":"navbar","action":"blog","context":"product","tag":"link","label":"blog_link_product_navbar"}" href="https://github.blog"> Blog <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-link-external HeaderMenu-external-icon color-fg-subtle"> <path d="M3.75 2h3.5a.75.75 0 0 1 0 1.5h-3.5a.25.25 0 0 0-.25.25v8.5c0 .138.112.25.25.25h8.5a.25.25 0 0 0 .25-.25v-3.5a.75.75 0 0 1 1.5 0v3.5A1.75 1.75 0 0 1 12.25 14h-8.5A1.75 1.75 0 0 1 2 12.25v-8.5C2 2.784 2.784 2 3.75 2Zm6.854-1h4.146a.25.25 0 0 1 .25.25v4.146a.25.25 0 0 1-.427.177L13.03 4.03 9.28 7.78a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042l3.75-3.75-1.543-1.543A.25.25 0 0 1 10.604 1Z"></path> </svg> </a></li> </ul> </div> </div> </div> </li> <li class="HeaderMenu-item position-relative flex-wrap flex-justify-between flex-items-center d-block d-lg-flex flex-lg-nowrap flex-lg-items-center js-details-container js-header-menu-item"> <button type="button" class="HeaderMenu-link border-0 width-full width-lg-auto px-0 px-lg-2 py-lg-2 no-wrap d-flex flex-items-center flex-justify-between js-details-target" aria-expanded="false"> Solutions <svg opacity="0.5" aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-chevron-down HeaderMenu-icon ml-1"> <path d="M12.78 5.22a.749.749 0 0 1 0 1.06l-4.25 4.25a.749.749 0 0 1-1.06 0L3.22 6.28a.749.749 0 1 1 1.06-1.06L8 8.939l3.72-3.719a.749.749 0 0 1 1.06 0Z"></path> </svg> </button> <div class="HeaderMenu-dropdown dropdown-menu rounded m-0 p-0 pt-2 pt-lg-4 position-relative position-lg-absolute left-0 left-lg-n3 d-lg-flex flex-wrap dropdown-menu-wide"> <div class="HeaderMenu-column px-lg-4 border-lg-right mb-4 mb-lg-0 pr-lg-7"> <div class="border-bottom pb-3 pb-lg-0 border-lg-bottom-0 pb-lg-3 mb-3 mb-lg-0"> <span class="d-block h4 color-fg-default my-1" id="solutions-by-company-size-heading">By company size</span> <ul class="list-style-none f5" aria-labelledby="solutions-by-company-size-heading"> <li> <a class="HeaderMenu-dropdown-link d-block no-underline position-relative py-2 Link--secondary" data-analytics-event="{"location":"navbar","action":"enterprises","context":"solutions","tag":"link","label":"enterprises_link_solutions_navbar"}" href="https://github.com/enterprise"> Enterprises </a></li> <li> <a class="HeaderMenu-dropdown-link d-block no-underline position-relative py-2 Link--secondary" data-analytics-event="{"location":"navbar","action":"small_and_medium_teams","context":"solutions","tag":"link","label":"small_and_medium_teams_link_solutions_navbar"}" href="https://github.com/team"> Small and medium teams </a></li> <li> <a class="HeaderMenu-dropdown-link d-block no-underline position-relative py-2 Link--secondary" data-analytics-event="{"location":"navbar","action":"startups","context":"solutions","tag":"link","label":"startups_link_solutions_navbar"}" href="https://github.com/enterprise/startups"> Startups </a></li> </ul> </div> <div class="border-bottom pb-3 pb-lg-0 border-lg-bottom-0"> <span class="d-block h4 color-fg-default my-1" id="solutions-by-use-case-heading">By use case</span> <ul class="list-style-none f5" aria-labelledby="solutions-by-use-case-heading"> <li> <a class="HeaderMenu-dropdown-link d-block no-underline position-relative py-2 Link--secondary" data-analytics-event="{"location":"navbar","action":"devsecops","context":"solutions","tag":"link","label":"devsecops_link_solutions_navbar"}" href="/solutions/use-case/devsecops"> DevSecOps </a></li> <li> <a class="HeaderMenu-dropdown-link d-block no-underline position-relative py-2 Link--secondary" data-analytics-event="{"location":"navbar","action":"devops","context":"solutions","tag":"link","label":"devops_link_solutions_navbar"}" href="/solutions/use-case/devops"> DevOps </a></li> <li> <a class="HeaderMenu-dropdown-link d-block no-underline position-relative py-2 Link--secondary" data-analytics-event="{"location":"navbar","action":"ci_cd","context":"solutions","tag":"link","label":"ci_cd_link_solutions_navbar"}" href="/solutions/use-case/ci-cd"> CI/CD </a></li> <li> <a class="HeaderMenu-dropdown-link d-block no-underline position-relative py-2 Link--secondary" data-analytics-event="{"location":"navbar","action":"view_all_use_cases","context":"solutions","tag":"link","label":"view_all_use_cases_link_solutions_navbar"}" href="/solutions/use-case"> View all use cases </a></li> </ul> </div> </div> <div class="HeaderMenu-column px-lg-4"> <div class="border-bottom pb-3 pb-lg-0 border-lg-bottom-0"> <span class="d-block h4 color-fg-default my-1" id="solutions-by-industry-heading">By industry</span> <ul class="list-style-none f5" aria-labelledby="solutions-by-industry-heading"> <li> <a class="HeaderMenu-dropdown-link d-block no-underline position-relative py-2 Link--secondary" data-analytics-event="{"location":"navbar","action":"healthcare","context":"solutions","tag":"link","label":"healthcare_link_solutions_navbar"}" href="/solutions/industry/healthcare"> Healthcare </a></li> <li> <a class="HeaderMenu-dropdown-link d-block no-underline position-relative py-2 Link--secondary" data-analytics-event="{"location":"navbar","action":"financial_services","context":"solutions","tag":"link","label":"financial_services_link_solutions_navbar"}" href="/solutions/industry/financial-services"> Financial services </a></li> <li> <a class="HeaderMenu-dropdown-link d-block no-underline position-relative py-2 Link--secondary" data-analytics-event="{"location":"navbar","action":"manufacturing","context":"solutions","tag":"link","label":"manufacturing_link_solutions_navbar"}" href="/solutions/industry/manufacturing"> Manufacturing </a></li> <li> <a class="HeaderMenu-dropdown-link d-block no-underline position-relative py-2 Link--secondary" data-analytics-event="{"location":"navbar","action":"government","context":"solutions","tag":"link","label":"government_link_solutions_navbar"}" href="/solutions/industry/government"> Government </a></li> <li> <a class="HeaderMenu-dropdown-link d-block no-underline position-relative py-2 Link--secondary" data-analytics-event="{"location":"navbar","action":"view_all_industries","context":"solutions","tag":"link","label":"view_all_industries_link_solutions_navbar"}" href="/solutions/industry"> View all industries </a></li> </ul> </div> </div> <div class="HeaderMenu-trailing-link rounded-bottom-2 flex-shrink-0 mt-lg-4 px-lg-4 py-4 py-lg-3 f5 text-semibold"> <a href="/solutions"> View all solutions <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-chevron-right HeaderMenu-trailing-link-icon"> <path d="M6.22 3.22a.75.75 0 0 1 1.06 0l4.25 4.25a.75.75 0 0 1 0 1.06l-4.25 4.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042L9.94 8 6.22 4.28a.75.75 0 0 1 0-1.06Z"></path> </svg> </a> </div> </div> </li> <li class="HeaderMenu-item position-relative flex-wrap flex-justify-between flex-items-center d-block d-lg-flex flex-lg-nowrap flex-lg-items-center js-details-container js-header-menu-item"> <button type="button" class="HeaderMenu-link border-0 width-full width-lg-auto px-0 px-lg-2 py-lg-2 no-wrap d-flex flex-items-center flex-justify-between js-details-target" aria-expanded="false"> Resources <svg opacity="0.5" aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-chevron-down HeaderMenu-icon ml-1"> <path d="M12.78 5.22a.749.749 0 0 1 0 1.06l-4.25 4.25a.749.749 0 0 1-1.06 0L3.22 6.28a.749.749 0 1 1 1.06-1.06L8 8.939l3.72-3.719a.749.749 0 0 1 1.06 0Z"></path> </svg> </button> <div class="HeaderMenu-dropdown dropdown-menu rounded m-0 p-0 pt-2 pt-lg-4 position-relative position-lg-absolute left-0 left-lg-n3 pb-2 pb-lg-4 d-lg-flex flex-wrap dropdown-menu-wide"> <div class="HeaderMenu-column px-lg-4 border-lg-right mb-4 mb-lg-0 pr-lg-7"> <div class="border-bottom pb-3 pb-lg-0 border-lg-bottom-0"> <span class="d-block h4 color-fg-default my-1" id="resources-topics-heading">Topics</span> <ul class="list-style-none f5" aria-labelledby="resources-topics-heading"> <li> <a class="HeaderMenu-dropdown-link d-block no-underline position-relative py-2 Link--secondary" data-analytics-event="{"location":"navbar","action":"ai","context":"resources","tag":"link","label":"ai_link_resources_navbar"}" href="/resources/articles/ai"> AI </a></li> <li> <a class="HeaderMenu-dropdown-link d-block no-underline position-relative py-2 Link--secondary" data-analytics-event="{"location":"navbar","action":"devops","context":"resources","tag":"link","label":"devops_link_resources_navbar"}" href="/resources/articles/devops"> DevOps </a></li> <li> <a class="HeaderMenu-dropdown-link d-block no-underline position-relative py-2 Link--secondary" data-analytics-event="{"location":"navbar","action":"security","context":"resources","tag":"link","label":"security_link_resources_navbar"}" href="/resources/articles/security"> Security </a></li> <li> <a class="HeaderMenu-dropdown-link d-block no-underline position-relative py-2 Link--secondary" data-analytics-event="{"location":"navbar","action":"software_development","context":"resources","tag":"link","label":"software_development_link_resources_navbar"}" href="/resources/articles/software-development"> Software Development </a></li> <li> <a class="HeaderMenu-dropdown-link d-block no-underline position-relative py-2 Link--secondary" data-analytics-event="{"location":"navbar","action":"view_all","context":"resources","tag":"link","label":"view_all_link_resources_navbar"}" href="/resources/articles"> View all </a></li> </ul> </div> </div> <div class="HeaderMenu-column px-lg-4"> <div class="border-bottom pb-3 pb-lg-0 border-lg-bottom-0 border-bottom-0"> <span class="d-block h4 color-fg-default my-1" id="resources-explore-heading">Explore</span> <ul class="list-style-none f5" aria-labelledby="resources-explore-heading"> <li> <a class="HeaderMenu-dropdown-link d-block no-underline position-relative py-2 Link--secondary Link--external" target="_blank" data-analytics-event="{"location":"navbar","action":"learning_pathways","context":"resources","tag":"link","label":"learning_pathways_link_resources_navbar"}" href="https://resources.github.com/learn/pathways"> Learning Pathways <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-link-external HeaderMenu-external-icon color-fg-subtle"> <path d="M3.75 2h3.5a.75.75 0 0 1 0 1.5h-3.5a.25.25 0 0 0-.25.25v8.5c0 .138.112.25.25.25h8.5a.25.25 0 0 0 .25-.25v-3.5a.75.75 0 0 1 1.5 0v3.5A1.75 1.75 0 0 1 12.25 14h-8.5A1.75 1.75 0 0 1 2 12.25v-8.5C2 2.784 2.784 2 3.75 2Zm6.854-1h4.146a.25.25 0 0 1 .25.25v4.146a.25.25 0 0 1-.427.177L13.03 4.03 9.28 7.78a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042l3.75-3.75-1.543-1.543A.25.25 0 0 1 10.604 1Z"></path> </svg> </a></li> <li> <a class="HeaderMenu-dropdown-link d-block no-underline position-relative py-2 Link--secondary Link--external" target="_blank" data-analytics-event="{"location":"navbar","action":"white_papers_ebooks_webinars","context":"resources","tag":"link","label":"white_papers_ebooks_webinars_link_resources_navbar"}" href="https://resources.github.com"> White papers, Ebooks, Webinars <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-link-external HeaderMenu-external-icon color-fg-subtle"> <path d="M3.75 2h3.5a.75.75 0 0 1 0 1.5h-3.5a.25.25 0 0 0-.25.25v8.5c0 .138.112.25.25.25h8.5a.25.25 0 0 0 .25-.25v-3.5a.75.75 0 0 1 1.5 0v3.5A1.75 1.75 0 0 1 12.25 14h-8.5A1.75 1.75 0 0 1 2 12.25v-8.5C2 2.784 2.784 2 3.75 2Zm6.854-1h4.146a.25.25 0 0 1 .25.25v4.146a.25.25 0 0 1-.427.177L13.03 4.03 9.28 7.78a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042l3.75-3.75-1.543-1.543A.25.25 0 0 1 10.604 1Z"></path> </svg> </a></li> <li> <a class="HeaderMenu-dropdown-link d-block no-underline position-relative py-2 Link--secondary" data-analytics-event="{"location":"navbar","action":"customer_stories","context":"resources","tag":"link","label":"customer_stories_link_resources_navbar"}" href="https://github.com/customer-stories"> Customer Stories </a></li> <li> <a class="HeaderMenu-dropdown-link d-block no-underline position-relative py-2 Link--secondary Link--external" target="_blank" data-analytics-event="{"location":"navbar","action":"partners","context":"resources","tag":"link","label":"partners_link_resources_navbar"}" href="https://partner.github.com"> Partners <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-link-external HeaderMenu-external-icon color-fg-subtle"> <path d="M3.75 2h3.5a.75.75 0 0 1 0 1.5h-3.5a.25.25 0 0 0-.25.25v8.5c0 .138.112.25.25.25h8.5a.25.25 0 0 0 .25-.25v-3.5a.75.75 0 0 1 1.5 0v3.5A1.75 1.75 0 0 1 12.25 14h-8.5A1.75 1.75 0 0 1 2 12.25v-8.5C2 2.784 2.784 2 3.75 2Zm6.854-1h4.146a.25.25 0 0 1 .25.25v4.146a.25.25 0 0 1-.427.177L13.03 4.03 9.28 7.78a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042l3.75-3.75-1.543-1.543A.25.25 0 0 1 10.604 1Z"></path> </svg> </a></li> </ul> </div> </div> </div> </li> <li class="HeaderMenu-item position-relative flex-wrap flex-justify-between flex-items-center d-block d-lg-flex flex-lg-nowrap flex-lg-items-center js-details-container js-header-menu-item"> <button type="button" class="HeaderMenu-link border-0 width-full width-lg-auto px-0 px-lg-2 py-lg-2 no-wrap d-flex flex-items-center flex-justify-between js-details-target" aria-expanded="false"> Open Source <svg opacity="0.5" aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-chevron-down HeaderMenu-icon ml-1"> <path d="M12.78 5.22a.749.749 0 0 1 0 1.06l-4.25 4.25a.749.749 0 0 1-1.06 0L3.22 6.28a.749.749 0 1 1 1.06-1.06L8 8.939l3.72-3.719a.749.749 0 0 1 1.06 0Z"></path> </svg> </button> <div class="HeaderMenu-dropdown dropdown-menu rounded m-0 p-0 pt-2 pt-lg-4 position-relative position-lg-absolute left-0 left-lg-n3 pb-2 pb-lg-4 px-lg-4"> <div class="HeaderMenu-column"> <div class="border-bottom pb-3 pb-lg-0 pb-lg-3 mb-3 mb-lg-0 mb-lg-3"> <ul class="list-style-none f5" > <li> <a class="HeaderMenu-dropdown-link d-block no-underline position-relative py-2 Link--secondary d-flex flex-items-center Link--has-description" data-analytics-event="{"location":"navbar","action":"github_sponsors","context":"open_source","tag":"link","label":"github_sponsors_link_open_source_navbar"}" href="/sponsors"> <div> <div class="color-fg-default h4">GitHub Sponsors</div> Fund open source developers </div> </a></li> </ul> </div> <div class="border-bottom pb-3 pb-lg-0 pb-lg-3 mb-3 mb-lg-0 mb-lg-3"> <ul class="list-style-none f5" > <li> <a class="HeaderMenu-dropdown-link d-block no-underline position-relative py-2 Link--secondary d-flex flex-items-center Link--has-description" data-analytics-event="{"location":"navbar","action":"the_readme_project","context":"open_source","tag":"link","label":"the_readme_project_link_open_source_navbar"}" href="https://github.com/readme"> <div> <div class="color-fg-default h4">The ReadME Project</div> GitHub community articles </div> </a></li> </ul> </div> <div class="border-bottom pb-3 pb-lg-0 border-bottom-0"> <span class="d-block h4 color-fg-default my-1" id="open-source-repositories-heading">Repositories</span> <ul class="list-style-none f5" aria-labelledby="open-source-repositories-heading"> <li> <a class="HeaderMenu-dropdown-link d-block no-underline position-relative py-2 Link--secondary" data-analytics-event="{"location":"navbar","action":"topics","context":"open_source","tag":"link","label":"topics_link_open_source_navbar"}" href="https://github.com/topics"> Topics </a></li> <li> <a class="HeaderMenu-dropdown-link d-block no-underline position-relative py-2 Link--secondary" data-analytics-event="{"location":"navbar","action":"trending","context":"open_source","tag":"link","label":"trending_link_open_source_navbar"}" href="https://github.com/trending"> Trending </a></li> <li> <a class="HeaderMenu-dropdown-link d-block no-underline position-relative py-2 Link--secondary" data-analytics-event="{"location":"navbar","action":"collections","context":"open_source","tag":"link","label":"collections_link_open_source_navbar"}" href="https://github.com/collections"> Collections </a></li> </ul> </div> </div> </div> </li> <li class="HeaderMenu-item position-relative flex-wrap flex-justify-between flex-items-center d-block d-lg-flex flex-lg-nowrap flex-lg-items-center js-details-container js-header-menu-item"> <button type="button" class="HeaderMenu-link border-0 width-full width-lg-auto px-0 px-lg-2 py-lg-2 no-wrap d-flex flex-items-center flex-justify-between js-details-target" aria-expanded="false"> Enterprise <svg opacity="0.5" aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-chevron-down HeaderMenu-icon ml-1"> <path d="M12.78 5.22a.749.749 0 0 1 0 1.06l-4.25 4.25a.749.749 0 0 1-1.06 0L3.22 6.28a.749.749 0 1 1 1.06-1.06L8 8.939l3.72-3.719a.749.749 0 0 1 1.06 0Z"></path> </svg> </button> <div class="HeaderMenu-dropdown dropdown-menu rounded m-0 p-0 pt-2 pt-lg-4 position-relative position-lg-absolute left-0 left-lg-n3 pb-2 pb-lg-4 px-lg-4"> <div class="HeaderMenu-column"> <div class="border-bottom pb-3 pb-lg-0 pb-lg-3 mb-3 mb-lg-0 mb-lg-3"> <ul class="list-style-none f5" > <li> <a class="HeaderMenu-dropdown-link d-block no-underline position-relative py-2 Link--secondary d-flex flex-items-center Link--has-description" data-analytics-event="{"location":"navbar","action":"enterprise_platform","context":"enterprise","tag":"link","label":"enterprise_platform_link_enterprise_navbar"}" href="/enterprise"> <svg aria-hidden="true" height="24" viewBox="0 0 24 24" version="1.1" width="24" data-view-component="true" class="octicon octicon-stack color-fg-subtle mr-3"> <path d="M11.063 1.456a1.749 1.749 0 0 1 1.874 0l8.383 5.316a1.751 1.751 0 0 1 0 2.956l-8.383 5.316a1.749 1.749 0 0 1-1.874 0L2.68 9.728a1.751 1.751 0 0 1 0-2.956Zm1.071 1.267a.25.25 0 0 0-.268 0L3.483 8.039a.25.25 0 0 0 0 .422l8.383 5.316a.25.25 0 0 0 .268 0l8.383-5.316a.25.25 0 0 0 0-.422Z"></path><path d="M1.867 12.324a.75.75 0 0 1 1.035-.232l8.964 5.685a.25.25 0 0 0 .268 0l8.964-5.685a.75.75 0 0 1 .804 1.267l-8.965 5.685a1.749 1.749 0 0 1-1.874 0l-8.965-5.685a.75.75 0 0 1-.231-1.035Z"></path><path d="M1.867 16.324a.75.75 0 0 1 1.035-.232l8.964 5.685a.25.25 0 0 0 .268 0l8.964-5.685a.75.75 0 0 1 .804 1.267l-8.965 5.685a1.749 1.749 0 0 1-1.874 0l-8.965-5.685a.75.75 0 0 1-.231-1.035Z"></path> </svg> <div> <div class="color-fg-default h4">Enterprise platform</div> AI-powered developer platform </div> </a></li> </ul> </div> <div class="border-bottom pb-3 pb-lg-0 border-bottom-0"> <span class="d-block h4 color-fg-default my-1" id="enterprise-available-add-ons-heading">Available add-ons</span> <ul class="list-style-none f5" aria-labelledby="enterprise-available-add-ons-heading"> <li> <a class="HeaderMenu-dropdown-link d-block no-underline position-relative py-2 Link--secondary d-flex flex-items-center Link--has-description pb-lg-3" data-analytics-event="{"location":"navbar","action":"advanced_security","context":"enterprise","tag":"link","label":"advanced_security_link_enterprise_navbar"}" href="https://github.com/enterprise/advanced-security"> <svg aria-hidden="true" height="24" viewBox="0 0 24 24" version="1.1" width="24" data-view-component="true" class="octicon octicon-shield-check color-fg-subtle mr-3"> <path d="M16.53 9.78a.75.75 0 0 0-1.06-1.06L11 13.19l-1.97-1.97a.75.75 0 0 0-1.06 1.06l2.5 2.5a.75.75 0 0 0 1.06 0l5-5Z"></path><path d="m12.54.637 8.25 2.675A1.75 1.75 0 0 1 22 4.976V10c0 6.19-3.771 10.704-9.401 12.83a1.704 1.704 0 0 1-1.198 0C5.77 20.705 2 16.19 2 10V4.976c0-.758.489-1.43 1.21-1.664L11.46.637a1.748 1.748 0 0 1 1.08 0Zm-.617 1.426-8.25 2.676a.249.249 0 0 0-.173.237V10c0 5.46 3.28 9.483 8.43 11.426a.199.199 0 0 0 .14 0C17.22 19.483 20.5 15.461 20.5 10V4.976a.25.25 0 0 0-.173-.237l-8.25-2.676a.253.253 0 0 0-.154 0Z"></path> </svg> <div> <div class="color-fg-default h4">Advanced Security</div> Enterprise-grade security features </div> </a></li> <li> <a class="HeaderMenu-dropdown-link d-block no-underline position-relative py-2 Link--secondary d-flex flex-items-center Link--has-description pb-lg-3" data-analytics-event="{"location":"navbar","action":"github_copilot","context":"enterprise","tag":"link","label":"github_copilot_link_enterprise_navbar"}" href="/features/copilot#enterprise"> <svg aria-hidden="true" height="24" viewBox="0 0 24 24" version="1.1" width="24" data-view-component="true" class="octicon octicon-copilot color-fg-subtle mr-3"> <path d="M23.922 16.992c-.861 1.495-5.859 5.023-11.922 5.023-6.063 0-11.061-3.528-11.922-5.023A.641.641 0 0 1 0 16.736v-2.869a.841.841 0 0 1 .053-.22c.372-.935 1.347-2.292 2.605-2.656.167-.429.414-1.055.644-1.517a10.195 10.195 0 0 1-.052-1.086c0-1.331.282-2.499 1.132-3.368.397-.406.89-.717 1.474-.952 1.399-1.136 3.392-2.093 6.122-2.093 2.731 0 4.767.957 6.166 2.093.584.235 1.077.546 1.474.952.85.869 1.132 2.037 1.132 3.368 0 .368-.014.733-.052 1.086.23.462.477 1.088.644 1.517 1.258.364 2.233 1.721 2.605 2.656a.832.832 0 0 1 .053.22v2.869a.641.641 0 0 1-.078.256ZM12.172 11h-.344a4.323 4.323 0 0 1-.355.508C10.703 12.455 9.555 13 7.965 13c-1.725 0-2.989-.359-3.782-1.259a2.005 2.005 0 0 1-.085-.104L4 11.741v6.585c1.435.779 4.514 2.179 8 2.179 3.486 0 6.565-1.4 8-2.179v-6.585l-.098-.104s-.033.045-.085.104c-.793.9-2.057 1.259-3.782 1.259-1.59 0-2.738-.545-3.508-1.492a4.323 4.323 0 0 1-.355-.508h-.016.016Zm.641-2.935c.136 1.057.403 1.913.878 2.497.442.544 1.134.938 2.344.938 1.573 0 2.292-.337 2.657-.751.384-.435.558-1.15.558-2.361 0-1.14-.243-1.847-.705-2.319-.477-.488-1.319-.862-2.824-1.025-1.487-.161-2.192.138-2.533.529-.269.307-.437.808-.438 1.578v.021c0 .265.021.562.063.893Zm-1.626 0c.042-.331.063-.628.063-.894v-.02c-.001-.77-.169-1.271-.438-1.578-.341-.391-1.046-.69-2.533-.529-1.505.163-2.347.537-2.824 1.025-.462.472-.705 1.179-.705 2.319 0 1.211.175 1.926.558 2.361.365.414 1.084.751 2.657.751 1.21 0 1.902-.394 2.344-.938.475-.584.742-1.44.878-2.497Z"></path><path d="M14.5 14.25a1 1 0 0 1 1 1v2a1 1 0 0 1-2 0v-2a1 1 0 0 1 1-1Zm-5 0a1 1 0 0 1 1 1v2a1 1 0 0 1-2 0v-2a1 1 0 0 1 1-1Z"></path> </svg> <div> <div class="color-fg-default h4">GitHub Copilot</div> Enterprise-grade AI features </div> </a></li> <li> <a class="HeaderMenu-dropdown-link d-block no-underline position-relative py-2 Link--secondary d-flex flex-items-center Link--has-description" data-analytics-event="{"location":"navbar","action":"premium_support","context":"enterprise","tag":"link","label":"premium_support_link_enterprise_navbar"}" href="/premium-support"> <svg aria-hidden="true" height="24" viewBox="0 0 24 24" version="1.1" width="24" data-view-component="true" class="octicon octicon-comment-discussion color-fg-subtle mr-3"> <path d="M1.75 1h12.5c.966 0 1.75.784 1.75 1.75v9.5A1.75 1.75 0 0 1 14.25 14H8.061l-2.574 2.573A1.458 1.458 0 0 1 3 15.543V14H1.75A1.75 1.75 0 0 1 0 12.25v-9.5C0 1.784.784 1 1.75 1ZM1.5 2.75v9.5c0 .138.112.25.25.25h2a.75.75 0 0 1 .75.75v2.19l2.72-2.72a.749.749 0 0 1 .53-.22h6.5a.25.25 0 0 0 .25-.25v-9.5a.25.25 0 0 0-.25-.25H1.75a.25.25 0 0 0-.25.25Z"></path><path d="M22.5 8.75a.25.25 0 0 0-.25-.25h-3.5a.75.75 0 0 1 0-1.5h3.5c.966 0 1.75.784 1.75 1.75v9.5A1.75 1.75 0 0 1 22.25 20H21v1.543a1.457 1.457 0 0 1-2.487 1.03L15.939 20H10.75A1.75 1.75 0 0 1 9 18.25v-1.465a.75.75 0 0 1 1.5 0v1.465c0 .138.112.25.25.25h5.5a.75.75 0 0 1 .53.22l2.72 2.72v-2.19a.75.75 0 0 1 .75-.75h2a.25.25 0 0 0 .25-.25v-9.5Z"></path> </svg> <div> <div class="color-fg-default h4">Premium Support</div> Enterprise-grade 24/7 support </div> </a></li> </ul> </div> </div> </div> </li> <li class="HeaderMenu-item position-relative flex-wrap flex-justify-between flex-items-center d-block d-lg-flex flex-lg-nowrap flex-lg-items-center js-details-container js-header-menu-item"> <a class="HeaderMenu-link no-underline px-0 px-lg-2 py-3 py-lg-2 d-block d-lg-inline-block" data-analytics-event="{"location":"navbar","action":"pricing","context":"global","tag":"link","label":"pricing_link_global_navbar"}" href="https://github.com/pricing">Pricing</a> </li> </ul> </nav> <div class="d-flex flex-column flex-lg-row width-full flex-justify-end flex-lg-items-center text-center mt-3 mt-lg-0 text-lg-left ml-lg-3"> <qbsearch-input class="search-input" data-scope="repo:adelnobel/awesome-scalability" data-custom-scopes-path="/search/custom_scopes" data-delete-custom-scopes-csrf="DWJjE1ut6ovAzRHn9gJZ4EL45SnCq2pmPEaER0hHqi64cnPT0IB0V4zE2-YSTaXn-699WZjgenj-Boky9YrNOQ" data-max-custom-scopes="10" data-header-redesign-enabled="false" data-initial-value="" data-blackbird-suggestions-path="/search/suggestions" data-jump-to-suggestions-path="/_graphql/GetSuggestedNavigationDestinations" data-current-repository="adelnobel/awesome-scalability" data-current-org="" data-current-owner="adelnobel" data-logged-in="false" data-copilot-chat-enabled="false" data-nl-search-enabled="false" data-retain-scroll-position="true"> <div class="search-input-container search-with-dialog position-relative d-flex flex-row flex-items-center mr-4 rounded" data-action="click:qbsearch-input#searchInputContainerClicked" > <button type="button" class="header-search-button placeholder input-button form-control d-flex flex-1 flex-self-stretch flex-items-center no-wrap width-full py-0 pl-2 pr-0 text-left border-0 box-shadow-none" data-target="qbsearch-input.inputButton" aria-label="Search or jump to…" aria-haspopup="dialog" placeholder="Search or jump to..." data-hotkey=s,/ autocapitalize="off" data-analytics-event="{"location":"navbar","action":"searchbar","context":"global","tag":"input","label":"searchbar_input_global_navbar"}" data-action="click:qbsearch-input#handleExpand" > <div class="mr-2 color-fg-muted"> <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-search"> <path d="M10.68 11.74a6 6 0 0 1-7.922-8.982 6 6 0 0 1 8.982 7.922l3.04 3.04a.749.749 0 0 1-.326 1.275.749.749 0 0 1-.734-.215ZM11.5 7a4.499 4.499 0 1 0-8.997 0A4.499 4.499 0 0 0 11.5 7Z"></path> </svg> </div> <span class="flex-1" data-target="qbsearch-input.inputButtonText">Search or jump to...</span> <div class="d-flex" data-target="qbsearch-input.hotkeyIndicator"> <svg xmlns="http://www.w3.org/2000/svg" width="22" height="20" aria-hidden="true" class="mr-1"><path fill="none" stroke="#979A9C" opacity=".4" d="M3.5.5h12c1.7 0 3 1.3 3 3v13c0 1.7-1.3 3-3 3h-12c-1.7 0-3-1.3-3-3v-13c0-1.7 1.3-3 3-3z"></path><path fill="#979A9C" d="M11.8 6L8 15.1h-.9L10.8 6h1z"></path></svg> </div> </button> <input type="hidden" name="type" class="js-site-search-type-field"> <div class="Overlay--hidden " data-modal-dialog-overlay> <modal-dialog data-action="close:qbsearch-input#handleClose cancel:qbsearch-input#handleClose" data-target="qbsearch-input.searchSuggestionsDialog" role="dialog" id="search-suggestions-dialog" aria-modal="true" aria-labelledby="search-suggestions-dialog-header" data-view-component="true" class="Overlay Overlay--width-large Overlay--height-auto"> <h1 id="search-suggestions-dialog-header" class="sr-only">Search code, repositories, users, issues, pull requests...</h1> <div class="Overlay-body Overlay-body--paddingNone"> <div data-view-component="true"> <div class="search-suggestions position-fixed width-full color-shadow-large border color-fg-default color-bg-default overflow-hidden d-flex flex-column query-builder-container" style="border-radius: 12px;" data-target="qbsearch-input.queryBuilderContainer" hidden > <!-- '"` --><!-- </textarea></xmp> --></option></form><form id="query-builder-test-form" action="" accept-charset="UTF-8" method="get"> <query-builder data-target="qbsearch-input.queryBuilder" id="query-builder-query-builder-test" data-filter-key=":" data-view-component="true" class="QueryBuilder search-query-builder"> <div class="FormControl FormControl--fullWidth"> <label id="query-builder-test-label" for="query-builder-test" class="FormControl-label sr-only"> Search </label> <div class="QueryBuilder-StyledInput width-fit " data-target="query-builder.styledInput" > <span id="query-builder-test-leadingvisual-wrap" class="FormControl-input-leadingVisualWrap QueryBuilder-leadingVisualWrap"> <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-search FormControl-input-leadingVisual"> <path d="M10.68 11.74a6 6 0 0 1-7.922-8.982 6 6 0 0 1 8.982 7.922l3.04 3.04a.749.749 0 0 1-.326 1.275.749.749 0 0 1-.734-.215ZM11.5 7a4.499 4.499 0 1 0-8.997 0A4.499 4.499 0 0 0 11.5 7Z"></path> </svg> </span> <div data-target="query-builder.styledInputContainer" class="QueryBuilder-StyledInputContainer"> <div aria-hidden="true" class="QueryBuilder-StyledInputContent" data-target="query-builder.styledInputContent" ></div> <div class="QueryBuilder-InputWrapper"> <div aria-hidden="true" class="QueryBuilder-Sizer" data-target="query-builder.sizer"></div> <input id="query-builder-test" name="query-builder-test" value="" autocomplete="off" type="text" role="combobox" spellcheck="false" aria-expanded="false" aria-describedby="validation-4a6ec19f-6216-4ae2-aeae-9af4ff2c13f3" data-target="query-builder.input" data-action=" input:query-builder#inputChange blur:query-builder#inputBlur keydown:query-builder#inputKeydown focus:query-builder#inputFocus " data-view-component="true" class="FormControl-input QueryBuilder-Input FormControl-medium" /> </div> </div> <span class="sr-only" id="query-builder-test-clear">Clear</span> <button role="button" id="query-builder-test-clear-button" aria-labelledby="query-builder-test-clear query-builder-test-label" data-target="query-builder.clearButton" data-action=" click:query-builder#clear focus:query-builder#clearButtonFocus blur:query-builder#clearButtonBlur " variant="small" hidden="hidden" type="button" data-view-component="true" class="Button Button--iconOnly Button--invisible Button--medium mr-1 px-2 py-0 d-flex flex-items-center rounded-1 color-fg-muted"> <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-x-circle-fill Button-visual"> <path d="M2.343 13.657A8 8 0 1 1 13.658 2.343 8 8 0 0 1 2.343 13.657ZM6.03 4.97a.751.751 0 0 0-1.042.018.751.751 0 0 0-.018 1.042L6.94 8 4.97 9.97a.749.749 0 0 0 .326 1.275.749.749 0 0 0 .734-.215L8 9.06l1.97 1.97a.749.749 0 0 0 1.275-.326.749.749 0 0 0-.215-.734L9.06 8l1.97-1.97a.749.749 0 0 0-.326-1.275.749.749 0 0 0-.734.215L8 6.94Z"></path> </svg> </button> </div> <template id="search-icon"> <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-search"> <path d="M10.68 11.74a6 6 0 0 1-7.922-8.982 6 6 0 0 1 8.982 7.922l3.04 3.04a.749.749 0 0 1-.326 1.275.749.749 0 0 1-.734-.215ZM11.5 7a4.499 4.499 0 1 0-8.997 0A4.499 4.499 0 0 0 11.5 7Z"></path> </svg> </template> <template id="code-icon"> <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-code"> <path d="m11.28 3.22 4.25 4.25a.75.75 0 0 1 0 1.06l-4.25 4.25a.749.749 0 0 1-1.275-.326.749.749 0 0 1 .215-.734L13.94 8l-3.72-3.72a.749.749 0 0 1 .326-1.275.749.749 0 0 1 .734.215Zm-6.56 0a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042L2.06 8l3.72 3.72a.749.749 0 0 1-.326 1.275.749.749 0 0 1-.734-.215L.47 8.53a.75.75 0 0 1 0-1.06Z"></path> </svg> </template> <template id="file-code-icon"> <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-file-code"> <path d="M4 1.75C4 .784 4.784 0 5.75 0h5.586c.464 0 .909.184 1.237.513l2.914 2.914c.329.328.513.773.513 1.237v8.586A1.75 1.75 0 0 1 14.25 15h-9a.75.75 0 0 1 0-1.5h9a.25.25 0 0 0 .25-.25V6h-2.75A1.75 1.75 0 0 1 10 4.25V1.5H5.75a.25.25 0 0 0-.25.25v2.5a.75.75 0 0 1-1.5 0Zm1.72 4.97a.75.75 0 0 1 1.06 0l2 2a.75.75 0 0 1 0 1.06l-2 2a.749.749 0 0 1-1.275-.326.749.749 0 0 1 .215-.734l1.47-1.47-1.47-1.47a.75.75 0 0 1 0-1.06ZM3.28 7.78 1.81 9.25l1.47 1.47a.751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018l-2-2a.75.75 0 0 1 0-1.06l2-2a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042Zm8.22-6.218V4.25c0 .138.112.25.25.25h2.688l-.011-.013-2.914-2.914-.013-.011Z"></path> </svg> </template> <template id="history-icon"> <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-history"> <path d="m.427 1.927 1.215 1.215a8.002 8.002 0 1 1-1.6 5.685.75.75 0 1 1 1.493-.154 6.5 6.5 0 1 0 1.18-4.458l1.358 1.358A.25.25 0 0 1 3.896 6H.25A.25.25 0 0 1 0 5.75V2.104a.25.25 0 0 1 .427-.177ZM7.75 4a.75.75 0 0 1 .75.75v2.992l2.028.812a.75.75 0 0 1-.557 1.392l-2.5-1A.751.751 0 0 1 7 8.25v-3.5A.75.75 0 0 1 7.75 4Z"></path> </svg> </template> <template id="repo-icon"> <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-repo"> <path d="M2 2.5A2.5 2.5 0 0 1 4.5 0h8.75a.75.75 0 0 1 .75.75v12.5a.75.75 0 0 1-.75.75h-2.5a.75.75 0 0 1 0-1.5h1.75v-2h-8a1 1 0 0 0-.714 1.7.75.75 0 1 1-1.072 1.05A2.495 2.495 0 0 1 2 11.5Zm10.5-1h-8a1 1 0 0 0-1 1v6.708A2.486 2.486 0 0 1 4.5 9h8ZM5 12.25a.25.25 0 0 1 .25-.25h3.5a.25.25 0 0 1 .25.25v3.25a.25.25 0 0 1-.4.2l-1.45-1.087a.249.249 0 0 0-.3 0L5.4 15.7a.25.25 0 0 1-.4-.2Z"></path> </svg> </template> <template id="bookmark-icon"> <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-bookmark"> <path d="M3 2.75C3 1.784 3.784 1 4.75 1h6.5c.966 0 1.75.784 1.75 1.75v11.5a.75.75 0 0 1-1.227.579L8 11.722l-3.773 3.107A.751.751 0 0 1 3 14.25Zm1.75-.25a.25.25 0 0 0-.25.25v9.91l3.023-2.489a.75.75 0 0 1 .954 0l3.023 2.49V2.75a.25.25 0 0 0-.25-.25Z"></path> </svg> </template> <template id="plus-circle-icon"> <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-plus-circle"> <path d="M8 0a8 8 0 1 1 0 16A8 8 0 0 1 8 0ZM1.5 8a6.5 6.5 0 1 0 13 0 6.5 6.5 0 0 0-13 0Zm7.25-3.25v2.5h2.5a.75.75 0 0 1 0 1.5h-2.5v2.5a.75.75 0 0 1-1.5 0v-2.5h-2.5a.75.75 0 0 1 0-1.5h2.5v-2.5a.75.75 0 0 1 1.5 0Z"></path> </svg> </template> <template id="circle-icon"> <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-dot-fill"> <path d="M8 4a4 4 0 1 1 0 8 4 4 0 0 1 0-8Z"></path> </svg> </template> <template id="trash-icon"> <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-trash"> <path d="M11 1.75V3h2.25a.75.75 0 0 1 0 1.5H2.75a.75.75 0 0 1 0-1.5H5V1.75C5 .784 5.784 0 6.75 0h2.5C10.216 0 11 .784 11 1.75ZM4.496 6.675l.66 6.6a.25.25 0 0 0 .249.225h5.19a.25.25 0 0 0 .249-.225l.66-6.6a.75.75 0 0 1 1.492.149l-.66 6.6A1.748 1.748 0 0 1 10.595 15h-5.19a1.75 1.75 0 0 1-1.741-1.575l-.66-6.6a.75.75 0 1 1 1.492-.15ZM6.5 1.75V3h3V1.75a.25.25 0 0 0-.25-.25h-2.5a.25.25 0 0 0-.25.25Z"></path> </svg> </template> <template id="team-icon"> <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-people"> <path d="M2 5.5a3.5 3.5 0 1 1 5.898 2.549 5.508 5.508 0 0 1 3.034 4.084.75.75 0 1 1-1.482.235 4 4 0 0 0-7.9 0 .75.75 0 0 1-1.482-.236A5.507 5.507 0 0 1 3.102 8.05 3.493 3.493 0 0 1 2 5.5ZM11 4a3.001 3.001 0 0 1 2.22 5.018 5.01 5.01 0 0 1 2.56 3.012.749.749 0 0 1-.885.954.752.752 0 0 1-.549-.514 3.507 3.507 0 0 0-2.522-2.372.75.75 0 0 1-.574-.73v-.352a.75.75 0 0 1 .416-.672A1.5 1.5 0 0 0 11 5.5.75.75 0 0 1 11 4Zm-5.5-.5a2 2 0 1 0-.001 3.999A2 2 0 0 0 5.5 3.5Z"></path> </svg> </template> <template id="project-icon"> <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-project"> <path d="M1.75 0h12.5C15.216 0 16 .784 16 1.75v12.5A1.75 1.75 0 0 1 14.25 16H1.75A1.75 1.75 0 0 1 0 14.25V1.75C0 .784.784 0 1.75 0ZM1.5 1.75v12.5c0 .138.112.25.25.25h12.5a.25.25 0 0 0 .25-.25V1.75a.25.25 0 0 0-.25-.25H1.75a.25.25 0 0 0-.25.25ZM11.75 3a.75.75 0 0 1 .75.75v7.5a.75.75 0 0 1-1.5 0v-7.5a.75.75 0 0 1 .75-.75Zm-8.25.75a.75.75 0 0 1 1.5 0v5.5a.75.75 0 0 1-1.5 0ZM8 3a.75.75 0 0 1 .75.75v3.5a.75.75 0 0 1-1.5 0v-3.5A.75.75 0 0 1 8 3Z"></path> </svg> </template> <template id="pencil-icon"> <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-pencil"> <path d="M11.013 1.427a1.75 1.75 0 0 1 2.474 0l1.086 1.086a1.75 1.75 0 0 1 0 2.474l-8.61 8.61c-.21.21-.47.364-.756.445l-3.251.93a.75.75 0 0 1-.927-.928l.929-3.25c.081-.286.235-.547.445-.758l8.61-8.61Zm.176 4.823L9.75 4.81l-6.286 6.287a.253.253 0 0 0-.064.108l-.558 1.953 1.953-.558a.253.253 0 0 0 .108-.064Zm1.238-3.763a.25.25 0 0 0-.354 0L10.811 3.75l1.439 1.44 1.263-1.263a.25.25 0 0 0 0-.354Z"></path> </svg> </template> <template id="copilot-icon"> <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-copilot"> <path d="M7.998 15.035c-4.562 0-7.873-2.914-7.998-3.749V9.338c.085-.628.677-1.686 1.588-2.065.013-.07.024-.143.036-.218.029-.183.06-.384.126-.612-.201-.508-.254-1.084-.254-1.656 0-.87.128-1.769.693-2.484.579-.733 1.494-1.124 2.724-1.261 1.206-.134 2.262.034 2.944.765.05.053.096.108.139.165.044-.057.094-.112.143-.165.682-.731 1.738-.899 2.944-.765 1.23.137 2.145.528 2.724 1.261.566.715.693 1.614.693 2.484 0 .572-.053 1.148-.254 1.656.066.228.098.429.126.612.012.076.024.148.037.218.924.385 1.522 1.471 1.591 2.095v1.872c0 .766-3.351 3.795-8.002 3.795Zm0-1.485c2.28 0 4.584-1.11 5.002-1.433V7.862l-.023-.116c-.49.21-1.075.291-1.727.291-1.146 0-2.059-.327-2.71-.991A3.222 3.222 0 0 1 8 6.303a3.24 3.24 0 0 1-.544.743c-.65.664-1.563.991-2.71.991-.652 0-1.236-.081-1.727-.291l-.023.116v4.255c.419.323 2.722 1.433 5.002 1.433ZM6.762 2.83c-.193-.206-.637-.413-1.682-.297-1.019.113-1.479.404-1.713.7-.247.312-.369.789-.369 1.554 0 .793.129 1.171.308 1.371.162.181.519.379 1.442.379.853 0 1.339-.235 1.638-.54.315-.322.527-.827.617-1.553.117-.935-.037-1.395-.241-1.614Zm4.155-.297c-1.044-.116-1.488.091-1.681.297-.204.219-.359.679-.242 1.614.091.726.303 1.231.618 1.553.299.305.784.54 1.638.54.922 0 1.28-.198 1.442-.379.179-.2.308-.578.308-1.371 0-.765-.123-1.242-.37-1.554-.233-.296-.693-.587-1.713-.7Z"></path><path d="M6.25 9.037a.75.75 0 0 1 .75.75v1.501a.75.75 0 0 1-1.5 0V9.787a.75.75 0 0 1 .75-.75Zm4.25.75v1.501a.75.75 0 0 1-1.5 0V9.787a.75.75 0 0 1 1.5 0Z"></path> </svg> </template> <template id="copilot-error-icon"> <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-copilot-error"> <path d="M16 11.24c0 .112-.072.274-.21.467L13 9.688V7.862l-.023-.116c-.49.21-1.075.291-1.727.291-.198 0-.388-.009-.571-.029L6.833 5.226a4.01 4.01 0 0 0 .17-.782c.117-.935-.037-1.395-.241-1.614-.193-.206-.637-.413-1.682-.297-.683.076-1.115.231-1.395.415l-1.257-.91c.579-.564 1.413-.877 2.485-.996 1.206-.134 2.262.034 2.944.765.05.053.096.108.139.165.044-.057.094-.112.143-.165.682-.731 1.738-.899 2.944-.765 1.23.137 2.145.528 2.724 1.261.566.715.693 1.614.693 2.484 0 .572-.053 1.148-.254 1.656.066.228.098.429.126.612.012.076.024.148.037.218.924.385 1.522 1.471 1.591 2.095Zm-5.083-8.707c-1.044-.116-1.488.091-1.681.297-.204.219-.359.679-.242 1.614.091.726.303 1.231.618 1.553.299.305.784.54 1.638.54.922 0 1.28-.198 1.442-.379.179-.2.308-.578.308-1.371 0-.765-.123-1.242-.37-1.554-.233-.296-.693-.587-1.713-.7Zm2.511 11.074c-1.393.776-3.272 1.428-5.43 1.428-4.562 0-7.873-2.914-7.998-3.749V9.338c.085-.628.677-1.686 1.588-2.065.013-.07.024-.143.036-.218.029-.183.06-.384.126-.612-.18-.455-.241-.963-.252-1.475L.31 4.107A.747.747 0 0 1 0 3.509V3.49a.748.748 0 0 1 .625-.73c.156-.026.306.047.435.139l14.667 10.578a.592.592 0 0 1 .227.264.752.752 0 0 1 .046.249v.022a.75.75 0 0 1-1.19.596Zm-1.367-.991L5.635 7.964a5.128 5.128 0 0 1-.889.073c-.652 0-1.236-.081-1.727-.291l-.023.116v4.255c.419.323 2.722 1.433 5.002 1.433 1.539 0 3.089-.505 4.063-.934Z"></path> </svg> </template> <template id="workflow-icon"> <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-workflow"> <path d="M0 1.75C0 .784.784 0 1.75 0h3.5C6.216 0 7 .784 7 1.75v3.5A1.75 1.75 0 0 1 5.25 7H4v4a1 1 0 0 0 1 1h4v-1.25C9 9.784 9.784 9 10.75 9h3.5c.966 0 1.75.784 1.75 1.75v3.5A1.75 1.75 0 0 1 14.25 16h-3.5A1.75 1.75 0 0 1 9 14.25v-.75H5A2.5 2.5 0 0 1 2.5 11V7h-.75A1.75 1.75 0 0 1 0 5.25Zm1.75-.25a.25.25 0 0 0-.25.25v3.5c0 .138.112.25.25.25h3.5a.25.25 0 0 0 .25-.25v-3.5a.25.25 0 0 0-.25-.25Zm9 9a.25.25 0 0 0-.25.25v3.5c0 .138.112.25.25.25h3.5a.25.25 0 0 0 .25-.25v-3.5a.25.25 0 0 0-.25-.25Z"></path> </svg> </template> <template id="book-icon"> <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-book"> <path d="M0 1.75A.75.75 0 0 1 .75 1h4.253c1.227 0 2.317.59 3 1.501A3.743 3.743 0 0 1 11.006 1h4.245a.75.75 0 0 1 .75.75v10.5a.75.75 0 0 1-.75.75h-4.507a2.25 2.25 0 0 0-1.591.659l-.622.621a.75.75 0 0 1-1.06 0l-.622-.621A2.25 2.25 0 0 0 5.258 13H.75a.75.75 0 0 1-.75-.75Zm7.251 10.324.004-5.073-.002-2.253A2.25 2.25 0 0 0 5.003 2.5H1.5v9h3.757a3.75 3.75 0 0 1 1.994.574ZM8.755 4.75l-.004 7.322a3.752 3.752 0 0 1 1.992-.572H14.5v-9h-3.495a2.25 2.25 0 0 0-2.25 2.25Z"></path> </svg> </template> <template id="code-review-icon"> <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-code-review"> <path d="M1.75 1h12.5c.966 0 1.75.784 1.75 1.75v8.5A1.75 1.75 0 0 1 14.25 13H8.061l-2.574 2.573A1.458 1.458 0 0 1 3 14.543V13H1.75A1.75 1.75 0 0 1 0 11.25v-8.5C0 1.784.784 1 1.75 1ZM1.5 2.75v8.5c0 .138.112.25.25.25h2a.75.75 0 0 1 .75.75v2.19l2.72-2.72a.749.749 0 0 1 .53-.22h6.5a.25.25 0 0 0 .25-.25v-8.5a.25.25 0 0 0-.25-.25H1.75a.25.25 0 0 0-.25.25Zm5.28 1.72a.75.75 0 0 1 0 1.06L5.31 7l1.47 1.47a.751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018l-2-2a.75.75 0 0 1 0-1.06l2-2a.75.75 0 0 1 1.06 0Zm2.44 0a.75.75 0 0 1 1.06 0l2 2a.75.75 0 0 1 0 1.06l-2 2a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042L10.69 7 9.22 5.53a.75.75 0 0 1 0-1.06Z"></path> </svg> </template> <template id="codespaces-icon"> <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-codespaces"> <path d="M0 11.25c0-.966.784-1.75 1.75-1.75h12.5c.966 0 1.75.784 1.75 1.75v3A1.75 1.75 0 0 1 14.25 16H1.75A1.75 1.75 0 0 1 0 14.25Zm2-9.5C2 .784 2.784 0 3.75 0h8.5C13.216 0 14 .784 14 1.75v5a1.75 1.75 0 0 1-1.75 1.75h-8.5A1.75 1.75 0 0 1 2 6.75Zm1.75-.25a.25.25 0 0 0-.25.25v5c0 .138.112.25.25.25h8.5a.25.25 0 0 0 .25-.25v-5a.25.25 0 0 0-.25-.25Zm-2 9.5a.25.25 0 0 0-.25.25v3c0 .138.112.25.25.25h12.5a.25.25 0 0 0 .25-.25v-3a.25.25 0 0 0-.25-.25Z"></path><path d="M7 12.75a.75.75 0 0 1 .75-.75h4.5a.75.75 0 0 1 0 1.5h-4.5a.75.75 0 0 1-.75-.75Zm-4 0a.75.75 0 0 1 .75-.75h.5a.75.75 0 0 1 0 1.5h-.5a.75.75 0 0 1-.75-.75Z"></path> </svg> </template> <template id="comment-icon"> <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-comment"> <path d="M1 2.75C1 1.784 1.784 1 2.75 1h10.5c.966 0 1.75.784 1.75 1.75v7.5A1.75 1.75 0 0 1 13.25 12H9.06l-2.573 2.573A1.458 1.458 0 0 1 4 13.543V12H2.75A1.75 1.75 0 0 1 1 10.25Zm1.75-.25a.25.25 0 0 0-.25.25v7.5c0 .138.112.25.25.25h2a.75.75 0 0 1 .75.75v2.19l2.72-2.72a.749.749 0 0 1 .53-.22h4.5a.25.25 0 0 0 .25-.25v-7.5a.25.25 0 0 0-.25-.25Z"></path> </svg> </template> <template id="comment-discussion-icon"> <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-comment-discussion"> <path d="M1.75 1h8.5c.966 0 1.75.784 1.75 1.75v5.5A1.75 1.75 0 0 1 10.25 10H7.061l-2.574 2.573A1.458 1.458 0 0 1 2 11.543V10h-.25A1.75 1.75 0 0 1 0 8.25v-5.5C0 1.784.784 1 1.75 1ZM1.5 2.75v5.5c0 .138.112.25.25.25h1a.75.75 0 0 1 .75.75v2.19l2.72-2.72a.749.749 0 0 1 .53-.22h3.5a.25.25 0 0 0 .25-.25v-5.5a.25.25 0 0 0-.25-.25h-8.5a.25.25 0 0 0-.25.25Zm13 2a.25.25 0 0 0-.25-.25h-.5a.75.75 0 0 1 0-1.5h.5c.966 0 1.75.784 1.75 1.75v5.5A1.75 1.75 0 0 1 14.25 12H14v1.543a1.458 1.458 0 0 1-2.487 1.03L9.22 12.28a.749.749 0 0 1 .326-1.275.749.749 0 0 1 .734.215l2.22 2.22v-2.19a.75.75 0 0 1 .75-.75h1a.25.25 0 0 0 .25-.25Z"></path> </svg> </template> <template id="organization-icon"> <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-organization"> <path d="M1.75 16A1.75 1.75 0 0 1 0 14.25V1.75C0 .784.784 0 1.75 0h8.5C11.216 0 12 .784 12 1.75v12.5c0 .085-.006.168-.018.25h2.268a.25.25 0 0 0 .25-.25V8.285a.25.25 0 0 0-.111-.208l-1.055-.703a.749.749 0 1 1 .832-1.248l1.055.703c.487.325.779.871.779 1.456v5.965A1.75 1.75 0 0 1 14.25 16h-3.5a.766.766 0 0 1-.197-.026c-.099.017-.2.026-.303.026h-3a.75.75 0 0 1-.75-.75V14h-1v1.25a.75.75 0 0 1-.75.75Zm-.25-1.75c0 .138.112.25.25.25H4v-1.25a.75.75 0 0 1 .75-.75h2.5a.75.75 0 0 1 .75.75v1.25h2.25a.25.25 0 0 0 .25-.25V1.75a.25.25 0 0 0-.25-.25h-8.5a.25.25 0 0 0-.25.25ZM3.75 6h.5a.75.75 0 0 1 0 1.5h-.5a.75.75 0 0 1 0-1.5ZM3 3.75A.75.75 0 0 1 3.75 3h.5a.75.75 0 0 1 0 1.5h-.5A.75.75 0 0 1 3 3.75Zm4 3A.75.75 0 0 1 7.75 6h.5a.75.75 0 0 1 0 1.5h-.5A.75.75 0 0 1 7 6.75ZM7.75 3h.5a.75.75 0 0 1 0 1.5h-.5a.75.75 0 0 1 0-1.5ZM3 9.75A.75.75 0 0 1 3.75 9h.5a.75.75 0 0 1 0 1.5h-.5A.75.75 0 0 1 3 9.75ZM7.75 9h.5a.75.75 0 0 1 0 1.5h-.5a.75.75 0 0 1 0-1.5Z"></path> </svg> </template> <template id="rocket-icon"> <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-rocket"> <path d="M14.064 0h.186C15.216 0 16 .784 16 1.75v.186a8.752 8.752 0 0 1-2.564 6.186l-.458.459c-.314.314-.641.616-.979.904v3.207c0 .608-.315 1.172-.833 1.49l-2.774 1.707a.749.749 0 0 1-1.11-.418l-.954-3.102a1.214 1.214 0 0 1-.145-.125L3.754 9.816a1.218 1.218 0 0 1-.124-.145L.528 8.717a.749.749 0 0 1-.418-1.11l1.71-2.774A1.748 1.748 0 0 1 3.31 4h3.204c.288-.338.59-.665.904-.979l.459-.458A8.749 8.749 0 0 1 14.064 0ZM8.938 3.623h-.002l-.458.458c-.76.76-1.437 1.598-2.02 2.5l-1.5 2.317 2.143 2.143 2.317-1.5c.902-.583 1.74-1.26 2.499-2.02l.459-.458a7.25 7.25 0 0 0 2.123-5.127V1.75a.25.25 0 0 0-.25-.25h-.186a7.249 7.249 0 0 0-5.125 2.123ZM3.56 14.56c-.732.732-2.334 1.045-3.005 1.148a.234.234 0 0 1-.201-.064.234.234 0 0 1-.064-.201c.103-.671.416-2.273 1.15-3.003a1.502 1.502 0 1 1 2.12 2.12Zm6.94-3.935c-.088.06-.177.118-.266.175l-2.35 1.521.548 1.783 1.949-1.2a.25.25 0 0 0 .119-.213ZM3.678 8.116 5.2 5.766c.058-.09.117-.178.176-.266H3.309a.25.25 0 0 0-.213.119l-1.2 1.95ZM12 5a1 1 0 1 1-2 0 1 1 0 0 1 2 0Z"></path> </svg> </template> <template id="shield-check-icon"> <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-shield-check"> <path d="m8.533.133 5.25 1.68A1.75 1.75 0 0 1 15 3.48V7c0 1.566-.32 3.182-1.303 4.682-.983 1.498-2.585 2.813-5.032 3.855a1.697 1.697 0 0 1-1.33 0c-2.447-1.042-4.049-2.357-5.032-3.855C1.32 10.182 1 8.566 1 7V3.48a1.75 1.75 0 0 1 1.217-1.667l5.25-1.68a1.748 1.748 0 0 1 1.066 0Zm-.61 1.429.001.001-5.25 1.68a.251.251 0 0 0-.174.237V7c0 1.36.275 2.666 1.057 3.859.784 1.194 2.121 2.342 4.366 3.298a.196.196 0 0 0 .154 0c2.245-.957 3.582-2.103 4.366-3.297C13.225 9.666 13.5 8.358 13.5 7V3.48a.25.25 0 0 0-.174-.238l-5.25-1.68a.25.25 0 0 0-.153 0ZM11.28 6.28l-3.5 3.5a.75.75 0 0 1-1.06 0l-1.5-1.5a.749.749 0 0 1 .326-1.275.749.749 0 0 1 .734.215l.97.97 2.97-2.97a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042Z"></path> </svg> </template> <template id="heart-icon"> <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-heart"> <path d="m8 14.25.345.666a.75.75 0 0 1-.69 0l-.008-.004-.018-.01a7.152 7.152 0 0 1-.31-.17 22.055 22.055 0 0 1-3.434-2.414C2.045 10.731 0 8.35 0 5.5 0 2.836 2.086 1 4.25 1 5.797 1 7.153 1.802 8 3.02 8.847 1.802 10.203 1 11.75 1 13.914 1 16 2.836 16 5.5c0 2.85-2.045 5.231-3.885 6.818a22.066 22.066 0 0 1-3.744 2.584l-.018.01-.006.003h-.002ZM4.25 2.5c-1.336 0-2.75 1.164-2.75 3 0 2.15 1.58 4.144 3.365 5.682A20.58 20.58 0 0 0 8 13.393a20.58 20.58 0 0 0 3.135-2.211C12.92 9.644 14.5 7.65 14.5 5.5c0-1.836-1.414-3-2.75-3-1.373 0-2.609.986-3.029 2.456a.749.749 0 0 1-1.442 0C6.859 3.486 5.623 2.5 4.25 2.5Z"></path> </svg> </template> <template id="server-icon"> <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-server"> <path d="M1.75 1h12.5c.966 0 1.75.784 1.75 1.75v4c0 .372-.116.717-.314 1 .198.283.314.628.314 1v4a1.75 1.75 0 0 1-1.75 1.75H1.75A1.75 1.75 0 0 1 0 12.75v-4c0-.358.109-.707.314-1a1.739 1.739 0 0 1-.314-1v-4C0 1.784.784 1 1.75 1ZM1.5 2.75v4c0 .138.112.25.25.25h12.5a.25.25 0 0 0 .25-.25v-4a.25.25 0 0 0-.25-.25H1.75a.25.25 0 0 0-.25.25Zm.25 5.75a.25.25 0 0 0-.25.25v4c0 .138.112.25.25.25h12.5a.25.25 0 0 0 .25-.25v-4a.25.25 0 0 0-.25-.25ZM7 4.75A.75.75 0 0 1 7.75 4h4.5a.75.75 0 0 1 0 1.5h-4.5A.75.75 0 0 1 7 4.75ZM7.75 10h4.5a.75.75 0 0 1 0 1.5h-4.5a.75.75 0 0 1 0-1.5ZM3 4.75A.75.75 0 0 1 3.75 4h.5a.75.75 0 0 1 0 1.5h-.5A.75.75 0 0 1 3 4.75ZM3.75 10h.5a.75.75 0 0 1 0 1.5h-.5a.75.75 0 0 1 0-1.5Z"></path> </svg> </template> <template id="globe-icon"> <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-globe"> <path d="M8 0a8 8 0 1 1 0 16A8 8 0 0 1 8 0ZM5.78 8.75a9.64 9.64 0 0 0 1.363 4.177c.255.426.542.832.857 1.215.245-.296.551-.705.857-1.215A9.64 9.64 0 0 0 10.22 8.75Zm4.44-1.5a9.64 9.64 0 0 0-1.363-4.177c-.307-.51-.612-.919-.857-1.215a9.927 9.927 0 0 0-.857 1.215A9.64 9.64 0 0 0 5.78 7.25Zm-5.944 1.5H1.543a6.507 6.507 0 0 0 4.666 5.5c-.123-.181-.24-.365-.352-.552-.715-1.192-1.437-2.874-1.581-4.948Zm-2.733-1.5h2.733c.144-2.074.866-3.756 1.58-4.948.12-.197.237-.381.353-.552a6.507 6.507 0 0 0-4.666 5.5Zm10.181 1.5c-.144 2.074-.866 3.756-1.58 4.948-.12.197-.237.381-.353.552a6.507 6.507 0 0 0 4.666-5.5Zm2.733-1.5a6.507 6.507 0 0 0-4.666-5.5c.123.181.24.365.353.552.714 1.192 1.436 2.874 1.58 4.948Z"></path> </svg> </template> <template id="issue-opened-icon"> <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-issue-opened"> <path d="M8 9.5a1.5 1.5 0 1 0 0-3 1.5 1.5 0 0 0 0 3Z"></path><path d="M8 0a8 8 0 1 1 0 16A8 8 0 0 1 8 0ZM1.5 8a6.5 6.5 0 1 0 13 0 6.5 6.5 0 0 0-13 0Z"></path> </svg> </template> <template id="device-mobile-icon"> <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-device-mobile"> <path d="M3.75 0h8.5C13.216 0 14 .784 14 1.75v12.5A1.75 1.75 0 0 1 12.25 16h-8.5A1.75 1.75 0 0 1 2 14.25V1.75C2 .784 2.784 0 3.75 0ZM3.5 1.75v12.5c0 .138.112.25.25.25h8.5a.25.25 0 0 0 .25-.25V1.75a.25.25 0 0 0-.25-.25h-8.5a.25.25 0 0 0-.25.25ZM8 13a1 1 0 1 1 0-2 1 1 0 0 1 0 2Z"></path> </svg> </template> <template id="package-icon"> <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-package"> <path d="m8.878.392 5.25 3.045c.54.314.872.89.872 1.514v6.098a1.75 1.75 0 0 1-.872 1.514l-5.25 3.045a1.75 1.75 0 0 1-1.756 0l-5.25-3.045A1.75 1.75 0 0 1 1 11.049V4.951c0-.624.332-1.201.872-1.514L7.122.392a1.75 1.75 0 0 1 1.756 0ZM7.875 1.69l-4.63 2.685L8 7.133l4.755-2.758-4.63-2.685a.248.248 0 0 0-.25 0ZM2.5 5.677v5.372c0 .09.047.171.125.216l4.625 2.683V8.432Zm6.25 8.271 4.625-2.683a.25.25 0 0 0 .125-.216V5.677L8.75 8.432Z"></path> </svg> </template> <template id="credit-card-icon"> <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-credit-card"> <path d="M10.75 9a.75.75 0 0 0 0 1.5h1.5a.75.75 0 0 0 0-1.5h-1.5Z"></path><path d="M0 3.75C0 2.784.784 2 1.75 2h12.5c.966 0 1.75.784 1.75 1.75v8.5A1.75 1.75 0 0 1 14.25 14H1.75A1.75 1.75 0 0 1 0 12.25ZM14.5 6.5h-13v5.75c0 .138.112.25.25.25h12.5a.25.25 0 0 0 .25-.25Zm0-2.75a.25.25 0 0 0-.25-.25H1.75a.25.25 0 0 0-.25.25V5h13Z"></path> </svg> </template> <template id="play-icon"> <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-play"> <path d="M8 0a8 8 0 1 1 0 16A8 8 0 0 1 8 0ZM1.5 8a6.5 6.5 0 1 0 13 0 6.5 6.5 0 0 0-13 0Zm4.879-2.773 4.264 2.559a.25.25 0 0 1 0 .428l-4.264 2.559A.25.25 0 0 1 6 10.559V5.442a.25.25 0 0 1 .379-.215Z"></path> </svg> </template> <template id="gift-icon"> <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-gift"> <path d="M2 2.75A2.75 2.75 0 0 1 4.75 0c.983 0 1.873.42 2.57 1.232.268.318.497.668.68 1.042.183-.375.411-.725.68-1.044C9.376.42 10.266 0 11.25 0a2.75 2.75 0 0 1 2.45 4h.55c.966 0 1.75.784 1.75 1.75v2c0 .698-.409 1.301-1 1.582v4.918A1.75 1.75 0 0 1 13.25 16H2.75A1.75 1.75 0 0 1 1 14.25V9.332C.409 9.05 0 8.448 0 7.75v-2C0 4.784.784 4 1.75 4h.55c-.192-.375-.3-.8-.3-1.25ZM7.25 9.5H2.5v4.75c0 .138.112.25.25.25h4.5Zm1.5 0v5h4.5a.25.25 0 0 0 .25-.25V9.5Zm0-4V8h5.5a.25.25 0 0 0 .25-.25v-2a.25.25 0 0 0-.25-.25Zm-7 0a.25.25 0 0 0-.25.25v2c0 .138.112.25.25.25h5.5V5.5h-5.5Zm3-4a1.25 1.25 0 0 0 0 2.5h2.309c-.233-.818-.542-1.401-.878-1.793-.43-.502-.915-.707-1.431-.707ZM8.941 4h2.309a1.25 1.25 0 0 0 0-2.5c-.516 0-1 .205-1.43.707-.337.392-.646.975-.879 1.793Z"></path> </svg> </template> <template id="code-square-icon"> <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-code-square"> <path d="M0 1.75C0 .784.784 0 1.75 0h12.5C15.216 0 16 .784 16 1.75v12.5A1.75 1.75 0 0 1 14.25 16H1.75A1.75 1.75 0 0 1 0 14.25Zm1.75-.25a.25.25 0 0 0-.25.25v12.5c0 .138.112.25.25.25h12.5a.25.25 0 0 0 .25-.25V1.75a.25.25 0 0 0-.25-.25Zm7.47 3.97a.75.75 0 0 1 1.06 0l2 2a.75.75 0 0 1 0 1.06l-2 2a.749.749 0 0 1-1.275-.326.749.749 0 0 1 .215-.734L10.69 8 9.22 6.53a.75.75 0 0 1 0-1.06ZM6.78 6.53 5.31 8l1.47 1.47a.749.749 0 0 1-.326 1.275.749.749 0 0 1-.734-.215l-2-2a.75.75 0 0 1 0-1.06l2-2a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042Z"></path> </svg> </template> <template id="device-desktop-icon"> <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-device-desktop"> <path d="M14.25 1c.966 0 1.75.784 1.75 1.75v7.5A1.75 1.75 0 0 1 14.25 12h-3.727c.099 1.041.52 1.872 1.292 2.757A.752.752 0 0 1 11.25 16h-6.5a.75.75 0 0 1-.565-1.243c.772-.885 1.192-1.716 1.292-2.757H1.75A1.75 1.75 0 0 1 0 10.25v-7.5C0 1.784.784 1 1.75 1ZM1.75 2.5a.25.25 0 0 0-.25.25v7.5c0 .138.112.25.25.25h12.5a.25.25 0 0 0 .25-.25v-7.5a.25.25 0 0 0-.25-.25ZM9.018 12H6.982a5.72 5.72 0 0 1-.765 2.5h3.566a5.72 5.72 0 0 1-.765-2.5Z"></path> </svg> </template> <div class="position-relative"> <ul role="listbox" class="ActionListWrap QueryBuilder-ListWrap" aria-label="Suggestions" data-action=" combobox-commit:query-builder#comboboxCommit mousedown:query-builder#resultsMousedown " data-target="query-builder.resultsList" data-persist-list=false id="query-builder-test-results" ></ul> </div> <div class="FormControl-inlineValidation" id="validation-4a6ec19f-6216-4ae2-aeae-9af4ff2c13f3" hidden="hidden"> <span class="FormControl-inlineValidation--visual"> <svg aria-hidden="true" height="12" viewBox="0 0 12 12" version="1.1" width="12" data-view-component="true" class="octicon octicon-alert-fill"> <path d="M4.855.708c.5-.896 1.79-.896 2.29 0l4.675 8.351a1.312 1.312 0 0 1-1.146 1.954H1.33A1.313 1.313 0 0 1 .183 9.058ZM7 7V3H5v4Zm-1 3a1 1 0 1 0 0-2 1 1 0 0 0 0 2Z"></path> </svg> </span> <span></span> </div> </div> <div data-target="query-builder.screenReaderFeedback" aria-live="polite" aria-atomic="true" class="sr-only"></div> </query-builder></form> <div class="d-flex flex-row color-fg-muted px-3 text-small color-bg-default search-feedback-prompt"> <a target="_blank" href="https://docs.github.com/search-github/github-code-search/understanding-github-code-search-syntax" data-view-component="true" class="Link color-fg-accent text-normal ml-2"> Search syntax tips </a> <div class="d-flex flex-1"></div> </div> </div> </div> </div> </modal-dialog></div> </div> <div data-action="click:qbsearch-input#retract" class="dark-backdrop position-fixed" hidden data-target="qbsearch-input.darkBackdrop"></div> <div class="color-fg-default"> <dialog-helper> <dialog data-target="qbsearch-input.feedbackDialog" data-action="close:qbsearch-input#handleDialogClose cancel:qbsearch-input#handleDialogClose" id="feedback-dialog" aria-modal="true" aria-labelledby="feedback-dialog-title" aria-describedby="feedback-dialog-description" data-view-component="true" class="Overlay Overlay-whenNarrow Overlay--size-medium Overlay--motion-scaleFade Overlay--disableScroll"> <div data-view-component="true" class="Overlay-header"> <div class="Overlay-headerContentWrap"> <div class="Overlay-titleWrap"> <h1 class="Overlay-title " id="feedback-dialog-title"> Provide feedback </h1> </div> <div class="Overlay-actionWrap"> <button data-close-dialog-id="feedback-dialog" aria-label="Close" type="button" data-view-component="true" class="close-button Overlay-closeButton"><svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-x"> <path d="M3.72 3.72a.75.75 0 0 1 1.06 0L8 6.94l3.22-3.22a.749.749 0 0 1 1.275.326.749.749 0 0 1-.215.734L9.06 8l3.22 3.22a.749.749 0 0 1-.326 1.275.749.749 0 0 1-.734-.215L8 9.06l-3.22 3.22a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042L6.94 8 3.72 4.78a.75.75 0 0 1 0-1.06Z"></path> </svg></button> </div> </div> </div> <scrollable-region data-labelled-by="feedback-dialog-title"> <div data-view-component="true" class="Overlay-body"> <!-- '"` --><!-- </textarea></xmp> --></option></form><form id="code-search-feedback-form" data-turbo="false" action="/search/feedback" accept-charset="UTF-8" method="post"><input type="hidden" data-csrf="true" name="authenticity_token" value="A+86qiYBjrj0iZ+CjQIFvYDowYg+qDKeKqy3moHPLpbzKPr248XJ/u8A0D87w+vcj028H+7HP6d2RvTlOuBZFg==" /> <p>We read every piece of feedback, and take your input very seriously.</p> <textarea name="feedback" class="form-control width-full mb-2" style="height: 120px" id="feedback"></textarea> <input name="include_email" id="include_email" aria-label="Include my email address so I can be contacted" class="form-control mr-2" type="checkbox"> <label for="include_email" style="font-weight: normal">Include my email address so I can be contacted</label> </form></div> </scrollable-region> <div data-view-component="true" class="Overlay-footer Overlay-footer--alignEnd"> <button data-close-dialog-id="feedback-dialog" type="button" data-view-component="true" class="btn"> Cancel </button> <button form="code-search-feedback-form" data-action="click:qbsearch-input#submitFeedback" type="submit" data-view-component="true" class="btn-primary btn"> Submit feedback </button> </div> </dialog></dialog-helper> <custom-scopes data-target="qbsearch-input.customScopesManager"> <dialog-helper> <dialog data-target="custom-scopes.customScopesModalDialog" data-action="close:qbsearch-input#handleDialogClose cancel:qbsearch-input#handleDialogClose" id="custom-scopes-dialog" aria-modal="true" aria-labelledby="custom-scopes-dialog-title" aria-describedby="custom-scopes-dialog-description" data-view-component="true" class="Overlay Overlay-whenNarrow Overlay--size-medium Overlay--motion-scaleFade Overlay--disableScroll"> <div data-view-component="true" class="Overlay-header Overlay-header--divided"> <div class="Overlay-headerContentWrap"> <div class="Overlay-titleWrap"> <h1 class="Overlay-title " id="custom-scopes-dialog-title"> Saved searches </h1> <h2 id="custom-scopes-dialog-description" class="Overlay-description">Use saved searches to filter your results more quickly</h2> </div> <div class="Overlay-actionWrap"> <button data-close-dialog-id="custom-scopes-dialog" aria-label="Close" type="button" data-view-component="true" class="close-button Overlay-closeButton"><svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-x"> <path d="M3.72 3.72a.75.75 0 0 1 1.06 0L8 6.94l3.22-3.22a.749.749 0 0 1 1.275.326.749.749 0 0 1-.215.734L9.06 8l3.22 3.22a.749.749 0 0 1-.326 1.275.749.749 0 0 1-.734-.215L8 9.06l-3.22 3.22a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042L6.94 8 3.72 4.78a.75.75 0 0 1 0-1.06Z"></path> </svg></button> </div> </div> </div> <scrollable-region data-labelled-by="custom-scopes-dialog-title"> <div data-view-component="true" class="Overlay-body"> <div data-target="custom-scopes.customScopesModalDialogFlash"></div> <div hidden class="create-custom-scope-form" data-target="custom-scopes.createCustomScopeForm"> <!-- '"` --><!-- </textarea></xmp> --></option></form><form id="custom-scopes-dialog-form" data-turbo="false" action="/search/custom_scopes" accept-charset="UTF-8" method="post"><input type="hidden" data-csrf="true" name="authenticity_token" value="c3FlXEhIdlwEaTL2nq0x7EX3N20BipPlX9IZjbWmizPxym4zva8n0qC/HePk8zEaPM1KoND09qgEIW8VyQEXig==" /> <div data-target="custom-scopes.customScopesModalDialogFlash"></div> <input type="hidden" id="custom_scope_id" name="custom_scope_id" data-target="custom-scopes.customScopesIdField"> <div class="form-group"> <label for="custom_scope_name">Name</label> <auto-check src="/search/custom_scopes/check_name" required> <input type="text" name="custom_scope_name" id="custom_scope_name" data-target="custom-scopes.customScopesNameField" class="form-control" autocomplete="off" placeholder="github-ruby" required maxlength="50"> <input type="hidden" data-csrf="true" value="WHotsqiKSu3rR/NxUPyO+Vpx7PHHZ9yPXaK0J6zmnmJAqEgkTKdUHTXfAkY1tMj3U04Kt3/Y2WRmG0o4ioEgZA==" /> </auto-check> </div> <div class="form-group"> <label for="custom_scope_query">Query</label> <input type="text" name="custom_scope_query" id="custom_scope_query" data-target="custom-scopes.customScopesQueryField" class="form-control" autocomplete="off" placeholder="(repo:mona/a OR repo:mona/b) AND lang:python" required maxlength="500"> </div> <p class="text-small color-fg-muted"> To see all available qualifiers, see our <a class="Link--inTextBlock" href="https://docs.github.com/search-github/github-code-search/understanding-github-code-search-syntax">documentation</a>. </p> </form> </div> <div data-target="custom-scopes.manageCustomScopesForm"> <div data-target="custom-scopes.list"></div> </div> </div> </scrollable-region> <div data-view-component="true" class="Overlay-footer Overlay-footer--alignEnd Overlay-footer--divided"> <button data-action="click:custom-scopes#customScopesCancel" type="button" data-view-component="true" class="btn"> Cancel </button> <button form="custom-scopes-dialog-form" data-action="click:custom-scopes#customScopesSubmit" data-target="custom-scopes.customScopesSubmitButton" type="submit" data-view-component="true" class="btn-primary btn"> Create saved search </button> </div> </dialog></dialog-helper> </custom-scopes> </div> </qbsearch-input> <div class="position-relative HeaderMenu-link-wrap d-lg-inline-block"> <a href="/login?return_to=https%3A%2F%2Fgithub.com%2Fadelnobel%2Fawesome-scalability%2Ftree%2Fpatch-1" class="HeaderMenu-link HeaderMenu-link--sign-in HeaderMenu-button flex-shrink-0 no-underline d-none d-lg-inline-flex border border-lg-0 rounded rounded-lg-0 px-2 py-1" style="margin-left: 12px;" data-hydro-click="{"event_type":"authentication.click","payload":{"location_in_page":"site header menu","repository_id":null,"auth_type":"SIGN_UP","originating_url":"https://github.com/adelnobel/awesome-scalability/tree/patch-1","user_id":null}}" data-hydro-click-hmac="6dbd095eaf9f7cc96254b8c11a890511db1de99e3ec370c4e62646c9cba5cb11" data-analytics-event="{"category":"Marketing nav","action":"click to go to homepage","label":"ref_page:Marketing;ref_cta:Sign in;ref_loc:Header"}" > Sign in </a> </div> <a href="/signup?ref_cta=Sign+up&ref_loc=header+logged+out&ref_page=%2F%3Cuser-name%3E%2F%3Crepo-name%3E%2Ffiles%2Fdisambiguate&source=header-repo&source_repo=adelnobel%2Fawesome-scalability" class="HeaderMenu-link HeaderMenu-link--sign-up HeaderMenu-button flex-shrink-0 d-flex d-lg-inline-flex no-underline border color-border-default rounded px-2 py-1" data-hydro-click="{"event_type":"authentication.click","payload":{"location_in_page":"site header menu","repository_id":null,"auth_type":"SIGN_UP","originating_url":"https://github.com/adelnobel/awesome-scalability/tree/patch-1","user_id":null}}" data-hydro-click-hmac="6dbd095eaf9f7cc96254b8c11a890511db1de99e3ec370c4e62646c9cba5cb11" data-analytics-event="{"category":"Sign up","action":"click to sign up for account","label":"ref_page:/<user-name>/<repo-name>/files/disambiguate;ref_cta:Sign up;ref_loc:header logged out"}" > Sign up </a> <button type="button" class="sr-only js-header-menu-focus-trap d-block d-lg-none">Reseting focus</button> </div> </div> </div> </div> </header> <div hidden="hidden" data-view-component="true" class="js-stale-session-flash stale-session-flash flash flash-warn flash-full"> <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-alert"> <path d="M6.457 1.047c.659-1.234 2.427-1.234 3.086 0l6.082 11.378A1.75 1.75 0 0 1 14.082 15H1.918a1.75 1.75 0 0 1-1.543-2.575Zm1.763.707a.25.25 0 0 0-.44 0L1.698 13.132a.25.25 0 0 0 .22.368h12.164a.25.25 0 0 0 .22-.368Zm.53 3.996v2.5a.75.75 0 0 1-1.5 0v-2.5a.75.75 0 0 1 1.5 0ZM9 11a1 1 0 1 1-2 0 1 1 0 0 1 2 0Z"></path> </svg> <span class="js-stale-session-flash-signed-in" hidden>You signed in with another tab or window. <a class="Link--inTextBlock" href="">Reload</a> to refresh your session.</span> <span class="js-stale-session-flash-signed-out" hidden>You signed out in another tab or window. <a class="Link--inTextBlock" href="">Reload</a> to refresh your session.</span> <span class="js-stale-session-flash-switched" hidden>You switched accounts on another tab or window. <a class="Link--inTextBlock" href="">Reload</a> to refresh your session.</span> <button id="icon-button-b2551c4a-d649-43bc-95f1-f277fb906075" aria-labelledby="tooltip-5433b164-eb71-4efd-addd-ea6c831ce5f9" type="button" data-view-component="true" class="Button Button--iconOnly Button--invisible Button--medium flash-close js-flash-close"> <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-x Button-visual"> <path d="M3.72 3.72a.75.75 0 0 1 1.06 0L8 6.94l3.22-3.22a.749.749 0 0 1 1.275.326.749.749 0 0 1-.215.734L9.06 8l3.22 3.22a.749.749 0 0 1-.326 1.275.749.749 0 0 1-.734-.215L8 9.06l-3.22 3.22a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042L6.94 8 3.72 4.78a.75.75 0 0 1 0-1.06Z"></path> </svg> </button><tool-tip id="tooltip-5433b164-eb71-4efd-addd-ea6c831ce5f9" for="icon-button-b2551c4a-d649-43bc-95f1-f277fb906075" popover="manual" data-direction="s" data-type="label" data-view-component="true" class="sr-only position-absolute">Dismiss alert</tool-tip> </div> </div> <div id="start-of-content" class="show-on-focus"></div> <div id="js-flash-container" class="flash-container" data-turbo-replace> <template class="js-flash-template"> <div class="flash flash-full {{ className }}"> <div > <button autofocus class="flash-close js-flash-close" type="button" aria-label="Dismiss this message"> <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-x"> <path d="M3.72 3.72a.75.75 0 0 1 1.06 0L8 6.94l3.22-3.22a.749.749 0 0 1 1.275.326.749.749 0 0 1-.215.734L9.06 8l3.22 3.22a.749.749 0 0 1-.326 1.275.749.749 0 0 1-.734-.215L8 9.06l-3.22 3.22a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042L6.94 8 3.72 4.78a.75.75 0 0 1 0-1.06Z"></path> </svg> </button> <div aria-atomic="true" role="alert" class="js-flash-alert"> <div>{{ message }}</div> </div> </div> </div> </template> </div> <div class="application-main " data-commit-hovercards-enabled data-discussion-hovercards-enabled data-issue-and-pr-hovercards-enabled > <div itemscope itemtype="http://schema.org/SoftwareSourceCode" class=""> <main id="js-repo-pjax-container" > <div id="repository-container-header" class="pt-3 hide-full-screen" style="background-color: var(--page-header-bgColor, var(--color-page-header-bg));" data-turbo-replace> <div class="d-flex flex-nowrap flex-justify-end mb-3 px-3 px-lg-5" style="gap: 1rem;"> <div class="flex-auto min-width-0 width-fit"> <div class=" d-flex flex-wrap flex-items-center wb-break-word f3 text-normal"> <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-repo-forked color-fg-muted mr-2"> <path d="M5 5.372v.878c0 .414.336.75.75.75h4.5a.75.75 0 0 0 .75-.75v-.878a2.25 2.25 0 1 1 1.5 0v.878a2.25 2.25 0 0 1-2.25 2.25h-1.5v2.128a2.251 2.251 0 1 1-1.5 0V8.5h-1.5A2.25 2.25 0 0 1 3.5 6.25v-.878a2.25 2.25 0 1 1 1.5 0ZM5 3.25a.75.75 0 1 0-1.5 0 .75.75 0 0 0 1.5 0Zm6.75.75a.75.75 0 1 0 0-1.5.75.75 0 0 0 0 1.5Zm-3 8.75a.75.75 0 1 0-1.5 0 .75.75 0 0 0 1.5 0Z"></path> </svg> <span class="author flex-self-stretch" itemprop="author"> <a class="url fn" rel="author" data-hovercard-type="user" data-hovercard-url="/users/adelnobel/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="/adelnobel"> adelnobel </a> </span> <span class="mx-1 flex-self-stretch color-fg-muted">/</span> <strong itemprop="name" class="mr-2 flex-self-stretch"> <a data-pjax="#repo-content-pjax-container" data-turbo-frame="repo-content-turbo-frame" href="/adelnobel/awesome-scalability">awesome-scalability</a> </strong> <span></span><span class="Label Label--secondary v-align-middle mr-1">Public</span> </div> <span class="text-small lh-condensed-ultra no-wrap mt-1" data-repository-hovercards-enabled> forked from <a data-hovercard-type="repository" data-hovercard-url="/binhnguyennus/awesome-scalability/hovercard" class="Link--inTextBlock" href="/binhnguyennus/awesome-scalability">binhnguyennus/awesome-scalability</a> </span> </div> <div id="repository-details-container" class="flex-shrink-0" data-turbo-replace style="max-width: 70%;"> <ul class="pagehead-actions flex-shrink-0 d-none d-md-inline" style="padding: 2px 0;"> <li> <a href="/login?return_to=%2Fadelnobel%2Fawesome-scalability" rel="nofollow" id="repository-details-watch-button" data-hydro-click="{"event_type":"authentication.click","payload":{"location_in_page":"notification subscription menu watch","repository_id":null,"auth_type":"LOG_IN","originating_url":"https://github.com/adelnobel/awesome-scalability/tree/patch-1","user_id":null}}" data-hydro-click-hmac="65098a204af4a947ef611e588a2e5089b38db029060d78eea3c341f149959ec9" aria-label="You must be signed in to change notification settings" data-view-component="true" class="btn-sm btn"> <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-bell mr-2"> <path d="M8 16a2 2 0 0 0 1.985-1.75c.017-.137-.097-.25-.235-.25h-3.5c-.138 0-.252.113-.235.25A2 2 0 0 0 8 16ZM3 5a5 5 0 0 1 10 0v2.947c0 .05.015.098.042.139l1.703 2.555A1.519 1.519 0 0 1 13.482 13H2.518a1.516 1.516 0 0 1-1.263-2.36l1.703-2.554A.255.255 0 0 0 3 7.947Zm5-3.5A3.5 3.5 0 0 0 4.5 5v2.947c0 .346-.102.683-.294.97l-1.703 2.556a.017.017 0 0 0-.003.01l.001.006c0 .002.002.004.004.006l.006.004.007.001h10.964l.007-.001.006-.004.004-.006.001-.007a.017.017 0 0 0-.003-.01l-1.703-2.554a1.745 1.745 0 0 1-.294-.97V5A3.5 3.5 0 0 0 8 1.5Z"></path> </svg>Notifications </a> <tool-tip id="tooltip-0a8d8d1c-68c3-4e83-a7a9-49ec681e3322" for="repository-details-watch-button" popover="manual" data-direction="s" data-type="description" data-view-component="true" class="sr-only position-absolute">You must be signed in to change notification settings</tool-tip> </li> <li> <a icon="repo-forked" id="fork-button" href="/login?return_to=%2Fadelnobel%2Fawesome-scalability" rel="nofollow" data-hydro-click="{"event_type":"authentication.click","payload":{"location_in_page":"repo details fork button","repository_id":440303461,"auth_type":"LOG_IN","originating_url":"https://github.com/adelnobel/awesome-scalability/tree/patch-1","user_id":null}}" data-hydro-click-hmac="f64da444b25983dde9df16ffd15a8b6bf82a7f88de766fa20f55af10f9cadc51" data-view-component="true" class="btn-sm btn"> <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-repo-forked mr-2"> <path d="M5 5.372v.878c0 .414.336.75.75.75h4.5a.75.75 0 0 0 .75-.75v-.878a2.25 2.25 0 1 1 1.5 0v.878a2.25 2.25 0 0 1-2.25 2.25h-1.5v2.128a2.251 2.251 0 1 1-1.5 0V8.5h-1.5A2.25 2.25 0 0 1 3.5 6.25v-.878a2.25 2.25 0 1 1 1.5 0ZM5 3.25a.75.75 0 1 0-1.5 0 .75.75 0 0 0 1.5 0Zm6.75.75a.75.75 0 1 0 0-1.5.75.75 0 0 0 0 1.5Zm-3 8.75a.75.75 0 1 0-1.5 0 .75.75 0 0 0 1.5 0Z"></path> </svg>Fork <span id="repo-network-counter" data-pjax-replace="true" data-turbo-replace="true" title="0" data-view-component="true" class="Counter">0</span> </a> </li> <li> <div data-view-component="true" class="BtnGroup d-flex"> <a href="/login?return_to=%2Fadelnobel%2Fawesome-scalability" rel="nofollow" data-hydro-click="{"event_type":"authentication.click","payload":{"location_in_page":"star button","repository_id":440303461,"auth_type":"LOG_IN","originating_url":"https://github.com/adelnobel/awesome-scalability/tree/patch-1","user_id":null}}" data-hydro-click-hmac="72aab9dba1e0ed74cc6c299e72c123a11658a831487a01dbcfa8262224767a77" aria-label="You must be signed in to star a repository" data-view-component="true" class="tooltipped tooltipped-sw btn-sm btn"> <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-star v-align-text-bottom d-inline-block mr-2"> <path d="M8 .25a.75.75 0 0 1 .673.418l1.882 3.815 4.21.612a.75.75 0 0 1 .416 1.279l-3.046 2.97.719 4.192a.751.751 0 0 1-1.088.791L8 12.347l-3.766 1.98a.75.75 0 0 1-1.088-.79l.72-4.194L.818 6.374a.75.75 0 0 1 .416-1.28l4.21-.611L7.327.668A.75.75 0 0 1 8 .25Zm0 2.445L6.615 5.5a.75.75 0 0 1-.564.41l-3.097.45 2.24 2.184a.75.75 0 0 1 .216.664l-.528 3.084 2.769-1.456a.75.75 0 0 1 .698 0l2.77 1.456-.53-3.084a.75.75 0 0 1 .216-.664l2.24-2.183-3.096-.45a.75.75 0 0 1-.564-.41L8 2.694Z"></path> </svg><span data-view-component="true" class="d-inline"> Star </span> <span id="repo-stars-counter-star" aria-label="0 users starred this repository" data-singular-suffix="user starred this repository" data-plural-suffix="users starred this repository" data-turbo-replace="true" title="0" data-view-component="true" class="Counter js-social-count">0</span> </a></div> </li> </ul> </div> </div> <div id="responsive-meta-container" data-turbo-replace> <div class="d-block d-md-none mb-2 px-3 px-md-4 px-lg-5"> <p class="f4 mb-3 "> The Patterns of Scalable, Reliable, and Performant Large-Scale Systems </p> <div class="mb-2 d-flex flex-items-center Link--secondary"> <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-link flex-shrink-0 mr-2"> <path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path> </svg> <span class="flex-auto min-width-0 css-truncate css-truncate-target width-fit"> <a title="http://awesome-scalability.com/" role="link" target="_blank" class="text-bold" rel="noopener noreferrer" href="http://awesome-scalability.com/">awesome-scalability.com/</a> </span> </div> <h3 class="sr-only">License</h3> <div class="mb-2"> <a href="/adelnobel/awesome-scalability/blob/master/LICENSE" class="Link--muted" data-analytics-event="{"category":"Repository Overview","action":"click","label":"location:sidebar;file:license"}" > <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-law mr-2"> <path d="M8.75.75V2h.985c.304 0 .603.08.867.231l1.29.736c.038.022.08.033.124.033h2.234a.75.75 0 0 1 0 1.5h-.427l2.111 4.692a.75.75 0 0 1-.154.838l-.53-.53.529.531-.001.002-.002.002-.006.006-.006.005-.01.01-.045.04c-.21.176-.441.327-.686.45C14.556 10.78 13.88 11 13 11a4.498 4.498 0 0 1-2.023-.454 3.544 3.544 0 0 1-.686-.45l-.045-.04-.016-.015-.006-.006-.004-.004v-.001a.75.75 0 0 1-.154-.838L12.178 4.5h-.162c-.305 0-.604-.079-.868-.231l-1.29-.736a.245.245 0 0 0-.124-.033H8.75V13h2.5a.75.75 0 0 1 0 1.5h-6.5a.75.75 0 0 1 0-1.5h2.5V3.5h-.984a.245.245 0 0 0-.124.033l-1.289.737c-.265.15-.564.23-.869.23h-.162l2.112 4.692a.75.75 0 0 1-.154.838l-.53-.53.529.531-.001.002-.002.002-.006.006-.016.015-.045.04c-.21.176-.441.327-.686.45C4.556 10.78 3.88 11 3 11a4.498 4.498 0 0 1-2.023-.454 3.544 3.544 0 0 1-.686-.45l-.045-.04-.016-.015-.006-.006-.004-.004v-.001a.75.75 0 0 1-.154-.838L2.178 4.5H1.75a.75.75 0 0 1 0-1.5h2.234a.249.249 0 0 0 .125-.033l1.288-.737c.265-.15.564-.23.869-.23h.984V.75a.75.75 0 0 1 1.5 0Zm2.945 8.477c.285.135.718.273 1.305.273s1.02-.138 1.305-.273L13 6.327Zm-10 0c.285.135.718.273 1.305.273s1.02-.138 1.305-.273L3 6.327Z"></path> </svg> MIT license </a> </div> <div class="mb-3"> <a class="Link--secondary no-underline mr-3" href="/adelnobel/awesome-scalability/stargazers"> <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-star mr-1"> <path d="M8 .25a.75.75 0 0 1 .673.418l1.882 3.815 4.21.612a.75.75 0 0 1 .416 1.279l-3.046 2.97.719 4.192a.751.751 0 0 1-1.088.791L8 12.347l-3.766 1.98a.75.75 0 0 1-1.088-.79l.72-4.194L.818 6.374a.75.75 0 0 1 .416-1.28l4.21-.611L7.327.668A.75.75 0 0 1 8 .25Zm0 2.445L6.615 5.5a.75.75 0 0 1-.564.41l-3.097.45 2.24 2.184a.75.75 0 0 1 .216.664l-.528 3.084 2.769-1.456a.75.75 0 0 1 .698 0l2.77 1.456-.53-3.084a.75.75 0 0 1 .216-.664l2.24-2.183-3.096-.45a.75.75 0 0 1-.564-.41L8 2.694Z"></path> </svg> <span class="text-bold">0</span> stars </a> <a class="Link--secondary no-underline mr-3" href="/adelnobel/awesome-scalability/forks"> <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-repo-forked mr-1"> <path d="M5 5.372v.878c0 .414.336.75.75.75h4.5a.75.75 0 0 0 .75-.75v-.878a2.25 2.25 0 1 1 1.5 0v.878a2.25 2.25 0 0 1-2.25 2.25h-1.5v2.128a2.251 2.251 0 1 1-1.5 0V8.5h-1.5A2.25 2.25 0 0 1 3.5 6.25v-.878a2.25 2.25 0 1 1 1.5 0ZM5 3.25a.75.75 0 1 0-1.5 0 .75.75 0 0 0 1.5 0Zm6.75.75a.75.75 0 1 0 0-1.5.75.75 0 0 0 0 1.5Zm-3 8.75a.75.75 0 1 0-1.5 0 .75.75 0 0 0 1.5 0Z"></path> </svg> <span class="text-bold">6.1k</span> forks </a> <a class="Link--secondary no-underline mr-3 d-inline-block" href="/adelnobel/awesome-scalability/branches"> <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-git-branch mr-1"> <path d="M9.5 3.25a2.25 2.25 0 1 1 3 2.122V6A2.5 2.5 0 0 1 10 8.5H6a1 1 0 0 0-1 1v1.128a2.251 2.251 0 1 1-1.5 0V5.372a2.25 2.25 0 1 1 1.5 0v1.836A2.493 2.493 0 0 1 6 7h4a1 1 0 0 0 1-1v-.628A2.25 2.25 0 0 1 9.5 3.25Zm-6 0a.75.75 0 1 0 1.5 0 .75.75 0 0 0-1.5 0Zm8.25-.75a.75.75 0 1 0 0 1.5.75.75 0 0 0 0-1.5ZM4.25 12a.75.75 0 1 0 0 1.5.75.75 0 0 0 0-1.5Z"></path> </svg> <span>Branches</span> </a> <a class="Link--secondary no-underline d-inline-block" href="/adelnobel/awesome-scalability/tags"> <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-tag mr-1"> <path d="M1 7.775V2.75C1 1.784 1.784 1 2.75 1h5.025c.464 0 .91.184 1.238.513l6.25 6.25a1.75 1.75 0 0 1 0 2.474l-5.026 5.026a1.75 1.75 0 0 1-2.474 0l-6.25-6.25A1.752 1.752 0 0 1 1 7.775Zm1.5 0c0 .066.026.13.073.177l6.25 6.25a.25.25 0 0 0 .354 0l5.025-5.025a.25.25 0 0 0 0-.354l-6.25-6.25a.25.25 0 0 0-.177-.073H2.75a.25.25 0 0 0-.25.25ZM6 5a1 1 0 1 1 0 2 1 1 0 0 1 0-2Z"></path> </svg> <span>Tags</span> </a> <a class="Link--secondary no-underline d-inline-block" href="/adelnobel/awesome-scalability/activity"> <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-pulse mr-1"> <path d="M6 2c.306 0 .582.187.696.471L10 10.731l1.304-3.26A.751.751 0 0 1 12 7h3.25a.75.75 0 0 1 0 1.5h-2.742l-1.812 4.528a.751.751 0 0 1-1.392 0L6 4.77 4.696 8.03A.75.75 0 0 1 4 8.5H.75a.75.75 0 0 1 0-1.5h2.742l1.812-4.529A.751.751 0 0 1 6 2Z"></path> </svg> <span>Activity</span> </a> </div> <div class="d-flex flex-wrap gap-2"> <div class="flex-1"> <div data-view-component="true" class="BtnGroup d-flex"> <a href="/login?return_to=%2Fadelnobel%2Fawesome-scalability" rel="nofollow" data-hydro-click="{"event_type":"authentication.click","payload":{"location_in_page":"star button","repository_id":440303461,"auth_type":"LOG_IN","originating_url":"https://github.com/adelnobel/awesome-scalability/tree/patch-1","user_id":null}}" data-hydro-click-hmac="72aab9dba1e0ed74cc6c299e72c123a11658a831487a01dbcfa8262224767a77" aria-label="You must be signed in to star a repository" data-view-component="true" class="tooltipped tooltipped-sw btn-sm btn btn-block"> <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-star v-align-text-bottom d-inline-block mr-2"> <path d="M8 .25a.75.75 0 0 1 .673.418l1.882 3.815 4.21.612a.75.75 0 0 1 .416 1.279l-3.046 2.97.719 4.192a.751.751 0 0 1-1.088.791L8 12.347l-3.766 1.98a.75.75 0 0 1-1.088-.79l.72-4.194L.818 6.374a.75.75 0 0 1 .416-1.28l4.21-.611L7.327.668A.75.75 0 0 1 8 .25Zm0 2.445L6.615 5.5a.75.75 0 0 1-.564.41l-3.097.45 2.24 2.184a.75.75 0 0 1 .216.664l-.528 3.084 2.769-1.456a.75.75 0 0 1 .698 0l2.77 1.456-.53-3.084a.75.75 0 0 1 .216-.664l2.24-2.183-3.096-.45a.75.75 0 0 1-.564-.41L8 2.694Z"></path> </svg><span data-view-component="true" class="d-inline"> Star </span> </a></div> </div> <div class="flex-1"> <a href="/login?return_to=%2Fadelnobel%2Fawesome-scalability" rel="nofollow" id="files-overview-watch-button" data-hydro-click="{"event_type":"authentication.click","payload":{"location_in_page":"notification subscription menu watch","repository_id":null,"auth_type":"LOG_IN","originating_url":"https://github.com/adelnobel/awesome-scalability/tree/patch-1","user_id":null}}" data-hydro-click-hmac="65098a204af4a947ef611e588a2e5089b38db029060d78eea3c341f149959ec9" aria-label="You must be signed in to change notification settings" data-view-component="true" class="btn-sm btn btn-block"> <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-bell mr-2"> <path d="M8 16a2 2 0 0 0 1.985-1.75c.017-.137-.097-.25-.235-.25h-3.5c-.138 0-.252.113-.235.25A2 2 0 0 0 8 16ZM3 5a5 5 0 0 1 10 0v2.947c0 .05.015.098.042.139l1.703 2.555A1.519 1.519 0 0 1 13.482 13H2.518a1.516 1.516 0 0 1-1.263-2.36l1.703-2.554A.255.255 0 0 0 3 7.947Zm5-3.5A3.5 3.5 0 0 0 4.5 5v2.947c0 .346-.102.683-.294.97l-1.703 2.556a.017.017 0 0 0-.003.01l.001.006c0 .002.002.004.004.006l.006.004.007.001h10.964l.007-.001.006-.004.004-.006.001-.007a.017.017 0 0 0-.003-.01l-1.703-2.554a1.745 1.745 0 0 1-.294-.97V5A3.5 3.5 0 0 0 8 1.5Z"></path> </svg>Notifications </a> <tool-tip id="tooltip-7b05fd92-fc51-4cb1-bd1a-1122330cb9f2" for="files-overview-watch-button" popover="manual" data-direction="s" data-type="description" data-view-component="true" class="sr-only position-absolute">You must be signed in to change notification settings</tool-tip> </div> <span> </span> </div> </div> </div> <nav data-pjax="#js-repo-pjax-container" aria-label="Repository" data-view-component="true" class="js-repo-nav js-sidenav-container-pjax js-responsive-underlinenav overflow-hidden UnderlineNav px-3 px-md-4 px-lg-5"> <ul data-view-component="true" class="UnderlineNav-body list-style-none"> <li data-view-component="true" class="d-inline-flex"> <a id="code-tab" href="/adelnobel/awesome-scalability/tree/patch-1" data-tab-item="i0code-tab" data-selected-links="repo_source repo_downloads repo_commits repo_releases repo_tags repo_branches repo_packages repo_deployments repo_attestations /adelnobel/awesome-scalability/tree/patch-1" data-pjax="#repo-content-pjax-container" data-turbo-frame="repo-content-turbo-frame" data-hotkey="g c" data-analytics-event="{"category":"Underline navbar","action":"Click tab","label":"Code","target":"UNDERLINE_NAV.TAB"}" aria-current="page" data-view-component="true" class="UnderlineNav-item no-wrap js-responsive-underlinenav-item js-selected-navigation-item selected"> <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-code UnderlineNav-octicon d-none d-sm-inline"> <path d="m11.28 3.22 4.25 4.25a.75.75 0 0 1 0 1.06l-4.25 4.25a.749.749 0 0 1-1.275-.326.749.749 0 0 1 .215-.734L13.94 8l-3.72-3.72a.749.749 0 0 1 .326-1.275.749.749 0 0 1 .734.215Zm-6.56 0a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042L2.06 8l3.72 3.72a.749.749 0 0 1-.326 1.275.749.749 0 0 1-.734-.215L.47 8.53a.75.75 0 0 1 0-1.06Z"></path> </svg> <span data-content="Code">Code</span> <span id="code-repo-tab-count" data-pjax-replace="" data-turbo-replace="" title="Not available" data-view-component="true" class="Counter"></span> </a></li> <li data-view-component="true" class="d-inline-flex"> <a id="pull-requests-tab" href="/adelnobel/awesome-scalability/pulls" data-tab-item="i1pull-requests-tab" data-selected-links="repo_pulls checks /adelnobel/awesome-scalability/pulls" data-pjax="#repo-content-pjax-container" data-turbo-frame="repo-content-turbo-frame" data-hotkey="g p" data-analytics-event="{"category":"Underline navbar","action":"Click tab","label":"Pull requests","target":"UNDERLINE_NAV.TAB"}" data-view-component="true" class="UnderlineNav-item no-wrap js-responsive-underlinenav-item js-selected-navigation-item"> <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-git-pull-request UnderlineNav-octicon d-none d-sm-inline"> <path d="M1.5 3.25a2.25 2.25 0 1 1 3 2.122v5.256a2.251 2.251 0 1 1-1.5 0V5.372A2.25 2.25 0 0 1 1.5 3.25Zm5.677-.177L9.573.677A.25.25 0 0 1 10 .854V2.5h1A2.5 2.5 0 0 1 13.5 5v5.628a2.251 2.251 0 1 1-1.5 0V5a1 1 0 0 0-1-1h-1v1.646a.25.25 0 0 1-.427.177L7.177 3.427a.25.25 0 0 1 0-.354ZM3.75 2.5a.75.75 0 1 0 0 1.5.75.75 0 0 0 0-1.5Zm0 9.5a.75.75 0 1 0 0 1.5.75.75 0 0 0 0-1.5Zm8.25.75a.75.75 0 1 0 1.5 0 .75.75 0 0 0-1.5 0Z"></path> </svg> <span data-content="Pull requests">Pull requests</span> <span id="pull-requests-repo-tab-count" data-pjax-replace="" data-turbo-replace="" title="0" hidden="hidden" data-view-component="true" class="Counter">0</span> </a></li> <li data-view-component="true" class="d-inline-flex"> <a id="actions-tab" href="/adelnobel/awesome-scalability/actions" data-tab-item="i2actions-tab" data-selected-links="repo_actions /adelnobel/awesome-scalability/actions" data-pjax="#repo-content-pjax-container" data-turbo-frame="repo-content-turbo-frame" data-hotkey="g a" data-analytics-event="{"category":"Underline navbar","action":"Click tab","label":"Actions","target":"UNDERLINE_NAV.TAB"}" data-view-component="true" class="UnderlineNav-item no-wrap js-responsive-underlinenav-item js-selected-navigation-item"> <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-play UnderlineNav-octicon d-none d-sm-inline"> <path d="M8 0a8 8 0 1 1 0 16A8 8 0 0 1 8 0ZM1.5 8a6.5 6.5 0 1 0 13 0 6.5 6.5 0 0 0-13 0Zm4.879-2.773 4.264 2.559a.25.25 0 0 1 0 .428l-4.264 2.559A.25.25 0 0 1 6 10.559V5.442a.25.25 0 0 1 .379-.215Z"></path> </svg> <span data-content="Actions">Actions</span> <span id="actions-repo-tab-count" data-pjax-replace="" data-turbo-replace="" title="Not available" data-view-component="true" class="Counter"></span> </a></li> <li data-view-component="true" class="d-inline-flex"> <a id="projects-tab" href="/adelnobel/awesome-scalability/projects" data-tab-item="i3projects-tab" data-selected-links="repo_projects new_repo_project repo_project /adelnobel/awesome-scalability/projects" data-pjax="#repo-content-pjax-container" data-turbo-frame="repo-content-turbo-frame" data-hotkey="g b" data-analytics-event="{"category":"Underline navbar","action":"Click tab","label":"Projects","target":"UNDERLINE_NAV.TAB"}" data-view-component="true" class="UnderlineNav-item no-wrap js-responsive-underlinenav-item js-selected-navigation-item"> <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-table UnderlineNav-octicon d-none d-sm-inline"> <path d="M0 1.75C0 .784.784 0 1.75 0h12.5C15.216 0 16 .784 16 1.75v12.5A1.75 1.75 0 0 1 14.25 16H1.75A1.75 1.75 0 0 1 0 14.25ZM6.5 6.5v8h7.75a.25.25 0 0 0 .25-.25V6.5Zm8-1.5V1.75a.25.25 0 0 0-.25-.25H6.5V5Zm-13 1.5v7.75c0 .138.112.25.25.25H5v-8ZM5 5V1.5H1.75a.25.25 0 0 0-.25.25V5Z"></path> </svg> <span data-content="Projects">Projects</span> <span id="projects-repo-tab-count" data-pjax-replace="" data-turbo-replace="" title="0" hidden="hidden" data-view-component="true" class="Counter">0</span> </a></li> <li data-view-component="true" class="d-inline-flex"> <a id="security-tab" href="/adelnobel/awesome-scalability/security" data-tab-item="i4security-tab" data-selected-links="security overview alerts policy token_scanning code_scanning /adelnobel/awesome-scalability/security" data-pjax="#repo-content-pjax-container" data-turbo-frame="repo-content-turbo-frame" data-hotkey="g s" data-analytics-event="{"category":"Underline navbar","action":"Click tab","label":"Security","target":"UNDERLINE_NAV.TAB"}" data-view-component="true" class="UnderlineNav-item no-wrap js-responsive-underlinenav-item js-selected-navigation-item"> <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-shield UnderlineNav-octicon d-none d-sm-inline"> <path d="M7.467.133a1.748 1.748 0 0 1 1.066 0l5.25 1.68A1.75 1.75 0 0 1 15 3.48V7c0 1.566-.32 3.182-1.303 4.682-.983 1.498-2.585 2.813-5.032 3.855a1.697 1.697 0 0 1-1.33 0c-2.447-1.042-4.049-2.357-5.032-3.855C1.32 10.182 1 8.566 1 7V3.48a1.75 1.75 0 0 1 1.217-1.667Zm.61 1.429a.25.25 0 0 0-.153 0l-5.25 1.68a.25.25 0 0 0-.174.238V7c0 1.358.275 2.666 1.057 3.86.784 1.194 2.121 2.34 4.366 3.297a.196.196 0 0 0 .154 0c2.245-.956 3.582-2.104 4.366-3.298C13.225 9.666 13.5 8.36 13.5 7V3.48a.251.251 0 0 0-.174-.237l-5.25-1.68ZM8.75 4.75v3a.75.75 0 0 1-1.5 0v-3a.75.75 0 0 1 1.5 0ZM9 10.5a1 1 0 1 1-2 0 1 1 0 0 1 2 0Z"></path> </svg> <span data-content="Security">Security</span> <include-fragment src="/adelnobel/awesome-scalability/security/overall-count" accept="text/fragment+html"></include-fragment> </a></li> <li data-view-component="true" class="d-inline-flex"> <a id="insights-tab" href="/adelnobel/awesome-scalability/pulse" data-tab-item="i5insights-tab" data-selected-links="repo_graphs repo_contributors dependency_graph dependabot_updates pulse people community /adelnobel/awesome-scalability/pulse" data-pjax="#repo-content-pjax-container" data-turbo-frame="repo-content-turbo-frame" data-analytics-event="{"category":"Underline navbar","action":"Click tab","label":"Insights","target":"UNDERLINE_NAV.TAB"}" data-view-component="true" class="UnderlineNav-item no-wrap js-responsive-underlinenav-item js-selected-navigation-item"> <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-graph UnderlineNav-octicon d-none d-sm-inline"> <path d="M1.5 1.75V13.5h13.75a.75.75 0 0 1 0 1.5H.75a.75.75 0 0 1-.75-.75V1.75a.75.75 0 0 1 1.5 0Zm14.28 2.53-5.25 5.25a.75.75 0 0 1-1.06 0L7 7.06 4.28 9.78a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042l3.25-3.25a.75.75 0 0 1 1.06 0L10 7.94l4.72-4.72a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042Z"></path> </svg> <span data-content="Insights">Insights</span> <span id="insights-repo-tab-count" data-pjax-replace="" data-turbo-replace="" title="Not available" data-view-component="true" class="Counter"></span> </a></li> </ul> <div style="visibility:hidden;" data-view-component="true" class="UnderlineNav-actions js-responsive-underlinenav-overflow position-absolute pr-3 pr-md-4 pr-lg-5 right-0"> <action-menu data-select-variant="none" data-view-component="true"> <focus-group direction="vertical" mnemonics retain> <button id="action-menu-444b3b11-0ef7-4deb-be7b-3e56e52473a7-button" popovertarget="action-menu-444b3b11-0ef7-4deb-be7b-3e56e52473a7-overlay" aria-controls="action-menu-444b3b11-0ef7-4deb-be7b-3e56e52473a7-list" aria-haspopup="true" aria-labelledby="tooltip-ee31e311-81c3-45ee-9e88-654843268029" type="button" data-view-component="true" class="Button Button--iconOnly Button--secondary Button--medium UnderlineNav-item"> <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-kebab-horizontal Button-visual"> <path d="M8 9a1.5 1.5 0 1 0 0-3 1.5 1.5 0 0 0 0 3ZM1.5 9a1.5 1.5 0 1 0 0-3 1.5 1.5 0 0 0 0 3Zm13 0a1.5 1.5 0 1 0 0-3 1.5 1.5 0 0 0 0 3Z"></path> </svg> </button><tool-tip id="tooltip-ee31e311-81c3-45ee-9e88-654843268029" for="action-menu-444b3b11-0ef7-4deb-be7b-3e56e52473a7-button" popover="manual" data-direction="s" data-type="label" data-view-component="true" class="sr-only position-absolute">Additional navigation options</tool-tip> <anchored-position id="action-menu-444b3b11-0ef7-4deb-be7b-3e56e52473a7-overlay" anchor="action-menu-444b3b11-0ef7-4deb-be7b-3e56e52473a7-button" align="start" side="outside-bottom" anchor-offset="normal" popover="auto" data-view-component="true"> <div data-view-component="true" class="Overlay Overlay--size-auto"> <div data-view-component="true" class="Overlay-body Overlay-body--paddingNone"> <action-list> <div data-view-component="true"> <ul aria-labelledby="action-menu-444b3b11-0ef7-4deb-be7b-3e56e52473a7-button" id="action-menu-444b3b11-0ef7-4deb-be7b-3e56e52473a7-list" role="menu" data-view-component="true" class="ActionListWrap--inset ActionListWrap"> <li hidden="hidden" data-menu-item="i0code-tab" data-targets="action-list.items" role="none" data-view-component="true" class="ActionListItem"> <a tabindex="-1" id="item-d85d6e23-37c3-45ef-99a0-50c76b32a8ab" href="/adelnobel/awesome-scalability/tree/patch-1" role="menuitem" data-view-component="true" class="ActionListContent ActionListContent--visual16"> <span class="ActionListItem-visual ActionListItem-visual--leading"> <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-code"> <path d="m11.28 3.22 4.25 4.25a.75.75 0 0 1 0 1.06l-4.25 4.25a.749.749 0 0 1-1.275-.326.749.749 0 0 1 .215-.734L13.94 8l-3.72-3.72a.749.749 0 0 1 .326-1.275.749.749 0 0 1 .734.215Zm-6.56 0a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042L2.06 8l3.72 3.72a.749.749 0 0 1-.326 1.275.749.749 0 0 1-.734-.215L.47 8.53a.75.75 0 0 1 0-1.06Z"></path> </svg> </span> <span data-view-component="true" class="ActionListItem-label"> Code </span> </a> </li> <li hidden="hidden" data-menu-item="i1pull-requests-tab" data-targets="action-list.items" role="none" data-view-component="true" class="ActionListItem"> <a tabindex="-1" id="item-bae51bbb-4713-4da5-8b00-b91bf5852cb3" href="/adelnobel/awesome-scalability/pulls" role="menuitem" data-view-component="true" class="ActionListContent ActionListContent--visual16"> <span class="ActionListItem-visual ActionListItem-visual--leading"> <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-git-pull-request"> <path d="M1.5 3.25a2.25 2.25 0 1 1 3 2.122v5.256a2.251 2.251 0 1 1-1.5 0V5.372A2.25 2.25 0 0 1 1.5 3.25Zm5.677-.177L9.573.677A.25.25 0 0 1 10 .854V2.5h1A2.5 2.5 0 0 1 13.5 5v5.628a2.251 2.251 0 1 1-1.5 0V5a1 1 0 0 0-1-1h-1v1.646a.25.25 0 0 1-.427.177L7.177 3.427a.25.25 0 0 1 0-.354ZM3.75 2.5a.75.75 0 1 0 0 1.5.75.75 0 0 0 0-1.5Zm0 9.5a.75.75 0 1 0 0 1.5.75.75 0 0 0 0-1.5Zm8.25.75a.75.75 0 1 0 1.5 0 .75.75 0 0 0-1.5 0Z"></path> </svg> </span> <span data-view-component="true" class="ActionListItem-label"> Pull requests </span> </a> </li> <li hidden="hidden" data-menu-item="i2actions-tab" data-targets="action-list.items" role="none" data-view-component="true" class="ActionListItem"> <a tabindex="-1" id="item-6de347c4-06d5-40d7-906c-2a1ea2b5eb2c" href="/adelnobel/awesome-scalability/actions" role="menuitem" data-view-component="true" class="ActionListContent ActionListContent--visual16"> <span class="ActionListItem-visual ActionListItem-visual--leading"> <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-play"> <path d="M8 0a8 8 0 1 1 0 16A8 8 0 0 1 8 0ZM1.5 8a6.5 6.5 0 1 0 13 0 6.5 6.5 0 0 0-13 0Zm4.879-2.773 4.264 2.559a.25.25 0 0 1 0 .428l-4.264 2.559A.25.25 0 0 1 6 10.559V5.442a.25.25 0 0 1 .379-.215Z"></path> </svg> </span> <span data-view-component="true" class="ActionListItem-label"> Actions </span> </a> </li> <li hidden="hidden" data-menu-item="i3projects-tab" data-targets="action-list.items" role="none" data-view-component="true" class="ActionListItem"> <a tabindex="-1" id="item-e2051c3a-c0fc-4afd-b1af-dd20374c5800" href="/adelnobel/awesome-scalability/projects" role="menuitem" data-view-component="true" class="ActionListContent ActionListContent--visual16"> <span class="ActionListItem-visual ActionListItem-visual--leading"> <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-table"> <path d="M0 1.75C0 .784.784 0 1.75 0h12.5C15.216 0 16 .784 16 1.75v12.5A1.75 1.75 0 0 1 14.25 16H1.75A1.75 1.75 0 0 1 0 14.25ZM6.5 6.5v8h7.75a.25.25 0 0 0 .25-.25V6.5Zm8-1.5V1.75a.25.25 0 0 0-.25-.25H6.5V5Zm-13 1.5v7.75c0 .138.112.25.25.25H5v-8ZM5 5V1.5H1.75a.25.25 0 0 0-.25.25V5Z"></path> </svg> </span> <span data-view-component="true" class="ActionListItem-label"> Projects </span> </a> </li> <li hidden="hidden" data-menu-item="i4security-tab" data-targets="action-list.items" role="none" data-view-component="true" class="ActionListItem"> <a tabindex="-1" id="item-8959d898-8723-459a-8a47-e45da276c12e" href="/adelnobel/awesome-scalability/security" role="menuitem" data-view-component="true" class="ActionListContent ActionListContent--visual16"> <span class="ActionListItem-visual ActionListItem-visual--leading"> <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-shield"> <path d="M7.467.133a1.748 1.748 0 0 1 1.066 0l5.25 1.68A1.75 1.75 0 0 1 15 3.48V7c0 1.566-.32 3.182-1.303 4.682-.983 1.498-2.585 2.813-5.032 3.855a1.697 1.697 0 0 1-1.33 0c-2.447-1.042-4.049-2.357-5.032-3.855C1.32 10.182 1 8.566 1 7V3.48a1.75 1.75 0 0 1 1.217-1.667Zm.61 1.429a.25.25 0 0 0-.153 0l-5.25 1.68a.25.25 0 0 0-.174.238V7c0 1.358.275 2.666 1.057 3.86.784 1.194 2.121 2.34 4.366 3.297a.196.196 0 0 0 .154 0c2.245-.956 3.582-2.104 4.366-3.298C13.225 9.666 13.5 8.36 13.5 7V3.48a.251.251 0 0 0-.174-.237l-5.25-1.68ZM8.75 4.75v3a.75.75 0 0 1-1.5 0v-3a.75.75 0 0 1 1.5 0ZM9 10.5a1 1 0 1 1-2 0 1 1 0 0 1 2 0Z"></path> </svg> </span> <span data-view-component="true" class="ActionListItem-label"> Security </span> </a> </li> <li hidden="hidden" data-menu-item="i5insights-tab" data-targets="action-list.items" role="none" data-view-component="true" class="ActionListItem"> <a tabindex="-1" id="item-5b83d418-e46c-4bf5-8774-aadba6ac8746" href="/adelnobel/awesome-scalability/pulse" role="menuitem" data-view-component="true" class="ActionListContent ActionListContent--visual16"> <span class="ActionListItem-visual ActionListItem-visual--leading"> <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-graph"> <path d="M1.5 1.75V13.5h13.75a.75.75 0 0 1 0 1.5H.75a.75.75 0 0 1-.75-.75V1.75a.75.75 0 0 1 1.5 0Zm14.28 2.53-5.25 5.25a.75.75 0 0 1-1.06 0L7 7.06 4.28 9.78a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042l3.25-3.25a.75.75 0 0 1 1.06 0L10 7.94l4.72-4.72a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042Z"></path> </svg> </span> <span data-view-component="true" class="ActionListItem-label"> Insights </span> </a> </li> </ul> </div></action-list> </div> </div></anchored-position> </focus-group> </action-menu></div> </nav> </div> <turbo-frame id="repo-content-turbo-frame" target="_top" data-turbo-action="advance" class=""> <div id="repo-content-pjax-container" class="repository-content " > <h1 class='sr-only'>adelnobel/awesome-scalability</h1> <div class="clearfix container-xl px-md-4 px-lg-5 px-3"> <div> <div style="max-width: 100%" data-view-component="true" class="Layout Layout--flowRow-until-md react-repos-overview-margin Layout--sidebarPosition-end Layout--sidebarPosition-flowRow-end"> <div data-view-component="true" class="Layout-main"> <script crossorigin="anonymous" defer="defer" type="application/javascript" src="https://github.githubassets.com/assets/primer-react-765944243383.js"></script> <script crossorigin="anonymous" defer="defer" type="application/javascript" src="https://github.githubassets.com/assets/react-core-cd0a67881543.js"></script> <script crossorigin="anonymous" defer="defer" type="application/javascript" src="https://github.githubassets.com/assets/react-lib-7b7b5264f6c1.js"></script> <script crossorigin="anonymous" defer="defer" type="application/javascript" src="https://github.githubassets.com/assets/octicons-react-45c3a19dd792.js"></script> <script crossorigin="anonymous" defer="defer" type="application/javascript" src="https://github.githubassets.com/assets/vendors-node_modules_tanstack_query-core_build_modern_queryClient_js-e40bb86d3e93.js"></script> <script crossorigin="anonymous" defer="defer" type="application/javascript" src="https://github.githubassets.com/assets/vendors-node_modules_emotion_is-prop-valid_dist_emotion-is-prop-valid_esm_js-node_modules_emo-37e3d5-31653d7f2342.js"></script> <script crossorigin="anonymous" defer="defer" type="application/javascript" src="https://github.githubassets.com/assets/vendors-node_modules_github_mini-throttle_dist_index_js-node_modules_stacktrace-parser_dist_s-e7dcdd-285fc29e9fa5.js"></script> <script crossorigin="anonymous" defer="defer" type="application/javascript" src="https://github.githubassets.com/assets/vendors-node_modules_oddbird_popover-polyfill_dist_popover-fn_js-4896ddd4b7bb.js"></script> <script crossorigin="anonymous" defer="defer" type="application/javascript" src="https://github.githubassets.com/assets/vendors-node_modules_tanstack_query-core_build_modern_queryObserver_js-node_modules_tanstack_-defd52-585c05e837f3.js"></script> <script crossorigin="anonymous" defer="defer" type="application/javascript" src="https://github.githubassets.com/assets/vendors-node_modules_github_hydro-analytics-client_dist_analytics-client_js-node_modules_gith-9002b0-8e5e346f0cbe.js"></script> <script crossorigin="anonymous" defer="defer" type="application/javascript" src="https://github.githubassets.com/assets/ui_packages_aria-live_aria-live_ts-ui_packages_promise-with-resolvers-polyfill_promise-with-r-014121-e1792bd5a31e.js"></script> <script crossorigin="anonymous" defer="defer" type="application/javascript" src="https://github.githubassets.com/assets/ui_packages_paths_index_ts-c733d4a976df.js"></script> <script crossorigin="anonymous" defer="defer" type="application/javascript" src="https://github.githubassets.com/assets/ui_packages_ref-selector_RefSelector_tsx-b10086b6761e.js"></script> <script crossorigin="anonymous" defer="defer" type="application/javascript" src="https://github.githubassets.com/assets/ui_packages_hydro-analytics_hydro-analytics_ts-ui_packages_verified-fetch_verified-fetch_ts-u-4672d1-0996d093463a.js"></script> <script crossorigin="anonymous" defer="defer" type="application/javascript" src="https://github.githubassets.com/assets/ui_packages_code-view-shared_hooks_use-file-page-payload_ts-ui_packages_code-view-shared_comp-1beb66-b07e414af699.js"></script> <script crossorigin="anonymous" defer="defer" type="application/javascript" src="https://github.githubassets.com/assets/ui_packages_commit-attribution_index_ts-ui_packages_commit-checks-status_index_ts-ui_packages-7207c9-f3f10560fb6f.js"></script> <script crossorigin="anonymous" defer="defer" type="application/javascript" src="https://github.githubassets.com/assets/repos-overview-5b8b9c05acbf.js"></script> <link crossorigin="anonymous" media="all" rel="stylesheet" href="https://github.githubassets.com/assets/primer-react.9fa170e9435ed4b922b9.module.css" /> <link crossorigin="anonymous" media="all" rel="stylesheet" href="https://github.githubassets.com/assets/repos-overview.9cc263aa0716ce801059.module.css" /> <react-partial partial-name="repos-overview" data-ssr="true" data-attempted-ssr="true" > <script type="application/json" data-target="react-partial.embeddedData">{"props":{"initialPayload":{"allShortcutsEnabled":false,"path":"/","repo":{"id":440303461,"defaultBranch":"master","name":"awesome-scalability","ownerLogin":"adelnobel","currentUserCanPush":false,"isFork":true,"isEmpty":false,"createdAt":"2021-12-20T20:51:27.000Z","ownerAvatar":"https://avatars.githubusercontent.com/u/4480922?v=4","public":true,"private":false,"isOrgOwned":false},"currentUser":null,"refInfo":{"name":"patch-1","listCacheKey":"v0:1640033765.925002","canEdit":false,"refType":"branch","currentOid":"57e7ba960aec9216680184e9de85bd84714dad42"},"tree":{"items":[{"name":".github","path":".github","contentType":"directory"},{"name":"CODE_OF_CONDUCT.md","path":"CODE_OF_CONDUCT.md","contentType":"file"},{"name":"CONTRIBUTING.md","path":"CONTRIBUTING.md","contentType":"file"},{"name":"LICENSE","path":"LICENSE","contentType":"file"},{"name":"README.md","path":"README.md","contentType":"file"},{"name":"SECURITY.md","path":"SECURITY.md","contentType":"file"},{"name":"_config.yml","path":"_config.yml","contentType":"file"},{"name":"logo.png","path":"logo.png","contentType":"file"}],"templateDirectorySuggestionUrl":null,"readme":null,"totalCount":8,"showBranchInfobar":true},"fileTree":null,"fileTreeProcessingTime":null,"foldersToFetch":[],"treeExpanded":false,"symbolsExpanded":false,"isOverview":true,"overview":{"banners":{"shouldRecommendReadme":false,"isPersonalRepo":false,"showUseActionBanner":false,"actionSlug":null,"actionId":null,"showProtectBranchBanner":false,"publishBannersInfo":{"dismissActionNoticePath":"/settings/dismiss-notice/publish_action_from_repo","releasePath":"/adelnobel/awesome-scalability/releases/new?marketplace=true","showPublishActionBanner":false},"interactionLimitBanner":null,"showInvitationBanner":false,"inviterName":null,"actionsMigrationBannerInfo":{"releaseTags":[],"showImmutableActionsMigrationBanner":false,"initialMigrationStatus":null}},"codeButton":{"contactPath":"/contact","isEnterprise":false,"local":{"protocolInfo":{"httpAvailable":true,"sshAvailable":null,"httpUrl":"https://github.com/adelnobel/awesome-scalability.git","showCloneWarning":null,"sshUrl":null,"sshCertificatesRequired":null,"sshCertificatesAvailable":null,"ghCliUrl":"gh repo clone adelnobel/awesome-scalability","defaultProtocol":"http","newSshKeyUrl":"/settings/ssh/new","setProtocolPath":"/users/set_protocol"},"platformInfo":{"cloneUrl":"https://desktop.github.com","showVisualStudioCloneButton":false,"visualStudioCloneUrl":"https://windows.github.com","showXcodeCloneButton":false,"xcodeCloneUrl":"xcode://clone?repo=https%3A%2F%2Fgithub.com%2Fadelnobel%2Fawesome-scalability","zipballUrl":"/adelnobel/awesome-scalability/archive/refs/heads/patch-1.zip"}},"newCodespacePath":"/codespaces/new?hide_repo_select=true\u0026ref=patch-1\u0026repo=440303461"},"popovers":{"rename":null,"renamedParentRepo":null},"commitCount":"1,112","overviewFiles":[{"displayName":"README.md","repoName":"awesome-scalability","refName":"patch-1","path":"README.md","preferredFileType":"readme","tabName":"README","richText":"\u003carticle class=\"markdown-body entry-content container-lg\" itemprop=\"text\"\u003e\u003cp dir=\"auto\"\u003e\u003ca href=\"http://awesome-scalability.com/\" rel=\"nofollow\"\u003e\u003cimg src=\"/adelnobel/awesome-scalability/raw/patch-1/logo.png\" alt=\"Logo\" style=\"max-width: 100%;\"\u003e\u003c/a\u003e\u003c/p\u003e\n\u003cp dir=\"auto\"\u003eAn updated and organized reading list for illustrating the patterns of scalable, reliable, and performant large-scale systems. Concepts are explained in the articles of prominent engineers and credible references. Case studies are taken from battle-tested systems that serve millions to billions of users.\u003c/p\u003e\n\u003cdiv class=\"markdown-heading\" dir=\"auto\"\u003e\u003ch4 tabindex=\"-1\" class=\"heading-element\" dir=\"auto\"\u003eIf your system goes slow\u003c/h4\u003e\u003ca id=\"user-content-if-your-system-goes-slow\" class=\"anchor\" aria-label=\"Permalink: If your system goes slow\" href=\"#if-your-system-goes-slow\"\u003e\u003csvg class=\"octicon octicon-link\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" height=\"16\" aria-hidden=\"true\"\u003e\u003cpath d=\"m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z\"\u003e\u003c/path\u003e\u003c/svg\u003e\u003c/a\u003e\u003c/div\u003e\n\u003cblockquote\u003e\n\u003cp dir=\"auto\"\u003eUnderstand your problems: scalability problem (fast for a single user but slow under heavy load) or performance problem (slow for a single user) by reviewing some \u003ca href=\"#principle\"\u003edesign principles\u003c/a\u003e and checking how \u003ca href=\"#scalability\"\u003escalability\u003c/a\u003e and \u003ca href=\"#performance\"\u003eperformance\u003c/a\u003e problems are solved at tech companies. The section of \u003ca href=\"#intelligence\"\u003eintelligence\u003c/a\u003e are created for those who work with data and machine learning at big (data) and deep (learning) scale.\u003c/p\u003e\n\u003c/blockquote\u003e\n\u003cdiv class=\"markdown-heading\" dir=\"auto\"\u003e\u003ch4 tabindex=\"-1\" class=\"heading-element\" dir=\"auto\"\u003eIf your system goes down\u003c/h4\u003e\u003ca id=\"user-content-if-your-system-goes-down\" class=\"anchor\" aria-label=\"Permalink: If your system goes down\" href=\"#if-your-system-goes-down\"\u003e\u003csvg class=\"octicon octicon-link\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" height=\"16\" aria-hidden=\"true\"\u003e\u003cpath d=\"m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z\"\u003e\u003c/path\u003e\u003c/svg\u003e\u003c/a\u003e\u003c/div\u003e\n\u003cblockquote\u003e\n\u003cp dir=\"auto\"\u003e\"Even if you lose all one day, you can build all over again if you retain your calm!\" - Thuan Pham, former CTO of Uber. So, keep calm and mind the \u003ca href=\"#availability\"\u003eavailability\u003c/a\u003e and \u003ca href=\"#stability\"\u003estability\u003c/a\u003e matters!\u003c/p\u003e\n\u003c/blockquote\u003e\n\u003cdiv class=\"markdown-heading\" dir=\"auto\"\u003e\u003ch4 tabindex=\"-1\" class=\"heading-element\" dir=\"auto\"\u003eIf you are having a system design interview\u003c/h4\u003e\u003ca id=\"user-content-if-you-are-having-a-system-design-interview\" class=\"anchor\" aria-label=\"Permalink: If you are having a system design interview\" href=\"#if-you-are-having-a-system-design-interview\"\u003e\u003csvg class=\"octicon octicon-link\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" height=\"16\" aria-hidden=\"true\"\u003e\u003cpath d=\"m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z\"\u003e\u003c/path\u003e\u003c/svg\u003e\u003c/a\u003e\u003c/div\u003e\n\u003cblockquote\u003e\n\u003cp dir=\"auto\"\u003eLook at some \u003ca href=\"#interview\"\u003einterview notes\u003c/a\u003e and \u003ca href=\"#architecture\"\u003ereal-world architectures with completed diagrams\u003c/a\u003e to get a comprehensive view before designing your system on whiteboard. You can check some \u003ca href=\"#talk\"\u003etalks\u003c/a\u003e of engineers from tech giants to know how they build, scale, and optimize their systems. There are some selected \u003ca href=\"#book\"\u003ebooks\u003c/a\u003e for you (most of them are free)! Good luck!\u003c/p\u003e\n\u003c/blockquote\u003e\n\u003cdiv class=\"markdown-heading\" dir=\"auto\"\u003e\u003ch4 tabindex=\"-1\" class=\"heading-element\" dir=\"auto\"\u003eIf you are building your dream team\u003c/h4\u003e\u003ca id=\"user-content-if-you-are-building-your-dream-team\" class=\"anchor\" aria-label=\"Permalink: If you are building your dream team\" href=\"#if-you-are-building-your-dream-team\"\u003e\u003csvg class=\"octicon octicon-link\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" height=\"16\" aria-hidden=\"true\"\u003e\u003cpath d=\"m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z\"\u003e\u003c/path\u003e\u003c/svg\u003e\u003c/a\u003e\u003c/div\u003e\n\u003cblockquote\u003e\n\u003cp dir=\"auto\"\u003eThe goal of scaling team is not growing team size but increasing team output and value. You can find out how tech companies reach that goal in various aspects: hiring, management, organization, culture, and communication in the \u003ca href=\"#organization\"\u003eorganization\u003c/a\u003e section.\u003c/p\u003e\n\u003c/blockquote\u003e\n\u003cdiv class=\"markdown-heading\" dir=\"auto\"\u003e\u003ch4 tabindex=\"-1\" class=\"heading-element\" dir=\"auto\"\u003eCommunity power\u003c/h4\u003e\u003ca id=\"user-content-community-power\" class=\"anchor\" aria-label=\"Permalink: Community power\" href=\"#community-power\"\u003e\u003csvg class=\"octicon octicon-link\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" height=\"16\" aria-hidden=\"true\"\u003e\u003cpath d=\"m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z\"\u003e\u003c/path\u003e\u003c/svg\u003e\u003c/a\u003e\u003c/div\u003e\n\u003cblockquote\u003e\n\u003cp dir=\"auto\"\u003eContributions are greatly welcome! You may want to take a look at the \u003ca href=\"/adelnobel/awesome-scalability/blob/patch-1/CONTRIBUTING.md\"\u003econtribution guidelines\u003c/a\u003e. If you see a link here that is no longer maintained or is not a good fit, please submit a pull request!\u003c/p\u003e\n\u003c/blockquote\u003e\n\u003cblockquote\u003e\n\u003cp dir=\"auto\"\u003eMany long hours of hard work have gone into this project. If you find it helpful, please share on Facebook, \u003ca href=\"https://ctt.ec/V8B2p\" rel=\"nofollow\"\u003eon Twitter\u003c/a\u003e, \u003ca href=\"http://t.cn/RnjFLCB\" rel=\"nofollow\"\u003eon Weibo\u003c/a\u003e, or on your chat groups! Knowledge is power, knowledge shared is power multiplied. Thank you!\u003c/p\u003e\n\u003c/blockquote\u003e\n\u003cdiv class=\"markdown-heading\" dir=\"auto\"\u003e\u003ch2 tabindex=\"-1\" class=\"heading-element\" dir=\"auto\"\u003eContent\u003c/h2\u003e\u003ca id=\"user-content-content\" class=\"anchor\" aria-label=\"Permalink: Content\" href=\"#content\"\u003e\u003csvg class=\"octicon octicon-link\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" height=\"16\" aria-hidden=\"true\"\u003e\u003cpath d=\"m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z\"\u003e\u003c/path\u003e\u003c/svg\u003e\u003c/a\u003e\u003c/div\u003e\n\u003cul dir=\"auto\"\u003e\n\u003cli\u003e\u003ca href=\"#principle\"\u003ePrinciple\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"#scalability\"\u003eScalability\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"#availability\"\u003eAvailability\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"#stability\"\u003eStability\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"#performance\"\u003ePerformance\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"#intelligence\"\u003eIntelligence\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"#architecture\"\u003eArchitecture\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"#interview\"\u003eInterview\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"#organization\"\u003eOrganization\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"#talk\"\u003eTalk\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"#book\"\u003eBook\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003cdiv class=\"markdown-heading\" dir=\"auto\"\u003e\u003ch2 tabindex=\"-1\" class=\"heading-element\" dir=\"auto\"\u003ePrinciple\u003c/h2\u003e\u003ca id=\"user-content-principle\" class=\"anchor\" aria-label=\"Permalink: Principle\" href=\"#principle\"\u003e\u003csvg class=\"octicon octicon-link\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" height=\"16\" aria-hidden=\"true\"\u003e\u003cpath d=\"m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z\"\u003e\u003c/path\u003e\u003c/svg\u003e\u003c/a\u003e\u003c/div\u003e\n\u003cul dir=\"auto\"\u003e\n\u003cli\u003e\u003ca href=\"https://people.eecs.berkeley.edu/~brewer/papers/GiantScale-IEEE.pdf\" rel=\"nofollow\"\u003eLessons from Giant-Scale Services - Eric Brewer, UC Berkeley \u0026amp; Google\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://www.cs.cornell.edu/projects/ladis2009/talks/dean-keynote-ladis2009.pdf\" rel=\"nofollow\"\u003eDesigns, Lessons and Advice from Building Large Distributed Systems - Jeff Dean, Google\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://www.infoq.com/presentations/effective-api-design\" rel=\"nofollow\"\u003eHow to Design a Good API \u0026amp; Why it Matters - Joshua Bloch, CMU \u0026amp; Google\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"http://mvdirona.com/jrh/work/\" rel=\"nofollow\"\u003eOn Efficiency, Reliability, Scaling - James Hamilton, VP at AWS\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://blog.box.com/blog/4-things-to-keep-in-mind-when-building-a-platform-for-the-enterprise/\" rel=\"nofollow\"\u003eThings to Keep in Mind When Building a Platform for the Enterprise - Heidi Williams, VP Platform at Box\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://www.usenix.org/conference/srecon17americas/program/presentation/rosenthal\" rel=\"nofollow\"\u003ePrinciples of Chaos Engineering\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://www.usenix.org/conference/srecon16/program/presentation/lueder\" rel=\"nofollow\"\u003eFinding the Order in Chaos\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://12factor.net/\" rel=\"nofollow\"\u003eThe Twelve-Factor App\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://8thlight.com/blog/uncle-bob/2012/08/13/the-clean-architecture.html\" rel=\"nofollow\"\u003eClean Architecture\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"http://www.math-cs.gordon.edu/courses/cs211/lectures-2009/Cohesion,Coupling,MVC.pdf\" rel=\"nofollow\"\u003eHigh Cohesion and Low Coupling\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://medium.com/@SkyscannerEng/monoliths-and-microservices-8c65708c3dbf\" rel=\"nofollow\"\u003eMonoliths and Microservices\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"http://robertgreiner.com/2014/08/cap-theorem-revisited/\" rel=\"nofollow\"\u003eCAP Theorem and Trade-offs\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://blog.andyet.com/2014/10/01/right-database\" rel=\"nofollow\"\u003eCP Databases and AP Databases\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"http://ithare.com/scaling-stateful-objects/\" rel=\"nofollow\"\u003eStateless vs Stateful Scalability\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://www.brianjgraf.com/scalability-scale-up-scale-out-care/\" rel=\"nofollow\"\u003eScale Up vs Scale Out\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://blog.codinghorror.com/scaling-up-vs-scaling-out-hidden-costs/\" rel=\"nofollow\"\u003eScale Up vs Scale Out: Hidden Costs\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://neo4j.com/blog/acid-vs-base-consistency-models-explained/\" rel=\"nofollow\"\u003eACID and BASE\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://blogs.msdn.microsoft.com/csliu/2009/08/27/io-concept-blockingnon-blocking-vs-syncasync/\" rel=\"nofollow\"\u003eBlocking/Non-Blocking and Sync/Async\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://use-the-index-luke.com/sql/testing-scalability\" rel=\"nofollow\"\u003ePerformance and Scalability of Databases\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"http://highscalability.com/blog/2011/2/10/database-isolation-levels-and-their-effects-on-performance-a.html\" rel=\"nofollow\"\u003eDatabase Isolation Levels and Effects on Performance and Scalability\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://martin.kleppmann.com/2017/01/26/data-loss-in-large-clusters.html\" rel=\"nofollow\"\u003eThe Probability of Data Loss in Large Clusters\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://docs.microsoft.com/en-us/previous-versions/msp-n-p/dn271399(v=pandp.10)\" rel=\"nofollow\"\u003eData Access for Highly-Scalable Solutions: Using SQL, NoSQL, and Polyglot Persistence\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://www.upwork.com/hiring/data/sql-vs-nosql-databases-whats-the-difference/\" rel=\"nofollow\"\u003eSQL vs NoSQL\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://engineering.salesforce.com/sql-or-nosql-9eaf1d92545b\" rel=\"nofollow\"\u003eSQL vs NoSQL - Lesson Learned at Salesforce\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://medium.baqend.com/nosql-databases-a-survey-and-decision-guidance-ea7823a822d\" rel=\"nofollow\"\u003eNoSQL Databases: Survey and Decision Guidance\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://medium.com/@jeeyoungk/how-sharding-works-b4dec46b3f6\" rel=\"nofollow\"\u003eHow Sharding Works\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"http://www.tom-e-white.com/2007/11/consistent-hashing.html\" rel=\"nofollow\"\u003eConsistent Hashing\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://medium.com/@dgryski/consistent-hashing-algorithmic-tradeoffs-ef6b8e2fcae8\" rel=\"nofollow\"\u003eConsistent Hashing: Algorithmic Tradeoffs\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://booking.ai/dont-be-tricked-by-the-hashing-trick-192a6aae3087\" rel=\"nofollow\"\u003eDon’t be tricked by the Hashing Trick\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://medium.com/netflix-techblog/distributing-content-to-open-connect-3e3e391d4dc9\" rel=\"nofollow\"\u003eUniform Consistent Hashing at Netflix\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://www.allthingsdistributed.com/2008/12/eventually_consistent.html\" rel=\"nofollow\"\u003eEventually Consistent - Werner Vogels, CTO at Amazon\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://www.stevesouders.com/blog/2012/10/11/cache-is-king/\" rel=\"nofollow\"\u003eCache is King\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://www.the-paper-trail.org/post/2014-06-06-paper-notes-anti-caching/\" rel=\"nofollow\"\u003eAnti-Caching\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"http://highscalability.com/latency-everywhere-and-it-costs-you-sales-how-crush-it\" rel=\"nofollow\"\u003eUnderstand Latency\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"http://norvig.com/21-days.html#answers\" rel=\"nofollow\"\u003eLatency Numbers Every Programmer Should Know\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://queue.acm.org/detail.cfm?id=3096459\u0026amp;__s=dnkxuaws9pogqdnxmx8i\" rel=\"nofollow\"\u003eThe Calculus of Service Availability\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"http://highscalability.com/blog/2014/5/12/4-architecture-issues-when-scaling-web-applications-bottlene.html\" rel=\"nofollow\"\u003eArchitecture Issues When Scaling Web Applications: Bottlenecks, Database, CPU, IO\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"http://highscalability.com/blog/2012/5/16/big-list-of-20-common-bottlenecks.html\" rel=\"nofollow\"\u003eCommon Bottlenecks\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://queue.acm.org/detail.cfm?id=3025012\" rel=\"nofollow\"\u003eLife Beyond Distributed Transactions\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://www.usenix.org/conference/srecon15/program/presentation/taveira\" rel=\"nofollow\"\u003eRelying on Software to Redirect Traffic Reliably at Various Layers\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://www.usenix.org/conference/srecon17americas/program/presentation/andrus\" rel=\"nofollow\"\u003eBreaking Things on Purpose\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://medium.com/@rdsubhas/10-modern-software-engineering-mistakes-bc67fbef4fc8\" rel=\"nofollow\"\u003eAvoid Over Engineering\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://www.infoq.com/articles/scalability-worst-practices\" rel=\"nofollow\"\u003eScalability Worst Practices\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://medium.com/@DataStax/instagram-engineerings-3-rules-to-a-scalable-cloud-application-architecture-c44afed31406\" rel=\"nofollow\"\u003eUse Solid Technologies - Don’t Re-invent the Wheel - Keep It Simple!\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://jobs.zalando.com/tech/blog/simplicity-by-distributing-complexity/\" rel=\"nofollow\"\u003eSimplicity by Distributing Complexity\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"http://tech.transferwise.com/why-over-reusing-is-bad/\" rel=\"nofollow\"\u003eWhy Over-Reusing is Bad\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://blog.codinghorror.com/performance-is-a-feature/\" rel=\"nofollow\"\u003ePerformance is a Feature\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://codeascraft.com/2014/12/11/make-performance-part-of-your-workflow/\" rel=\"nofollow\"\u003eMake Performance Part of Your Workflow\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://medium.com/walmartlabs/the-benefits-of-server-side-rendering-over-client-side-rendering-5d07ff2cefe8\" rel=\"nofollow\"\u003eThe Benefits of Server Side Rendering over Client Side Rendering\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://architecht.io/lessons-from-facebook-on-engineering-for-scale-f5716f0afc7a\" rel=\"nofollow\"\u003eAutomate and Abstract: Lessons at Facebook\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://8thlight.com/blog/sarah-sunday/2017/09/15/aws-dos-and-donts.html\" rel=\"nofollow\"\u003eAWS Do's and Don'ts\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://medium.com/@hellostanley/design-doesnt-scale-4d81e12cbc3e\" rel=\"nofollow\"\u003e(UI) Design Doesn’t Scale - Stanley Wood, Design Director at Spotify\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"http://www.brendangregg.com/linuxperf.html\" rel=\"nofollow\"\u003eLinux Performance\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://www.igvita.com/2016/05/20/building-fast-and-resilient-web-applications/\" rel=\"nofollow\"\u003eBuilding Fast and Resilient Web Applications - Ilya Grigorik\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://www.usenix.org/conference/srecon17asia/program/presentation/wang_daxin\" rel=\"nofollow\"\u003eAccept Partial Failures, Minimize Service Loss\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"http://highscalability.com/blog/2012/12/31/designing-for-resiliency-will-be-so-2013.html\" rel=\"nofollow\"\u003eDesign for Resiliency\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://docs.microsoft.com/en-us/azure/architecture/guide/design-principles/self-healing\" rel=\"nofollow\"\u003eDesign for Self-healing\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://docs.microsoft.com/en-us/azure/architecture/guide/design-principles/scale-out\" rel=\"nofollow\"\u003eDesign for Scaling Out\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://docs.microsoft.com/en-us/azure/architecture/guide/design-principles/design-for-evolution\" rel=\"nofollow\"\u003eDesign for Evolution\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"http://highscalability.com/blog/2013/8/26/reddit-lessons-learned-from-mistakes-made-scaling-to-1-billi.html\" rel=\"nofollow\"\u003eLearn from Mistakes\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003cdiv class=\"markdown-heading\" dir=\"auto\"\u003e\u003ch2 tabindex=\"-1\" class=\"heading-element\" dir=\"auto\"\u003eScalability\u003c/h2\u003e\u003ca id=\"user-content-scalability\" class=\"anchor\" aria-label=\"Permalink: Scalability\" href=\"#scalability\"\u003e\u003csvg class=\"octicon octicon-link\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" height=\"16\" aria-hidden=\"true\"\u003e\u003cpath d=\"m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z\"\u003e\u003c/path\u003e\u003c/svg\u003e\u003c/a\u003e\u003c/div\u003e\n\u003cul dir=\"auto\"\u003e\n\u003cli\u003e\u003ca href=\"https://martinfowler.com/microservices/\" rel=\"nofollow\"\u003eMicroservices and Orchestration\u003c/a\u003e\n\u003cul dir=\"auto\"\u003e\n\u003cli\u003e\u003ca href=\"https://eng.uber.com/microservice-architecture/\" rel=\"nofollow\"\u003eDomain-Oriented Microservice Architecture at Uber\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://engineering.riotgames.com/news/thinking-inside-container\" rel=\"nofollow\"\u003eContainer (8 parts) at Riot Games\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://medium.com/@Pinterest_Engineering/containerization-at-pinterest-92295347f2f3\" rel=\"nofollow\"\u003eContainerization at Pinterest\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://medium.com/netflix-techblog/the-evolution-of-container-usage-at-netflix-3abfc096781b\" rel=\"nofollow\"\u003eEvolution of Container Usage at Netflix\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://eng.uber.com/dockerizing-mysql/\" rel=\"nofollow\"\u003eDockerizing MySQL at Uber\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://labs.spotify.com/2018/01/11/testing-of-microservices/\" rel=\"nofollow\"\u003eTesting of Microservices at Spotify\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://medium.com/treehouse-engineering/lessons-learned-running-docker-in-production-5dce99ece770\" rel=\"nofollow\"\u003eDocker in Production at Treehouse\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://developers.soundcloud.com/blog/inside-a-soundcloud-microservice\" rel=\"nofollow\"\u003eMicroservice at SoundCloud\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://stripe.com/blog/operating-kubernetes\" rel=\"nofollow\"\u003eOperate Kubernetes Reliably at Stripe\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://tech.trivago.com/2020/06/10/cross-cluster-traffic-mirroring-with-istio/\" rel=\"nofollow\"\u003eCross-Cluster Traffic Mirroring with Istio at Trivago\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://open.nytimes.com/agrarian-scale-kubernetes-part-3-ee459887ed7e\" rel=\"nofollow\"\u003eAgrarian-Scale Kubernetes (3 parts) at New York Times\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://medium.com/bbc-design-engineering/powering-bbc-online-with-nanoservices-727840ba015b\" rel=\"nofollow\"\u003eNanoservices at BBC\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://www.techatbloomberg.com/blog/powerfulseal-testing-tool-kubernetes-clusters/\" rel=\"nofollow\"\u003ePowerfulSeal: Testing Tool for Kubernetes Clusters at Bloomberg\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://medium.com/netflix-techblog/netflix-conductor-a-microservices-orchestrator-2e8d4771bf40\" rel=\"nofollow\"\u003eConductor: Microservices Orchestrator at Netflix\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://shopifyengineering.myshopify.com/blogs/engineering/docker-at-shopify-how-we-built-containers-that-power-over-100-000-online-shops\" rel=\"nofollow\"\u003eDocker Containers that Power Over 100.000 Online Shops at Shopify\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://medium.engineering/microservice-architecture-at-medium-9c33805eb74f\" rel=\"nofollow\"\u003eMicroservice Architecture at Medium\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://boxunix.com/post/bare_metal_to_kube/\" rel=\"nofollow\"\u003eFrom bare-metal to Kubernetes at Betabrand\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://medium.com/tinder-engineering/tinders-move-to-kubernetes-cda2a6372f44\" rel=\"nofollow\"\u003eKubernetes at Tinder\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://www.quora.com/q/quoraengineering/Adopting-Kubernetes-at-Quora\" rel=\"nofollow\"\u003eKubernetes at Quora\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://medium.com/pinterest-engineering/building-a-kubernetes-platform-at-pinterest-fb3d9571c948\" rel=\"nofollow\"\u003eKubernetes Platform at Pinterest\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://medium.com/building-nubank/microservices-at-nubank-an-overview-2ebcb336c64d\" rel=\"nofollow\"\u003eMicroservices at Nubank\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://engineering.mercari.com/en/blog/entry/20210831-2019-06-07-155849/\" rel=\"nofollow\"\u003ePayment Transaction Management in Microservices at Mercari\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://tech.ebayinc.com/engineering/grit-a-protocol-for-distributed-transactions-across-microservices/\" rel=\"nofollow\"\u003eGRIT: Protocol for Distributed Transactions across Microservices at eBay\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://medium.com/palantir/introducing-rubix-kubernetes-at-palantir-ab0ce16ea42e\" rel=\"nofollow\"\u003eRubix: Kubernetes at Palantir\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://eng.uber.com/crisp-critical-path-analysis-for-microservice-architectures/\" rel=\"nofollow\"\u003eCRISP: Critical Path Analysis for Microservice Architectures at Uber\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://www.wix.engineering/post/scaling-to-100m-to-cache-or-not-to-cache\" rel=\"nofollow\"\u003eDistributed Caching\u003c/a\u003e\n\u003cul dir=\"auto\"\u003e\n\u003cli\u003e\u003ca href=\"https://medium.com/netflix-techblog/caching-for-a-global-netflix-7bcc457012f1\" rel=\"nofollow\"\u003eEVCache: Distributed In-memory Caching at Netflix\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://medium.com/netflix-techblog/cache-warming-agility-for-a-stateful-service-2d3b1da82642\" rel=\"nofollow\"\u003eEVCache Cache Warmer Infrastructure at Netflix\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://blog.box.com/blog/introducing-memsniff-robust-memcache-traffic-analyzer/\" rel=\"nofollow\"\u003eMemsniff: Robust Memcache Traffic Analyzer at Box\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://codeascraft.com/2017/11/30/how-etsy-caches/\" rel=\"nofollow\"\u003eCaching with Consistent Hashing and Cache Smearing at Etsy\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://code.facebook.com/posts/220956754772273/an-analysis-of-facebook-photo-caching/\" rel=\"nofollow\"\u003eAnalysis of Photo Caching at Facebook\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://code.facebook.com/posts/964122680272229/web-performance-cache-efficiency-exercise/\" rel=\"nofollow\"\u003eCache Efficiency Exercise at Facebook\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"http://tech.trivago.com/2015/10/15/tcache/\" rel=\"nofollow\"\u003etCache: Scalable Data-aware Java Caching at Trivago\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://engineering.quora.com/Pycache-lightning-fast-in-process-caching\" rel=\"nofollow\"\u003ePycache: In-process Caching at Quora\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"http://tech.trivago.com/2017/12/19/how-trivago-reduced-memcached-memory-usage-by-50/\" rel=\"nofollow\"\u003eReduce Memcached Memory Usage by 50% at Trivago\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://engineeringblog.yelp.com/2018/03/caching-internal-service-calls-at-yelp.html\" rel=\"nofollow\"\u003eCaching Internal Service Calls at Yelp\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://allegro.tech/2017/01/estimating-the-cache-efficiency-using-big-data.html\" rel=\"nofollow\"\u003eEstimating the Cache Efficiency using Big Data at Allegro\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://jobs.zalando.com/tech/blog/distributed-cache-akka-kubernetes/\" rel=\"nofollow\"\u003eDistributed Cache at Zalando\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://medium.com/netflix-techblog/evolution-of-application-data-caching-from-ram-to-ssd-a33d6fa7a690\" rel=\"nofollow\"\u003eApplication Data Caching from RAM to SSD at NetFlix\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://medium.com/@SkyscannerEng/the-tradeoffs-of-a-replicated-cache-b6680c722f58\" rel=\"nofollow\"\u003eTradeoffs of Replicated Cache at Skyscanner\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://blog.doordash.com/avoiding-cache-stampede-at-doordash-55bbf596d94b\" rel=\"nofollow\"\u003eAvoiding Cache Stampede at DoorDash\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"http://engblog.yext.com/post/geolocation-caching\" rel=\"nofollow\"\u003eLocation Caching with Quadtrees at Yext\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://medium.com/vimeo-engineering-blog/video-metadata-caching-at-vimeo-a54b25f0b304\" rel=\"nofollow\"\u003eVideo Metadata Caching at Vimeo\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"http://highscalability.com/blog/2014/9/8/how-twitter-uses-redis-to-scale-105tb-ram-39mm-qps-10000-ins.html\" rel=\"nofollow\"\u003eScaling Redis at Twitter\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://slack.engineering/scaling-slacks-job-queue-687222e9d100\" rel=\"nofollow\"\u003eScaling Job Queue with Redis at Slack\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://githubengineering.com/moving-persistent-data-out-of-redis/\" rel=\"nofollow\"\u003eMoving persistent data out of Redis at Github\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://engineering.instagram.com/storing-hundreds-of-millions-of-simple-key-value-pairs-in-redis-1091ae80f74c\" rel=\"nofollow\"\u003eStoring Hundreds of Millions of Simple Key-Value Pairs in Redis at Instagram\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"http://tech.trivago.com/2017/01/25/learn-redis-the-hard-way-in-production/\" rel=\"nofollow\"\u003eRedis at Trivago\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://deliveroo.engineering/2017/01/19/optimising-membership-queries.html\" rel=\"nofollow\"\u003eOptimizing Redis Storage at Deliveroo\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"http://engineering.wattpad.com/post/23244724794/store-more-stuff-memory-optimization-in-redis\" rel=\"nofollow\"\u003eMemory Optimization in Redis at Wattpad\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://blog.heroku.com/rolling-redis-fleet\" rel=\"nofollow\"\u003eRedis Fleet at Heroku\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://developers.soundcloud.com/blog/gradle-remote-build-cache-misses-part-2\" rel=\"nofollow\"\u003eSolving Remote Build Cache Misses (2 parts) at SoundCloud\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://tech.ebayinc.com/engineering/prefetch-caching-of-ebay-items/\" rel=\"nofollow\"\u003ePrefetch Caching of Items at eBay\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://developer.mozilla.org/en-US/docs/Web/HTTP/Caching\" rel=\"nofollow\"\u003eHTTP Caching and CDN\u003c/a\u003e\n\u003cul dir=\"auto\"\u003e\n\u003cli\u003e\u003ca href=\"https://www.zynga.com/blogs/engineering/zynga-geo-proxy-reducing-mobile-game-latency\" rel=\"nofollow\"\u003eZynga Geo Proxy: Reducing Mobile Game Latency at Zynga\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://technology.condenast.com/story/the-why-and-how-of-google-amp-at-conde-nast\" rel=\"nofollow\"\u003eGoogle AMP at Condé Nast\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://deliveroo.engineering/2016/09/19/ab-testing-cdns.html\" rel=\"nofollow\"\u003eA/B Tests on Hosting Infrastructure (CDNs) at Deliveroo\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://developers.soundcloud.com/blog/how-soundcloud-uses-haproxy-with-kubernetes-for-user-facing-traffic\" rel=\"nofollow\"\u003eHAProxy with Kubernetes for User-facing Traffic at SoundCloud\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://blogs.dropbox.com/tech/2018/03/meet-bandaid-the-dropbox-service-proxy/\" rel=\"nofollow\"\u003eBandaid: Service Proxy at Dropbox\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://engineering.linecorp.com/en/blog/detail/230\" rel=\"nofollow\"\u003eCDN in LIVE's Encoder Layer at LINE\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://slack.engineering/service-workers-at-slack-our-quest-for-faster-boot-times-and-offline-support-3492cf79c88\" rel=\"nofollow\"\u003eService Workers at Slack\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://labs.spotify.com/2020/02/24/how-spotify-aligned-cdn-services-for-a-lightning-fast-streaming-experience/\" rel=\"nofollow\"\u003eCDN Services at Spotify\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://martin.kleppmann.com/2016/02/08/how-to-do-distributed-locking.html\" rel=\"nofollow\"\u003eDistributed Locking\u003c/a\u003e\n\u003cul dir=\"auto\"\u003e\n\u003cli\u003e\u003ca href=\"https://blog.acolyer.org/2015/02/13/the-chubby-lock-service-for-loosely-coupled-distributed-systems/\" rel=\"nofollow\"\u003eChubby: Lock Service for Loosely Coupled Distributed Systems at Google\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://www.youtube.com/watch?v=MDuagr729aU\" rel=\"nofollow\"\u003eDistributed Locking at Uber\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://engineering.gosquared.com/distributed-locks-using-redis\" rel=\"nofollow\"\u003eDistributed Locks using Redis at GoSquared\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://blog.twitter.com/engineering/en_us/topics/infrastructure/2018/zookeeper-at-twitter.html\" rel=\"nofollow\"\u003eZooKeeper at Twitter\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://blog.chartio.com/posts/eliminating-duplicate-queries-using-distributed-locking\" rel=\"nofollow\"\u003eEliminating Duplicate Queries using Distributed Locking at Chartio\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://www.oreilly.com/ideas/understanding-the-value-of-distributed-tracing\" rel=\"nofollow\"\u003eDistributed Tracking, Tracing, and Measuring\u003c/a\u003e\n\u003cul dir=\"auto\"\u003e\n\u003cli\u003e\u003ca href=\"https://blog.twitter.com/engineering/en_us/a/2012/distributed-systems-tracing-with-zipkin.html\" rel=\"nofollow\"\u003eZipkin: Distributed Systems Tracing at Twitter\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://developers.soundcloud.com/blog/using-kubernetes-pod-metadata-to-improve-zipkin-traces\" rel=\"nofollow\"\u003eImprove Zipkin Traces using Kubernetes Pod Metadata at SoundCloud\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://www.infoq.com/presentations/canopy-scalable-tracing-analytics-facebook\" rel=\"nofollow\"\u003eCanopy: Scalable Distributed Tracing \u0026amp; Analysis at Facebook\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://medium.com/@Pinterest_Engineering/distributed-tracing-at-pinterest-with-new-open-source-tools-a4f8a5562f6b\" rel=\"nofollow\"\u003ePintrace: Distributed Tracing at Pinterest\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://engineering.atspotify.com/2021/01/20/introducing-xcmetrics-our-all-in-one-tool-for-tracking-xcode-build-metrics/\" rel=\"nofollow\"\u003eXCMetrics: All-in-One Tool for Tracking Xcode Build Metrics at Spotify\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://engineering.linkedin.com/distributed-service-call-graph/real-time-distributed-tracing-website-performance-and-efficiency\" rel=\"nofollow\"\u003eReal-time Distributed Tracing at LinkedIn\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://www.usenix.org/conference/srecon17americas/program/presentation/arthorne\" rel=\"nofollow\"\u003eTracking Service Infrastructure at Scale at Shopify\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://engineering.hellofresh.com/scaling-hellofresh-distributed-tracing-7b182928247d\" rel=\"nofollow\"\u003eDistributed Tracing at HelloFresh\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://medium.com/@Pinterest_Engineering/analyzing-distributed-trace-data-6aae58919949\" rel=\"nofollow\"\u003eAnalyzing Distributed Trace Data at Pinterest\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://eng.uber.com/distributed-tracing/\" rel=\"nofollow\"\u003eDistributed Tracing at Uber\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://eng.uber.com/jvm-profiler/\" rel=\"nofollow\"\u003eJVM Profiler: Tracing Distributed JVM Applications at Uber\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://www.usenix.org/conference/srecon17asia/program/presentation/mah\" rel=\"nofollow\"\u003eData Checking at Dropbox\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://tech.showmax.com/2016/10/tracing-distributed-systems-at-showmax/\" rel=\"nofollow\"\u003eTracing Distributed Systems at Showmax\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://medium.com/@palantir/osquery-across-the-enterprise-3c3c9d13ec55\" rel=\"nofollow\"\u003eosquery Across the Enterprise at Palantir\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://codeascraft.com/2011/02/15/measure-anything-measure-everything/\" rel=\"nofollow\"\u003eStatsD at Etsy\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://blog.doordash.com/scaling-statsd-84d456a7cc2a\" rel=\"nofollow\"\u003eStatsD at DoorDash\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://www.csee.umbc.edu/courses/graduate/CMSC621/fall02/lectures/ch11.pdf\" rel=\"nofollow\"\u003eDistributed Scheduling\u003c/a\u003e\n\u003cul dir=\"auto\"\u003e\n\u003cli\u003e\u003ca href=\"https://www.pagerduty.com/eng/distributed-task-scheduling-3/\" rel=\"nofollow\"\u003eDistributed Task Scheduling (3 parts) at PagerDuty\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://landing.google.com/sre/sre-book/chapters/distributed-periodic-scheduling/\" rel=\"nofollow\"\u003eBuilding Cron at Google\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://engineering.quora.com/Quoras-Distributed-Cron-Architecture\" rel=\"nofollow\"\u003eDistributed Cron Architecture at Quora\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://medium.com/airbnb-engineering/chronos-a-replacement-for-cron-f05d7d986a9d\" rel=\"nofollow\"\u003eChronos: A Replacement for Cron at Airbnb\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://engblog.nextdoor.com/we-don-t-run-cron-jobs-at-nextdoor-6f7f9cc62040\" rel=\"nofollow\"\u003eScheduler at Nextdoor\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://eng.uber.com/peloton/\" rel=\"nofollow\"\u003ePeloton: Unified Resource Scheduler for Diverse Cluster Workloads at Uber\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://medium.com/netflix-techblog/fenzo-oss-scheduler-for-apache-mesos-frameworks-5c340e77e543\" rel=\"nofollow\"\u003eFenzo: OSS Scheduler for Apache Mesos Frameworks at Netflix\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://airflow.apache.org/\" rel=\"nofollow\"\u003eAirflow - Workflow Orchestration\u003c/a\u003e\n\u003cul dir=\"auto\"\u003e\n\u003cli\u003e\u003ca href=\"https://medium.com/airbnb-engineering/airflow-a-workflow-management-platform-46318b977fd8\" rel=\"nofollow\"\u003eAirflow at Airbnb\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://engineering.pandora.com/apache-airflow-at-pandora-1d7a844d68ee\" rel=\"nofollow\"\u003eAirflow at Pandora\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://robinhood.engineering/why-robinhood-uses-airflow-aed13a9a90c8\" rel=\"nofollow\"\u003eAirflow at Robinhood\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://eng.lyft.com/running-apache-airflow-at-lyft-6e53bb8fccff\" rel=\"nofollow\"\u003eAirflow at Lyft\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://drivy.engineering/airflow-architecture/\" rel=\"nofollow\"\u003eAirflow at Drivy\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://engineering.grab.com/experimentation-platform-data-pipeline\" rel=\"nofollow\"\u003eAirflow at Grab\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://medium.com/adobetech/adobe-experience-platform-orchestration-service-with-apache-airflow-952203723c0b\" rel=\"nofollow\"\u003eAirflow at Adobe\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://medium.com/walmartlabs/auditing-airflow-batch-jobs-73b45100045\" rel=\"nofollow\"\u003eAuditing Airflow Job Runs at Walmart\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://hackernoon.com/meet-maat-alibabas-dag-based-distributed-task-scheduler-7c9cf0c83438\" rel=\"nofollow\"\u003eMaaT: DAG-based Distributed Task Scheduler at Alibaba\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://codeascraft.com/2018/11/14/boundary-layer%e2%80%89-declarative-airflow-workflows/\" rel=\"nofollow\"\u003eboundary-layer: Declarative Airflow Workflows at Etsy\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://www.oreilly.com/ideas/monitoring-distributed-systems\" rel=\"nofollow\"\u003eDistributed Monitoring and Alerting\u003c/a\u003e\n\u003cul dir=\"auto\"\u003e\n\u003cli\u003e\u003ca href=\"https://www.ebayinc.com/stories/blogs/tech/unicorn-rheos-remediation-center/\" rel=\"nofollow\"\u003eUnicorn: Remediation System at eBay\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://eng.uber.com/optimizing-m3/\" rel=\"nofollow\"\u003eM3: Metrics and Monitoring Platform at Uber\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://blogs.dropbox.com/tech/2019/05/athena-our-automated-build-health-management-system/\" rel=\"nofollow\"\u003eAthena: Automated Build Health Management System at Dropbox\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://blogs.dropbox.com/tech/2019/11/monitoring-server-applications-with-vortex/\" rel=\"nofollow\"\u003eVortex: Monitoring Server Applications at Dropbox\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://engineering.linkedin.com/blog/2019/solving-manageability-challenges-with-nuage\" rel=\"nofollow\"\u003eNuage: Cloud Management Service at LinkedIn\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://netflixtechblog.com/telltale-netflix-application-monitoring-simplified-5c08bfa780ba\" rel=\"nofollow\"\u003eTelltale: Application Monitoring at Netflix\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://engineering.linkedin.com/blog/2019/06/smart-alerts-in-thirdeye--linkedins-real-time-monitoring-platfor\" rel=\"nofollow\"\u003eThirdEye: Monitoring Platform at LinkedIn\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://developers.soundcloud.com/blog/periskop-exception-monitoring-service\" rel=\"nofollow\"\u003ePeriskop: Exception Monitoring Service at SoundCloud\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://blogs.dropbox.com/tech/2017/02/meet-securitybot-open-sourcing-automated-security-at-scale/\" rel=\"nofollow\"\u003eSecuritybot: Distributed Alerting Bot at Dropbox\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://www.usenix.org/conference/srecon18asia/presentation/xinchi\" rel=\"nofollow\"\u003eMonitoring System at Alibaba\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://medium.com/dailymotion/real-user-monitoring-1948375f8be5\" rel=\"nofollow\"\u003eReal User Monitoring at Dailymotion\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://eng.uber.com/observability-at-scale/\" rel=\"nofollow\"\u003eAlerting Ecosystem at Uber\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://medium.com/airbnb-engineering/alerting-framework-at-airbnb-35ba48df894f\" rel=\"nofollow\"\u003eAlerting Framework at Airbnb\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://developers.soundcloud.com/blog/alerting-on-slos\" rel=\"nofollow\"\u003eAlerting on Service-Level Objectives (SLOs) at SoundCloud\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://eng.uber.com/observability-anomaly-detection/\" rel=\"nofollow\"\u003eJob-based Forecasting Workflow for Observability Anomaly Detection at Uber\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"http://engineering.hackerearth.com/2017/03/21/monitoring-and-alert-system-using-graphite-and-cabot/\" rel=\"nofollow\"\u003eMonitoring and Alert System using Graphite and Cabot at HackerEarth\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://blog.twitter.com/engineering/en_us/a/2016/observability-at-twitter-technical-overview-part-ii.html\" rel=\"nofollow\"\u003eObservability (2 parts) at Twitter\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://slack.engineering/distributed-security-alerting-c89414c992d6\" rel=\"nofollow\"\u003eDistributed Security Alerting at Slack\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://www.infoq.com/presentations/news-alerting-bloomberg\" rel=\"nofollow\"\u003eReal-Time News Alerting at Bloomberg\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://engineering.linkedin.com/blog/2019/an-inside-look-at-linkedins-data-pipeline-monitoring-system-\" rel=\"nofollow\"\u003eData Pipeline Monitoring System at LinkedIn\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://blog.picnic.nl/monitoring-and-observability-at-picnic-684cefd845c4\" rel=\"nofollow\"\u003eMonitoring and Observability at Picnic\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://msdn.microsoft.com/en-us/library/cc767123.aspx\" rel=\"nofollow\"\u003eDistributed Security\u003c/a\u003e\n\u003cul dir=\"auto\"\u003e\n\u003cli\u003e\u003ca href=\"https://blogs.dropbox.com/tech/2018/02/security-at-scale-the-dropbox-approach/\" rel=\"nofollow\"\u003eApproach to Security at Scale at Dropbox\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://medium.com/netflix-techblog/introducing-aardvark-and-repokid-53b081bf3a7e\" rel=\"nofollow\"\u003eAardvark and Repokid: AWS Least Privilege for Distributed, High-Velocity Development at Netflix\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://www.slideshare.net/MikeSvoboda/2017-lisa-linkedins-distributed-firewall-dfw\" rel=\"nofollow\"\u003eLISA: Distributed Firewall at LinkedIn\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://engineering.coinbase.com/how-coinbase-builds-secure-infrastructure-to-store-bitcoin-in-the-cloud-30a6504e40ba\" rel=\"nofollow\"\u003eSecure Infrastructure To Store Bitcoin In The Cloud at Coinbase\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://medium.com/airbnb-engineering/binaryalert-real-time-serverless-malware-detection-ca44370c1b90\" rel=\"nofollow\"\u003eBinaryAlert: Real-time Serverless Malware Detection at Airbnb\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://segment.com/blog/secure-access-to-100-aws-accounts/\" rel=\"nofollow\"\u003eScalable IAM Architecture to Secure Access to 100 AWS Accounts at Segment\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"http://engineering.indeedblog.com/blog/2018/04/oaudit-toolbox/\" rel=\"nofollow\"\u003eOAuth Audit Toolbox at Indeed\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://engineeringblog.yelp.com/2018/04/ad-password-blacklisting.html\" rel=\"nofollow\"\u003eActive Directory Password Blacklisting at Yelp\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://slack.engineering/syscall-auditing-at-scale-e6a3ca8ac1b8\" rel=\"nofollow\"\u003eSyscall Auditing at Scale at Slack\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://yahooeng.tumblr.com/post/160481899076/open-sourcing-athenz-fine-grained-role-based\" rel=\"nofollow\"\u003eAthenz: Fine-Grained, Role-Based Access Control at Yahoo\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://blogs.dropbox.com/tech/2018/05/introducing-webauthn-support-for-secure-dropbox-sign-in/\" rel=\"nofollow\"\u003eWebAuthn Support for Secure Sign In at Dropbox\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://slack.engineering/moving-fast-and-securing-things-540e6c5ae58a\" rel=\"nofollow\"\u003eSecurity Development Lifecycle at Slack\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://kinvolk.io/blog/2018/04/towards-unprivileged-container-builds/\" rel=\"nofollow\"\u003eUnprivileged Container Builds at Kinvolk\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://medium.com/netflix-techblog/netflix-sirt-releases-diffy-a-differencing-engine-for-digital-forensics-in-the-cloud-37b71abd2698\" rel=\"nofollow\"\u003eDiffy: Differencing Engine for Digital Forensics in the Cloud at Netflix\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://medium.com/netflix-techblog/netflix-cloud-security-detecting-credential-compromise-in-aws-9493d6fd373a\" rel=\"nofollow\"\u003eDetecting Credential Compromise in AWS at Netflix\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://labs.spotify.com/2018/09/18/scalable-user-privacy/\" rel=\"nofollow\"\u003eScalable User Privacy at Spotify\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://engineering.indeedblog.com/blog/2018/09/application-scanning/\" rel=\"nofollow\"\u003eAVA: Audit Web Applications at Indeed\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://engineeringblog.yelp.com/2018/11/ttl-as-a-service.html\" rel=\"nofollow\"\u003eTTL as a Service: Automatic Revocation of Stale Privileges at Yelp\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://slack.engineering/engineering-dive-into-slack-enterprise-key-management-1fce471b178c\" rel=\"nofollow\"\u003eEnterprise Key Management at Slack\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://blog.twitch.tv/en/2019/03/15/how-twitch-addresses-scalability-and-authentication-718d6ed3c471/\" rel=\"nofollow\"\u003eScalability and Authentication at Twitch\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://netflixtechblog.com/edge-authentication-and-token-agnostic-identity-propagation-514e47e0b602\" rel=\"nofollow\"\u003eEdge Authentication and Token-Agnostic Identity Propagation at Netflix\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://blog.palantir.com/hardening-palantirs-kubernetes-infrastructure-with-cilium-1c40d4c7ef0\" rel=\"nofollow\"\u003eHardening Kubernetes Infrastructure with Cilium at Palantir\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://arxiv.org/pdf/1704.00411.pdf\" rel=\"nofollow\"\u003eDistributed Messaging, Queuing, and Event Streaming\u003c/a\u003e\n\u003cul dir=\"auto\"\u003e\n\u003cli\u003e\u003ca href=\"https://blogs.dropbox.com/tech/2017/05/introducing-cape/\" rel=\"nofollow\"\u003eCape: Event Stream Processing Framework at Dropbox\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://engineering.linkedin.com/blog/2019/brooklin-open-source\" rel=\"nofollow\"\u003eBrooklin: Distributed Service for Near Real-Time Data Streaming at LinkedIn\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://engineering.linkedin.com/blog/2018/04/samza-aeon--latency-insights-for-asynchronous-one-way-flows\" rel=\"nofollow\"\u003eSamza: Stream Processing System for Latency Insighs at LinkedIn\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://yahooeng.tumblr.com/post/161855616651/open-sourcing-bullet-yahoos-forward-looking\" rel=\"nofollow\"\u003eBullet: Forward-Looking Query Engine for Streaming Data at Yahoo\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://codeascraft.com/2018/05/29/the-eventhorizon-saga/\" rel=\"nofollow\"\u003eEventHorizon: Tool for Watching Events Streaming at Etsy\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://engineering.quora.com/Qmessage-Handling-Billions-of-Tasks-Per-Day\" rel=\"nofollow\"\u003eQmessage: Distributed, Asynchronous Task Queue at Quora\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://eng.uber.com/cherami/\" rel=\"nofollow\"\u003eCherami: Message Queue System for Transporting Async Tasks at Uber\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://dropbox.tech/infrastructure/asynchronous-task-scheduling-at-dropbox\" rel=\"nofollow\"\u003eATF: An an async task framework at Dropbox\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://medium.com/airbnb-engineering/dynein-building-a-distributed-delayed-job-queueing-system-93ab10f05f99\" rel=\"nofollow\"\u003eDynein: Distributed Delayed Job Queueing System at Airbnb\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://engineering.riotgames.com/news/riot-messaging-service\" rel=\"nofollow\"\u003eMessaging Service at Riot Games\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://www.zillow.com/engineering/debugging-production-event-logging/\" rel=\"nofollow\"\u003eDebugging Production with Event Logging at Zillow\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://medium.com/netflix-techblog/building-a-cross-platform-in-app-messaging-orchestration-service-86ba614f92d8\" rel=\"nofollow\"\u003eCross-platform In-app Messaging Orchestration Service at Netflix\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://medium.com/netflix-techblog/re-architecting-the-video-gatekeeper-f7b0ac2f6b00\" rel=\"nofollow\"\u003eVideo Gatekeeper at Netflix\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://www.infoq.com/presentations/neflix-push-messaging-scale\" rel=\"nofollow\"\u003eScaling Push Messaging for Millions of Devices at Netflix\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"http://engineering.indeedblog.com/blog/2017/06/delaying-messages/\" rel=\"nofollow\"\u003eDelaying Asynchronous Message Processing with RabbitMQ at Indeed\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://yahooeng.tumblr.com/post/135321837876/benchmarking-streaming-computation-engines-at\" rel=\"nofollow\"\u003eBenchmarking Streaming Computation Engines at Yahoo\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://deliveroo.engineering/2019/02/05/improving-stream-data-quality-with-protobuf-schema-validation.html\" rel=\"nofollow\"\u003eImproving Stream Data Quality With Protobuf Schema Validation at Deliveroo\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://medium.engineering/scaling-email-infrastructure-for-medium-digest-254223c883b8\" rel=\"nofollow\"\u003eScaling Email Infrastructure at Medium\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://medium.com/nikeengineering/moving-faster-with-aws-by-creating-an-event-stream-database-dedec8ca3eeb\" rel=\"nofollow\"\u003eEvent Stream Database at Nike\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://martinfowler.com/articles/201701-event-driven.html\" rel=\"nofollow\"\u003eEvent-Driven Messaging\u003c/a\u003e\n\u003cul dir=\"auto\"\u003e\n\u003cli\u003e\u003ca href=\"https://medium.com/swlh/creating-coding-excellence-with-domain-driven-design-88f73d2232c3\" rel=\"nofollow\"\u003eDomain-Driven Design at Alibaba\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://medium.com/weebly-engineering/how-to-organize-your-monolith-before-breaking-it-into-services-69cbdb9248b0\" rel=\"nofollow\"\u003eDomain-Driven Design at Weebly\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://engineering.moonpig.com/development/modelling-for-domain-driven-design\" rel=\"nofollow\"\u003eDomain-Driven Design at Moonpig\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://www.infoq.com/presentations/netflix-scale-event-sourcing\" rel=\"nofollow\"\u003eScaling Event Sourcing for Netflix Downloads\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://medium.com/@eulerfx/scaling-event-sourcing-at-jet-9c873cac33b8\" rel=\"nofollow\"\u003eScaling Event-Sourcing at Jet.com\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://www.ebayinc.com/stories/blogs/tech/event-sourcing-in-action-with-ebays-continuous-delivery-team/\" rel=\"nofollow\"\u003eEvent Sourcing (2 parts) at eBay\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://medium.com/inside-freenow/event-sourcing-an-evolutionary-perspective-31e7387aa6f1\" rel=\"nofollow\"\u003eEvent Sourcing at FREE NOW\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://medium.com/engineering-brainly/scalable-content-feed-using-event-sourcing-and-cqrs-patterns-e09df98bf977\" rel=\"nofollow\"\u003eScalable content feed using Event Sourcing and CQRS patterns at Brainly\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://aws.amazon.com/pub-sub-messaging/\" rel=\"nofollow\"\u003ePub-Sub Messaging\u003c/a\u003e\n\u003cul dir=\"auto\"\u003e\n\u003cli\u003e\u003ca href=\"https://yahooeng.tumblr.com/post/150078336821/open-sourcing-pulsar-pub-sub-messaging-at-scale\" rel=\"nofollow\"\u003ePulsar: Pub-Sub Messaging at Scale at Yahoo\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://code.facebook.com/posts/188966771280871/wormhole-pub-sub-system-moving-data-through-space-and-time/\" rel=\"nofollow\"\u003eWormhole: Pub-Sub System at Facebook\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://engineering.linecorp.com/en/blog/detail/85\" rel=\"nofollow\"\u003ePub-Sub in Chatting Architecture at LINE\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://medium.com/netflix-techblog/how-netflix-microservices-tackle-dataset-pub-sub-4a068adcc9a\" rel=\"nofollow\"\u003ePub-Sub in Microservices at Netflix\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://martin.kleppmann.com/papers/kafka-debull15.pdf\" rel=\"nofollow\"\u003eKafka - Message Broker\u003c/a\u003e\n\u003cul dir=\"auto\"\u003e\n\u003cli\u003e\u003ca href=\"https://engineering.linkedin.com/kafka/running-kafka-scale\" rel=\"nofollow\"\u003eKafka at LinkedIn\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://medium.com/pinterest-engineering/how-pinterest-runs-kafka-at-scale-ff9c6f735be\" rel=\"nofollow\"\u003eKafka at Pinterest\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://tech.trello.com/why-we-chose-kafka/\" rel=\"nofollow\"\u003eKafka at Trello\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://engineering.salesforce.com/how-apache-kafka-inspired-our-platform-events-architecture-2f351fe4cf63\" rel=\"nofollow\"\u003eKafka at Salesforce\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://open.nytimes.com/publishing-with-apache-kafka-at-the-new-york-times-7f0e3b7d2077\" rel=\"nofollow\"\u003eKafka at The New York Times\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://engineeringblog.yelp.com/2016/07/billions-of-messages-a-day-yelps-real-time-data-pipeline.html\" rel=\"nofollow\"\u003eKafka at Yelp\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://medium.com/criteo-labs/upgrading-kafka-on-a-large-infra-3ee99f56e970\" rel=\"nofollow\"\u003eKafka at Criteo\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://shopifyengineering.myshopify.com/blogs/engineering/running-apache-kafka-on-kubernetes-at-shopify\" rel=\"nofollow\"\u003eKafka on Kubernetes at Shopify\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://engineeringblog.yelp.com/2019/01/migrating-kafkas-zookeeper-with-no-downtime.html\" rel=\"nofollow\"\u003eMigrating Kafka's Zookeeper with No Downtime at Yelp\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://eng.uber.com/reliable-reprocessing/\" rel=\"nofollow\"\u003eReprocessing and Dead Letter Queues with Kafka at Uber\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://eng.uber.com/chaperone/\" rel=\"nofollow\"\u003eChaperone: Audit Kafka End-to-End at Uber\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://blogs.dropbox.com/tech/2019/01/finding-kafkas-throughput-limit-in-dropbox-infrastructure/\" rel=\"nofollow\"\u003eFinding Kafka throughput limit in infrastructure at Dropbox\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://medium.com/walmartlabs/cost-orchestration-at-walmart-f34918af67c4\" rel=\"nofollow\"\u003eCost Orchestration at Walmart\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://medium.com/hulu-tech-blog/how-hulu-uses-influxdb-and-kafka-to-scale-to-over-1-million-metrics-a-second-1721476aaff5\" rel=\"nofollow\"\u003eInfluxDB and Kafka to Scale to Over 1 Million Metrics a Second at Hulu\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://en.wikipedia.org/wiki/Data_deduplication\" rel=\"nofollow\"\u003eStream Data Deduplication\u003c/a\u003e\n\u003cul dir=\"auto\"\u003e\n\u003cli\u003e\u003ca href=\"https://www.confluent.io/blog/exactly-once-semantics-are-possible-heres-how-apache-kafka-does-it/\" rel=\"nofollow\"\u003eExactly-once Semantics with Kafka\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"http://eng.tapjoy.com/blog-list/real-time-deduping-at-scale\" rel=\"nofollow\"\u003eReal-time Deduping at Tapjoy\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://segment.com/blog/exactly-once-delivery/\" rel=\"nofollow\"\u003eDeduplication at Segment\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://medium.com/@andrewsumin/efficient-storage-how-we-went-down-from-50-pb-to-32-pb-99f9c61bf6b4\" rel=\"nofollow\"\u003eDeduplication at Mail.Ru\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://medium.com/mixpaneleng/petabyte-scale-data-deduplication-mixpanel-engineering-e808c70c99f8\" rel=\"nofollow\"\u003ePetabyte Scale Data Deduplication at Mixpanel\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://blog.codinghorror.com/the-problem-with-logging/\" rel=\"nofollow\"\u003eDistributed Logging\u003c/a\u003e\n\u003cul dir=\"auto\"\u003e\n\u003cli\u003e\u003ca href=\"https://engineering.linkedin.com/distributed-systems/log-what-every-software-engineer-should-know-about-real-time-datas-unifying\" rel=\"nofollow\"\u003eLogging at LinkedIn\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://medium.com/@Pinterest_Engineering/scalable-and-reliable-data-ingestion-at-pinterest-b921c2ee8754\" rel=\"nofollow\"\u003eScalable and Reliable Log Ingestion at Pinterest\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://blog.twitter.com/engineering/en_us/topics/infrastructure/2015/building-distributedlog-twitter-s-high-performance-replicated-log-servic.html\" rel=\"nofollow\"\u003eHigh-performance Replicated Log Service at Twitter\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://databricks.com/blog/2017/12/14/the-architecture-of-the-next-cern-accelerator-logging-service.html\" rel=\"nofollow\"\u003eLogging Service with Spark at CERN Accelerator\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://engineering.quora.com/Logging-and-Aggregation-at-Quora\" rel=\"nofollow\"\u003eLogging and Aggregation at Quora\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://badoo.com/techblog/blog/2016/06/06/collection-and-analysis-of-daemon-logs-at-badoo/\" rel=\"nofollow\"\u003eCollection and Analysis of Daemon Logs at Badoo\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://medium.com/palantir/using-static-code-analysis-to-improve-log-parsing-18f0d1843965\" rel=\"nofollow\"\u003eLog Parsing with Static Code Analysis at Palantir\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://tech.ebayinc.com/engineering/low-latency-and-high-throughput-cal-ingress/\" rel=\"nofollow\"\u003eCentralized Application Logging at eBay\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://netflixtechblog.com/hyper-scale-vpc-flow-logs-enrichment-to-provide-network-insight-e5f1db02910d\" rel=\"nofollow\"\u003eEnrich VPC Flow Logs at Hyper Scale to provide Network Insight at Netflix\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://yahooeng.tumblr.com/post/109908973316/bookkeeper-yahoos-distributed-log-storage-is\" rel=\"nofollow\"\u003eBookKeeper: Distributed Log Storage at Yahoo\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://code.facebook.com/posts/357056558062811/logdevice-a-distributed-data-store-for-logs/\" rel=\"nofollow\"\u003eLogDevice: Distributed Data Store for Logs at Facebook\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://engineeringblog.yelp.com/2018/03/introducing-logfeeder.html\" rel=\"nofollow\"\u003eLogFeeder: Log Collection System at Yelp\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://medium.com/netflix-techblog/dblog-a-generic-change-data-capture-framework-69351fb9099b\" rel=\"nofollow\"\u003eDBLog: Generic Change-Data-Capture Framework at Netflix\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"http://nwds.cs.washington.edu/files/nwds/pdf/Distributed-WR.pdf\" rel=\"nofollow\"\u003eDistributed Searching\u003c/a\u003e\n\u003cul dir=\"auto\"\u003e\n\u003cli\u003e\u003ca href=\"https://instagram-engineering.com/search-architecture-eeb34a936d3a\" rel=\"nofollow\"\u003eSearch Architecture at Instagram\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"http://www.cs.otago.ac.nz/homepages/andrew/papers/2017-8.pdf\" rel=\"nofollow\"\u003eSearch Architecture at eBay\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://medium.com/box-tech-blog/scaling-box-search-using-lumos-22d9e0cb4175\" rel=\"nofollow\"\u003eSearch Architecture at Box\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://medium.com/coupang-tech/the-evolution-of-search-discovery-indexing-platform-fa43e41305f9\" rel=\"nofollow\"\u003eSearch Discovery Indexing Platform at Coupang\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://medium.com/pinterest-engineering/building-a-universal-search-system-for-pinterest-e4cb03a898d4\" rel=\"nofollow\"\u003eUniversal Search System at Pinterest\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://www.ebayinc.com/stories/blogs/tech/making-e-commerce-search-faster/\" rel=\"nofollow\"\u003eImproving Search Engine Efficiency by over 25% at eBay\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://medium.com/palantir/indexing-and-querying-telemetry-logs-with-lucene-234c5ce3e5f3\" rel=\"nofollow\"\u003eIndexing and Querying Telemetry Logs with Lucene at Palantir\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://www.tripadvisor.com/engineering/query-understanding-at-tripadvisor/\" rel=\"nofollow\"\u003eQuery Understanding at TripAdvisor\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://engineering.linkedin.com/blog/2018/03/search-federation-architecture-at-linkedin\" rel=\"nofollow\"\u003eSearch Federation Architecture at LinkedIn (2018)\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://slack.engineering/search-at-slack-431f8c80619e\" rel=\"nofollow\"\u003eSearch at Slack\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://blog.doordash.com/powering-search-recommendations-at-doordash-8310c5cfd88c\" rel=\"nofollow\"\u003eSearch and Recommendations at DoorDash\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://blog.twitter.com/engineering/en_us/a/2014/building-a-complete-tweet-index.html\" rel=\"nofollow\"\u003eSearch Service at Twitter (2014)\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://medium.com/traveloka-engineering/high-quality-autocomplete-search-part-2-d5b15bb0dadf\" rel=\"nofollow\"\u003eAutocomplete Search (2 parts) at Traveloka\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://product.canva.com/building-a-data-driven-autocorrection-system/\" rel=\"nofollow\"\u003eData-Driven Autocorrection System at Canva\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://tech.flipkart.com/adapting-search-to-indian-phonetics-cdbe65259686\" rel=\"nofollow\"\u003eAdapting Search to Indian Phonetics at Flipkart\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://blogs.dropbox.com/tech/2018/09/architecture-of-nautilus-the-new-dropbox-search-engine/\" rel=\"nofollow\"\u003eNautilus: Search Engine at Dropbox\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://engineering.linkedin.com/search/did-you-mean-galene\" rel=\"nofollow\"\u003eGalene: Search Architecture of LinkedIn\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://medium.com/@Pinterest_Engineering/manas-a-high-performing-customized-search-system-cf189f6ca40f\" rel=\"nofollow\"\u003eManas: High Performing Customized Search System at Pinterest\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://tech.flipkart.com/sherlock-near-real-time-search-indexing-95519783859d\" rel=\"nofollow\"\u003eSherlock: Near Real Time Search Indexing at Flipkart\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://medium.com/airbnb-engineering/nebula-as-a-storage-platform-to-build-airbnbs-search-backends-ecc577b05f06\" rel=\"nofollow\"\u003eNebula: Storage Platform to Build Search Backends at Airbnb\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://logz.io/blog/15-tech-companies-chose-elk-stack/\" rel=\"nofollow\"\u003eELK (Elasticsearch, Logstash, Kibana) Stack\u003c/a\u003e\n\u003cul dir=\"auto\"\u003e\n\u003cli\u003e\u003ca href=\"https://eng.uber.com/elk/\" rel=\"nofollow\"\u003ePredictions in Real Time with ELK at Uber\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://webuild.envato.com/blog/building-a-scalable-elk-stack/\" rel=\"nofollow\"\u003eBuilding a scalable ELK stack at Envato\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://robinhood.engineering/taming-elk-4e1349f077c3\" rel=\"nofollow\"\u003eELK at Robinhood\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://www.infoq.com/presentations/uber-elasticsearch-clusters?utm_source=presentations_about_Case_Study\u0026amp;utm_medium=link\u0026amp;utm_campaign=Case_Study\" rel=\"nofollow\"\u003eScaling Elasticsearch Clusters at Uber\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://www.ebayinc.com/stories/blogs/tech/elasticsearch-performance-tuning-practice-at-ebay/\" rel=\"nofollow\"\u003eElasticsearch Performance Tuning Practice at eBay\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://medium.com/tinder-engineering/how-we-improved-our-performance-using-elasticsearch-plugins-part-2-b051da2ee85b\" rel=\"nofollow\"\u003eImprove Performance using Elasticsearch Plugins (2 parts) at Tinder\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://kickstarter.engineering/elasticsearch-at-kickstarter-db3c487887fc\" rel=\"nofollow\"\u003eElasticsearch at Kickstarter\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://tech.target.com/2017/05/25/elasticsearch-cloud.html\" rel=\"nofollow\"\u003eElasticsearch at Target\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://tech.trivago.com/2016/01/19/logstash_protobuf_codec/\" rel=\"nofollow\"\u003eLog Parsing with Logstash and Google Protocol Buffers at Trivago\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://engineeringblog.yelp.com/2018/06/fast-order-search.html\" rel=\"nofollow\"\u003eFast Order Search using Data Pipeline and Elasticsearch at Yelp\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://engineeringblog.yelp.com/2017/06/moving-yelps-core-business-search-to-elasticsearch.html\" rel=\"nofollow\"\u003eMoving Core Business Search to Elasticsearch at Yelp\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"http://engineering.vinted.com/2017/06/05/sharding-out-elasticsearch/\" rel=\"nofollow\"\u003eSharding out Elasticsearch at Vinted\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"http://engineering.wattpad.com/post/146216619727/self-ranking-search-with-elasticsearch-at-wattpad\" rel=\"nofollow\"\u003eSelf-Ranking Search with Elasticsearch at Wattpad\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.blog/2019-03-05-vulcanizer-a-library-for-operating-elasticsearch/\" rel=\"nofollow\"\u003eVulcanizer: a library for operating Elasticsearch at Github\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"http://highscalability.com/blog/2011/11/1/finding-the-right-data-solution-for-your-application-in-the.html\" rel=\"nofollow\"\u003eDistributed Storage\u003c/a\u003e\n\u003cul dir=\"auto\"\u003e\n\u003cli\u003e\u003ca href=\"https://medium.com/@denisanikin/what-an-in-memory-database-is-and-how-it-persists-data-efficiently-f43868cff4c1\" rel=\"nofollow\"\u003eIn-memory Storage\u003c/a\u003e\n\u003cul dir=\"auto\"\u003e\n\u003cli\u003e\u003ca href=\"http://highscalability.com/blog/2012/8/14/memsql-architecture-the-fast-mvcc-inmem-lockfree-codegen-and.html\" rel=\"nofollow\"\u003eMemSQL Architecture - The Fast (MVCC, InMem, LockFree, CodeGen) And Familiar (SQL)\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://engineering.quora.com/Optimizing-Memcached-Efficiency\" rel=\"nofollow\"\u003eOptimizing Memcached Efficiency at Quora\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://blogs.cisco.com/datacenter/memsql\" rel=\"nofollow\"\u003eReal-Time Data Warehouse with MemSQL on Cisco UCS\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"http://eng.tapjoy.com/blog-list/moving-to-memsql\" rel=\"nofollow\"\u003eMoving to MemSQL at Tapjoy\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://conferences.oreilly.com/strata/strata-ca/public/schedule/detail/68131\" rel=\"nofollow\"\u003eMemSQL and Kinesis for Real-time Insights at Disney\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://engineering.pandora.com/using-memsql-at-pandora-79a86cb09b57\" rel=\"nofollow\"\u003eMemSQL to Query Hundreds of Billions of Rows in a Dashboard at Pandora\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"http://www.datacenterknowledge.com/archives/2013/10/04/object-storage-the-future-of-scale-out\" rel=\"nofollow\"\u003eObject Storage\u003c/a\u003e\n\u003cul dir=\"auto\"\u003e\n\u003cli\u003e\u003ca href=\"https://eng.uber.com/scaling-hdfs/\" rel=\"nofollow\"\u003eScaling HDFS at Uber\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://databricks.com/blog/2017/05/31/top-5-reasons-for-choosing-s3-over-hdfs.html\" rel=\"nofollow\"\u003eReasons for Choosing S3 over HDFS at Databricks\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://www.quantcast.com/blog/quantcast-file-system-on-amazon-s3/\" rel=\"nofollow\"\u003eFile System on Amazon S3 at Quantcast\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://tech.trivago.com/2018/09/03/efficient-image-recovery-at-scale-using-amazon-s3-versioning/\" rel=\"nofollow\"\u003eImage Recovery at Scale Using S3 Versioning at Trivago\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://yahooeng.tumblr.com/post/116391291701/yahoo-cloud-object-store-object-storage-at\" rel=\"nofollow\"\u003eCloud Object Store at Yahoo\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://www.usenix.org/conference/srecon17americas/program/presentation/shenoy\" rel=\"nofollow\"\u003eAmbry: Distributed Immutable Object Store at LinkedIn\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://engineering.linkedin.com/blog/2018/02/dynamometer--scale-testing-hdfs-on-minimal-hardware-with-maximum\" rel=\"nofollow\"\u003eDynamometer: Scale Testing HDFS on Minimal Hardware with Maximum Fidelity at LinkedIn\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://medium.com/airbnb-engineering/hammerspace-persistent-concurrent-off-heap-storage-3db39bb04472\" rel=\"nofollow\"\u003eHammerspace: Persistent, Concurrent, Off-heap Storage at Airbnb\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://medium.com/netflix-techblog/mezzfs-mounting-object-storage-in-netflixs-media-processing-platform-cda01c446ba\" rel=\"nofollow\"\u003eMezzFS: Mounting Object Storage in Media Processing Platform at Netflix\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://blogs.dropbox.com/tech/2016/05/inside-the-magic-pocket/\" rel=\"nofollow\"\u003eMagic Pocket: In-house Multi-exabyte Storage System at Dropbox\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://www.mysql.com/products/cluster/scalability.html\" rel=\"nofollow\"\u003eRelational Databases\u003c/a\u003e\n\u003cul dir=\"auto\"\u003e\n\u003cli\u003e\u003ca href=\"https://backchannel.org/blog/friendfeed-schemaless-mysql\" rel=\"nofollow\"\u003eMySQL for Schema-less Data at FriendFeed\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://medium.com/@Pinterest_Engineering/learn-to-stop-using-shiny-new-things-and-love-mysql-3e1613c2ce14\" rel=\"nofollow\"\u003eMySQL at Pinterest\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://blog.twitch.tv/how-twitch-uses-postgresql-c34aa9e56f58\" rel=\"nofollow\"\u003ePostgreSQL at Twitch\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://medium.com/airbnb-engineering/tracking-the-money-scaling-financial-reporting-at-airbnb-6d742b80f040\" rel=\"nofollow\"\u003eScaling MySQL-based Financial Reporting System at Airbnb\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://www.wix.engineering/single-post/scaling-to-100m-mysql-is-a-better-nosql\" rel=\"nofollow\"\u003eScaling MySQL at Wix\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://medium.com/airbnb-engineering/unlocking-horizontal-scalability-in-our-web-serving-tier-d907449cdbcf\" rel=\"nofollow\"\u003eMaxScale (MySQL) Database Proxy at Airbnb\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://eng.uber.com/mysql-migration/\" rel=\"nofollow\"\u003eSwitching from Postgres to MySQL at Uber\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://engineering.instagram.com/handling-growth-with-postgres-5-tips-from-instagram-d5d7e7ffdfcb\" rel=\"nofollow\"\u003eHandling Growth with Postgres at Instagram\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"http://tech.transferwise.com/scaling-our-analytics-database/\" rel=\"nofollow\"\u003eScaling the Analytics Database (Postgres) at TransferWise\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://medium.com/adyen/updating-a-50-terabyte-postgresql-database-f64384b799e7\" rel=\"nofollow\"\u003eUpdating a 50 Terabyte PostgreSQL Database at Adyen\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://medium.com/paypal-engineering/scaling-database-access-for-100s-of-billions-of-queries-per-day-paypal-introducing-hera-e192adacda54\" rel=\"nofollow\"\u003eScaling Database Access for 100s of Billions of Queries per Day at PayPal\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://engineeringblog.yelp.com/2020/11/minimizing-read-write-mysql-downtime.html\" rel=\"nofollow\"\u003eMinimizing Read-Write MySQL Downtime at Yelp\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://m.alphasights.com/a-primer-on-database-replication-381b319cd032\" rel=\"nofollow\"\u003eReplication\u003c/a\u003e\n\u003cul dir=\"auto\"\u003e\n\u003cli\u003e\u003ca href=\"https://medium.com/booking-com-infrastructure/evaluating-mysql-parallel-replication-part-4-annex-under-the-hood-eb456cf8b2fb\" rel=\"nofollow\"\u003eMySQL Parallel Replication (4 parts) at Booking.com\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://githubengineering.com/mitigating-replication-lag-and-reducing-read-load-with-freno/\" rel=\"nofollow\"\u003eMitigating MySQL Replication Lag and Reducing Read Load at Github\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://shopify.engineering/read-consistency-database-replicas\" rel=\"nofollow\"\u003eRead Consistency with Database Replicas at Shopify\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://engineeringblog.yelp.com/2018/04/black-box-auditing.html\" rel=\"nofollow\"\u003eBlack-Box Auditing: Verifying End-to-End Replication Integrity between MySQL and Redshift at Yelp\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://medium.com/airbnb-engineering/how-we-partitioned-airbnb-s-main-database-in-two-weeks-55f7e006ff21\" rel=\"nofollow\"\u003ePartitioning Main MySQL Database at Airbnb\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://eng.uber.com/herb-datacenter-replication/\" rel=\"nofollow\"\u003eHerb: Multi-DC Replication Engine for Schemaless Datastore at Uber\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://quabase.sei.cmu.edu/mediawiki/index.php/Shard_data_set_across_multiple_servers_(Range-based)\" rel=\"nofollow\"\u003eSharding\u003c/a\u003e\n\u003cul dir=\"auto\"\u003e\n\u003cli\u003e\u003ca href=\"https://medium.com/@Pinterest_Engineering/sharding-pinterest-how-we-scaled-our-mysql-fleet-3f341e96ca6f\" rel=\"nofollow\"\u003eSharding MySQL at Pinterest\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://www.twilio.com/engineering/2014/06/26/how-we-replaced-our-data-pipeline-with-zero-downtime\" rel=\"nofollow\"\u003eSharding MySQL at Twilio\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://medium.com/square-corner-blog/sharding-cash-10280fa3ef3b\" rel=\"nofollow\"\u003eSharding MySQL at Square\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://www.quora.com/q/quoraengineering/MySQL-sharding-at-Quora\" rel=\"nofollow\"\u003eSharding MySQL at Quora\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://eng.uber.com/schemaless-rewrite/\" rel=\"nofollow\"\u003eSharding Layer of Schemaless Datastore at Uber\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://instagram-engineering.com/sharding-ids-at-instagram-1cf5a71e5a5c\" rel=\"nofollow\"\u003eSharding \u0026amp; IDs at Instagram\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://www.notion.so/blog/sharding-postgres-at-notion\" rel=\"nofollow\"\u003eSharding Postgres at Notion\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://blog.box.com/blog/solr-improving-performance-batch-indexing/\" rel=\"nofollow\"\u003eSolr: Improving Performance for Batch Indexing at Box\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://medium.com/tinder-engineering/geosharded-recommendations-part-3-consistency-2d2cb2f0594b\" rel=\"nofollow\"\u003eGeosharded Recommendations (3 parts) at Tinder\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://engineering.fb.com/production-engineering/scaling-services-with-shard-manager/\" rel=\"nofollow\"\u003eScaling Services with Shard Manager at Facebook\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://research.fb.com/wp-content/uploads/2019/03/Presto-SQL-on-Everything.pdf?\" rel=\"nofollow\"\u003ePresto the Distributed SQL Query Engine\u003c/a\u003e\n\u003cul dir=\"auto\"\u003e\n\u003cli\u003e\u003ca href=\"https://medium.com/@Pinterest_Engineering/presto-at-pinterest-a8bda7515e52\" rel=\"nofollow\"\u003ePresto at Pinterest\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://eng.lyft.com/presto-infrastructure-at-lyft-b10adb9db01\" rel=\"nofollow\"\u003ePresto Infrastructure at Lyft\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://engineering.grab.com/scaling-like-a-boss-with-presto\" rel=\"nofollow\"\u003ePresto at Grab\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://eng.uber.com/presto/\" rel=\"nofollow\"\u003eEngineering Data Analytics with Presto and Apache Parquet at Uber\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://slack.engineering/data-wrangling-at-slack-f2e0ff633b69\" rel=\"nofollow\"\u003eData Wrangling at Slack\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://medium.com/netflix-techblog/using-presto-in-our-big-data-platform-on-aws-938035909fd4\" rel=\"nofollow\"\u003ePresto in Big Data Platform on AWS at Netflix\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://www.eventbrite.com/engineering/big-data-workloads-presto-auto-scaling/\" rel=\"nofollow\"\u003ePresto Auto Scaling at Eventbrite\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://www.thoughtworks.com/insights/blog/nosql-databases-overview\" rel=\"nofollow\"\u003eNoSQL Databases\u003c/a\u003e\n\u003cul dir=\"auto\"\u003e\n\u003cli\u003e\u003ca href=\"http://www.cs.ucsb.edu/~agrawal/fall2009/dynamo.pdf\" rel=\"nofollow\"\u003eKey-Value Databases\u003c/a\u003e\n\u003cul dir=\"auto\"\u003e\n\u003cli\u003e\u003ca href=\"https://medium.com/nikeengineering/becoming-a-nimble-giant-how-dynamo-db-serves-nike-at-scale-4cc375dbb18e\" rel=\"nofollow\"\u003eDynamoDB at Nike\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://segment.com/blog/the-million-dollar-eng-problem/\" rel=\"nofollow\"\u003eDynamoDB at Segment\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://blog.mapbox.com/scaling-mapbox-infrastructure-with-dynamodb-streams-d53eabc5e972\" rel=\"nofollow\"\u003eDynamoDB at Mapbox\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://blog.twitter.com/engineering/en_us/a/2014/manhattan-our-real-time-multi-tenant-distributed-database-for-twitter-scale.html\" rel=\"nofollow\"\u003eManhattan: Distributed Key-Value Database at Twitter\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://yahooeng.tumblr.com/post/120730204806/sherpa-scales-new-heights\" rel=\"nofollow\"\u003eSherpa: Distributed NoSQL Key-Value Store at Yahoo\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://yahooeng.tumblr.com/post/178262468576/introducing-halodb-a-fast-embedded-key-value\" rel=\"nofollow\"\u003eHaloDB: Embedded Key-Value Storage Engine at Yahoo\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"http://engineering.indeedblog.com/blog/2018/02/indeed-mph/\" rel=\"nofollow\"\u003eMPH: Fast and Compact Immutable Key-Value Stores at Indeed\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://engineering.linkedin.com/blog/2017/02/building-venice-with-apache-helix\" rel=\"nofollow\"\u003eVenice: Distributed Key-Value Database at Linkedin\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://aws.amazon.com/nosql/columnar/\" rel=\"nofollow\"\u003eColumnar Databases\u003c/a\u003e\n\u003cul dir=\"auto\"\u003e\n\u003cli\u003e\u003ca href=\"http://www.cs.cornell.edu/projects/ladis2009/papers/lakshman-ladis2009.pdf\" rel=\"nofollow\"\u003eCassandra\u003c/a\u003e\n\u003cul dir=\"auto\"\u003e\n\u003cli\u003e\u003ca href=\"https://www.slideshare.net/DataStax/cassandra-at-instagram-2016\" rel=\"nofollow\"\u003eCassandra at Instagram\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://medium.com/walmartlabs/building-object-store-storing-images-in-cassandra-walmart-scale-a6b9c02af593\" rel=\"nofollow\"\u003eStoring Images in Cassandra at Walmart\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://blog.discordapp.com/how-discord-stores-billions-of-messages-7fa6ec7ee4c7\" rel=\"nofollow\"\u003eStoring Messages with Cassandra at Discord\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://medium.com/walmartlabs/avoid-pitfalls-in-scaling-your-cassandra-cluster-lessons-and-remedies-a71ca01f8c04\" rel=\"nofollow\"\u003eScaling Cassandra Cluster at Walmart\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://engineeringblog.yelp.com/2016/08/how-we-scaled-our-ad-analytics-with-cassandra.html\" rel=\"nofollow\"\u003eScaling Ad Analytics with Cassandra at Yelp\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://medium.com/dream11-tech-blog/leaderboard-dream11-4efc6f93c23e\" rel=\"nofollow\"\u003eScaling to 100+ Million Reads/Writes using Spark and Cassandra at Dream11\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://www.zomato.com/blog/how-we-moved-our-food-feed-from-redis-to-cassandra\" rel=\"nofollow\"\u003eMoving Food Feed from Redis to Cassandra at Zomato\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://medium.com/netflix-techblog/benchmarking-cassandra-scalability-on-aws-over-a-million-writes-per-second-39f45f066c9e\" rel=\"nofollow\"\u003eBenchmarking Cassandra Scalability on AWS at Netflix\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://quickbooks-engineering.intuit.com/service-decomposition-at-scale-70405ac2f637\" rel=\"nofollow\"\u003eService Decomposition at Scale with Cassandra at Intuit QuickBooks\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://developers.soundcloud.com/blog/keeping-counts-in-sync\" rel=\"nofollow\"\u003eCassandra for Keeping Counts In Sync at SoundCloud\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://labs.spotify.com/2018/09/04/introducing-cstar-the-spotify-cassandra-orchestration-tool-now-open-source/\" rel=\"nofollow\"\u003ecstar: Cassandra Orchestration Tool at Spotify\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://hbase.apache.org/\" rel=\"nofollow\"\u003eHBase\u003c/a\u003e\n\u003cul dir=\"auto\"\u003e\n\u003cli\u003e\u003ca href=\"https://engineering.salesforce.com/investing-in-big-data-apache-hbase-b9d98661a66b\" rel=\"nofollow\"\u003eHBase at Salesforce\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://www.facebook.com/notes/facebook-engineering/the-underlying-technology-of-messages/454991608919/\" rel=\"nofollow\"\u003eHBase in Facebook Messages\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://blog.imgur.com/2015/09/15/tech-tuesday-imgur-notifications-from-mysql-to-hbase/\" rel=\"nofollow\"\u003eHBase in Imgur Notification\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://medium.com/@Pinterest_Engineering/improving-hbase-backup-efficiency-at-pinterest-86159da4b954\" rel=\"nofollow\"\u003eImproving HBase Backup Efficiency at Pinterest\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://www.slideshare.net/HBaseCon/hbase-practice-at-xiaomi\" rel=\"nofollow\"\u003eHBase at Xiaomi\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://www.allthingsdistributed.com/2018/11/amazon-redshift-performance-optimization.html\" rel=\"nofollow\"\u003eRedshift\u003c/a\u003e\n\u003cul dir=\"auto\"\u003e\n\u003cli\u003e\u003ca href=\"https://engineering.giphy.com/scaling-redshift-without-scaling-costs/\" rel=\"nofollow\"\u003eRedshift at GIPHY\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://www.hudl.com/bits/the-low-hanging-fruit-of-redshift-performance\" rel=\"nofollow\"\u003eRedshift at Hudl\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://drivy.engineering/redshift_tips_ticks_part_1/\" rel=\"nofollow\"\u003eRedshift at Drivy\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://msdn.microsoft.com/en-us/magazine/hh547103.aspx\" rel=\"nofollow\"\u003eDocument Databases\u003c/a\u003e\n\u003cul dir=\"auto\"\u003e\n\u003cli\u003e\u003ca href=\"https://www.mongodb.com/blog/post/ebay-building-mission-critical-multi-data-center-applications-with-mongodb\" rel=\"nofollow\"\u003eeBay: Building Mission-Critical Multi-Data Center Applications with MongoDB\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://www.mongodb.com/blog/post/mongodb-at-baidu-powering-100-apps-across-600-nodes-at-pb-scale\" rel=\"nofollow\"\u003eMongoDB at Baidu: Multi-Tenant Cluster Storing 200+ Billion Documents across 160 Shards\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://medium.com/build-addepar/migrating-mountains-of-mongo-data-63e530539952\" rel=\"nofollow\"\u003eMigrating Mongo Data at Addepar\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://medium.baqend.com/parse-is-gone-a-few-secrets-about-their-infrastructure-91b3ab2fcf71\" rel=\"nofollow\"\u003eThe AWS and MongoDB Infrastructure of Parse (acquired by Facebook)\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://medium.com/build-addepar/migrating-mountains-of-mongo-data-63e530539952\" rel=\"nofollow\"\u003eMigrating Mountains of Mongo Data at Addepar\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://engineering.linkedin.com/blog/2017/12/couchbase-ecosystem-at-linkedin\" rel=\"nofollow\"\u003eCouchbase Ecosystem at LinkedIn\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://medium.com/zendesk-engineering/resurrecting-amazon-simpledb-9404034ec506\" rel=\"nofollow\"\u003eSimpleDB at Zendesk\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://engineering.linkedin.com/espresso/introducing-espresso-linkedins-hot-new-distributed-document-store\" rel=\"nofollow\"\u003eEspresso: Distributed Document Store at LinkedIn\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://www.eecs.harvard.edu/margo/papers/systor13-bench/\" rel=\"nofollow\"\u003eGraph Databases\u003c/a\u003e\n\u003cul dir=\"auto\"\u003e\n\u003cli\u003e\u003ca href=\"https://blog.twitter.com/engineering/en_us/a/2010/introducing-flockdb.html\" rel=\"nofollow\"\u003eFlockDB: Distributed Graph Database at Twitter\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://www.cs.cmu.edu/~pavlo/courses/fall2013/static/papers/11730-atc13-bronson.pdf\" rel=\"nofollow\"\u003eTAO: Distributed Data Store for the Social Graph at Facebook\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://tech.ebayinc.com/engineering/akutan-a-distributed-knowledge-graph-store/\" rel=\"nofollow\"\u003eAkutan: Distributed Knowledge Graph Store at eBay\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://www.influxdata.com/time-series-database/\" rel=\"nofollow\"\u003eTime Series Databases\u003c/a\u003e\n\u003cul dir=\"auto\"\u003e\n\u003cli\u003e\u003ca href=\"https://code.facebook.com/posts/952820474848503/beringei-a-high-performance-time-series-storage-engine/\" rel=\"nofollow\"\u003eBeringei: High-performance Time Series Storage Engine at Facebook\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://blog.twitter.com/engineering/en_us/topics/infrastructure/2019/metricsdb.html\" rel=\"nofollow\"\u003eMetricsDB: TimeSeries Database for storing metrics at Twitter\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://medium.com/netflix-techblog/introducing-atlas-netflixs-primary-telemetry-platform-bd31f4d8ed9a\" rel=\"nofollow\"\u003eAtlas: In-memory Dimensional Time Series Database at Netflix\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://labs.spotify.com/2015/11/17/monitoring-at-spotify-introducing-heroic/\" rel=\"nofollow\"\u003eHeroic: Time Series Database at Spotify\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://developers.soundcloud.com/blog/roshi-a-crdt-system-for-timestamped-events\" rel=\"nofollow\"\u003eRoshi: Distributed Storage System for Time-Series Event at SoundCloud\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://medium.com/@Pinterest_Engineering/goku-building-a-scalable-and-high-performant-time-series-database-system-a8ff5758a181\" rel=\"nofollow\"\u003eGoku: Time Series Database at Pinterest\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://medium.com/netflix-techblog/scaling-time-series-data-storage-part-ii-d67939655586\" rel=\"nofollow\"\u003eScaling Time Series Data Storage (2 parts) at Netflix\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://druid.apache.org/\" rel=\"nofollow\"\u003eDruid - Real-time Analytics Database\u003c/a\u003e\n\u003cul dir=\"auto\"\u003e\n\u003cli\u003e\u003ca href=\"https://medium.com/airbnb-engineering/druid-airbnb-data-platform-601c312f2a4c\" rel=\"nofollow\"\u003eDruid at Airbnb\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://medium.com/walmartlabs/event-stream-analytics-at-walmart-with-druid-dcf1a37ceda7\" rel=\"nofollow\"\u003eDruid at Walmart\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://tech.ebayinc.com/engineering/monitoring-at-ebay-with-druid/\" rel=\"nofollow\"\u003eDruid at eBay\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://netflixtechblog.com/how-netflix-uses-druid-for-real-time-insights-to-ensure-a-high-quality-experience-19e1e8568d06\" rel=\"nofollow\"\u003eDruid at Netflix\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://betterexplained.com/articles/intro-to-distributed-version-control-illustrated/\" rel=\"nofollow\"\u003eDistributed Repositories, Dependencies, and Configurations Management\u003c/a\u003e\n\u003cul dir=\"auto\"\u003e\n\u003cli\u003e\u003ca href=\"https://githubengineering.com/introducing-dgit/\" rel=\"nofollow\"\u003eDGit: Distributed Git at Github\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://medium.com/@palantir/stemma-distributed-git-server-70afbca0fc29\" rel=\"nofollow\"\u003eStemma: Distributed Git Server at Palantir\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://code.flickr.net/2016/03/24/configuration-management-for-distributed-systems-using-github-and-cfg4j/\" rel=\"nofollow\"\u003eConfiguration Management for Distributed Systems at Flickr\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://blogs.msdn.microsoft.com/bharry/2017/05/24/the-largest-git-repo-on-the-planet/\" rel=\"nofollow\"\u003eGit Repository at Microsoft\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://www.infoq.com/news/2017/02/GVFS\" rel=\"nofollow\"\u003eSolve Git Problem with Large Repositories at Microsoft\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://cacm.acm.org/magazines/2016/7/204032-why-google-stores-billions-of-lines-of-code-in-a-single-repository/fulltext\" rel=\"nofollow\"\u003eSingle Repository at Google\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://medium.com/adyen/from-0-100-billion-scaling-infrastructure-and-workflow-at-adyen-7b63b690dfb6\" rel=\"nofollow\"\u003eScaling Infrastructure and (Git) Workflow at Adyen\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://medium.com/booking-com-infrastructure/dotfiles-distribution-dedb69c66a75\" rel=\"nofollow\"\u003eDotfiles Distribution at Booking.com\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://engineeringblog.yelp.com/2018/06/yelps-secret-detector.html\" rel=\"nofollow\"\u003eSecret Detector: Preventing Secrets in Source Code at Yelp\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://engineering.linkedin.com/blog/2018/09/managing-software-dependency-at-scale\" rel=\"nofollow\"\u003eManaging Software Dependency at Scale at LinkedIn\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://engineering.linkedin.com/blog/2020/continuous-integration\" rel=\"nofollow\"\u003eMerging Code in High-velocity Repositories at LinkedIn\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://blog.twitter.com/engineering/en_us/topics/infrastructure/2018/dynamic-configuration-at-twitter.html\" rel=\"nofollow\"\u003eDynamic Configuration at Twitter\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://medium.com/mixpaneleng/dynamic-configuration-at-mixpanel-94bfcf97d6b8\" rel=\"nofollow\"\u003eDynamic Configuration at Mixpanel\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://sg.godaddy.com/engineering/2019/03/06/dynamic-configuration-for-nodejs/\" rel=\"nofollow\"\u003eDynamic Configuration at GoDaddy\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://www.synopsys.com/blogs/software-security/agile-cicd-devops-glossary/\" rel=\"nofollow\"\u003eScaling Continuous Integration and Continuous Delivery\u003c/a\u003e\n\u003cul dir=\"auto\"\u003e\n\u003cli\u003e\u003ca href=\"https://code.fb.com/web/rapid-release-at-massive-scale/\" rel=\"nofollow\"\u003eContinuous Integration Stack at Facebook\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://medium.com/netflix-techblog/towards-true-continuous-integration-distributed-repositories-and-dependencies-2a2e3108c051\" rel=\"nofollow\"\u003eContinuous Integration with Distributed Repositories and Dependencies at Netflix\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://blogs.dropbox.com/tech/2019/12/continuous-integration-and-deployment-with-bazel/\" rel=\"nofollow\"\u003eContinuous Integration and Deployment with Bazel at Dropbox\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://tech.buzzfeed.com/continuous-deployments-at-buzzfeed-d171f76c1ac4\" rel=\"nofollow\"\u003eContinuous Deployments at BuzzFeed\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://yahooeng.tumblr.com/post/155765242061/open-sourcing-screwdriver-yahoos-continuous\" rel=\"nofollow\"\u003eScrewdriver: Continuous Delivery Build System for Dynamic Infrastructure at Yahoo\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://www.betterment.com/resources/ci-cd-shortening-the-feedback-loop/\" rel=\"nofollow\"\u003eCI/CD at Betterment\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://medium.com/engineering-brainly/ci-cd-at-scale-fdfb0f49e031\" rel=\"nofollow\"\u003eCI/CD at Brainly\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://engineering.shopify.com/blogs/engineering/scaling-ios-ci-with-anka\" rel=\"nofollow\"\u003eScaling iOS CI with Anka at Shopify\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://engineeringblog.yelp.com/2019/04/Scaling-Jira-Server-Administration-For-The-Enterprise.html\" rel=\"nofollow\"\u003eScaling Jira Server at Yelp\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://flexport.engineering/how-flexport-halved-testing-costs-with-an-auto-scaling-ci-cd-cluster-8304297222f\" rel=\"nofollow\"\u003eAuto-scaling CI/CD cluster at Flexport\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003cdiv class=\"markdown-heading\" dir=\"auto\"\u003e\u003ch2 tabindex=\"-1\" class=\"heading-element\" dir=\"auto\"\u003eAvailability\u003c/h2\u003e\u003ca id=\"user-content-availability\" class=\"anchor\" aria-label=\"Permalink: Availability\" href=\"#availability\"\u003e\u003csvg class=\"octicon octicon-link\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" height=\"16\" aria-hidden=\"true\"\u003e\u003cpath d=\"m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z\"\u003e\u003c/path\u003e\u003c/svg\u003e\u003c/a\u003e\u003c/div\u003e\n\u003cul dir=\"auto\"\u003e\n\u003cli\u003e\u003ca href=\"https://queue.acm.org/detail.cfm?id=2371297\" rel=\"nofollow\"\u003eResilience Engineering: Learning to Embrace Failure\u003c/a\u003e\n\u003cul dir=\"auto\"\u003e\n\u003cli\u003e\u003ca href=\"https://engineering.linkedin.com/blog/2017/11/resilience-engineering-at-linkedin-with-project-waterbear\" rel=\"nofollow\"\u003eResilience Engineering with Project Waterbear at LinkedIn\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://tech.iheart.com/resiliency-against-traffic-oversaturation-77c5ed92a5fb\" rel=\"nofollow\"\u003eResiliency against Traffic Oversaturation at iHeartRadio\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://blog.gojekengineering.com/resiliency-in-distributed-systems-efd30f74baf4\" rel=\"nofollow\"\u003eResiliency in Distributed Systems at GO-JEK\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://www.ebayinc.com/stories/blogs/tech/practical-nosql-resilience-design-pattern-for-the-enterprise/\" rel=\"nofollow\"\u003ePractical NoSQL Resilience Design Pattern for the Enterprise at eBay\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://engineering.quora.com/Ensuring-Quoras-Resilience-to-Disaster\" rel=\"nofollow\"\u003eEnsuring Resilience to Disaster at Quora\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://www.infoq.com/presentations/expedia-website-resiliency?utm_source=presentations_about_Case_Study\u0026amp;utm_medium=link\u0026amp;utm_campaign=Case_Study\" rel=\"nofollow\"\u003eSite Resiliency at Expedia\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://tech.ebayinc.com/engineering/resiliency-and-disaster-recovery-with-kafka/\" rel=\"nofollow\"\u003eResiliency and Disaster Recovery with Kafka at eBay\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://eng.uber.com/kafka/\" rel=\"nofollow\"\u003eDisaster Recovery for Multi-Region Kafka at Uber\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"http://cloudpatterns.org/mechanisms/failover_system\" rel=\"nofollow\"\u003eFailover\u003c/a\u003e\n\u003cul dir=\"auto\"\u003e\n\u003cli\u003e\u003ca href=\"https://www.usenix.org/conference/srecon16/program/presentation/heady\" rel=\"nofollow\"\u003eThe Evolution of Global Traffic Routing and Failover\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://www.usenix.org/conference/srecon17asia/program/presentation/liu_zehua\" rel=\"nofollow\"\u003eTesting for Disaster Recovery Failover Testing\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://blog.risingstack.com/designing-microservices-architecture-for-failure/\" rel=\"nofollow\"\u003eDesigning a Microservices Architecture for Failure\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://engineering.gosquared.com/use-elb-automatic-failover\" rel=\"nofollow\"\u003eELB for Automatic Failover at GoSquared\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"http://americanexpress.io/eliminate-the-database-for-higher-availability/\" rel=\"nofollow\"\u003eEliminate the Database for Higher Availability at American Express\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"http://engineering.vinted.com/2015/09/03/failover-with-redis-sentinel/\" rel=\"nofollow\"\u003eFailover with Redis Sentinel at Vinted\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"http://engineering.freeagent.com/2017/02/06/ha-infrastructure-without-breaking-the-bank/\" rel=\"nofollow\"\u003eHigh-availability SaaS Infrastructure at FreeAgent\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.blog/2018-06-20-mysql-high-availability-at-github/\" rel=\"nofollow\"\u003eMySQL High Availability at GitHub\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://www.eventbrite.com/engineering/mysql-high-availability-at-eventbrite/\" rel=\"nofollow\"\u003eMySQL High Availability at Eventbrite\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://medium.com/walmartlabs/business-continuity-disaster-recovery-in-the-microservices-world-ef2adca363df\" rel=\"nofollow\"\u003eBusiness Continuity \u0026amp; Disaster Recovery at Walmart\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://blog.vivekpanyam.com/scaling-a-web-service-load-balancing/\" rel=\"nofollow\"\u003eLoad Balancing\u003c/a\u003e\n\u003cul dir=\"auto\"\u003e\n\u003cli\u003e\u003ca href=\"https://blog.envoyproxy.io/introduction-to-modern-network-load-balancing-and-proxying-a57f6ff80236\" rel=\"nofollow\"\u003eIntroduction to Modern Network Load Balancing and Proxying\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://www.f5.com/company/blog/top-five-scalability-patterns\" rel=\"nofollow\"\u003eTop Five (Load Balancing) Scalability Patterns\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://www.usenix.org/conference/srecon15europe/program/presentation/shuff\" rel=\"nofollow\"\u003eLoad Balancing infrastructure to support more than 1.3 billion users at Facebook\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://code.facebook.com/posts/1734309626831603/dhcplb-an-open-source-load-balancer/\" rel=\"nofollow\"\u003eDHCPLB: DHCP Load Balancer at Facebook\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://code.facebook.com/posts/1906146702752923/open-sourcing-katran-a-scalable-network-load-balancer/\" rel=\"nofollow\"\u003eKatran: Scalable Network Load Balancer at Facebook\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://blog.twitter.com/engineering/en_us/topics/infrastructure/2019/daperture-load-balancer.html\" rel=\"nofollow\"\u003eDeterministic Aperture: A Distributed, Load Balancing Algorithm at Twitter\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://medium.com/netflix-techblog/netflix-shares-cloud-load-balancing-and-failover-tool-eureka-c10647ef95e5\" rel=\"nofollow\"\u003eLoad Balancing with Eureka at Netflix\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://medium.com/netflix-techblog/netflix-edge-load-balancing-695308b5548c\" rel=\"nofollow\"\u003eEdge Load Balancing at Netflix\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://medium.com/netflix-techblog/open-sourcing-zuul-2-82ea476cb2b3\" rel=\"nofollow\"\u003eZuul 2: Cloud Gateway at Netflix\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://engineeringblog.yelp.com/2017/05/taking-zero-downtime-load-balancing-even-further.html\" rel=\"nofollow\"\u003eLoad Balancing at Yelp\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://githubengineering.com/introducing-glb/\" rel=\"nofollow\"\u003eLoad Balancing at Github\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://medium.com/vimeo-engineering-blog/improving-load-balancing-with-a-new-consistent-hashing-algorithm-9f1bd75709ed\" rel=\"nofollow\"\u003eConsistent Hashing to Improve Load Balancing at Vimeo\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://developers.500px.com/udp-load-balancing-with-keepalived-167382d7ad08\" rel=\"nofollow\"\u003eUDP Load Balancing at 500 pixel\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://eng.uber.com/qalm/\" rel=\"nofollow\"\u003eQALM: QoS Load Management Framework at Uber\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://www.usenix.org/conference/srecon17europe/program/presentation/rastogi\" rel=\"nofollow\"\u003eTraffic Steering using Rum DNS at LinkedIn\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://blogs.dropbox.com/tech/2018/10/dropbox-traffic-infrastructure-edge-network/\" rel=\"nofollow\"\u003eTraffic Infrastructure (Edge Network) at Dropbox\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://blogs.dropbox.com/tech/2020/01/intelligent-dns-based-load-balancing-at-dropbox/\" rel=\"nofollow\"\u003eIntelligent DNS based load balancing at Dropbox\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://stripe.com/en-sg/blog/secret-life-of-dns\" rel=\"nofollow\"\u003eMonitor DNS systems at Stripe\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://medium.com/monday-engineering/how-and-why-we-migrated-our-dns-from-cloudflare-to-a-multi-dns-architecture-part-3-584a470f4062\" rel=\"nofollow\"\u003eMulti-DNS Architecture (3 parts) at Monday\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://medium.com/hulu-tech-blog/building-hulus-dynamic-anycast-dns-infrastructure-985a7a11fd30\" rel=\"nofollow\"\u003eDynamic Anycast DNS Infrastructure at Hulu\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://www.keycdn.com/support/rate-limiting/\" rel=\"nofollow\"\u003eRate Limiting\u003c/a\u003e\n\u003cul dir=\"auto\"\u003e\n\u003cli\u003e\u003ca href=\"https://blog.cloudflare.com/counting-things-a-lot-of-different-things/\" rel=\"nofollow\"\u003eRate Limiting for Scaling to Millions of Domains at Cloudflare\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://yahooeng.tumblr.com/post/111288877956/cloud-bouncer-distributed-rate-limiting-at-yahoo\" rel=\"nofollow\"\u003eCloud Bouncer: Distributed Rate Limiting at Yahoo\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://stripe.com/blog/rate-limiters\" rel=\"nofollow\"\u003eScaling API with Rate Limiters at Stripe\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://allegro.tech/2017/04/hermes-max-rate.html\" rel=\"nofollow\"\u003eDistributed Rate Limiting at Allegro\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://www.twilio.com/blog/2017/11/chaos-engineering-ratequeue-ha.html\" rel=\"nofollow\"\u003eRatequeue: Core Queueing-And-Rate-Limiting System at Twilio\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://engineering.grab.com/quotas-service\" rel=\"nofollow\"\u003eQuotas Service at Grab\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://medium.com/@BotmetricHQ/top-11-hard-won-lessons-learned-about-aws-auto-scaling-5bfe56da755f\" rel=\"nofollow\"\u003eAutoscaling\u003c/a\u003e\n\u003cul dir=\"auto\"\u003e\n\u003cli\u003e\u003ca href=\"https://medium.com/@Pinterest_Engineering/auto-scaling-pinterest-df1d2beb4d64\" rel=\"nofollow\"\u003eAutoscaling Pinterest\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://medium.com/square-corner-blog/autoscaling-based-on-request-queuing-c4c0f57f860f\" rel=\"nofollow\"\u003eAutoscaling Based on Request Queuing at Square\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"http://tech.trivago.com/2017/02/17/your-definite-guide-for-autoscaling-jenkins/\" rel=\"nofollow\"\u003eAutoscaling Jenkins at Trivago\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://labs.spotify.com/2017/11/20/autoscaling-pub-sub-consumers/\" rel=\"nofollow\"\u003eAutoscaling Pub-Sub Consumers at Spotify\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://labs.spotify.com/2018/12/18/bigtable-autoscaler-saving-money-and-time-using-managed-storage/\" rel=\"nofollow\"\u003eAutoscaling Bigtable Clusters based on CPU Load at Spotify\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://engineeringblog.yelp.com/2019/06/autoscaling-aws-step-functions-activities.html\" rel=\"nofollow\"\u003eAutoscaling AWS Step Functions Activities at Yelp\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://medium.com/netflix-techblog/scryer-netflixs-predictive-auto-scaling-engine-a3f8fc922270\" rel=\"nofollow\"\u003eScryer: Predictive Auto Scaling Engine at Netflix\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://medium.com/palantir/bouncer-simple-aws-auto-scaling-rollovers-c5af601d65d4\" rel=\"nofollow\"\u003eBouncer: Simple AWS Auto Scaling Rollovers at Palantir\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://engineeringblog.yelp.com/2019/02/autoscaling-mesos-clusters-with-clusterman.html\" rel=\"nofollow\"\u003eClusterman: Autoscaling Mesos Clusters at Yelp\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"http://static.googleusercontent.com/media/research.google.com/en/us/pubs/archive/36737.pdf\" rel=\"nofollow\"\u003eAvailability in Globally Distributed Storage Systems at Google\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://yahooeng.tumblr.com/post/68823943185/nodejs-high-availability\" rel=\"nofollow\"\u003eNodeJS High Availability at Yahoo\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://www.linkedin.com/pulse/introduction-every-day-monday-operations-benjamin-purgason\" rel=\"nofollow\"\u003eOperations (11 parts) at LinkedIn\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://www.usenix.org/conference/srecon17americas/program/presentation/barot\" rel=\"nofollow\"\u003eMonitoring Powers High Availability for LinkedIn Feed\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://code.facebook.com/posts/166966743929963/how-production-engineers-support-global-events-on-facebook/\" rel=\"nofollow\"\u003eSupporting Global Events at Facebook\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://medium.com/blablacar-tech/the-expendables-backends-high-availability-at-blablacar-8cea3b95b26b\" rel=\"nofollow\"\u003eHigh Availability at BlaBlaCar\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://medium.com/@NetflixTechBlog/tips-for-high-availability-be0472f2599c\" rel=\"nofollow\"\u003eHigh Availability at Netflix\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://www.twilio.com/engineering/2011/12/12/scaling-high-availablity-infrastructure-in-cloud\" rel=\"nofollow\"\u003eHigh Availability Cloud Infrastructure at Twilio\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://blogs.dropbox.com/tech/2019/01/automating-datacenter-operations-at-dropbox/\" rel=\"nofollow\"\u003eAutomating Datacenter Operations at Dropbox\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://technology.riotgames.com/news/globalizing-player-accounts\" rel=\"nofollow\"\u003eGlobalizing Player Accounts at Riot Games\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003cdiv class=\"markdown-heading\" dir=\"auto\"\u003e\u003ch2 tabindex=\"-1\" class=\"heading-element\" dir=\"auto\"\u003eStability\u003c/h2\u003e\u003ca id=\"user-content-stability\" class=\"anchor\" aria-label=\"Permalink: Stability\" href=\"#stability\"\u003e\u003csvg class=\"octicon octicon-link\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" height=\"16\" aria-hidden=\"true\"\u003e\u003cpath d=\"m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z\"\u003e\u003c/path\u003e\u003c/svg\u003e\u003c/a\u003e\u003c/div\u003e\n\u003cul dir=\"auto\"\u003e\n\u003cli\u003e\u003ca href=\"https://martinfowler.com/bliki/CircuitBreaker.html\" rel=\"nofollow\"\u003eCircuit Breaker\u003c/a\u003e\n\u003cul dir=\"auto\"\u003e\n\u003cli\u003e\u003ca href=\"https://www.infoq.com/presentations/circuit-breaking-distributed-systems\" rel=\"nofollow\"\u003eCircuit Breaking in Distributed Systems\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://f5.com/about-us/blog/articles/the-art-of-scaling-containers-circuit-breakers-28919\" rel=\"nofollow\"\u003eCircuit Breaker for Scaling Containers\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://engineering.linecorp.com/en/blog/detail/76\" rel=\"nofollow\"\u003eCircuit Breakers for Distributed Services at LINE\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://engineering.linecorp.com/en/blog/detail/78\" rel=\"nofollow\"\u003eApplying Circuit Breaker to Channel Gateway at LINE\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://developers.soundcloud.com/blog/lessons-in-resilience-at-SoundCloud\" rel=\"nofollow\"\u003eLessons in Resilience at SoundCloud\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"http://tech.trivago.com/2016/02/23/protector/\" rel=\"nofollow\"\u003eProtector: Circuit Breaker for Time Series Databases at Trivago\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://blog.heroku.com/improved-production-stability-with-circuit-breakers\" rel=\"nofollow\"\u003eImproved Production Stability with Circuit Breakers at Heroku\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://medium.com/zendesk-engineering/the-joys-of-circuit-breaking-ee6584acd687\" rel=\"nofollow\"\u003eCircuit Breaker at Zendesk\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://medium.com/traveloka-engineering/circuit-breakers-dont-let-your-dependencies-bring-you-down-5ba1c5cf1eec\" rel=\"nofollow\"\u003eCircuit Breaker at Traveloka\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://shopify.engineering/circuit-breaker-misconfigured\" rel=\"nofollow\"\u003eCircuit Breaker at Shopify\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://www.javaworld.com/article/2824163/application-performance/stability-patterns-applied-in-a-restful-architecture.html\" rel=\"nofollow\"\u003eTimeouts\u003c/a\u003e\n\u003cul dir=\"auto\"\u003e\n\u003cli\u003e\u003ca href=\"https://medium.com/netflix-techblog/fault-tolerance-in-a-high-volume-distributed-system-91ab4faae74a\" rel=\"nofollow\"\u003eFault Tolerance (Timeouts and Retries, Thread Separation, Semaphores, Circuit Breakers) at Neflix\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://doordash.engineering/2018/12/21/enforce-timeout-a-doordash-reliability-methodology/\" rel=\"nofollow\"\u003eEnforce Timeout: A Reliability Methodology at DoorDash\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://www.ebayinc.com/stories/blogs/tech/a-vip-connection-timeout-issue-caused-by-snat-and-tcp-tw-recycle/\" rel=\"nofollow\"\u003eTroubleshooting a Connection Timeout Issue with tcp_tw_recycle Enabled at eBay\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://medium.com/booking-com-infrastructure/better-crash-safe-replication-for-mysql-a336a69b317f\" rel=\"nofollow\"\u003eCrash-safe Replication for MySQL at Booking.com\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://skife.org/architecture/fault-tolerance/2009/12/31/bulkheads.html\" rel=\"nofollow\"\u003eBulkheads: Partition and Tolerate Failure in One Part\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://docs.microsoft.com/en-us/sql/relational-databases/policy-based-management/place-data-and-log-files-on-separate-drives\" rel=\"nofollow\"\u003eSteady State: Always Put Logs on Separate Disk\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"http://www.sosp.org/2001/papers/welsh.pdf\" rel=\"nofollow\"\u003eThrottling: Maintain a Steady Pace\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://engineering.linkedin.com/blog/2017/11/improving-resiliency-and-stability-of-a-large-scale-api\" rel=\"nofollow\"\u003eMulti-Clustering: Improving Resiliency and Stability of a Large-scale Monolithic API Service at LinkedIn\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://engineering.riotgames.com/news/determinism-league-legends-fixing-divergences\" rel=\"nofollow\"\u003eDeterminism (4 parts) in League of Legends Server\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003cdiv class=\"markdown-heading\" dir=\"auto\"\u003e\u003ch2 tabindex=\"-1\" class=\"heading-element\" dir=\"auto\"\u003ePerformance\u003c/h2\u003e\u003ca id=\"user-content-performance\" class=\"anchor\" aria-label=\"Permalink: Performance\" href=\"#performance\"\u003e\u003csvg class=\"octicon octicon-link\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" height=\"16\" aria-hidden=\"true\"\u003e\u003cpath d=\"m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z\"\u003e\u003c/path\u003e\u003c/svg\u003e\u003c/a\u003e\u003c/div\u003e\n\u003cul dir=\"auto\"\u003e\n\u003cli\u003e\u003ca href=\"https://stackify.com/application-performance-metrics/\" rel=\"nofollow\"\u003ePerformance Optimization on OS, Storage, Database, Network\u003c/a\u003e\n\u003cul dir=\"auto\"\u003e\n\u003cli\u003e\u003ca href=\"https://engineering.instagram.com/improving-performance-with-background-data-prefetching-b191acb39898\" rel=\"nofollow\"\u003eImproving Performance with Background Data Prefetching at Instagram\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://engineering.linkedin.com/blog/2020/fixing-linux-filesystem-performance-regressions\" rel=\"nofollow\"\u003eFixing Linux filesystem performance regressions at LinkedIn\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://www.ebayinc.com/stories/blogs/tech/how-ebays-shopping-cart-used-compression-techniques-to-solve-network-io-bottlenecks/\" rel=\"nofollow\"\u003eCompression Techniques to Solve Network I/O Bottlenecks at eBay\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://blogs.dropbox.com/tech/2017/09/optimizing-web-servers-for-high-throughput-and-low-latency/\" rel=\"nofollow\"\u003eOptimizing Web Servers for High Throughput and Low Latency at Dropbox\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://medium.com/netflix-techblog/linux-performance-analysis-in-60-000-milliseconds-accc10403c55\" rel=\"nofollow\"\u003eLinux Performance Analysis in 60.000 Milliseconds at Netflix\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://engineering.mixpanel.com/2018/07/31/live-downsizing-google-cloud-pds-for-fun-and-profit/\" rel=\"nofollow\"\u003eLive Downsizing Google Cloud Persistent Disks (PD-SSD) at Mixpanel\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://zapier.com/engineering/celery-python-jemalloc/\" rel=\"nofollow\"\u003eDecreasing RAM Usage by 40% Using jemalloc with Python \u0026amp; Celery at Zapier\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://slack.engineering/reducing-slacks-memory-footprint-4480fec7e8eb\" rel=\"nofollow\"\u003eReducing Memory Footprint at Slack\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://medium.com/@Pinterest_Engineering/driving-user-growth-with-performance-improvements-cfc50dafadd7\" rel=\"nofollow\"\u003ePerformance Improvements at Pinterest\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://www.youtube.com/watch?v=f9xI2jR71Ms\" rel=\"nofollow\"\u003eServer Side Rendering at Wix\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://engineeringblog.yelp.com/2018/02/making-30x-performance-improvements-on-yelps-mysqlstreamer.html\" rel=\"nofollow\"\u003e30x Performance Improvements on MySQLStreamer at Yelp\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://medium.com/netflix-techblog/optimizing-the-netflix-api-5c9ac715cf19\" rel=\"nofollow\"\u003eOptimizing APIs at Netflix\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://medium.com/walmartlabs/performance-monitoring-with-riemann-and-clojure-eafc07fcd375\" rel=\"nofollow\"\u003ePerformance Monitoring with Riemann and Clojure at Walmart\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://www.zynga.com/blogs/engineering/live-games-have-evolving-performance\" rel=\"nofollow\"\u003ePerformance Tracking Dashboard for Live Games at Zynga\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://www.ebayinc.com/stories/blogs/tech/optimization-of-cal-report-hadoop-mapreduce-job/\" rel=\"nofollow\"\u003eOptimizing CAL Report Hadoop MapReduce Jobs at eBay\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://www.ebayinc.com/stories/blogs/tech/performance-tuning-on-quartz-scheduler/\" rel=\"nofollow\"\u003ePerformance Tuning on Quartz Scheduler at eBay\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://engineering.riotgames.com/news/profiling-optimisation\" rel=\"nofollow\"\u003eProfiling C++ (Part 1: Optimization, Part 2: Measurement and Analysis) at Riot Games\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://medium.com/homeaway-tech-blog/profiling-react-server-side-rendering-to-free-the-node-js-event-loop-7f0fe455a901\" rel=\"nofollow\"\u003eProfiling React Server-Side Rendering at HomeAway\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://medium.com/dailymotion-engineering/hardware-assisted-video-transcoding-at-dailymotion-66cd2db448ae\" rel=\"nofollow\"\u003eHardware-Assisted Video Transcoding at Dailymotion\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://blogs.dropbox.com/tech/2018/11/cross-shard-transactions-at-10-million-requests-per-second/\" rel=\"nofollow\"\u003eCross Shard Transactions at 10 Million RPS at Dropbox\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://medium.com/@Pinterest_Engineering/api-profiling-at-pinterest-6fa9333b4961\" rel=\"nofollow\"\u003eAPI Profiling at Pinterest\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://engineeringblog.yelp.com/2017/07/generating-web-pages-in-parallel-with-pagelets.html\" rel=\"nofollow\"\u003ePagelets Parallelize Server-side Processing at Yelp\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://blog.twitter.com/engineering/en_us/topics/infrastructure/2019/improving-key-expiration-in-redis.html\" rel=\"nofollow\"\u003eImproving key expiration in Redis at Twitter\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://medium.com/mindgeek-engineering-blog/ad-delivery-network-performance-optimization-with-flame-graphs-bc550cf59cf7\" rel=\"nofollow\"\u003eAd Delivery Network Performance Optimization with Flame Graphs at MindGeek\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://medium.com/netflix-techblog/predictive-cpu-isolation-of-containers-at-netflix-91f014d856c7\" rel=\"nofollow\"\u003ePredictive CPU isolation of containers at Netflix\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://eng.uber.com/improving-hdfs-i-o-utilization-for-efficiency/\" rel=\"nofollow\"\u003eImproving HDFS I/O Utilization for Efficiency at Uber\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://codeascraft.com/2020/04/23/cloud-jewels-estimating-kwh-in-the-cloud/\" rel=\"nofollow\"\u003eCloud Jewels: Estimating kWh in the Cloud at Etsy\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://engineering.indeedblog.com/blog/2019/12/unthrottled-fixing-cpu-limits-in-the-cloud/\" rel=\"nofollow\"\u003eUnthrottled: Fixing CPU Limits in the Cloud (2 parts) at Indeed\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://confluence.atlassian.com/enterprise/garbage-collection-gc-tuning-guide-461504616.html\" rel=\"nofollow\"\u003ePerformance Optimization by Tuning Garbage Collection\u003c/a\u003e\n\u003cul dir=\"auto\"\u003e\n\u003cli\u003e\u003ca href=\"https://engineering.linkedin.com/garbage-collection/garbage-collection-optimization-high-throughput-and-low-latency-java-applications\" rel=\"nofollow\"\u003eGarbage Collection in Java Applications at LinkedIn\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://medium.com/adobetech/engineering-high-throughput-low-latency-machine-learning-services-7d45edac0271\" rel=\"nofollow\"\u003eGarbage Collection in High-Throughput, Low-Latency Machine Learning Services at Adobe\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://developers.soundcloud.com/blog/garbage-collection-in-redux-applications\" rel=\"nofollow\"\u003eGarbage Collection in Redux Applications at SoundCloud\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://blog.twitch.tv/go-memory-ballast-how-i-learnt-to-stop-worrying-and-love-the-heap-26c2462549a2\" rel=\"nofollow\"\u003eGarbage Collection in Go Application at Twitch\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://www.linux.com/blog/can-nodejs-scale-ask-team-alibaba\" rel=\"nofollow\"\u003eAnalyzing V8 Garbage Collection Logs at Alibaba\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://instagram-engineering.com/copy-on-write-friendly-python-garbage-collection-ad6ed5233ddf\" rel=\"nofollow\"\u003ePython Garbage Collection for Dropping 50% Memory Growth Per Request at Instagram\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://githubengineering.com/removing-oobgc/\" rel=\"nofollow\"\u003ePerformance Impact of Removing Out of Band Garbage Collector (OOBGC) at Github\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://allegro.tech/2018/05/a-comedy-of-errors-debugging-java-memory-leaks.html\" rel=\"nofollow\"\u003eDebugging Java Memory Leaks at Allegro\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://www.youtube.com/watch?v=X4tmr3nhZRg\" rel=\"nofollow\"\u003eOptimizing JVM at Alibaba\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://eng.uber.com/jvm-tuning-garbage-collection/\" rel=\"nofollow\"\u003eTuning JVM Memory for Large-scale Services at Uber\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://medium.com/walmartglobaltech/solr-performance-tuning-beb7d0d0f8d9\" rel=\"nofollow\"\u003eSolr Performance Tuning at Walmart\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://tech.flipkart.com/memory-tuning-a-high-throughput-microservice-ed57b3e60997\" rel=\"nofollow\"\u003eMemory Tuning a High Throughput Microservice at Flipkart\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://developers.google.com/web/fundamentals/performance/why-performance-matters/\" rel=\"nofollow\"\u003ePerformance Optimization on Image, Video, Page Load\u003c/a\u003e\n\u003cul dir=\"auto\"\u003e\n\u003cli\u003e\u003ca href=\"https://code.facebook.com/posts/129055711052260/optimizing-360-photos-at-scale/\" rel=\"nofollow\"\u003eOptimizing 360 Photos at Scale at Facebook\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://codeascraft.com/2017/05/30/reducing-image-file-size-at-etsy/\" rel=\"nofollow\"\u003eReducing Image File Size in the Photos Infrastructure at Etsy\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://medium.com/@Pinterest_Engineering/improving-gif-performance-on-pinterest-8dad74bf92f1\" rel=\"nofollow\"\u003eImproving GIF Performance at Pinterest\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://medium.com/@Pinterest_Engineering/optimizing-video-playback-performance-caf55ce310d1\" rel=\"nofollow\"\u003eOptimizing Video Playback Performance at Pinterest\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://medium.com/netflix-techblog/optimized-shot-based-encodes-now-streaming-4b9464204830\" rel=\"nofollow\"\u003eOptimizing Video Stream for Low Bandwidth with Dynamic Optimizer at Netflix\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://youtube-eng.googleblog.com/2018/04/making-high-quality-video-efficient.html\" rel=\"nofollow\"\u003eAdaptive Video Streaming at YouTube\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://medium.com/dailymotion/reducing-video-loading-time-fa9c997a2294\" rel=\"nofollow\"\u003eReducing Video Loading Time at Dailymotion\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://www.zillow.com/engineering/improving-homepage-performance/\" rel=\"nofollow\"\u003eImproving Homepage Performance at Zillow\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://medium.com/expedia-engineering/go-fast-or-go-home-the-process-of-optimizing-for-client-performance-57bb497402e\" rel=\"nofollow\"\u003eThe Process of Optimizing for Client Performance at Expedia\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://medium.com/bbc-design-engineering/bbc-world-service-web-performance-26b08f7abfcc\" rel=\"nofollow\"\u003eWeb Performance at BBC\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://blogs.akamai.com/2016/02/understanding-brotlis-potential.html\" rel=\"nofollow\"\u003ePerformance Optimization by Brotli Compression\u003c/a\u003e\n\u003cul dir=\"auto\"\u003e\n\u003cli\u003e\u003ca href=\"https://engineering.linkedin.com/blog/2017/05/boosting-site-speed-using-brotli-compression\" rel=\"nofollow\"\u003eBoosting Site Speed Using Brotli Compression at LinkedIn\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://medium.com/booking-com-development/bookings-journey-with-brotli-978b249d34f3\" rel=\"nofollow\"\u003eBrotli at Booking.com\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://tech.treebo.com/a-tale-of-brotli-compression-bcb071d9780a\" rel=\"nofollow\"\u003eBrotli at Treebo\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://dropbox.tech/infrastructure/deploying-brotli-for-static-content\" rel=\"nofollow\"\u003eDeploying Brotli for Static Content at Dropbox\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://engineeringblog.yelp.com/2017/07/progressive-enhancement-with-brotli.html\" rel=\"nofollow\"\u003eProgressive Enhancement with Brotli at Yelp\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://doordash.engineering/2019/01/02/speeding-up-redis-with-compression/\" rel=\"nofollow\"\u003eSpeeding Up Redis with Compression at Doordash\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://www.techempower.com/benchmarks/\" rel=\"nofollow\"\u003ePerformance Optimization on Languages and Frameworks\u003c/a\u003e\n\u003cul dir=\"auto\"\u003e\n\u003cli\u003e\u003ca href=\"https://netflixtechblog.com/python-at-netflix-bba45dae649e\" rel=\"nofollow\"\u003ePython at Netflix\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://instagram-engineering.com/python-at-scale-strict-modules-c0bb9245c834\" rel=\"nofollow\"\u003ePython at scale (3 parts) at Instagram\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://engineering.issuu.com/2018/12/10/our-current-ocaml-best-practices-part-2\" rel=\"nofollow\"\u003eOCaml best practices (2 parts) at Issuu\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://slack.engineering/taking-php-seriously-cf7a60065329\" rel=\"nofollow\"\u003ePHP at Slack\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://tech.trivago.com/2020/03/02/why-we-chose-go/\" rel=\"nofollow\"\u003eGo at Trivago\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://codeascraft.com/2021/11/08/etsys-journey-to-typescript/\" rel=\"nofollow\"\u003eTypeScript at Etsy\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://medium.com/bumble-tech/bpf-and-go-modern-forms-of-introspection-in-linux-6b9802682223\" rel=\"nofollow\"\u003eBPF and Go at Bumble\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://medium.com/gitlab-magazine/why-we-use-ruby-on-rails-to-build-gitlab-601dce4a7a38\" rel=\"nofollow\"\u003eRuby on Rails at GitLab\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://engineering.wework.com/choosing-a-language-stack-cac3726928f6\" rel=\"nofollow\"\u003eChoosing a Language Stack at WeWork\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://blog.discord.com/why-discord-is-switching-from-go-to-rust-a190bbca2b1f\" rel=\"nofollow\"\u003eSwitching from Go to Rust at Discord\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://medium.com/agoda-engineering/happy-asp-net-core-performance-optimization-4e21a383d299\" rel=\"nofollow\"\u003eASP.NET Core Performance Optimization at Agoda\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003cdiv class=\"markdown-heading\" dir=\"auto\"\u003e\u003ch2 tabindex=\"-1\" class=\"heading-element\" dir=\"auto\"\u003eIntelligence\u003c/h2\u003e\u003ca id=\"user-content-intelligence\" class=\"anchor\" aria-label=\"Permalink: Intelligence\" href=\"#intelligence\"\u003e\u003csvg class=\"octicon octicon-link\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" height=\"16\" aria-hidden=\"true\"\u003e\u003cpath d=\"m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z\"\u003e\u003c/path\u003e\u003c/svg\u003e\u003c/a\u003e\u003c/div\u003e\n\u003cul dir=\"auto\"\u003e\n\u003cli\u003e\u003ca href=\"https://insights.sei.cmu.edu/sei_blog/2017/05/reference-architectures-for-big-data-systems.html\" rel=\"nofollow\"\u003eBig Data\u003c/a\u003e\n\u003cul dir=\"auto\"\u003e\n\u003cli\u003e\u003ca href=\"https://eng.uber.com/uber-big-data-platform/\" rel=\"nofollow\"\u003eData Platform at Uber\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://www.unibw.de/code/events-u/jt-2018-workshops/ws3_bigdata_vortrag_widmann.pdf\" rel=\"nofollow\"\u003eData Platform at BMW\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://www.youtube.com/watch?v=CSDIThSwA7s\" rel=\"nofollow\"\u003eData Platform at Netflix\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://tech.flipkart.com/overview-of-flipkart-data-platform-20c6d3e9a196\" rel=\"nofollow\"\u003eData Platform at Flipkart\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://medium.com/coupang-tech/evolving-the-coupang-data-platform-308e305a9c45\" rel=\"nofollow\"\u003eData Platform at Coupang\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://doordash.engineering/2020/09/25/how-doordash-is-scaling-its-data-platform/\" rel=\"nofollow\"\u003eData Platform at DoorDash\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"http://engineering.khanacademy.org/posts/khanalytics.htm\" rel=\"nofollow\"\u003eData Platform at Khan Academy\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://medium.com/airbnb-engineering/data-infrastructure-at-airbnb-8adfb34f169c\" rel=\"nofollow\"\u003eData Infrastructure at Airbnb\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://www.infoq.com/presentations/big-data-infrastructure-linkedin\" rel=\"nofollow\"\u003eData Infrastructure at LinkedIn\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://blog.gojekengineering.com/data-infrastructure-at-go-jek-cd4dc8cbd929\" rel=\"nofollow\"\u003eData Infrastructure at GO-JEK\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://medium.com/@Pinterest_Engineering/scalable-and-reliable-data-ingestion-at-pinterest-b921c2ee8754\" rel=\"nofollow\"\u003eData Ingestion Infrastructure at Pinterest\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://medium.com/@Pinterest_Engineering/behind-the-pins-building-analytics-f7b508cdacab\" rel=\"nofollow\"\u003eData Analytics Architecture at Pinterest\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://labs.spotify.com/2017/10/23/big-data-processing-at-spotify-the-road-to-scio-part-2/\" rel=\"nofollow\"\u003eBig Data Processing (2 parts) at Spotify\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://cdn.oreillystatic.com/en/assets/1/event/160/Big%20data%20processing%20with%20Hadoop%20and%20Spark%2C%20the%20Uber%20way%20Presentation.pdf\" rel=\"nofollow\"\u003eBig Data Processing at Uber\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://cdn.oreillystatic.com/en/assets/1/event/269/Lyft_s%20analytics%20pipeline_%20From%20Redshift%20to%20Apache%20Hive%20and%20Presto%20Presentation.pdf\" rel=\"nofollow\"\u003eAnalytics Pipeline at Lyft\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://tech.grammarly.com/blog/building-a-versatile-analytics-pipeline-on-top-of-apache-spark\" rel=\"nofollow\"\u003eAnalytics Pipeline at Grammarly\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://medium.com/teads-engineering/give-meaning-to-100-billion-analytics-events-a-day-d6ba09aa8f44\" rel=\"nofollow\"\u003eAnalytics Pipeline at Teads\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://www.infoq.com/presentations/paypal-ml-fraud-prevention-2018\" rel=\"nofollow\"\u003eML Data Pipelines for Real-Time Fraud Prevention at PayPal\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://cdn.oreillystatic.com/en/assets/1/event/269/Big%20data%20analytics%20and%20machine%20learning%20techniques%20to%20drive%20and%20grow%20business%20Presentation%201.pdf\" rel=\"nofollow\"\u003eBig Data Analytics and ML Techniques at LinkedIn\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://cdn.oreillystatic.com/en/assets/1/event/137/Building%20a%20self-serve%20real-time%20reporting%20platform%20at%20LinkedIn%20Presentation%201.pdf\" rel=\"nofollow\"\u003eSelf-Serve Reporting Platform on Hadoop at LinkedIn\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://engineering.linkedin.com/blog/2019/04/privacy-preserving-analytics-and-reporting-at-linkedin\" rel=\"nofollow\"\u003ePrivacy-Preserving Analytics and Reporting at LinkedIn\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://medium.com/walmartlabs/how-we-build-a-robust-analytics-platform-using-spark-kafka-and-cassandra-lambda-architecture-70c2d1bc8981\" rel=\"nofollow\"\u003eAnalytics Platform for Tracking Item Availability at Walmart\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://code.fb.com/data-center-engineering/hardware-analytics-and-lifecycle-optimization-halo-at-facebook/\" rel=\"nofollow\"\u003eHALO: Hardware Analytics and Lifecycle Optimization at Facebook\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://techblog.king.com/rbea-scalable-real-time-analytics-king/\" rel=\"nofollow\"\u003eRBEA: Real-time Analytics Platform at King\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://eng.uber.com/aresdb/\" rel=\"nofollow\"\u003eAresDB: GPU-Powered Real-time Analytics Engine at Uber\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://eng.uber.com/athenax/\" rel=\"nofollow\"\u003eAthenaX: Streaming Analytics Platform at Uber\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://medium.com/netflix-techblog/delta-a-data-synchronization-and-enrichment-platform-e82c36a79aee\" rel=\"nofollow\"\u003eDelta: Data Synchronization and Enrichment Platform at Netflix\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://medium.com/netflix-techblog/keystone-real-time-stream-processing-platform-a3ee651812a\" rel=\"nofollow\"\u003eKeystone: Real-time Stream Processing Platform at Netflix\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://eng.uber.com/databook/\" rel=\"nofollow\"\u003eDatabook: Turning Big Data into Knowledge with Metadata at Uber\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://eng.lyft.com/amundsen-lyfts-data-discovery-metadata-engine-62d27254fbb9\" rel=\"nofollow\"\u003eAmundsen: Data Discovery \u0026amp; Metadata Engine at Lyft\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://eng.uber.com/maze/\" rel=\"nofollow\"\u003eMaze: Funnel Visualization Platform at Uber\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://medium.com/netflix-techblog/metacat-making-big-data-discoverable-and-meaningful-at-netflix-56fb36a53520\" rel=\"nofollow\"\u003eMetacat: Making Big Data Discoverable and Meaningful at Netflix\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://medium.com/airbnb-engineering/capturing-data-evolution-in-a-service-oriented-architecture-72f7c643ee6f\" rel=\"nofollow\"\u003eSpinalTap: Change Data Capture System at Airbnb\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://www.ebayinc.com/stories/blogs/tech/announcing-the-accelerator-processing-1-000-000-000-lines-per-second-on-a-single-computer/\" rel=\"nofollow\"\u003eAccelerator: Fast Data Processing Framework at eBay\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://yahooeng.tumblr.com/post/180867271141/a-new-chapter-for-omid\" rel=\"nofollow\"\u003eOmid: Transaction Processing Platform at Yahoo\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://yahooeng.tumblr.com/post/157196488076/open-sourcing-tensorflowonspark-distributed-deep\" rel=\"nofollow\"\u003eTensorFlowOnSpark: Distributed Deep Learning on Big Data Clusters at Yahoo\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://yahooeng.tumblr.com/post/139916828451/caffeonspark-open-sourced-for-distributed-deep\" rel=\"nofollow\"\u003eCaffeOnSpark: Distributed Deep Learning on Big Data Clusters at Yahoo\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://medium.com/adobetech/spark-on-scala-adobe-analytics-reference-architecture-7457f5614b4c\" rel=\"nofollow\"\u003eSpark on Scala: Analytics Reference Architecture at Adobe\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://engineering.atspotify.com/2020/11/02/spotifys-new-experimentation-platform-part-2/\" rel=\"nofollow\"\u003eExperimentation Platform (2 parts) at Spotify\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://medium.com/airbnb-engineering/https-medium-com-jonathan-parks-scaling-erf-23fd17c91166\" rel=\"nofollow\"\u003eExperimentation Platform at Airbnb\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://jobs.zalando.com/tech/blog/zalando-smart-product-platform/?gh_src=4n3gxh1\" rel=\"nofollow\"\u003eSmart Product Platform at Zalando\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://www.slideshare.net/wyukawa/strata2017-sg\" rel=\"nofollow\"\u003eLog Analysis Platform at LINE\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://medium.com/myntra-engineering/universal-dashboarding-platform-udp-data-visualisation-platform-at-myntra-5f2522fcf72d\" rel=\"nofollow\"\u003eData Visualisation Platform at Myntra\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://medium.com/netflix-techblog/building-and-scaling-data-lineage-at-netflix-to-improve-data-infrastructure-reliability-and-1a52526a7977\" rel=\"nofollow\"\u003eBuilding and Scaling Data Lineage at Netflix\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://medium.com/@Pinterest_Engineering/building-a-scalable-data-management-system-for-computer-vision-tasks-a6dee8f1c580\" rel=\"nofollow\"\u003eBuilding a scalable data management system for computer vision tasks at Pinterest\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://codeascraft.com/2019/07/31/an-introduction-to-structured-data-at-etsy/\" rel=\"nofollow\"\u003eStructured Data at Etsy\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://medium.com/airbnb-engineering/scaling-a-mature-data-pipeline-managing-overhead-f34835cbc866\" rel=\"nofollow\"\u003eScaling a Mature Data Pipeline - Managing Overhead at Airbnb\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://medium.com/airbnb-engineering/on-spark-hive-and-small-files-an-in-depth-look-at-spark-partitioning-strategies-a9a364f908\" rel=\"nofollow\"\u003eSpark Partitioning Strategies at Airbnb\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://engineering.linkedin.com/blog/2021/the-exabyte-club--linkedin-s-journey-of-scaling-the-hadoop-distr\" rel=\"nofollow\"\u003eScaling the Hadoop Distributed File System at LinkedIn\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://engineering.linkedin.com/blog/2021/scaling-linkedin-s-hadoop-yarn-cluster-beyond-10-000-nodes\" rel=\"nofollow\"\u003eScaling Hadoop YARN cluster beyond 10,000 nodes at LinkedIn\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://www.csie.ntu.edu.tw/~cjlin/talks/bigdata-bilbao.pdf\" rel=\"nofollow\"\u003eDistributed Machine Learning\u003c/a\u003e\n\u003cul dir=\"auto\"\u003e\n\u003cli\u003e\u003ca href=\"https://code.fb.com/developer-tools/aroma/\" rel=\"nofollow\"\u003eAroma: Using ML for Code Recommendation at Facebook\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://eng.lyft.com/introducing-flyte-cloud-native-machine-learning-and-data-processing-platform-fb2bb3046a59\" rel=\"nofollow\"\u003eFlyte: Cloud Native Machine Learning and Data Processing Platform at Lyft\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://eng.lyft.com/lyftlearn-ml-model-training-infrastructure-built-on-kubernetes-aef8218842bb\" rel=\"nofollow\"\u003eLyftLearn: ML Model Training Infrastructure built on Kubernetes at Lyft\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://eng.uber.com/michelangelo/\" rel=\"nofollow\"\u003eMichelangelo: Machine Learning Platform at Uber\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://eng.uber.com/scaling-michelangelo/\" rel=\"nofollow\"\u003eScaling Michelangelo\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://engineeringblog.yelp.com/2020/07/ML-platform-overview.html\" rel=\"nofollow\"\u003eMachine Learning Platform at Yelp\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://eng.uber.com/horovod/\" rel=\"nofollow\"\u003eHorovod: Open Source Distributed Deep Learning Framework for TensorFlow at Uber\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://eng.uber.com/cota/\" rel=\"nofollow\"\u003eCOTA: Improving Customer Care with NLP \u0026amp; Machine Learning at Uber\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://eng.uber.com/manifold/\" rel=\"nofollow\"\u003eManifold: Model-Agnostic Visual Debugging Tool for Machine Learning at Uber\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://githubengineering.com/topics/\" rel=\"nofollow\"\u003eRepo-Topix: Topic Extraction Framework at Github\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://engineering.linkedin.com/blog/2018/05/concourse--generating-personalized-content-notifications-in-near\" rel=\"nofollow\"\u003eConcourse: Generating Personalized Content Notifications in Near-Real-Time at LinkedIn\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://www.ebayinc.com/stories/blogs/tech/altus-care-apply-chatbot-to-ebay-platform-engineering/\" rel=\"nofollow\"\u003eAltus Care: Applying a Chatbot to Platform Engineering at eBay\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://tech.ebayinc.com/engineering/pykrylov-accelerating-machine-learning-research-at-ebay/\" rel=\"nofollow\"\u003ePyKrylov: Accelerating Machine Learning Research at eBay\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://blog.box.com/blog/box-graph-how-we-built-spontaneous-social-network/\" rel=\"nofollow\"\u003eBox Graph: Spontaneous Social Network at Box\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://hackernoon.com/pricingnet-modelling-the-global-airline-industry-with-neural-networks-833844d20ea6\" rel=\"nofollow\"\u003ePricingNet: Pricing Modelling with Neural Networks at Skyscanner\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://medium.com/pinterest-engineering/pintext-a-multitask-text-embedding-system-in-pinterest-b80ece364555\" rel=\"nofollow\"\u003ePinText: Multitask Text Embedding System at Pinterest\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://medium.com/pinterest-engineering/searchsage-learning-search-query-representations-at-pinterest-654f2bb887fc\" rel=\"nofollow\"\u003eSearchSage: Learning Search Query Representations at Pinterest\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://dropbox.tech/machine-learning/cannes--how-ml-saves-us--1-7m-a-year-on-document-previews\" rel=\"nofollow\"\u003eCannes: ML saves $1.7M a year on document previews at Dropbox\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://engineeringblog.yelp.com/2018/01/building-a-distributed-ml-pipeline-part1.html\" rel=\"nofollow\"\u003eScaling Gradient Boosted Trees for Click-Through-Rate Prediction at Yelp\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://machinelearning.apple.com/2017/12/06/learning-with-privacy-at-scale.html\" rel=\"nofollow\"\u003eLearning with Privacy at Scale at Apple\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://medium.com/mercari-engineering/mercaris-image-classification-experiment-using-deep-learning-9b4e994a18ec\" rel=\"nofollow\"\u003eDeep Learning for Image Classification Experiment at Mercari\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://allegro.tech/2016/12/deep-learning-for-frame-detection.html\" rel=\"nofollow\"\u003eDeep Learning for Frame Detection in Product Images at Allegro\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://medium.com/hulu-tech-blog/content-based-video-relevance-prediction-b2c448e14752\" rel=\"nofollow\"\u003eContent-based Video Relevance Prediction at Hulu\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"http://engineering.tripadvisor.com/improving-tripadvisor-photo-selection-deep-learning/\" rel=\"nofollow\"\u003eImproving Photo Selection With Deep Learning at TripAdvisor\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://www.tripadvisor.com/engineering/personalized-recommendations-for-experiences-using-deep-learning/\" rel=\"nofollow\"\u003ePersonalized Recommendations for Experiences Using Deep Learning at TripAdvisor\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://medium.com/bbc-design-engineering/developing-personalised-recommender-systems-at-the-bbc-e26c5e0c4216\" rel=\"nofollow\"\u003ePersonalised Recommender Systems at BBC\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://technology.condenast.com/story/handbag-brand-and-color-detection\" rel=\"nofollow\"\u003eMachine Learning (2 parts) at Condé Nast\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://technology.condenast.com/story/natural-language-processing-and-content-analysis-at-conde-nast-part-2-system-architecture\" rel=\"nofollow\"\u003eNatural Language Processing and Content Analysis (2 parts) at Condé Nast\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://tech.iheart.com/mapping-the-world-of-music-using-machine-learning-part-2-aa50b6a0304c\" rel=\"nofollow\"\u003eMapping the World of Music Using Machine Learning (2 parts) at iHeartRadio\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://medium.com/netflix-techblog/using-machine-learning-to-improve-streaming-quality-at-netflix-9651263ef09f\" rel=\"nofollow\"\u003eMachine Learning to Improve Streaming Quality at Netflix\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://blog.gojekengineering.com/how-we-use-machine-learning-to-match-drivers-riders-b06d617b9e5\" rel=\"nofollow\"\u003eMachine Learning to Match Drivers \u0026amp; Riders at GO-JEK\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://youtube-eng.googleblog.com/2015/10/improving-youtube-video-thumbnails-with_8.html\" rel=\"nofollow\"\u003eImproving Video Thumbnails with Deep Neural Nets at YouTube\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://tech.instacart.com/how-instacart-delivers-on-time-using-quantile-regression-2383e2e03edb\" rel=\"nofollow\"\u003eQuantile Regression for Delivering On Time at Instacart\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://jobs.zalando.com/tech/blog/search-deep-neural-network/\" rel=\"nofollow\"\u003eCross-Lingual End-to-End Product Search with Deep Learning at Zalando\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://blog.janestreet.com/real-world-machine-learning-part-1/\" rel=\"nofollow\"\u003eMachine Learning at Jane Street\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://engineering.quora.com/A-Machine-Learning-Approach-to-Ranking-Answers-on-Quora\" rel=\"nofollow\"\u003eMachine Learning for Ranking Answers End-to-End at Quora\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"http://engineering.flipboard.com/2017/02/storyclustering\" rel=\"nofollow\"\u003eClustering Similar Stories Using LDA at Flipboard\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://code.flickr.net/2017/03/07/introducing-similarity-search-at-flickr/\" rel=\"nofollow\"\u003eSimilarity Search at Flickr\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"http://engineering.indeedblog.com/blog/2016/04/building-a-large-scale-machine-learning-pipeline-for-job-recommendations/\" rel=\"nofollow\"\u003eLarge-Scale Machine Learning Pipeline for Job Recommendations at Indeed\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"http://engineering.taboola.com/deep-learning-from-prototype-to-production/\" rel=\"nofollow\"\u003eDeep Learning from Prototype to Production at Taboola\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://cdn.oreillystatic.com/en/assets/1/event/144/Atom%20smashing%20using%20machine%20learning%20at%20CERN%20Presentation.pdf\" rel=\"nofollow\"\u003eAtom Smashing using Machine Learning at CERN\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://medium.engineering/mapping-mediums-tags-1b9a78d77cf0\" rel=\"nofollow\"\u003eMapping Tags at Medium\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"http://engineering.monsanto.com/2015/11/23/chinese-restaurant-process/\" rel=\"nofollow\"\u003eClustering with the Dirichlet Process Mixture Model in Scala at Monsanto\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://engineering.foursquare.com/you-are-probably-here-better-map-pins-with-dbscan-random-forests-9d51e8c1964d\" rel=\"nofollow\"\u003eMap Pins with DBSCAN \u0026amp; Random Forests at Foursquare\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://eng.uber.com/advanced-technologies-detecting-preventing-fraud-uber/\" rel=\"nofollow\"\u003eDetecting and Preventing Fraud at Uber\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://eng.uber.com/forecasting-introduction/\" rel=\"nofollow\"\u003eForecasting at Uber\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://eng.uber.com/transforming-financial-forecasting-machine-learning/\" rel=\"nofollow\"\u003eFinancial Forecasting at Uber\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://blog.twitter.com/engineering/en_us/topics/insights/2018/ml-workflows.html\" rel=\"nofollow\"\u003eProductionizing ML with Workflows at Twitter\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://www.ebayinc.com/stories/blogs/tech/gui-testing-powered-by-deep-learning/\" rel=\"nofollow\"\u003eGUI Testing Powered by Deep Learning at eBay\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"http://engineering.pivotal.io/post/scaling-machine-learning-to-recommend-driving-routes/\" rel=\"nofollow\"\u003eScaling Machine Learning to Recommend Driving Routes at Pivotal\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://www.infoq.com/presentations/doordash-real-time-predictions\" rel=\"nofollow\"\u003eReal-Time Predictions at DoorDash\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://blogs.dropbox.com/tech/2018/09/machine-intelligence-at-dropbox-an-update-from-our-dbxi-team/\" rel=\"nofollow\"\u003eMachine Intelligence at Dropbox\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://blogs.dropbox.com/tech/2018/10/using-machine-learning-to-index-text-from-billions-of-images/\" rel=\"nofollow\"\u003eMachine Learning for Indexing Text from Billions of Images at Dropbox\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://codeascraft.com/2018/07/12/modeling-user-journey-via-semantic-embeddings/\" rel=\"nofollow\"\u003eModeling User Journeys via Semantic Embeddings at Etsy\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://engineering.linkedin.com/blog/2018/09/automated-fake-account-detection-at-linkedin\" rel=\"nofollow\"\u003eAutomated Fake Account Detection at LinkedIn\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://medium.com/airbnb-engineering/contextualizing-airbnb-by-building-knowledge-graph-b7077e268d5a\" rel=\"nofollow\"\u003eBuilding Knowledge Graph at Airbnb\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://instagram-engineering.com/core-modeling-at-instagram-a51e0158aa48\" rel=\"nofollow\"\u003eCore Modeling at Instagram\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://tech.mercari.com/entry/2019/04/26/163000\" rel=\"nofollow\"\u003eNeural Architecture Search (NAS) for Prohibited Item Detection at Mercari\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://medium.com/airbnb-engineering/amenity-detection-and-beyond-new-frontiers-of-computer-vision-at-airbnb-144a4441b72e\" rel=\"nofollow\"\u003eComputer Vision at Airbnb\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://www.zillow.com/engineering/behind-zillow-3d-home-backend-algorithms/\" rel=\"nofollow\"\u003e3D Home Backend Algorithms at Zillow\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://eng.lyft.com/making-long-term-forecasts-at-lyft-fac475b3ba52\" rel=\"nofollow\"\u003eLong-term Forecasts at Lyft\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://engineeringblog.yelp.com/2019/10/discovering-popular-dishes-with-deep-learning.html\" rel=\"nofollow\"\u003eDiscovering Popular Dishes with Deep Learning at Yelp\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://blog.twitter.com/engineering/en_us/topics/infrastructure/2019/splitnet-architecture-for-ad-candidate-ranking.html\" rel=\"nofollow\"\u003eSplitNet Architecture for Ad Candidate Ranking at Twitter\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://engineering.indeedblog.com/blog/2019/09/jobs-filter/\" rel=\"nofollow\"\u003eJobs Filter at Indeed\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://engineeringblog.yelp.com/2019/12/architecting-wait-time-estimations.html\" rel=\"nofollow\"\u003eArchitecting Restaurant Wait Time Predictions at Yelp\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://labs.spotify.com/2016/08/07/commodity-music-ml-services/\" rel=\"nofollow\"\u003eMusic Personalization at Spotify\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://sg.godaddy.com/engineering/2019/07/26/domain-name-valuation/\" rel=\"nofollow\"\u003eDeep Learning for Domain Name Valuation at GoDaddy\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://stripe.com/blog/similarity-clustering\" rel=\"nofollow\"\u003eSimilarity Clustering to Catch Fraud Rings at Stripe\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://codeascraft.com/2020/10/29/bringing-personalized-search-to-etsy/\" rel=\"nofollow\"\u003ePersonalized Search at Etsy\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://eng.lyft.com/ml-feature-serving-infrastructure-at-lyft-d30bf2d3c32a\" rel=\"nofollow\"\u003eML Feature Serving Infrastructure at Lyft\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://codeascraft.com/2021/03/23/how-we-built-a-context-specific-bidding-system-for-etsy-ads/\" rel=\"nofollow\"\u003eContext-Specific Bidding System at Etsy\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://engineeringblog.yelp.com/2021/05/moderating-promotional-spam-and-inappropriate-content-in-photos-at-scale-at-yelp.html\" rel=\"nofollow\"\u003eModerating Promotional Spam and Inappropriate Content in Photos at Scale at Yelp\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://dropbox.tech/machine-learning/optimizing-payments-with-machine-learning\" rel=\"nofollow\"\u003eOptimizing Payments with Machine Learning at Dropbox\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003cdiv class=\"markdown-heading\" dir=\"auto\"\u003e\u003ch2 tabindex=\"-1\" class=\"heading-element\" dir=\"auto\"\u003eArchitecture\u003c/h2\u003e\u003ca id=\"user-content-architecture\" class=\"anchor\" aria-label=\"Permalink: Architecture\" href=\"#architecture\"\u003e\u003csvg class=\"octicon octicon-link\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" height=\"16\" aria-hidden=\"true\"\u003e\u003cpath d=\"m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z\"\u003e\u003c/path\u003e\u003c/svg\u003e\u003c/a\u003e\u003c/div\u003e\n\u003cul dir=\"auto\"\u003e\n\u003cli\u003e\u003ca href=\"https://systemswemake.com/\" rel=\"nofollow\"\u003eSystems We Make\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://eng.uber.com/tech-stack-part-two/\" rel=\"nofollow\"\u003eTech Stack (2 parts) at Uber\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://medium.engineering/the-stack-that-helped-medium-drive-2-6-millennia-of-reading-time-e56801f7c492\" rel=\"nofollow\"\u003eTech Stack at Medium\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://engineering.shopify.com/blogs/engineering/e-commerce-at-scale-inside-shopifys-tech-stack\" rel=\"nofollow\"\u003eTech Stack at Shopify\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://medium.com/airbnb-engineering/building-services-at-airbnb-part-4-23c95e428064\" rel=\"nofollow\"\u003eBuilding Services (4 parts) at Airbnb\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://evernote.com/blog/a-digest-of-evernotes-architecture/\" rel=\"nofollow\"\u003eArchitecture of Evernote\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://engineering.riotgames.com/news/chat-service-architecture-persistence\" rel=\"nofollow\"\u003eArchitecture of Chat Service (3 parts) at Riot Games\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://technology.riotgames.com/news/architecture-league-client-update\" rel=\"nofollow\"\u003eArchitecture of League of Legends Client Update\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://blog.twitter.com/engineering/en_us/topics/infrastructure/2020/building-twitters-ad-platform-architecture-for-the-future.html\" rel=\"nofollow\"\u003eArchitecture of Ad Platform at Twitter\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://eng.uber.com/architecture-api-gateway/\" rel=\"nofollow\"\u003eArchitecture of API Gateway at Uber\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://slack.engineering/how-slack-built-shared-channels-8d42c895b19f\" rel=\"nofollow\"\u003eBasic Architecture of Slack\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://engineering.linkedin.com/architecture/brief-history-scaling-linkedin\" rel=\"nofollow\"\u003eBack-end at LinkedIn\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://yahooeng.tumblr.com/post/157200523046/introducing-tripod-flickrs-backend-refactored\" rel=\"nofollow\"\u003eBack-end at Flickr\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://medium.com/zendesk-engineering/the-history-of-infrastructure-at-zendesk-part-3-foundation-team-forming-and-evolving-9859e40f5390\" rel=\"nofollow\"\u003eInfrastructure (3 parts) at Zendesk\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://bytes.grubhub.com/cloud-infrastructure-at-grubhub-94db998a898a\" rel=\"nofollow\"\u003eCloud Infrastructure at Grubhub\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://engineering.linkedin.com/blog/2018/01/now-you-see-me--now-you-dont--linkedins-real-time-presence-platf\" rel=\"nofollow\"\u003eReal-time Presence Platform at LinkedIn\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://engineering.linkedin.com/blog/2019/05/building-member-trust-through-a-centralized-and-scalable-setting\" rel=\"nofollow\"\u003eSettings Platform at LinkedIn\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://medium.com/glassdoor-engineering/building-a-nearline-system-for-scale-and-performance-part-ii-9e01bf51b23d\" rel=\"nofollow\"\u003eNearline System for Scale and Performance (2 parts) at Glassdoor\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://medium.com/@Pinterest_Engineering/building-a-real-time-user-action-counting-system-for-ads-88a60d9c9a\" rel=\"nofollow\"\u003eReal-time User Action Counting System for Ads at Pinterest\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://engineering.riotgames.com/news/riot-games-api-deep-dive\" rel=\"nofollow\"\u003eAPI Platform at Riot Games\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://open.nytimes.com/play-by-play-moving-the-nyt-games-platform-to-gcp-with-zero-downtime-cf425898d569\" rel=\"nofollow\"\u003eGames Platform at The New York Times\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://bytes.swiggy.com/kabootar-swiggys-communication-platform-e5a43cc25629\" rel=\"nofollow\"\u003eKabootar: Communication Platform at Swiggy\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://medium.com/netflix-techblog/https-medium-com-netflix-techblog-simone-a-distributed-simulation-service-b2c85131ca1b\" rel=\"nofollow\"\u003eSimone: Distributed Simulation Service at Netflix\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://engineeringblog.yelp.com/2017/04/how-yelp-runs-millions-of-tests-every-day.html\" rel=\"nofollow\"\u003eSeagull: Distributed System that Helps Running \u0026gt; 20 Million Tests Per Day at Yelp\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://medium.com/agoda-engineering/priceaggregator-an-intelligent-system-for-hotel-price-fetching-part-3-52acfc705081\" rel=\"nofollow\"\u003ePriceAggregator: Intelligent System for Hotel Price Fetching (3 parts) at Agoda\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://medium.com/tinder-engineering/phoenix-tinders-testing-platform-part-iii-520728b9537\" rel=\"nofollow\"\u003ePhoenix: Testing Platform (3 parts) at Tinder\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://netflixtechblog.com/ready-for-changes-with-hexagonal-architecture-b315ec967749\" rel=\"nofollow\"\u003eHexagonal Architecture at Netflix\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://qconsf.com/system/files/presentation-slides/qcon_netflix_play_api.pdf\" rel=\"nofollow\"\u003eArchitecture of Play API Service at Netflix\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://www.slideshare.net/linecorp/architecture-sustaining-line-sticker-services\" rel=\"nofollow\"\u003eArchitecture of Sticker Services at LINE\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://medium.com/@palantir/terraforming-stack-overflow-enterprise-in-aws-47ee431e6be7\" rel=\"nofollow\"\u003eStack Overflow Enterprise at Palantir\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://medium.com/@Pinterest_Engineering/building-a-dynamic-and-responsive-pinterest-7d410e99f0a9\" rel=\"nofollow\"\u003eArchitecture of Following Feed, Interest Feed, and Picked For You at Pinterest\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://engineering.wework.com/our-api-specification-workflow-9337448d6ee6\" rel=\"nofollow\"\u003eAPI Specification Workflow at WeWork\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://medium.com/netflix-techblog/implementing-the-netflix-media-database-53b5a840b42a\" rel=\"nofollow\"\u003eMedia Database at Netflix\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://medium.com/walmartlabs/member-transaction-history-architecture-8b6e34b87c21\" rel=\"nofollow\"\u003eMember Transaction History Architecture at Walmart\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://dropbox.tech/infrastructure/-testing-our-new-sync-engine\" rel=\"nofollow\"\u003eSync Engine (2 parts) at Dropbox\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://www.sesameindia.com/images/core-banking-system-architecture\" rel=\"nofollow\"\u003eArchitectures of Finance and Banking Systems\u003c/a\u003e\n\u003cul dir=\"auto\"\u003e\n\u003cli\u003e\u003ca href=\"https://monzo.com/blog/2016/09/19/building-a-modern-bank-backend/\" rel=\"nofollow\"\u003eBank Backend at Monzo\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://medium.com/@Wealthsimple/engineering-at-wealthsimple-reinventing-our-trading-platform-for-scale-17e332241b6c\" rel=\"nofollow\"\u003eTrading Platform for Scale at Wealthsimple\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://medium.com/margobank/choosing-an-architecture-85750e1e5a03\" rel=\"nofollow\"\u003eCore Banking System at Margo Bank\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://www.infoq.com/presentations/nubank-architecture\" rel=\"nofollow\"\u003eArchitecture of Nubank\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"http://tech.transferwise.com/the-transferwise-stack-heartbeat-of-our-little-revolution/\" rel=\"nofollow\"\u003eTech Stack at TransferWise\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://medium.com/build-addepar/our-tech-stack-a4f55dab4b0d\" rel=\"nofollow\"\u003eTech Stack at Addepar\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://medium.com/airbnb-engineering/avoiding-double-payments-in-a-distributed-payments-system-2981f6b070bb\" rel=\"nofollow\"\u003eAvoiding Double Payments in a Distributed Payments System at Airbnb\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003cdiv class=\"markdown-heading\" dir=\"auto\"\u003e\u003ch2 tabindex=\"-1\" class=\"heading-element\" dir=\"auto\"\u003eInterview\u003c/h2\u003e\u003ca id=\"user-content-interview\" class=\"anchor\" aria-label=\"Permalink: Interview\" href=\"#interview\"\u003e\u003csvg class=\"octicon octicon-link\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" height=\"16\" aria-hidden=\"true\"\u003e\u003cpath d=\"m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z\"\u003e\u003c/path\u003e\u003c/svg\u003e\u003c/a\u003e\u003c/div\u003e\n\u003cul dir=\"auto\"\u003e\n\u003cli\u003e\u003ca href=\"https://www.somethingsimilar.com/2013/01/14/notes-on-distributed-systems-for-young-bloods/\" rel=\"nofollow\"\u003eDesigning Large-Scale Systems\u003c/a\u003e\n\u003cul dir=\"auto\"\u003e\n\u003cli\u003e\u003ca href=\"https://blog.codinghorror.com/my-scaling-hero/\" rel=\"nofollow\"\u003eMy Scaling Hero - Jeff Atwood (a dose of Endorphins before your interview, JK)\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://static.googleusercontent.com/media/research.google.com/en//people/jeff/stanford-295-talk.pdf\" rel=\"nofollow\"\u003eSoftware Engineering Advice from Building Large-Scale Distributed Systems - Jeff Dean\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://lethain.com/introduction-to-architecting-systems-for-scale/\" rel=\"nofollow\"\u003eIntroduction to Architecting Systems for Scale\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://hackernoon.com/anatomy-of-a-system-design-interview-4cb57d75a53f\" rel=\"nofollow\"\u003eAnatomy of a System Design Interview\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"http://blog.gainlo.co/index.php/2015/10/22/8-things-you-need-to-know-before-system-design-interviews/\" rel=\"nofollow\"\u003e8 Things You Need to Know Before a System Design Interview\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://hackernoon.com/top-10-system-design-interview-questions-for-software-engineers-8561290f0444\" rel=\"nofollow\"\u003eTop 10 System Design Interview Questions \u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://towardsdatascience.com/10-common-software-architectural-patterns-in-a-nutshell-a0b47a1e9013\" rel=\"nofollow\"\u003eTop 10 Common Large-Scale Software Architectural Patterns in a Nutshell\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://lynnlangit.com/2017/03/14/beyond-relational/\" rel=\"nofollow\"\u003eCloud Big Data Design Patterns - Lynn Langit\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://hackernoon.com/how-not-to-design-netflix-in-your-45-minute-system-design-interview-64953391a054\" rel=\"nofollow\"\u003eHow NOT to design Netflix in your 45-minute System Design Interview?\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://zapier.com/engineering/api-best-practices/\" rel=\"nofollow\"\u003eAPI Best Practices: Webhooks, Deprecation, and Design\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://www.palantir.com/how-to-ace-a-systems-design-interview/\" rel=\"nofollow\"\u003eExplaining Low-Level Systems (OS, Network/Protocol, Database, Storage)\u003c/a\u003e\n\u003cul dir=\"auto\"\u003e\n\u003cli\u003e\u003ca href=\"http://jaredheinrichs.com/mastering-the-osi-tcpip-models.html\" rel=\"nofollow\"\u003eOSI and TCP/IP Cheat Sheet\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"http://veithen.github.io/2013/11/18/iowait-linux.html\" rel=\"nofollow\"\u003eThe Precise Meaning of I/O Wait Time in Linux\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://research.google.com/archive/paxos_made_live.html\" rel=\"nofollow\"\u003ePaxos Made Live – An Engineering Perspective\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://martin.kleppmann.com/2016/02/08/how-to-do-distributed-locking.html\" rel=\"nofollow\"\u003eHow to do Distributed Locking\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"http://elliot.land/post/sql-transaction-isolation-levels-explained\" rel=\"nofollow\"\u003eSQL Transaction Isolation Levels Explained\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://www.glassdoor.com/Interview/What-happens-when-you-type-www-google-com-in-your-browser-QTN_56396.htm\" rel=\"nofollow\"\u003e\"What Happens When... and How\" Questions\u003c/a\u003e\n\u003cul dir=\"auto\"\u003e\n\u003cli\u003e\u003ca href=\"http://highscalability.com/blog/2017/12/11/netflix-what-happens-when-you-press-play.html\" rel=\"nofollow\"\u003eNetflix: What Happens When You Press Play?\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://monzo.com/blog/2018/04/05/how-monzo-to-monzo-payments-work/\" rel=\"nofollow\"\u003eMonzo: How Peer-To-Peer Payments Work\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://githubengineering.com/transit-and-peering-how-your-requests-reach-github/\" rel=\"nofollow\"\u003eTransit and Peering: How Your Requests Reach GitHub\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://labs.spotify.com/2018/08/31/smoother-streaming-with-bbr/\" rel=\"nofollow\"\u003eHow Spotify Streams Music\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003cdiv class=\"markdown-heading\" dir=\"auto\"\u003e\u003ch2 tabindex=\"-1\" class=\"heading-element\" dir=\"auto\"\u003eOrganization\u003c/h2\u003e\u003ca id=\"user-content-organization\" class=\"anchor\" aria-label=\"Permalink: Organization\" href=\"#organization\"\u003e\u003csvg class=\"octicon octicon-link\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" height=\"16\" aria-hidden=\"true\"\u003e\u003cpath d=\"m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z\"\u003e\u003c/path\u003e\u003c/svg\u003e\u003c/a\u003e\u003c/div\u003e\n\u003cul dir=\"auto\"\u003e\n\u003cli\u003e\u003ca href=\"https://developers.soundcloud.com/blog/engineering-levels\" rel=\"nofollow\"\u003eEngineering Levels at SoundCloud\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://medium.com/palantir/dev-versus-delta-demystifying-engineering-roles-at-palantir-ad44c2a6e87\" rel=\"nofollow\"\u003eEngineering Roles at Palantir\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://www.youtube.com/watch?v=-PXi_7Ld5kU\" rel=\"nofollow\"\u003eScaling Engineering Teams at Twitter\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://engineering.linkedin.com/blog/2018/03/scaling-decision-making-across-teams-within-linkedin-engineering\" rel=\"nofollow\"\u003eScaling Decision-Making Across Teams at LinkedIn\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://blog.gojekengineering.com/the-dynamics-of-scaling-an-organisation-cb96dbe8aecd\" rel=\"nofollow\"\u003eScaling Data Science Team at GOJEK\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://jobs.zalando.com/tech/blog/scaling-agile-zalando/?gh_src=4n3gxh1\" rel=\"nofollow\"\u003eScaling Agile at Zalando\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://hackernoon.com/how-we-run-bol-com-with-60-autonomous-teams-fe7a98c0759\" rel=\"nofollow\"\u003eScaling Agile at bol.com\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://blog.intercom.com/how-we-build-software/\" rel=\"nofollow\"\u003eLessons Learned from Scaling a Product Team at Intercom\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://medium.com/@eleonorazucconi/toby-oliver-cto-typeform-on-hiring-managing-and-scaling-engineering-teams-86bef9e5a708\" rel=\"nofollow\"\u003eHiring, Managing, and Scaling Engineering Teams at Typeform\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://instagram-engineering.com/scaling-the-datagram-team-fc67bcf9b721\" rel=\"nofollow\"\u003eScaling the Datagram Team at Instagram\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://medium.com/flexport-design/designing-a-design-team-a9a066bc48a5\" rel=\"nofollow\"\u003eScaling the Design Team at Flexport\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://medium.com/salesforce-ux/the-salesforce-team-model-for-scaling-a-design-system-d89c2a2d404b\" rel=\"nofollow\"\u003eTeam Model for Scaling a Design System at Salesforce\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://medium.com/wish-engineering/scaling-the-analytics-team-at-wish-part-4-recruiting-2a9823b9f5a\" rel=\"nofollow\"\u003eBuilding Analytics Team (4 parts) at Wish\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://medium.com/transferwise-ideas/from-2-founders-to-1000-employees-how-a-small-scale-startup-grew-into-a-global-community-9f26371a551b\" rel=\"nofollow\"\u003eFrom 2 Founders to 1000 Employees at Transferwise\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://medium.com/thinking-design/lessons-learned-growing-a-ux-team-from-10-to-170-f7b47be02262\" rel=\"nofollow\"\u003eLessons Learned Growing a UX Team from 10 to 170 at Adobe\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://medium.com/@sarahtavel/five-lessons-from-scaling-pinterest-6a699a889b08\" rel=\"nofollow\"\u003eFive Lessons from Scaling at Pinterest\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"http://engineering.vinted.com/2018/09/04/how-we-approach-engineering-at-vinted/\" rel=\"nofollow\"\u003eApproach Engineering at Vinted\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://engineering.indeedblog.com/blog/2018/10/using-metrics-to-improve-the-development-process-and-coach-people/\" rel=\"nofollow\"\u003eUsing Metrics to Improve the Development Process (and Coach People) at Indeed\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://medium.com/@SkyscannerEng/9-mistakes-to-avoid-while-creating-an-internal-product-63d579b00b1a\" rel=\"nofollow\"\u003eMistakes to Avoid while Creating an Internal Product at Skyscanner\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://codeascraft.com/2018/01/04/selecting-a-cloud-provider/\" rel=\"nofollow\"\u003eRACI (Responsible, Accountable, Consulted, Informed) at Etsy\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://jobs.zalando.com/tech/blog/four-pillars-leadership/\" rel=\"nofollow\"\u003eFour Pillars of Leading People (Empathy, Inspiration, Trust, Honesty) at Zalando\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://engineering.shopify.com/blogs/engineering/pair-programming-explained\" rel=\"nofollow\"\u003ePair Programming at Shopify\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://blog.asana.com/2017/12/distributed-responsibility-engineering-manager/\" rel=\"nofollow\"\u003eDistributed Responsibility at Asana\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://jobs.zalando.com/tech/blog/rotating-engineers-at-zalando/\" rel=\"nofollow\"\u003eRotating Engineers at Zalando\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://medium.com/pinterest-engineering/how-pinterest-supercharged-its-growth-team-with-experiment-idea-review-fd6571a02fb8\" rel=\"nofollow\"\u003eExperiment Idea Review at Pinterest\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://engineering.atspotify.com/2020/06/25/tech-migrations-the-spotify-way/\" rel=\"nofollow\"\u003eTech Migrations at Spotify\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://engineeringblog.yelp.com/2021/01/whose-code-is-it-anyway.html\" rel=\"nofollow\"\u003eImproving Code Ownership at Yelp\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://tech.ebayinc.com/engineering/how-creating-an-agile-code-base-helped-ebay-pivot-for-apple-silicon/\" rel=\"nofollow\"\u003eAgile Code Base at eBay\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://ai.google/research/pubs/pub47025\" rel=\"nofollow\"\u003eCode Review\u003c/a\u003e\n\u003cul dir=\"auto\"\u003e\n\u003cli\u003e\u003ca href=\"https://medium.com/@palantir/code-review-best-practices-19e02780015f\" rel=\"nofollow\"\u003eCode Review at Palantir\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://engineering.linecorp.com/en/blog/effective-code-review/\" rel=\"nofollow\"\u003eCode Review at LINE\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://medium.engineering/code-reviews-at-medium-bed2c0dce13a\" rel=\"nofollow\"\u003eCode Reviews at Medium\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://engineering.linkedin.com/blog/2018/06/scaling-collective-code-ownership-with-code-reviews\" rel=\"nofollow\"\u003eCode Review at LinkedIn\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://medium.com/disney-streaming/the-secret-to-better-code-reviews-c14c7884b9ac\" rel=\"nofollow\"\u003eCode Review at Disney\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://www.netlify.com/blog/2020/03/05/feedback-ladders-how-we-encode-code-reviews-at-netlify/\" rel=\"nofollow\"\u003eCode Review at Netlify\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003cdiv class=\"markdown-heading\" dir=\"auto\"\u003e\u003ch2 tabindex=\"-1\" class=\"heading-element\" dir=\"auto\"\u003eTalk\u003c/h2\u003e\u003ca id=\"user-content-talk\" class=\"anchor\" aria-label=\"Permalink: Talk\" href=\"#talk\"\u003e\u003csvg class=\"octicon octicon-link\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" height=\"16\" aria-hidden=\"true\"\u003e\u003cpath d=\"m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z\"\u003e\u003c/path\u003e\u003c/svg\u003e\u003c/a\u003e\u003c/div\u003e\n\u003cul dir=\"auto\"\u003e\n\u003cli\u003e\u003ca href=\"https://www.youtube.com/watch?v=Y6Ev8GIlbxc\" rel=\"nofollow\"\u003eDistributed Systems in One Lesson - Tim Berglund, Senior Director of Developer Experience at Confluent\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://www.usenix.org/conference/srecon17americas/program/presentation/erlich\" rel=\"nofollow\"\u003eBuilding Real Time Infrastructure at Facebook - Jeff Barber and Shie Erlich, Software Engineer at Facebook\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://www.usenix.org/conference/srecon16/program/presentation/alvidrez\" rel=\"nofollow\"\u003eBuilding Reliable Social Infrastructure for Google - Marc Alvidrez, Senior Manager at Google\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://www.youtube.com/watch?v=K8YuavUy6Qc\" rel=\"nofollow\"\u003eBuilding a Distributed Build System at Google Scale - Aysylu Greenberg, SDE at Google\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://www.youtube.com/watch?v=ggizCjUCCqE\" rel=\"nofollow\"\u003eSite Reliability Engineering at Dropbox - Tammy Butow, Site Reliability Engineering Manager at Dropbox\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://www.youtube.com/watch?v=H4vMcD7zKM0\" rel=\"nofollow\"\u003eHow Google Does Planet-Scale for Planet-Scale Infra - Melissa Binde, SRE Director for Google Cloud Platform\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://www.youtube.com/watch?v=CZ3wIuvmHeM\u0026amp;t=2837s\" rel=\"nofollow\"\u003eNetflix Guide to Microservices - Josh Evans, Director of Operations Engineering at Netflix\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://www.youtube.com/watch?v=1-3Ahy7Fxsc\" rel=\"nofollow\"\u003eAchieving Rapid Response Times in Large Online Services - Jeff Dean, Google Senior Fellow\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://www.youtube.com/watch?v=N8NWDHgWA28\" rel=\"nofollow\"\u003eArchitecture to Handle 80K RPS Celebrity Sales at Shopify - Simon Eskildsen, Engineering Lead at Shopify\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://www.youtube.com/watch?v=QCHiNEw73AU\" rel=\"nofollow\"\u003eLessons of Scale at Facebook - Bobby Johnson, Director of Engineering at Facebook\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://www.salesforce.com/video/1757880/\" rel=\"nofollow\"\u003ePerformance Optimization for the Greater China Region at Salesforce - Jeff Cheng, Enterprise Architect at Salesforce\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://vimeo.com/252367076\" rel=\"nofollow\"\u003eHow GIPHY Delivers a GIF to 300 Millions Users - Alex Hoang and Nima Khoshini, Services Engineers at GIPHY\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://www.youtube.com/watch?v=wzsxJqeVIhY\u0026amp;list=PLMu8-hpCxIVENuAue7bd0eCAglLGY_8AW\u0026amp;index=7\" rel=\"nofollow\"\u003eHigh Performance Packet Processing Platform at Alibaba - Haiyong Wang, Senior Director at Alibaba\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://atscaleconference.com/videos/solving-large-scale-data-center-and-cloud-interconnection-problems/\" rel=\"nofollow\"\u003eSolving Large-scale Data Center and Cloud Interconnection Problems - Ihab Tarazi, CTO at Equinix\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://www.youtube.com/watch?v=PE4gwstWhmc\" rel=\"nofollow\"\u003eScaling Dropbox - Kevin Modzelewski, Back-end Engineer at Dropbox\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://www.youtube.com/watch?v=IhGWOaD5BYQ\" rel=\"nofollow\"\u003eScaling Reliability at Dropbox - Sat Kriya Khalsa, SRE at Dropbox\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://atscaleconference.com/videos/performance-scale-2018-opening-remarks/\" rel=\"nofollow\"\u003eScaling with Performance at Facebook - Bill Jia, VP of Infrastructure at Facebook\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://www.youtube.com/watch?v=IO4teCbHvZw\" rel=\"nofollow\"\u003eScaling Live Videos to a Billion Users at Facebook - Sachin Kulkarni, Director of Engineering at Facebook\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://www.youtube.com/watch?v=hnpzNAPiC0E\" rel=\"nofollow\"\u003eScaling Infrastructure at Instagram - Lisa Guo, Instagram Engineering\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://www.youtube.com/watch?v=6OvrFkLSoZ0\" rel=\"nofollow\"\u003eScaling Infrastructure at Twitter - Yao Yue, Staff Software Engineer at Twitter\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://www.youtube.com/watch?v=LfqyhM1LeIU\" rel=\"nofollow\"\u003eScaling Infrastructure at Etsy - Bethany Macri, Engineering Manager at Etsy\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://atscaleconference.com/videos/scaling-alibabas-real-time-infrastructure-for-global-shopping-holiday/\" rel=\"nofollow\"\u003eScaling Real-time Infrastructure at Alibaba for Global Shopping Holiday - Xiaowei Jiang, Senior Director at Alibaba\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://www.youtube.com/watch?v=cdsfRXr9pJU\" rel=\"nofollow\"\u003eScaling Data Infrastructure at Spotify - Matti (Lepistö) Pehrs, Spotify\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://www.youtube.com/watch?v=jQNCuD_hxdQ\u0026amp;list=RDhnpzNAPiC0E\u0026amp;index=11\" rel=\"nofollow\"\u003eScaling Pinterest - Marty Weiner, Pinterest’s founding engineer\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://www.infoq.com/presentations/slack-scalability\" rel=\"nofollow\"\u003eScaling Slack - Bing Wei, Software Engineer (Infrastructure) at Slack\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://www.youtube.com/watch?v=5yDO-tmIoXY\u0026amp;feature=youtu.be\" rel=\"nofollow\"\u003eScaling Backend at Youtube - Sugu Sougoumarane, SDE at Youtube\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://www.youtube.com/watch?v=nuiLcWE8sPA\" rel=\"nofollow\"\u003eScaling Backend at Uber - Matt Ranney, Chief Systems Architect at Uber\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://www.youtube.com/watch?v=tbqcsHg-Q_o\" rel=\"nofollow\"\u003eScaling Global CDN at Netflix - Dave Temkin, Director of Global Networks at Netflix\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://www.youtube.com/watch?v=bxhYNfFeVF4\" rel=\"nofollow\"\u003eScaling Load Balancing Infra to Support 1.3 Billion Users at Facebook - Patrick Shuff, Production Engineer at Facebook\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://www.youtube.com/watch?v=RlkCdM_f3p4\" rel=\"nofollow\"\u003eScaling (a NSFW site) to 200 Million Views A Day And Beyond - Eric Pickup, Lead Platform Developer at MindGeek\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://www.infoq.com/presentations/quora-analytics\" rel=\"nofollow\"\u003eScaling Counting Infrastructure at Quora - Chun-Ho Hung and Nikhil Gar, SEs at Quora\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://www.youtube.com/watch?v=g_MPGU_m01s\" rel=\"nofollow\"\u003eScaling Git at Microsoft - Saeed Noursalehi, Principal Program Manager at Microsoft\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://www.youtube.com/watch?v=F-f0-k46WVk\" rel=\"nofollow\"\u003eScaling Multitenant Architecture Across Multiple Data Centres at Shopify - Weingarten, Engineering Lead at Shopify\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003cdiv class=\"markdown-heading\" dir=\"auto\"\u003e\u003ch2 tabindex=\"-1\" class=\"heading-element\" dir=\"auto\"\u003eBook\u003c/h2\u003e\u003ca id=\"user-content-book\" class=\"anchor\" aria-label=\"Permalink: Book\" href=\"#book\"\u003e\u003csvg class=\"octicon octicon-link\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" height=\"16\" aria-hidden=\"true\"\u003e\u003cpath d=\"m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z\"\u003e\u003c/path\u003e\u003c/svg\u003e\u003c/a\u003e\u003c/div\u003e\n\u003cul dir=\"auto\"\u003e\n\u003cli\u003e\u003ca href=\"http://www.oreilly.com/webops/free/\" rel=\"nofollow\"\u003eBig Data, Web Ops \u0026amp; DevOps Ebooks - O'Reilly (Online - Free)\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://landing.google.com/sre/book.html\" rel=\"nofollow\"\u003eGoogle Site Reliability Engineering (Online - Free)\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"http://book.mixu.net/distsys/\" rel=\"nofollow\"\u003eDistributed Systems for Fun and Profit (Online - Free)\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://use-the-index-luke.com/sql/table-of-contents\" rel=\"nofollow\"\u003eWhat Every Developer Should Know About SQL Performance (Online - Free)\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"http://www.oreilly.com/webops-perf/free/beyond-the-twelve-factor-app.csp\" rel=\"nofollow\"\u003eBeyond the Twelve-Factor App - Exploring the DNA of Highly Scalable, Resilient Cloud Applications (Free)\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"http://www.oreilly.com/webops-perf/free/chaos-engineering.csp?intcmp=il-webops-free-product-na_new_site_chaos_engineering_text_cta\" rel=\"nofollow\"\u003eChaos Engineering - Building Confidence in System Behavior through Experiments (Free)\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"http://theartofscalability.com/\" rel=\"nofollow\"\u003eThe Art of Scalability\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://www.goodreads.com/book/show/23615147-web-scalability-for-startup-engineers\" rel=\"nofollow\"\u003eWeb Scalability for Startup Engineers\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"http://scalabilityrules.com/\" rel=\"nofollow\"\u003eScalability Rules: 50 Principles for Scaling Web Sites\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003cdiv class=\"markdown-heading\" dir=\"auto\"\u003e\u003ch2 tabindex=\"-1\" class=\"heading-element\" dir=\"auto\"\u003eDonation\u003c/h2\u003e\u003ca id=\"user-content-donation\" class=\"anchor\" aria-label=\"Permalink: Donation\" href=\"#donation\"\u003e\u003csvg class=\"octicon octicon-link\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" height=\"16\" aria-hidden=\"true\"\u003e\u003cpath d=\"m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z\"\u003e\u003c/path\u003e\u003c/svg\u003e\u003c/a\u003e\u003c/div\u003e\n\u003cp dir=\"auto\"\u003eRoses are red. Violets are blue. \u003ca href=\"https://nguyenquocbinh.org/\" rel=\"nofollow\"\u003eBinh\u003c/a\u003e likes sweet. \u003ca href=\"https://paypal.me/binhnguyennus\" rel=\"nofollow\"\u003eTreat Binh a tiramisu?\u003c/a\u003e 🍰\u003c/p\u003e\n\u003c/article\u003e","loaded":true,"timedOut":false,"errorMessage":null,"headerInfo":{"toc":[{"level":4,"text":"If your system goes slow","anchor":"if-your-system-goes-slow","htmlText":"If your system goes slow"},{"level":4,"text":"If your system goes down","anchor":"if-your-system-goes-down","htmlText":"If your system goes down"},{"level":4,"text":"If you are having a system design interview","anchor":"if-you-are-having-a-system-design-interview","htmlText":"If you are having a system design interview"},{"level":4,"text":"If you are building your dream team","anchor":"if-you-are-building-your-dream-team","htmlText":"If you are building your dream team"},{"level":4,"text":"Community power","anchor":"community-power","htmlText":"Community power"},{"level":2,"text":"Content","anchor":"content","htmlText":"Content"},{"level":2,"text":"Principle","anchor":"principle","htmlText":"Principle"},{"level":2,"text":"Scalability","anchor":"scalability","htmlText":"Scalability"},{"level":2,"text":"Availability","anchor":"availability","htmlText":"Availability"},{"level":2,"text":"Stability","anchor":"stability","htmlText":"Stability"},{"level":2,"text":"Performance","anchor":"performance","htmlText":"Performance"},{"level":2,"text":"Intelligence","anchor":"intelligence","htmlText":"Intelligence"},{"level":2,"text":"Architecture","anchor":"architecture","htmlText":"Architecture"},{"level":2,"text":"Interview","anchor":"interview","htmlText":"Interview"},{"level":2,"text":"Organization","anchor":"organization","htmlText":"Organization"},{"level":2,"text":"Talk","anchor":"talk","htmlText":"Talk"},{"level":2,"text":"Book","anchor":"book","htmlText":"Book"},{"level":2,"text":"Donation","anchor":"donation","htmlText":"Donation"}],"siteNavLoginPath":"/login?return_to=https%3A%2F%2Fgithub.com%2Fadelnobel%2Fawesome-scalability%2Ftree%2Fpatch-1"}},{"displayName":"CODE_OF_CONDUCT.md","repoName":"awesome-scalability","refName":"patch-1","path":"CODE_OF_CONDUCT.md","preferredFileType":"code_of_conduct","tabName":"Code of conduct","richText":null,"loaded":false,"timedOut":false,"errorMessage":null,"headerInfo":{"toc":null,"siteNavLoginPath":"/login?return_to=https%3A%2F%2Fgithub.com%2Fadelnobel%2Fawesome-scalability%2Ftree%2Fpatch-1"}},{"displayName":"LICENSE","repoName":"awesome-scalability","refName":"patch-1","path":"LICENSE","preferredFileType":"license","tabName":"License","richText":null,"loaded":false,"timedOut":false,"errorMessage":null,"headerInfo":{"toc":null,"siteNavLoginPath":"/login?return_to=https%3A%2F%2Fgithub.com%2Fadelnobel%2Fawesome-scalability%2Ftree%2Fpatch-1"}},{"displayName":"SECURITY.md","repoName":"awesome-scalability","refName":"patch-1","path":"SECURITY.md","preferredFileType":"security","tabName":"Security","richText":null,"loaded":false,"timedOut":false,"errorMessage":null,"headerInfo":{"toc":null,"siteNavLoginPath":"/login?return_to=https%3A%2F%2Fgithub.com%2Fadelnobel%2Fawesome-scalability%2Ftree%2Fpatch-1"}}],"overviewFilesProcessingTime":0}},"appPayload":{"helpUrl":"https://docs.github.com","findFileWorkerPath":"/assets-cdn/worker/find-file-worker-1583894afd38.js","findInFileWorkerPath":"/assets-cdn/worker/find-in-file-worker-67668e8c2caa.js","githubDevUrl":null,"enabled_features":{"code_nav_ui_events":false,"overview_shared_code_dropdown_button":false,"react_blob_overlay":false,"copilot_conversational_ux_embedding_update":false,"copilot_smell_icebreaker_ux":true,"copilot_workspace":false,"accessible_code_button":true}}}}</script> <div data-target="react-partial.reactRoot"><style data-styled="true" data-styled-version="5.3.11">.iVEunk{margin-top:16px;margin-bottom:16px;}/*!sc*/ .jzuOtQ{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-flex-direction:column;-ms-flex-direction:column;flex-direction:column;-webkit-box-pack:justify;-webkit-justify-content:space-between;-ms-flex-pack:justify;justify-content:space-between;}/*!sc*/ .bGojzy{margin-bottom:0;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-flex-direction:column;-ms-flex-direction:column;flex-direction:column;row-gap:16px;}/*!sc*/ .iNSVHo{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-pack:justify;-webkit-justify-content:space-between;-ms-flex-pack:justify;justify-content:space-between;-webkit-box-flex:1;-webkit-flex-grow:1;-ms-flex-positive:1;flex-grow:1;padding-bottom:16px;padding-top:8px;}/*!sc*/ .bVgnfw{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-flex-direction:row;-ms-flex-direction:row;flex-direction:row;gap:8px;}/*!sc*/ @media screen and (max-width:320px){.bVgnfw{-webkit-box-flex:1;-webkit-flex-grow:1;-ms-flex-positive:1;flex-grow:1;}}/*!sc*/ .CEgMp{position:relative;}/*!sc*/ @media screen and (max-width:380px){.CEgMp .ref-selector-button-text-container{max-width:80px;}}/*!sc*/ @media screen and (max-width:320px){.CEgMp{-webkit-box-flex:1;-webkit-flex-grow:1;-ms-flex-positive:1;flex-grow:1;}.CEgMp .overview-ref-selector{width:100%;}.CEgMp .overview-ref-selector > span{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-pack:start;-webkit-justify-content:flex-start;-ms-flex-pack:start;justify-content:flex-start;}.CEgMp .overview-ref-selector > span > span[data-component="text"]{-webkit-box-flex:1;-webkit-flex-grow:1;-ms-flex-positive:1;flex-grow:1;}}/*!sc*/ .gUkoLg{-webkit-box-pack:center;-webkit-justify-content:center;-ms-flex-pack:center;justify-content:center;}/*!sc*/ .bZBlpz{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;width:100%;}/*!sc*/ .lhTYNA{margin-right:4px;color:var(--fgColor-muted,var(--color-fg-muted,#656d76));}/*!sc*/ .ffLUq{font-size:14px;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;}/*!sc*/ .hzSPyu{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;pointer-events:none;}/*!sc*/ .fLXEGX{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;}/*!sc*/ @media screen and (max-width:1079px){.fLXEGX{display:none;}}/*!sc*/ .dqfxud{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;}/*!sc*/ @media screen and (min-width:1080px){.dqfxud{display:none;}}/*!sc*/ @media screen and (max-width:543px){.dqfxud{display:none;}}/*!sc*/ .jxTzTd{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;padding-left:8px;gap:8px;}/*!sc*/ .gqqBXN{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;gap:8px;}/*!sc*/ @media screen and (max-width:543px){.gqqBXN{display:none;}}/*!sc*/ .dzXgxt{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;}/*!sc*/ @media screen and (max-width:1011px){.dzXgxt{display:none;}}/*!sc*/ .iWFGlI{margin-left:8px;margin-right:8px;margin:0;}/*!sc*/ .YUPas{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;}/*!sc*/ @media screen and (min-width:1012px){.YUPas{display:none;}}/*!sc*/ .izFOf{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;}/*!sc*/ @media screen and (min-width:544px){.izFOf{display:none;}}/*!sc*/ .cjVDqW{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;gap:8px;background-color:var(--bgColor-muted,var(--color-canvas-subtle,#f6f8fa));font-size:14px;-webkit-flex-direction:row;-ms-flex-direction:row;flex-direction:row;-webkit-align-items:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-flex-wrap:wrap;-ms-flex-wrap:wrap;flex-wrap:wrap;-webkit-box-pack:justify;-webkit-justify-content:space-between;-ms-flex-pack:justify;justify-content:space-between;border:solid 1px;border-color:var(--borderColor-default,var(--color-border-default,#d0d7de));border-radius:6px;padding-left:16px;padding-right:8px;padding-top:8px;padding-bottom:8px;margin-bottom:16px;min-height:50px;}/*!sc*/ .vIPPs{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-flex-direction:column;-ms-flex-direction:column;flex-direction:column;gap:16px;}/*!sc*/ .fdROMU{width:100%;border-collapse:separate;border-spacing:0;border:1px solid;border-color:var(--borderColor-default,var(--color-border-default,#d0d7de));border-radius:6px;table-layout:fixed;overflow:unset;}/*!sc*/ .jGKpsv{height:0px;line-height:0px;}/*!sc*/ .jGKpsv tr{height:0px;font-size:0px;}/*!sc*/ .jdgHnn{padding:16px;color:var(--fgColor-muted,var(--color-fg-muted,#656d76));font-size:12px;text-align:left;height:40px;}/*!sc*/ .jdgHnn th{padding-left:16px;background-color:var(--bgColor-muted,var(--color-canvas-subtle,#f6f8fa));}/*!sc*/ .bQivRW{width:100%;border-top-left-radius:6px;}/*!sc*/ @media screen and (min-width:544px){.bQivRW{display:none;}}/*!sc*/ .ldkMIO{width:40%;border-top-left-radius:6px;}/*!sc*/ @media screen and (max-width:543px){.ldkMIO{display:none;}}/*!sc*/ .jMbWeI{text-align:right;padding-right:16px;width:136px;border-top-right-radius:6px;}/*!sc*/ .gpqjiB{color:var(--fgColor-muted,var(--color-fg-muted,#656d76));font-size:12px;height:40px;}/*!sc*/ .dzCJzi{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-flex-direction:row;-ms-flex-direction:row;flex-direction:row;-webkit-flex-wrap:wrap;-ms-flex-wrap:wrap;flex-wrap:wrap;-webkit-box-pack:justify;-webkit-justify-content:space-between;-ms-flex-pack:justify;justify-content:space-between;-webkit-align-items:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;gap:8px;min-width:273px;padding:8px;}/*!sc*/ @media screen and (min-width:544px){.dzCJzi{-webkit-flex-wrap:nowrap;-ms-flex-wrap:nowrap;flex-wrap:nowrap;}}/*!sc*/ .eNCcrz{text-align:center;vertical-align:center;height:40px;border-top:1px solid;border-color:var(--borderColor-default,var(--color-border-default,#d0d7de));}/*!sc*/ .bHTcCe{border-top:1px solid var(--borderColor-default,var(--color-border-default));cursor:pointer;}/*!sc*/ .csrIcr{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-flex:1;-webkit-flex-grow:1;-ms-flex-positive:1;flex-grow:1;gap:16px;}/*!sc*/ .bUQNHB{border:1px solid;border-color:var(--borderColor-default,var(--color-border-default,#d0d7de));border-radius:6px;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-flex-direction:column;-ms-flex-direction:column;flex-direction:column;-webkit-box-flex:1;-webkit-flex-grow:1;-ms-flex-positive:1;flex-grow:1;}/*!sc*/ @media screen and (max-width:543px){.bUQNHB{margin-left:-16px;margin-right:-16px;max-width:calc(100% + 32px);}}/*!sc*/ @media screen and (min-width:544px){.bUQNHB{max-width:100%;}}/*!sc*/ .jPdcfu{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;border-bottom:1px solid;border-bottom-color:var(--borderColor-default,var(--color-border-default,#d0d7de));-webkit-align-items:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;padding-right:8px;position:-webkit-sticky;position:sticky;top:0;background-color:var(--bgColor-default,var(--color-canvas-default,#ffffff));z-index:1;border-top-left-radius:6px;border-top-right-radius:6px;}/*!sc*/ .hUCRAk{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-flex-direction:column;-ms-flex-direction:column;flex-direction:column;-webkit-align-items:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;}/*!sc*/ .QkQOb{padding:32px;overflow:auto;}/*!sc*/ data-styled.g1[id="Box-sc-g0xbh4-0"]{content:"iVEunk,jzuOtQ,bGojzy,iNSVHo,bVgnfw,CEgMp,gUkoLg,bZBlpz,lhTYNA,ffLUq,hzSPyu,fLXEGX,dqfxud,jxTzTd,gqqBXN,dzXgxt,iWFGlI,YUPas,izFOf,cjVDqW,vIPPs,fdROMU,jGKpsv,jdgHnn,bQivRW,ldkMIO,jMbWeI,gpqjiB,dzCJzi,eNCcrz,bHTcCe,csrIcr,bUQNHB,jPdcfu,hUCRAk,QkQOb,"}/*!sc*/ .eMMFM{min-width:0;}/*!sc*/ .eMMFM:where([data-size='small']){font-size:var(--text-body-size-small,0.75rem);line-height:var(--text-body-lineHeight-small,1.6666);}/*!sc*/ .eMMFM:where([data-size='medium']){font-size:var(--text-body-size-medium,0.875rem);line-height:var(--text-body-lineHeight-medium,1.4285);}/*!sc*/ .eMMFM:where([data-size='large']){font-size:var(--text-body-size-large,1rem);line-height:var(--text-body-lineHeight-large,1.5);}/*!sc*/ .eMMFM:where([data-weight='light']){font-weight:var(--base-text-weight-light,300);}/*!sc*/ .eMMFM:where([data-weight='normal']){font-weight:var(--base-text-weight-normal,400);}/*!sc*/ .eMMFM:where([data-weight='medium']){font-weight:var(--base-text-weight-medium,500);}/*!sc*/ .eMMFM:where([data-weight='semibold']){font-weight:var(--base-text-weight-semibold,600);}/*!sc*/ data-styled.g3[id="Text__StyledText-sc-17v1xeu-0"]{content:"eMMFM,"}/*!sc*/ .brGdpi{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;-webkit-clip:rect(0,0,0,0);clip:rect(0,0,0,0);white-space:nowrap;border-width:0;}/*!sc*/ data-styled.g4[id="_VisuallyHidden__VisuallyHidden-sc-11jhm7a-0"]{content:"brGdpi,"}/*!sc*/ .gwqFqs{font-size:14px;line-height:20px;color:var(--fgColor-default,var(--color-fg-default,#1F2328));vertical-align:middle;background-color:var(--bgColor-default,var(--color-canvas-default,#ffffff));border:1px solid var(--control-borderColor-rest,var(--borderColor-default,var(--color-border-default,#d0d7de)));border-radius:6px;outline:none;box-shadow:var(--shadow-inset,var(--color-primer-shadow-inset,inset 0 1px 0 rgba(208,215,222,0.2)));display:-webkit-inline-box;display:-webkit-inline-flex;display:-ms-inline-flexbox;display:inline-flex;-webkit-align-items:stretch;-webkit-box-align:stretch;-ms-flex-align:stretch;align-items:stretch;min-height:32px;overflow:hidden;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;min-width:160px;}/*!sc*/ .gwqFqs input,.gwqFqs textarea{cursor:text;}/*!sc*/ .gwqFqs select{cursor:pointer;}/*!sc*/ .gwqFqs input::-webkit-input-placeholder,.gwqFqs textarea::-webkit-input-placeholder,.gwqFqs select::-webkit-input-placeholder{color:var(---control-fgColor-placeholder,var(--fgColor-muted,var(--color-fg-muted,#656d76)));}/*!sc*/ .gwqFqs input::-moz-placeholder,.gwqFqs textarea::-moz-placeholder,.gwqFqs select::-moz-placeholder{color:var(---control-fgColor-placeholder,var(--fgColor-muted,var(--color-fg-muted,#656d76)));}/*!sc*/ .gwqFqs input:-ms-input-placeholder,.gwqFqs textarea:-ms-input-placeholder,.gwqFqs select:-ms-input-placeholder{color:var(---control-fgColor-placeholder,var(--fgColor-muted,var(--color-fg-muted,#656d76)));}/*!sc*/ .gwqFqs input::placeholder,.gwqFqs textarea::placeholder,.gwqFqs select::placeholder{color:var(---control-fgColor-placeholder,var(--fgColor-muted,var(--color-fg-muted,#656d76)));}/*!sc*/ .gwqFqs:focus-within{border-color:var(--fgColor-accent,var(--color-accent-fg,#0969da));outline:2px solid var(--fgColor-accent,var(--color-accent-fg,#0969da));outline-offset:-1px;}/*!sc*/ .gwqFqs > textarea{padding:12px;}/*!sc*/ @media (min-width:768px){.gwqFqs{font-size:14px;}}/*!sc*/ data-styled.g9[id="TextInputWrapper__TextInputBaseWrapper-sc-1mqhpbi-0"]{content:"gwqFqs,"}/*!sc*/ .decvaq{background-repeat:no-repeat;background-position:right 8px center;padding-left:12px;padding-right:12px;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;min-width:160px;}/*!sc*/ .decvaq > :not(:last-child){margin-right:8px;}/*!sc*/ .decvaq .TextInput-icon,.decvaq .TextInput-action{-webkit-align-self:center;-ms-flex-item-align:center;align-self:center;color:var(--fgColor-muted,var(--color-fg-muted,#656d76));-webkit-flex-shrink:0;-ms-flex-negative:0;flex-shrink:0;}/*!sc*/ .decvaq > input,.decvaq > select{padding-left:0;padding-right:0;}/*!sc*/ data-styled.g10[id="TextInputWrapper-sc-1mqhpbi-1"]{content:"decvaq,"}/*!sc*/ .gVXRRg{border-radius:6px;border:1px solid;border-color:var(--button-default-borderColor-rest,var(--button-default-borderColor-rest,var(--color-btn-border,rgba(31,35,40,0.15))));font-family:inherit;font-weight:500;font-size:14px;cursor:pointer;-webkit-appearance:none;-moz-appearance:none;appearance:none;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;-webkit-text-decoration:none;text-decoration:none;text-align:center;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-align-items:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:justify;-webkit-justify-content:space-between;-ms-flex-pack:justify;justify-content:space-between;height:32px;padding:0 12px;gap:8px;min-width:-webkit-max-content;min-width:-moz-max-content;min-width:max-content;-webkit-transition:80ms cubic-bezier(0.65,0,0.35,1);transition:80ms cubic-bezier(0.65,0,0.35,1);-webkit-transition-property:color,fill,background-color,border-color;transition-property:color,fill,background-color,border-color;color:var(--button-default-fgColor-rest,var(--color-btn-text,#24292f));background-color:var(--button-default-bgColor-rest,var(--color-btn-bg,#f6f8fa));box-shadow:var(--button-default-shadow-resting,var(--color-btn-shadow,0 1px 0 rgba(31,35,40,0.04))),var(--button-default-shadow-inset,var(--color-btn-inset-shadow,inset 0 1px 0 rgba(255,255,255,0.25)));}/*!sc*/ .gVXRRg:focus:not(:disabled){box-shadow:none;outline:2px solid var(--fgColor-accent,var(--color-accent-fg,#0969da));outline-offset:-2px;}/*!sc*/ .gVXRRg:focus:not(:disabled):not(:focus-visible){outline:solid 1px transparent;}/*!sc*/ .gVXRRg:focus-visible:not(:disabled){box-shadow:none;outline:2px solid var(--fgColor-accent,var(--color-accent-fg,#0969da));outline-offset:-2px;}/*!sc*/ .gVXRRg[href]{display:-webkit-inline-box;display:-webkit-inline-flex;display:-ms-inline-flexbox;display:inline-flex;}/*!sc*/ .gVXRRg[href]:hover{-webkit-text-decoration:none;text-decoration:none;}/*!sc*/ .gVXRRg:hover{-webkit-transition-duration:80ms;transition-duration:80ms;}/*!sc*/ .gVXRRg:active{-webkit-transition:none;transition:none;}/*!sc*/ .gVXRRg[data-inactive]{cursor:auto;}/*!sc*/ .gVXRRg:disabled{cursor:not-allowed;box-shadow:none;color:var(--fgColor-disabled,var(--color-primer-fg-disabled,#8c959f));border-color:var(--button-default-borderColor-disabled,var(--button-default-borderColor-rest,var(--color-btn-border,rgba(31,35,40,0.15))));background-color:var(--button-default-bgColor-disabled,var(--control-bgColor-disabled,var(--color-input-disabled-bg,rgba(175,184,193,0.2))));}/*!sc*/ .gVXRRg:disabled [data-component=ButtonCounter]{color:inherit;}/*!sc*/ @media (forced-colors:active){.gVXRRg:focus{outline:solid 1px transparent;}}/*!sc*/ .gVXRRg [data-component=ButtonCounter]{font-size:12px;background-color:var(--buttonCounter-default-bgColor-rest,var(--color-btn-counter-bg,rgba(31,35,40,0.08)));}/*!sc*/ .gVXRRg[data-component=IconButton]{display:inline-grid;padding:unset;place-content:center;width:32px;min-width:unset;}/*!sc*/ .gVXRRg[data-size="small"]{padding:0 8px;height:28px;gap:4px;font-size:12px;}/*!sc*/ .gVXRRg[data-size="small"] [data-component="text"]{line-height:1.6666667;}/*!sc*/ .gVXRRg[data-size="small"] [data-component=ButtonCounter]{font-size:12px;}/*!sc*/ .gVXRRg[data-size="small"] [data-component="buttonContent"] > :not(:last-child){margin-right:4px;}/*!sc*/ .gVXRRg[data-size="small"][data-component=IconButton]{width:28px;padding:unset;}/*!sc*/ .gVXRRg[data-size="large"]{padding:0 16px;height:40px;gap:8px;}/*!sc*/ .gVXRRg[data-size="large"] [data-component="buttonContent"] > :not(:last-child){margin-right:8px;}/*!sc*/ .gVXRRg[data-size="large"][data-component=IconButton]{width:40px;padding:unset;}/*!sc*/ .gVXRRg[data-block="block"]{width:100%;}/*!sc*/ .gVXRRg[data-label-wrap="true"]{min-width:-webkit-fit-content;min-width:-moz-fit-content;min-width:fit-content;height:unset;min-height:var(--control-medium-size,2rem);}/*!sc*/ .gVXRRg[data-label-wrap="true"] [data-component="buttonContent"]{-webkit-flex:1 1 auto;-ms-flex:1 1 auto;flex:1 1 auto;-webkit-align-self:stretch;-ms-flex-item-align:stretch;align-self:stretch;padding-block:calc(var(--control-medium-paddingBlock,0.375rem) - 2px);}/*!sc*/ .gVXRRg[data-label-wrap="true"] [data-component="text"]{white-space:unset;word-break:break-word;}/*!sc*/ .gVXRRg[data-label-wrap="true"][data-size="small"]{height:unset;min-height:var(--control-small-size,1.75rem);}/*!sc*/ .gVXRRg[data-label-wrap="true"][data-size="small"] [data-component="buttonContent"]{padding-block:calc(var(--control-small-paddingBlock,0.25rem) - 2px);}/*!sc*/ .gVXRRg[data-label-wrap="true"][data-size="large"]{height:unset;min-height:var(--control-large-size,2.5rem);padding-inline:var(--control-large-paddingInline-spacious,1rem);}/*!sc*/ .gVXRRg[data-label-wrap="true"][data-size="large"] [data-component="buttonContent"]{padding-block:calc(var(--control-large-paddingBlock,0.625rem) - 2px);}/*!sc*/ .gVXRRg[data-inactive]:not([disabled]){background-color:var(--button-inactive-bgColor,var(--button-inactive-bgColor-rest,var(--color-btn-inactive-bg,#eaeef2)));border-color:var(--button-inactive-bgColor,var(--button-inactive-bgColor-rest,var(--color-btn-inactive-bg,#eaeef2)));color:var(--button-inactive-fgColor,var(--button-inactive-fgColor-rest,var(--color-btn-inactive-text,#57606a)));}/*!sc*/ .gVXRRg[data-inactive]:not([disabled]):focus-visible{box-shadow:none;}/*!sc*/ .gVXRRg [data-component="leadingVisual"]{grid-area:leadingVisual;}/*!sc*/ .gVXRRg [data-component="text"]{grid-area:text;line-height:1.4285714;white-space:nowrap;}/*!sc*/ .gVXRRg [data-component="trailingVisual"]{grid-area:trailingVisual;}/*!sc*/ .gVXRRg [data-component="trailingAction"]{margin-right:-4px;}/*!sc*/ .gVXRRg [data-component="buttonContent"]{-webkit-flex:1 0 auto;-ms-flex:1 0 auto;flex:1 0 auto;display:grid;grid-template-areas:"leadingVisual text trailingVisual";grid-template-columns:min-content minmax(0,auto) min-content;-webkit-align-items:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-align-content:center;-ms-flex-line-pack:center;align-content:center;}/*!sc*/ .gVXRRg [data-component="buttonContent"] > :not(:last-child){margin-right:8px;}/*!sc*/ .gVXRRg [data-component="loadingSpinner"]{grid-area:text;margin-right:0px !important;place-self:center;color:var(--fgColor-muted,var(--color-fg-muted,#656d76));}/*!sc*/ .gVXRRg [data-component="loadingSpinner"] + [data-component="text"]{visibility:hidden;}/*!sc*/ .gVXRRg:hover:not([disabled]):not([data-inactive]){background-color:var(--button-default-bgColor-hover,var(--color-btn-hover-bg,#f3f4f6));border-color:var(--button-default-borderColor-hover,var(--button-default-borderColor-hover,var(--color-btn-hover-border,rgba(31,35,40,0.15))));}/*!sc*/ .gVXRRg:active:not([disabled]):not([data-inactive]){background-color:var(--button-default-bgColor-active,var(--color-btn-active-bg,hsla(220,14%,93%,1)));border-color:var(--button-default-borderColor-active,var(--button-default-borderColor-active,var(--color-btn-active-border,rgba(31,35,40,0.15))));}/*!sc*/ .gVXRRg[aria-expanded=true]{background-color:var(--button-default-bgColor-active,var(--color-btn-active-bg,hsla(220,14%,93%,1)));border-color:var(--button-default-borderColor-active,var(--button-default-borderColor-active,var(--color-btn-active-border,rgba(31,35,40,0.15))));}/*!sc*/ .gVXRRg [data-component="leadingVisual"],.gVXRRg [data-component="trailingVisual"],.gVXRRg [data-component="trailingAction"]{color:var(--button-color,var(--fgColor-muted,var(--color-fg-muted,#656d76)));}/*!sc*/ .gVXRRg[data-component="IconButton"][data-no-visuals]:not(:disabled){color:var(--fgColor-muted,var(--color-fg-muted,#656d76));}/*!sc*/ .gVXRRg[data-size="medium"]{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;min-width:0;}/*!sc*/ .gVXRRg[data-size="medium"] svg{color:var(--fgColor-muted,var(--color-fg-muted,#656d76));}/*!sc*/ .gVXRRg[data-size="medium"] > span{width:inherit;}/*!sc*/ .loAzyw{border-radius:6px;border:1px solid;border-color:transparent;font-family:inherit;font-weight:500;font-size:14px;cursor:pointer;-webkit-appearance:none;-moz-appearance:none;appearance:none;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;-webkit-text-decoration:none;text-decoration:none;text-align:center;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-align-items:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:justify;-webkit-justify-content:space-between;-ms-flex-pack:justify;justify-content:space-between;height:32px;padding:0 12px;gap:8px;min-width:-webkit-max-content;min-width:-moz-max-content;min-width:max-content;-webkit-transition:80ms cubic-bezier(0.65,0,0.35,1);transition:80ms cubic-bezier(0.65,0,0.35,1);-webkit-transition-property:color,fill,background-color,border-color;transition-property:color,fill,background-color,border-color;color:var(--button-invisible-fgColor-rest,var(--button-default-fgColor-rest,var(--color-btn-text,#24292f)));background-color:transparent;box-shadow:none;}/*!sc*/ .loAzyw:focus:not(:disabled){box-shadow:none;outline:2px solid var(--fgColor-accent,var(--color-accent-fg,#0969da));outline-offset:-2px;}/*!sc*/ .loAzyw:focus:not(:disabled):not(:focus-visible){outline:solid 1px transparent;}/*!sc*/ .loAzyw:focus-visible:not(:disabled){box-shadow:none;outline:2px solid var(--fgColor-accent,var(--color-accent-fg,#0969da));outline-offset:-2px;}/*!sc*/ .loAzyw[href]{display:-webkit-inline-box;display:-webkit-inline-flex;display:-ms-inline-flexbox;display:inline-flex;}/*!sc*/ .loAzyw[href]:hover{-webkit-text-decoration:none;text-decoration:none;}/*!sc*/ .loAzyw:hover{-webkit-transition-duration:80ms;transition-duration:80ms;}/*!sc*/ .loAzyw:active{-webkit-transition:none;transition:none;}/*!sc*/ .loAzyw[data-inactive]{cursor:auto;}/*!sc*/ .loAzyw:disabled{cursor:not-allowed;box-shadow:none;color:var(--fgColor-disabled,var(--color-primer-fg-disabled,#8c959f));background-color:var(--button-invisible-bgColor-disabled,transparent);}/*!sc*/ .loAzyw:disabled [data-component=ButtonCounter],.loAzyw:disabled [data-component="leadingVisual"],.loAzyw:disabled [data-component="trailingAction"]{color:inherit;}/*!sc*/ @media (forced-colors:active){.loAzyw:focus{outline:solid 1px transparent;}}/*!sc*/ .loAzyw [data-component=ButtonCounter]{font-size:12px;}/*!sc*/ .loAzyw[data-component=IconButton]{display:inline-grid;padding:unset;place-content:center;width:32px;min-width:unset;}/*!sc*/ .loAzyw[data-size="small"]{padding:0 8px;height:28px;gap:4px;font-size:12px;}/*!sc*/ .loAzyw[data-size="small"] [data-component="text"]{line-height:1.6666667;}/*!sc*/ .loAzyw[data-size="small"] [data-component=ButtonCounter]{font-size:12px;}/*!sc*/ .loAzyw[data-size="small"] [data-component="buttonContent"] > :not(:last-child){margin-right:4px;}/*!sc*/ .loAzyw[data-size="small"][data-component=IconButton]{width:28px;padding:unset;}/*!sc*/ .loAzyw[data-size="large"]{padding:0 16px;height:40px;gap:8px;}/*!sc*/ .loAzyw[data-size="large"] [data-component="buttonContent"] > :not(:last-child){margin-right:8px;}/*!sc*/ .loAzyw[data-size="large"][data-component=IconButton]{width:40px;padding:unset;}/*!sc*/ .loAzyw[data-block="block"]{width:100%;}/*!sc*/ .loAzyw[data-label-wrap="true"]{min-width:-webkit-fit-content;min-width:-moz-fit-content;min-width:fit-content;height:unset;min-height:var(--control-medium-size,2rem);}/*!sc*/ .loAzyw[data-label-wrap="true"] [data-component="buttonContent"]{-webkit-flex:1 1 auto;-ms-flex:1 1 auto;flex:1 1 auto;-webkit-align-self:stretch;-ms-flex-item-align:stretch;align-self:stretch;padding-block:calc(var(--control-medium-paddingBlock,0.375rem) - 2px);}/*!sc*/ .loAzyw[data-label-wrap="true"] [data-component="text"]{white-space:unset;word-break:break-word;}/*!sc*/ .loAzyw[data-label-wrap="true"][data-size="small"]{height:unset;min-height:var(--control-small-size,1.75rem);}/*!sc*/ .loAzyw[data-label-wrap="true"][data-size="small"] [data-component="buttonContent"]{padding-block:calc(var(--control-small-paddingBlock,0.25rem) - 2px);}/*!sc*/ .loAzyw[data-label-wrap="true"][data-size="large"]{height:unset;min-height:var(--control-large-size,2.5rem);padding-inline:var(--control-large-paddingInline-spacious,1rem);}/*!sc*/ .loAzyw[data-label-wrap="true"][data-size="large"] [data-component="buttonContent"]{padding-block:calc(var(--control-large-paddingBlock,0.625rem) - 2px);}/*!sc*/ .loAzyw[data-inactive]:not([disabled]){background-color:var(--button-inactive-bgColor,var(--button-inactive-bgColor-rest,var(--color-btn-inactive-bg,#eaeef2)));border-color:var(--button-inactive-bgColor,var(--button-inactive-bgColor-rest,var(--color-btn-inactive-bg,#eaeef2)));color:var(--button-inactive-fgColor,var(--button-inactive-fgColor-rest,var(--color-btn-inactive-text,#57606a)));}/*!sc*/ .loAzyw[data-inactive]:not([disabled]):focus-visible{box-shadow:none;}/*!sc*/ .loAzyw [data-component="leadingVisual"]{grid-area:leadingVisual;color:var(--button-invisible-iconColor-rest,var(--fgColor-muted,var(--color-fg-muted,#656d76)));}/*!sc*/ .loAzyw [data-component="text"]{grid-area:text;line-height:1.4285714;white-space:nowrap;}/*!sc*/ .loAzyw [data-component="trailingVisual"]{grid-area:trailingVisual;color:var(--button-invisible-iconColor-rest,var(--fgColor-muted,var(--color-fg-muted,#656d76)));}/*!sc*/ .loAzyw [data-component="trailingAction"]{margin-right:-4px;color:var(--button-invisible-iconColor-rest,var(--fgColor-muted,var(--color-fg-muted,#656d76)));}/*!sc*/ .loAzyw [data-component="buttonContent"]{-webkit-flex:1 0 auto;-ms-flex:1 0 auto;flex:1 0 auto;display:grid;grid-template-areas:"leadingVisual text trailingVisual";grid-template-columns:min-content minmax(0,auto) min-content;-webkit-align-items:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-align-content:center;-ms-flex-line-pack:center;align-content:center;}/*!sc*/ .loAzyw [data-component="buttonContent"] > :not(:last-child){margin-right:8px;}/*!sc*/ .loAzyw [data-component="loadingSpinner"]{grid-area:text;margin-right:0px !important;place-self:center;color:var(--fgColor-muted,var(--color-fg-muted,#656d76));}/*!sc*/ .loAzyw [data-component="loadingSpinner"] + [data-component="text"]{visibility:hidden;}/*!sc*/ .loAzyw:hover:not([disabled]){background-color:var(--control-transparent-bgColor-hover,var(--color-action-list-item-default-hover-bg,rgba(208,215,222,0.32)));}/*!sc*/ .loAzyw:active:not([disabled]){background-color:var(--control-transparent-bgColor-active,var(--color-action-list-item-default-active-bg,rgba(208,215,222,0.48)));}/*!sc*/ .loAzyw[aria-expanded=true]{background-color:var(--control-transparent-bgColor-selected,var(--color-action-list-item-default-selected-bg,rgba(208,215,222,0.24)));}/*!sc*/ .loAzyw[data-component="IconButton"][data-no-visuals]{color:var(--button-invisible-iconColor-rest,var(--fgColor-muted,var(--color-fg-muted,#656d76)));}/*!sc*/ .loAzyw[data-no-visuals]{color:var(--button-invisible-fgColor-rest,var(--button-default-fgColor-rest,var(--color-btn-text,#24292f)));}/*!sc*/ .loAzyw:has([data-component="ButtonCounter"]){color:var(--button-invisible-fgColor-rest,var(--button-default-fgColor-rest,var(--color-btn-text,#24292f)));}/*!sc*/ .loAzyw:disabled[data-no-visuals]{color:var(--fgColor-disabled,var(--color-primer-fg-disabled,#8c959f));}/*!sc*/ .loAzyw:disabled[data-no-visuals] [data-component=ButtonCounter]{color:inherit;}/*!sc*/ .loAzyw[data-size="medium"]{color:var(--fgColor-muted,var(--color-fg-muted,#656d76));padding-left:4px;padding-right:4px;}/*!sc*/ .loAzyw[data-size="medium"] span[data-component="leadingVisual"]{margin-right:4px !important;}/*!sc*/ .cXsOlJ{border-radius:6px;border:1px solid;border-color:transparent;font-family:inherit;font-weight:500;font-size:14px;cursor:pointer;-webkit-appearance:none;-moz-appearance:none;appearance:none;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;-webkit-text-decoration:none;text-decoration:none;text-align:center;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-align-items:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:justify;-webkit-justify-content:space-between;-ms-flex-pack:justify;justify-content:space-between;height:32px;padding:0 12px;gap:8px;min-width:-webkit-max-content;min-width:-moz-max-content;min-width:max-content;-webkit-transition:80ms cubic-bezier(0.65,0,0.35,1);transition:80ms cubic-bezier(0.65,0,0.35,1);-webkit-transition-property:color,fill,background-color,border-color;transition-property:color,fill,background-color,border-color;color:var(--button-invisible-fgColor-rest,var(--button-default-fgColor-rest,var(--color-btn-text,#24292f)));background-color:transparent;box-shadow:none;}/*!sc*/ .cXsOlJ:focus:not(:disabled){box-shadow:none;outline:2px solid var(--fgColor-accent,var(--color-accent-fg,#0969da));outline-offset:-2px;}/*!sc*/ .cXsOlJ:focus:not(:disabled):not(:focus-visible){outline:solid 1px transparent;}/*!sc*/ .cXsOlJ:focus-visible:not(:disabled){box-shadow:none;outline:2px solid var(--fgColor-accent,var(--color-accent-fg,#0969da));outline-offset:-2px;}/*!sc*/ .cXsOlJ[href]{display:-webkit-inline-box;display:-webkit-inline-flex;display:-ms-inline-flexbox;display:inline-flex;}/*!sc*/ .cXsOlJ[href]:hover{-webkit-text-decoration:none;text-decoration:none;}/*!sc*/ .cXsOlJ:hover{-webkit-transition-duration:80ms;transition-duration:80ms;}/*!sc*/ .cXsOlJ:active{-webkit-transition:none;transition:none;}/*!sc*/ .cXsOlJ[data-inactive]{cursor:auto;}/*!sc*/ .cXsOlJ:disabled{cursor:not-allowed;box-shadow:none;color:var(--fgColor-disabled,var(--color-primer-fg-disabled,#8c959f));background-color:var(--button-invisible-bgColor-disabled,transparent);}/*!sc*/ .cXsOlJ:disabled [data-component=ButtonCounter],.cXsOlJ:disabled [data-component="leadingVisual"],.cXsOlJ:disabled [data-component="trailingAction"]{color:inherit;}/*!sc*/ @media (forced-colors:active){.cXsOlJ:focus{outline:solid 1px transparent;}}/*!sc*/ .cXsOlJ [data-component=ButtonCounter]{font-size:12px;}/*!sc*/ .cXsOlJ[data-component=IconButton]{display:inline-grid;padding:unset;place-content:center;width:32px;min-width:unset;}/*!sc*/ .cXsOlJ[data-size="small"]{padding:0 8px;height:28px;gap:4px;font-size:12px;}/*!sc*/ .cXsOlJ[data-size="small"] [data-component="text"]{line-height:1.6666667;}/*!sc*/ .cXsOlJ[data-size="small"] [data-component=ButtonCounter]{font-size:12px;}/*!sc*/ .cXsOlJ[data-size="small"] [data-component="buttonContent"] > :not(:last-child){margin-right:4px;}/*!sc*/ .cXsOlJ[data-size="small"][data-component=IconButton]{width:28px;padding:unset;}/*!sc*/ .cXsOlJ[data-size="large"]{padding:0 16px;height:40px;gap:8px;}/*!sc*/ .cXsOlJ[data-size="large"] [data-component="buttonContent"] > :not(:last-child){margin-right:8px;}/*!sc*/ .cXsOlJ[data-size="large"][data-component=IconButton]{width:40px;padding:unset;}/*!sc*/ .cXsOlJ[data-block="block"]{width:100%;}/*!sc*/ .cXsOlJ[data-label-wrap="true"]{min-width:-webkit-fit-content;min-width:-moz-fit-content;min-width:fit-content;height:unset;min-height:var(--control-medium-size,2rem);}/*!sc*/ .cXsOlJ[data-label-wrap="true"] [data-component="buttonContent"]{-webkit-flex:1 1 auto;-ms-flex:1 1 auto;flex:1 1 auto;-webkit-align-self:stretch;-ms-flex-item-align:stretch;align-self:stretch;padding-block:calc(var(--control-medium-paddingBlock,0.375rem) - 2px);}/*!sc*/ .cXsOlJ[data-label-wrap="true"] [data-component="text"]{white-space:unset;word-break:break-word;}/*!sc*/ .cXsOlJ[data-label-wrap="true"][data-size="small"]{height:unset;min-height:var(--control-small-size,1.75rem);}/*!sc*/ .cXsOlJ[data-label-wrap="true"][data-size="small"] [data-component="buttonContent"]{padding-block:calc(var(--control-small-paddingBlock,0.25rem) - 2px);}/*!sc*/ .cXsOlJ[data-label-wrap="true"][data-size="large"]{height:unset;min-height:var(--control-large-size,2.5rem);padding-inline:var(--control-large-paddingInline-spacious,1rem);}/*!sc*/ .cXsOlJ[data-label-wrap="true"][data-size="large"] [data-component="buttonContent"]{padding-block:calc(var(--control-large-paddingBlock,0.625rem) - 2px);}/*!sc*/ .cXsOlJ[data-inactive]:not([disabled]){background-color:var(--button-inactive-bgColor,var(--button-inactive-bgColor-rest,var(--color-btn-inactive-bg,#eaeef2)));border-color:var(--button-inactive-bgColor,var(--button-inactive-bgColor-rest,var(--color-btn-inactive-bg,#eaeef2)));color:var(--button-inactive-fgColor,var(--button-inactive-fgColor-rest,var(--color-btn-inactive-text,#57606a)));}/*!sc*/ .cXsOlJ[data-inactive]:not([disabled]):focus-visible{box-shadow:none;}/*!sc*/ .cXsOlJ [data-component="leadingVisual"]{grid-area:leadingVisual;color:var(--button-invisible-iconColor-rest,var(--fgColor-muted,var(--color-fg-muted,#656d76)));}/*!sc*/ .cXsOlJ [data-component="text"]{grid-area:text;line-height:1.4285714;white-space:nowrap;}/*!sc*/ .cXsOlJ [data-component="trailingVisual"]{grid-area:trailingVisual;color:var(--button-invisible-iconColor-rest,var(--fgColor-muted,var(--color-fg-muted,#656d76)));}/*!sc*/ .cXsOlJ [data-component="trailingAction"]{margin-right:-4px;color:var(--button-invisible-iconColor-rest,var(--fgColor-muted,var(--color-fg-muted,#656d76)));}/*!sc*/ .cXsOlJ [data-component="buttonContent"]{-webkit-flex:1 0 auto;-ms-flex:1 0 auto;flex:1 0 auto;display:grid;grid-template-areas:"leadingVisual text trailingVisual";grid-template-columns:min-content minmax(0,auto) min-content;-webkit-align-items:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-align-content:center;-ms-flex-line-pack:center;align-content:center;}/*!sc*/ .cXsOlJ [data-component="buttonContent"] > :not(:last-child){margin-right:8px;}/*!sc*/ .cXsOlJ [data-component="loadingSpinner"]{grid-area:text;margin-right:0px !important;place-self:center;color:var(--fgColor-muted,var(--color-fg-muted,#656d76));}/*!sc*/ .cXsOlJ [data-component="loadingSpinner"] + [data-component="text"]{visibility:hidden;}/*!sc*/ .cXsOlJ:hover:not([disabled]){background-color:var(--control-transparent-bgColor-hover,var(--color-action-list-item-default-hover-bg,rgba(208,215,222,0.32)));}/*!sc*/ .cXsOlJ:active:not([disabled]){background-color:var(--control-transparent-bgColor-active,var(--color-action-list-item-default-active-bg,rgba(208,215,222,0.48)));}/*!sc*/ .cXsOlJ[aria-expanded=true]{background-color:var(--control-transparent-bgColor-selected,var(--color-action-list-item-default-selected-bg,rgba(208,215,222,0.24)));}/*!sc*/ .cXsOlJ[data-component="IconButton"][data-no-visuals]{color:var(--button-invisible-iconColor-rest,var(--fgColor-muted,var(--color-fg-muted,#656d76)));}/*!sc*/ .cXsOlJ[data-no-visuals]{color:var(--button-invisible-fgColor-rest,var(--button-default-fgColor-rest,var(--color-btn-text,#24292f)));}/*!sc*/ .cXsOlJ:has([data-component="ButtonCounter"]){color:var(--button-invisible-fgColor-rest,var(--button-default-fgColor-rest,var(--color-btn-text,#24292f)));}/*!sc*/ .cXsOlJ:disabled[data-no-visuals]{color:var(--fgColor-disabled,var(--color-primer-fg-disabled,#8c959f));}/*!sc*/ .cXsOlJ:disabled[data-no-visuals] [data-component=ButtonCounter]{color:inherit;}/*!sc*/ .cXsOlJ[data-size="medium"][data-no-visuals]{color:var(--fgColor-muted,var(--color-fg-muted,#656d76));}/*!sc*/ .gGdPyq{border-radius:6px;border:1px solid;border-color:var(--button-default-borderColor-rest,var(--button-default-borderColor-rest,var(--color-btn-border,rgba(31,35,40,0.15))));font-family:inherit;font-weight:500;font-size:14px;cursor:pointer;-webkit-appearance:none;-moz-appearance:none;appearance:none;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;-webkit-text-decoration:none;text-decoration:none;text-align:center;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-align-items:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:justify;-webkit-justify-content:space-between;-ms-flex-pack:justify;justify-content:space-between;height:32px;padding:0 12px;gap:8px;min-width:-webkit-max-content;min-width:-moz-max-content;min-width:max-content;-webkit-transition:80ms cubic-bezier(0.65,0,0.35,1);transition:80ms cubic-bezier(0.65,0,0.35,1);-webkit-transition-property:color,fill,background-color,border-color;transition-property:color,fill,background-color,border-color;color:var(--button-default-fgColor-rest,var(--color-btn-text,#24292f));background-color:var(--button-default-bgColor-rest,var(--color-btn-bg,#f6f8fa));box-shadow:var(--button-default-shadow-resting,var(--color-btn-shadow,0 1px 0 rgba(31,35,40,0.04))),var(--button-default-shadow-inset,var(--color-btn-inset-shadow,inset 0 1px 0 rgba(255,255,255,0.25)));}/*!sc*/ .gGdPyq:focus:not(:disabled){box-shadow:none;outline:2px solid var(--fgColor-accent,var(--color-accent-fg,#0969da));outline-offset:-2px;}/*!sc*/ .gGdPyq:focus:not(:disabled):not(:focus-visible){outline:solid 1px transparent;}/*!sc*/ .gGdPyq:focus-visible:not(:disabled){box-shadow:none;outline:2px solid var(--fgColor-accent,var(--color-accent-fg,#0969da));outline-offset:-2px;}/*!sc*/ .gGdPyq[href]{display:-webkit-inline-box;display:-webkit-inline-flex;display:-ms-inline-flexbox;display:inline-flex;}/*!sc*/ .gGdPyq[href]:hover{-webkit-text-decoration:none;text-decoration:none;}/*!sc*/ .gGdPyq:hover{-webkit-transition-duration:80ms;transition-duration:80ms;}/*!sc*/ .gGdPyq:active{-webkit-transition:none;transition:none;}/*!sc*/ .gGdPyq[data-inactive]{cursor:auto;}/*!sc*/ .gGdPyq:disabled{cursor:not-allowed;box-shadow:none;color:var(--fgColor-disabled,var(--color-primer-fg-disabled,#8c959f));border-color:var(--button-default-borderColor-disabled,var(--button-default-borderColor-rest,var(--color-btn-border,rgba(31,35,40,0.15))));background-color:var(--button-default-bgColor-disabled,var(--control-bgColor-disabled,var(--color-input-disabled-bg,rgba(175,184,193,0.2))));}/*!sc*/ .gGdPyq:disabled [data-component=ButtonCounter]{color:inherit;}/*!sc*/ @media (forced-colors:active){.gGdPyq:focus{outline:solid 1px transparent;}}/*!sc*/ .gGdPyq [data-component=ButtonCounter]{font-size:12px;background-color:var(--buttonCounter-default-bgColor-rest,var(--color-btn-counter-bg,rgba(31,35,40,0.08)));}/*!sc*/ .gGdPyq[data-component=IconButton]{display:inline-grid;padding:unset;place-content:center;width:32px;min-width:unset;}/*!sc*/ .gGdPyq[data-size="small"]{padding:0 8px;height:28px;gap:4px;font-size:12px;}/*!sc*/ .gGdPyq[data-size="small"] [data-component="text"]{line-height:1.6666667;}/*!sc*/ .gGdPyq[data-size="small"] [data-component=ButtonCounter]{font-size:12px;}/*!sc*/ .gGdPyq[data-size="small"] [data-component="buttonContent"] > :not(:last-child){margin-right:4px;}/*!sc*/ .gGdPyq[data-size="small"][data-component=IconButton]{width:28px;padding:unset;}/*!sc*/ .gGdPyq[data-size="large"]{padding:0 16px;height:40px;gap:8px;}/*!sc*/ .gGdPyq[data-size="large"] [data-component="buttonContent"] > :not(:last-child){margin-right:8px;}/*!sc*/ .gGdPyq[data-size="large"][data-component=IconButton]{width:40px;padding:unset;}/*!sc*/ .gGdPyq[data-block="block"]{width:100%;}/*!sc*/ .gGdPyq[data-label-wrap="true"]{min-width:-webkit-fit-content;min-width:-moz-fit-content;min-width:fit-content;height:unset;min-height:var(--control-medium-size,2rem);}/*!sc*/ .gGdPyq[data-label-wrap="true"] [data-component="buttonContent"]{-webkit-flex:1 1 auto;-ms-flex:1 1 auto;flex:1 1 auto;-webkit-align-self:stretch;-ms-flex-item-align:stretch;align-self:stretch;padding-block:calc(var(--control-medium-paddingBlock,0.375rem) - 2px);}/*!sc*/ .gGdPyq[data-label-wrap="true"] [data-component="text"]{white-space:unset;word-break:break-word;}/*!sc*/ .gGdPyq[data-label-wrap="true"][data-size="small"]{height:unset;min-height:var(--control-small-size,1.75rem);}/*!sc*/ .gGdPyq[data-label-wrap="true"][data-size="small"] [data-component="buttonContent"]{padding-block:calc(var(--control-small-paddingBlock,0.25rem) - 2px);}/*!sc*/ .gGdPyq[data-label-wrap="true"][data-size="large"]{height:unset;min-height:var(--control-large-size,2.5rem);padding-inline:var(--control-large-paddingInline-spacious,1rem);}/*!sc*/ .gGdPyq[data-label-wrap="true"][data-size="large"] [data-component="buttonContent"]{padding-block:calc(var(--control-large-paddingBlock,0.625rem) - 2px);}/*!sc*/ .gGdPyq[data-inactive]:not([disabled]){background-color:var(--button-inactive-bgColor,var(--button-inactive-bgColor-rest,var(--color-btn-inactive-bg,#eaeef2)));border-color:var(--button-inactive-bgColor,var(--button-inactive-bgColor-rest,var(--color-btn-inactive-bg,#eaeef2)));color:var(--button-inactive-fgColor,var(--button-inactive-fgColor-rest,var(--color-btn-inactive-text,#57606a)));}/*!sc*/ .gGdPyq[data-inactive]:not([disabled]):focus-visible{box-shadow:none;}/*!sc*/ .gGdPyq [data-component="leadingVisual"]{grid-area:leadingVisual;}/*!sc*/ .gGdPyq [data-component="text"]{grid-area:text;line-height:1.4285714;white-space:nowrap;}/*!sc*/ .gGdPyq [data-component="trailingVisual"]{grid-area:trailingVisual;}/*!sc*/ .gGdPyq [data-component="trailingAction"]{margin-right:-4px;}/*!sc*/ .gGdPyq [data-component="buttonContent"]{-webkit-flex:1 0 auto;-ms-flex:1 0 auto;flex:1 0 auto;display:grid;grid-template-areas:"leadingVisual text trailingVisual";grid-template-columns:min-content minmax(0,auto) min-content;-webkit-align-items:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-align-content:center;-ms-flex-line-pack:center;align-content:center;}/*!sc*/ .gGdPyq [data-component="buttonContent"] > :not(:last-child){margin-right:8px;}/*!sc*/ .gGdPyq [data-component="loadingSpinner"]{grid-area:text;margin-right:0px !important;place-self:center;color:var(--fgColor-muted,var(--color-fg-muted,#656d76));}/*!sc*/ .gGdPyq [data-component="loadingSpinner"] + [data-component="text"]{visibility:hidden;}/*!sc*/ .gGdPyq:hover:not([disabled]):not([data-inactive]){background-color:var(--button-default-bgColor-hover,var(--color-btn-hover-bg,#f3f4f6));border-color:var(--button-default-borderColor-hover,var(--button-default-borderColor-hover,var(--color-btn-hover-border,rgba(31,35,40,0.15))));}/*!sc*/ .gGdPyq:active:not([disabled]):not([data-inactive]){background-color:var(--button-default-bgColor-active,var(--color-btn-active-bg,hsla(220,14%,93%,1)));border-color:var(--button-default-borderColor-active,var(--button-default-borderColor-active,var(--color-btn-active-border,rgba(31,35,40,0.15))));}/*!sc*/ .gGdPyq[aria-expanded=true]{background-color:var(--button-default-bgColor-active,var(--color-btn-active-bg,hsla(220,14%,93%,1)));border-color:var(--button-default-borderColor-active,var(--button-default-borderColor-active,var(--color-btn-active-border,rgba(31,35,40,0.15))));}/*!sc*/ .gGdPyq [data-component="leadingVisual"],.gGdPyq [data-component="trailingVisual"],.gGdPyq [data-component="trailingAction"]{color:var(--button-color,var(--fgColor-muted,var(--color-fg-muted,#656d76)));}/*!sc*/ .gGdPyq[data-component="IconButton"][data-no-visuals]:not(:disabled){color:var(--fgColor-muted,var(--color-fg-muted,#656d76));}/*!sc*/ .bmlmSe{border-radius:6px;border:1px solid;border-color:var(--button-primary-borderColor-rest,var(--color-btn-primary-border,rgba(31,35,40,0.15)));font-family:inherit;font-weight:500;font-size:14px;cursor:pointer;-webkit-appearance:none;-moz-appearance:none;appearance:none;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;-webkit-text-decoration:none;text-decoration:none;text-align:center;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-align-items:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:justify;-webkit-justify-content:space-between;-ms-flex-pack:justify;justify-content:space-between;height:32px;padding:0 12px;gap:8px;min-width:-webkit-max-content;min-width:-moz-max-content;min-width:max-content;-webkit-transition:80ms cubic-bezier(0.65,0,0.35,1);transition:80ms cubic-bezier(0.65,0,0.35,1);-webkit-transition-property:color,fill,background-color,border-color;transition-property:color,fill,background-color,border-color;color:var(--button-primary-fgColor-rest,var(--color-btn-primary-text,#ffffff));background-color:var(--button-primary-bgColor-rest,var(--color-btn-primary-bg,#1f883d));box-shadow:var(--shadow-resting-small,var(--color-btn-primary-shadow,0 1px 0 rgba(31,35,40,0.1)));}/*!sc*/ .bmlmSe:focus:not(:disabled){box-shadow:none;outline:2px solid var(--fgColor-accent,var(--color-accent-fg,#0969da));outline-offset:-2px;}/*!sc*/ .bmlmSe:focus:not(:disabled):not(:focus-visible){outline:solid 1px transparent;}/*!sc*/ .bmlmSe:focus-visible:not(:disabled){box-shadow:none;outline:2px solid var(--fgColor-accent,var(--color-accent-fg,#0969da));outline-offset:-2px;}/*!sc*/ .bmlmSe[href]{display:-webkit-inline-box;display:-webkit-inline-flex;display:-ms-inline-flexbox;display:inline-flex;}/*!sc*/ .bmlmSe[href]:hover{-webkit-text-decoration:none;text-decoration:none;}/*!sc*/ .bmlmSe:hover{-webkit-transition-duration:80ms;transition-duration:80ms;}/*!sc*/ .bmlmSe:active{-webkit-transition:none;transition:none;}/*!sc*/ .bmlmSe[data-inactive]{cursor:auto;}/*!sc*/ .bmlmSe:disabled{cursor:not-allowed;box-shadow:none;color:var(--button-primary-fgColor-disabled,var(--color-btn-primary-disabled-text,rgba(255,255,255,0.8)));background-color:var(--button-primary-bgColor-disabled,var(--color-btn-primary-disabled-bg,#94d3a2));border-color:var(--button-primary-borderColor-disabled,var(--color-btn-primary-disabled-border,rgba(31,35,40,0.15)));}/*!sc*/ .bmlmSe:disabled [data-component=ButtonCounter]{color:inherit;}/*!sc*/ @media (forced-colors:active){.bmlmSe:focus{outline:solid 1px transparent;}}/*!sc*/ .bmlmSe [data-component=ButtonCounter]{font-size:12px;background-color:var(--buttonCounter-primary-bgColor-rest,var(--color-btn-primary-counter-bg,rgba(0,45,17,0.2)));color:var(--button-primary-fgColor-rest,var(--color-btn-primary-text,#ffffff));}/*!sc*/ .bmlmSe[data-component=IconButton]{display:inline-grid;padding:unset;place-content:center;width:32px;min-width:unset;}/*!sc*/ .bmlmSe[data-size="small"]{padding:0 8px;height:28px;gap:4px;font-size:12px;}/*!sc*/ .bmlmSe[data-size="small"] [data-component="text"]{line-height:1.6666667;}/*!sc*/ .bmlmSe[data-size="small"] [data-component=ButtonCounter]{font-size:12px;}/*!sc*/ .bmlmSe[data-size="small"] [data-component="buttonContent"] > :not(:last-child){margin-right:4px;}/*!sc*/ .bmlmSe[data-size="small"][data-component=IconButton]{width:28px;padding:unset;}/*!sc*/ .bmlmSe[data-size="large"]{padding:0 16px;height:40px;gap:8px;}/*!sc*/ .bmlmSe[data-size="large"] [data-component="buttonContent"] > :not(:last-child){margin-right:8px;}/*!sc*/ .bmlmSe[data-size="large"][data-component=IconButton]{width:40px;padding:unset;}/*!sc*/ .bmlmSe[data-block="block"]{width:100%;}/*!sc*/ .bmlmSe[data-label-wrap="true"]{min-width:-webkit-fit-content;min-width:-moz-fit-content;min-width:fit-content;height:unset;min-height:var(--control-medium-size,2rem);}/*!sc*/ .bmlmSe[data-label-wrap="true"] [data-component="buttonContent"]{-webkit-flex:1 1 auto;-ms-flex:1 1 auto;flex:1 1 auto;-webkit-align-self:stretch;-ms-flex-item-align:stretch;align-self:stretch;padding-block:calc(var(--control-medium-paddingBlock,0.375rem) - 2px);}/*!sc*/ .bmlmSe[data-label-wrap="true"] [data-component="text"]{white-space:unset;word-break:break-word;}/*!sc*/ .bmlmSe[data-label-wrap="true"][data-size="small"]{height:unset;min-height:var(--control-small-size,1.75rem);}/*!sc*/ .bmlmSe[data-label-wrap="true"][data-size="small"] [data-component="buttonContent"]{padding-block:calc(var(--control-small-paddingBlock,0.25rem) - 2px);}/*!sc*/ .bmlmSe[data-label-wrap="true"][data-size="large"]{height:unset;min-height:var(--control-large-size,2.5rem);padding-inline:var(--control-large-paddingInline-spacious,1rem);}/*!sc*/ .bmlmSe[data-label-wrap="true"][data-size="large"] [data-component="buttonContent"]{padding-block:calc(var(--control-large-paddingBlock,0.625rem) - 2px);}/*!sc*/ .bmlmSe[data-inactive]:not([disabled]){background-color:var(--button-inactive-bgColor,var(--button-inactive-bgColor-rest,var(--color-btn-inactive-bg,#eaeef2)));border-color:var(--button-inactive-bgColor,var(--button-inactive-bgColor-rest,var(--color-btn-inactive-bg,#eaeef2)));color:var(--button-inactive-fgColor,var(--button-inactive-fgColor-rest,var(--color-btn-inactive-text,#57606a)));}/*!sc*/ .bmlmSe[data-inactive]:not([disabled]):focus-visible{box-shadow:none;}/*!sc*/ .bmlmSe [data-component="leadingVisual"]{grid-area:leadingVisual;}/*!sc*/ .bmlmSe [data-component="text"]{grid-area:text;line-height:1.4285714;white-space:nowrap;}/*!sc*/ .bmlmSe [data-component="trailingVisual"]{grid-area:trailingVisual;}/*!sc*/ .bmlmSe [data-component="trailingAction"]{margin-right:-4px;}/*!sc*/ .bmlmSe [data-component="buttonContent"]{-webkit-flex:1 0 auto;-ms-flex:1 0 auto;flex:1 0 auto;display:grid;grid-template-areas:"leadingVisual text trailingVisual";grid-template-columns:min-content minmax(0,auto) min-content;-webkit-align-items:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-align-content:center;-ms-flex-line-pack:center;align-content:center;}/*!sc*/ .bmlmSe [data-component="buttonContent"] > :not(:last-child){margin-right:8px;}/*!sc*/ .bmlmSe [data-component="loadingSpinner"]{grid-area:text;margin-right:0px !important;place-self:center;color:var(--fgColor-muted,var(--color-fg-muted,#656d76));}/*!sc*/ .bmlmSe [data-component="loadingSpinner"] + [data-component="text"]{visibility:hidden;}/*!sc*/ .bmlmSe:hover:not([disabled]):not([data-inactive]){color:btn.primary.hoverText;background-color:var(--button-primary-bgColor-hover,var(--color-btn-primary-hover-bg,#1a7f37));}/*!sc*/ .bmlmSe:focus:not([disabled]){box-shadow:inset 0 0 0 3px;}/*!sc*/ .bmlmSe:focus-visible:not([disabled]){box-shadow:inset 0 0 0 3px;}/*!sc*/ .bmlmSe:active:not([disabled]):not([data-inactive]){background-color:var(--button-primary-bgColor-active,var(--color-btn-primary-selected-bg,hsla(137,66%,28%,1)));box-shadow:var(--button-primary-shadow-selected,var(--color-btn-primary-selected-shadow,inset 0 1px 0 rgba(0,45,17,0.2)));}/*!sc*/ .bmlmSe[aria-expanded=true]{background-color:var(--button-primary-bgColor-active,var(--color-btn-primary-selected-bg,hsla(137,66%,28%,1)));box-shadow:var(--button-primary-shadow-selected,var(--color-btn-primary-selected-shadow,inset 0 1px 0 rgba(0,45,17,0.2)));}/*!sc*/ .dPmZyJ{border-radius:6px;border:1px solid;border-color:transparent;font-family:inherit;font-weight:500;font-size:14px;cursor:pointer;-webkit-appearance:none;-moz-appearance:none;appearance:none;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;-webkit-text-decoration:none;text-decoration:none;text-align:center;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-align-items:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:justify;-webkit-justify-content:space-between;-ms-flex-pack:justify;justify-content:space-between;height:32px;padding:0 12px;gap:8px;min-width:-webkit-max-content;min-width:-moz-max-content;min-width:max-content;-webkit-transition:80ms cubic-bezier(0.65,0,0.35,1);transition:80ms cubic-bezier(0.65,0,0.35,1);-webkit-transition-property:color,fill,background-color,border-color;transition-property:color,fill,background-color,border-color;color:var(--button-invisible-fgColor-rest,var(--button-default-fgColor-rest,var(--color-btn-text,#24292f)));background-color:transparent;box-shadow:none;}/*!sc*/ .dPmZyJ:focus:not(:disabled){box-shadow:none;outline:2px solid var(--fgColor-accent,var(--color-accent-fg,#0969da));outline-offset:-2px;}/*!sc*/ .dPmZyJ:focus:not(:disabled):not(:focus-visible){outline:solid 1px transparent;}/*!sc*/ .dPmZyJ:focus-visible:not(:disabled){box-shadow:none;outline:2px solid var(--fgColor-accent,var(--color-accent-fg,#0969da));outline-offset:-2px;}/*!sc*/ .dPmZyJ[href]{display:-webkit-inline-box;display:-webkit-inline-flex;display:-ms-inline-flexbox;display:inline-flex;}/*!sc*/ .dPmZyJ[href]:hover{-webkit-text-decoration:none;text-decoration:none;}/*!sc*/ .dPmZyJ:hover{-webkit-transition-duration:80ms;transition-duration:80ms;}/*!sc*/ .dPmZyJ:active{-webkit-transition:none;transition:none;}/*!sc*/ .dPmZyJ[data-inactive]{cursor:auto;}/*!sc*/ .dPmZyJ:disabled{cursor:not-allowed;box-shadow:none;color:var(--fgColor-disabled,var(--color-primer-fg-disabled,#8c959f));background-color:var(--button-invisible-bgColor-disabled,transparent);}/*!sc*/ .dPmZyJ:disabled [data-component=ButtonCounter],.dPmZyJ:disabled [data-component="leadingVisual"],.dPmZyJ:disabled [data-component="trailingAction"]{color:inherit;}/*!sc*/ @media (forced-colors:active){.dPmZyJ:focus{outline:solid 1px transparent;}}/*!sc*/ .dPmZyJ [data-component=ButtonCounter]{font-size:12px;}/*!sc*/ .dPmZyJ[data-component=IconButton]{display:inline-grid;padding:unset;place-content:center;width:32px;min-width:unset;}/*!sc*/ .dPmZyJ[data-size="small"]{padding:0 8px;height:28px;gap:4px;font-size:12px;}/*!sc*/ .dPmZyJ[data-size="small"] [data-component="text"]{line-height:1.6666667;}/*!sc*/ .dPmZyJ[data-size="small"] [data-component=ButtonCounter]{font-size:12px;}/*!sc*/ .dPmZyJ[data-size="small"] [data-component="buttonContent"] > :not(:last-child){margin-right:4px;}/*!sc*/ .dPmZyJ[data-size="small"][data-component=IconButton]{width:28px;padding:unset;}/*!sc*/ .dPmZyJ[data-size="large"]{padding:0 16px;height:40px;gap:8px;}/*!sc*/ .dPmZyJ[data-size="large"] [data-component="buttonContent"] > :not(:last-child){margin-right:8px;}/*!sc*/ .dPmZyJ[data-size="large"][data-component=IconButton]{width:40px;padding:unset;}/*!sc*/ .dPmZyJ[data-block="block"]{width:100%;}/*!sc*/ .dPmZyJ[data-label-wrap="true"]{min-width:-webkit-fit-content;min-width:-moz-fit-content;min-width:fit-content;height:unset;min-height:var(--control-medium-size,2rem);}/*!sc*/ .dPmZyJ[data-label-wrap="true"] [data-component="buttonContent"]{-webkit-flex:1 1 auto;-ms-flex:1 1 auto;flex:1 1 auto;-webkit-align-self:stretch;-ms-flex-item-align:stretch;align-self:stretch;padding-block:calc(var(--control-medium-paddingBlock,0.375rem) - 2px);}/*!sc*/ .dPmZyJ[data-label-wrap="true"] [data-component="text"]{white-space:unset;word-break:break-word;}/*!sc*/ .dPmZyJ[data-label-wrap="true"][data-size="small"]{height:unset;min-height:var(--control-small-size,1.75rem);}/*!sc*/ .dPmZyJ[data-label-wrap="true"][data-size="small"] [data-component="buttonContent"]{padding-block:calc(var(--control-small-paddingBlock,0.25rem) - 2px);}/*!sc*/ .dPmZyJ[data-label-wrap="true"][data-size="large"]{height:unset;min-height:var(--control-large-size,2.5rem);padding-inline:var(--control-large-paddingInline-spacious,1rem);}/*!sc*/ .dPmZyJ[data-label-wrap="true"][data-size="large"] [data-component="buttonContent"]{padding-block:calc(var(--control-large-paddingBlock,0.625rem) - 2px);}/*!sc*/ .dPmZyJ[data-inactive]:not([disabled]){background-color:var(--button-inactive-bgColor,var(--button-inactive-bgColor-rest,var(--color-btn-inactive-bg,#eaeef2)));border-color:var(--button-inactive-bgColor,var(--button-inactive-bgColor-rest,var(--color-btn-inactive-bg,#eaeef2)));color:var(--button-inactive-fgColor,var(--button-inactive-fgColor-rest,var(--color-btn-inactive-text,#57606a)));}/*!sc*/ .dPmZyJ[data-inactive]:not([disabled]):focus-visible{box-shadow:none;}/*!sc*/ .dPmZyJ [data-component="leadingVisual"]{grid-area:leadingVisual;color:var(--button-invisible-iconColor-rest,var(--fgColor-muted,var(--color-fg-muted,#656d76)));}/*!sc*/ .dPmZyJ [data-component="text"]{grid-area:text;line-height:1.4285714;white-space:nowrap;}/*!sc*/ .dPmZyJ [data-component="trailingVisual"]{grid-area:trailingVisual;color:var(--button-invisible-iconColor-rest,var(--fgColor-muted,var(--color-fg-muted,#656d76)));}/*!sc*/ .dPmZyJ [data-component="trailingAction"]{margin-right:-4px;color:var(--button-invisible-iconColor-rest,var(--fgColor-muted,var(--color-fg-muted,#656d76)));}/*!sc*/ .dPmZyJ [data-component="buttonContent"]{-webkit-flex:1 0 auto;-ms-flex:1 0 auto;flex:1 0 auto;display:grid;grid-template-areas:"leadingVisual text trailingVisual";grid-template-columns:min-content minmax(0,auto) min-content;-webkit-align-items:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-align-content:center;-ms-flex-line-pack:center;align-content:center;}/*!sc*/ .dPmZyJ [data-component="buttonContent"] > :not(:last-child){margin-right:8px;}/*!sc*/ .dPmZyJ [data-component="loadingSpinner"]{grid-area:text;margin-right:0px !important;place-self:center;color:var(--fgColor-muted,var(--color-fg-muted,#656d76));}/*!sc*/ .dPmZyJ [data-component="loadingSpinner"] + [data-component="text"]{visibility:hidden;}/*!sc*/ .dPmZyJ:hover:not([disabled]){background-color:var(--control-transparent-bgColor-hover,var(--color-action-list-item-default-hover-bg,rgba(208,215,222,0.32)));}/*!sc*/ .dPmZyJ:active:not([disabled]){background-color:var(--control-transparent-bgColor-active,var(--color-action-list-item-default-active-bg,rgba(208,215,222,0.48)));}/*!sc*/ .dPmZyJ[aria-expanded=true]{background-color:var(--control-transparent-bgColor-selected,var(--color-action-list-item-default-selected-bg,rgba(208,215,222,0.24)));}/*!sc*/ .dPmZyJ[data-component="IconButton"][data-no-visuals]{color:var(--button-invisible-iconColor-rest,var(--fgColor-muted,var(--color-fg-muted,#656d76)));}/*!sc*/ .dPmZyJ[data-no-visuals]{color:var(--button-invisible-fgColor-rest,var(--button-default-fgColor-rest,var(--color-btn-text,#24292f)));}/*!sc*/ .dPmZyJ:has([data-component="ButtonCounter"]){color:var(--button-invisible-fgColor-rest,var(--button-default-fgColor-rest,var(--color-btn-text,#24292f)));}/*!sc*/ .dPmZyJ:disabled[data-no-visuals]{color:var(--fgColor-disabled,var(--color-primer-fg-disabled,#8c959f));}/*!sc*/ .dPmZyJ:disabled[data-no-visuals] [data-component=ButtonCounter]{color:inherit;}/*!sc*/ .gXPTqA{border-radius:6px;border:1px solid;border-color:transparent;font-family:inherit;font-weight:500;font-size:14px;cursor:pointer;-webkit-appearance:none;-moz-appearance:none;appearance:none;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;-webkit-text-decoration:none;text-decoration:none;text-align:center;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-align-items:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:justify;-webkit-justify-content:space-between;-ms-flex-pack:justify;justify-content:space-between;height:32px;padding:0 12px;gap:8px;min-width:-webkit-max-content;min-width:-moz-max-content;min-width:max-content;-webkit-transition:80ms cubic-bezier(0.65,0,0.35,1);transition:80ms cubic-bezier(0.65,0,0.35,1);-webkit-transition-property:color,fill,background-color,border-color;transition-property:color,fill,background-color,border-color;color:var(--button-invisible-fgColor-rest,var(--button-default-fgColor-rest,var(--color-btn-text,#24292f)));background-color:transparent;box-shadow:none;}/*!sc*/ .gXPTqA:focus:not(:disabled){box-shadow:none;outline:2px solid var(--fgColor-accent,var(--color-accent-fg,#0969da));outline-offset:-2px;}/*!sc*/ .gXPTqA:focus:not(:disabled):not(:focus-visible){outline:solid 1px transparent;}/*!sc*/ .gXPTqA:focus-visible:not(:disabled){box-shadow:none;outline:2px solid var(--fgColor-accent,var(--color-accent-fg,#0969da));outline-offset:-2px;}/*!sc*/ .gXPTqA[href]{display:-webkit-inline-box;display:-webkit-inline-flex;display:-ms-inline-flexbox;display:inline-flex;}/*!sc*/ .gXPTqA[href]:hover{-webkit-text-decoration:none;text-decoration:none;}/*!sc*/ .gXPTqA:hover{-webkit-transition-duration:80ms;transition-duration:80ms;}/*!sc*/ .gXPTqA:active{-webkit-transition:none;transition:none;}/*!sc*/ .gXPTqA[data-inactive]{cursor:auto;}/*!sc*/ .gXPTqA:disabled{cursor:not-allowed;box-shadow:none;color:var(--fgColor-disabled,var(--color-primer-fg-disabled,#8c959f));background-color:var(--button-invisible-bgColor-disabled,transparent);}/*!sc*/ .gXPTqA:disabled [data-component=ButtonCounter],.gXPTqA:disabled [data-component="leadingVisual"],.gXPTqA:disabled [data-component="trailingAction"]{color:inherit;}/*!sc*/ @media (forced-colors:active){.gXPTqA:focus{outline:solid 1px transparent;}}/*!sc*/ .gXPTqA [data-component=ButtonCounter]{font-size:12px;}/*!sc*/ .gXPTqA[data-component=IconButton]{display:inline-grid;padding:unset;place-content:center;width:32px;min-width:unset;}/*!sc*/ .gXPTqA[data-size="small"]{padding:0 8px;height:28px;gap:4px;font-size:12px;}/*!sc*/ .gXPTqA[data-size="small"] [data-component="text"]{line-height:1.6666667;}/*!sc*/ .gXPTqA[data-size="small"] [data-component=ButtonCounter]{font-size:12px;}/*!sc*/ .gXPTqA[data-size="small"] [data-component="buttonContent"] > :not(:last-child){margin-right:4px;}/*!sc*/ .gXPTqA[data-size="small"][data-component=IconButton]{width:28px;padding:unset;}/*!sc*/ .gXPTqA[data-size="large"]{padding:0 16px;height:40px;gap:8px;}/*!sc*/ .gXPTqA[data-size="large"] [data-component="buttonContent"] > :not(:last-child){margin-right:8px;}/*!sc*/ .gXPTqA[data-size="large"][data-component=IconButton]{width:40px;padding:unset;}/*!sc*/ .gXPTqA[data-block="block"]{width:100%;}/*!sc*/ .gXPTqA[data-label-wrap="true"]{min-width:-webkit-fit-content;min-width:-moz-fit-content;min-width:fit-content;height:unset;min-height:var(--control-medium-size,2rem);}/*!sc*/ .gXPTqA[data-label-wrap="true"] [data-component="buttonContent"]{-webkit-flex:1 1 auto;-ms-flex:1 1 auto;flex:1 1 auto;-webkit-align-self:stretch;-ms-flex-item-align:stretch;align-self:stretch;padding-block:calc(var(--control-medium-paddingBlock,0.375rem) - 2px);}/*!sc*/ .gXPTqA[data-label-wrap="true"] [data-component="text"]{white-space:unset;word-break:break-word;}/*!sc*/ .gXPTqA[data-label-wrap="true"][data-size="small"]{height:unset;min-height:var(--control-small-size,1.75rem);}/*!sc*/ .gXPTqA[data-label-wrap="true"][data-size="small"] [data-component="buttonContent"]{padding-block:calc(var(--control-small-paddingBlock,0.25rem) - 2px);}/*!sc*/ .gXPTqA[data-label-wrap="true"][data-size="large"]{height:unset;min-height:var(--control-large-size,2.5rem);padding-inline:var(--control-large-paddingInline-spacious,1rem);}/*!sc*/ .gXPTqA[data-label-wrap="true"][data-size="large"] [data-component="buttonContent"]{padding-block:calc(var(--control-large-paddingBlock,0.625rem) - 2px);}/*!sc*/ .gXPTqA[data-inactive]:not([disabled]){background-color:var(--button-inactive-bgColor,var(--button-inactive-bgColor-rest,var(--color-btn-inactive-bg,#eaeef2)));border-color:var(--button-inactive-bgColor,var(--button-inactive-bgColor-rest,var(--color-btn-inactive-bg,#eaeef2)));color:var(--button-inactive-fgColor,var(--button-inactive-fgColor-rest,var(--color-btn-inactive-text,#57606a)));}/*!sc*/ .gXPTqA[data-inactive]:not([disabled]):focus-visible{box-shadow:none;}/*!sc*/ .gXPTqA [data-component="leadingVisual"]{grid-area:leadingVisual;color:var(--button-invisible-iconColor-rest,var(--fgColor-muted,var(--color-fg-muted,#656d76)));}/*!sc*/ .gXPTqA [data-component="text"]{grid-area:text;line-height:1.4285714;white-space:nowrap;}/*!sc*/ .gXPTqA [data-component="trailingVisual"]{grid-area:trailingVisual;color:var(--button-invisible-iconColor-rest,var(--fgColor-muted,var(--color-fg-muted,#656d76)));}/*!sc*/ .gXPTqA [data-component="trailingAction"]{margin-right:-4px;color:var(--button-invisible-iconColor-rest,var(--fgColor-muted,var(--color-fg-muted,#656d76)));}/*!sc*/ .gXPTqA [data-component="buttonContent"]{-webkit-flex:1 0 auto;-ms-flex:1 0 auto;flex:1 0 auto;display:grid;grid-template-areas:"leadingVisual text trailingVisual";grid-template-columns:min-content minmax(0,auto) min-content;-webkit-align-items:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-align-content:center;-ms-flex-line-pack:center;align-content:center;}/*!sc*/ .gXPTqA [data-component="buttonContent"] > :not(:last-child){margin-right:8px;}/*!sc*/ .gXPTqA [data-component="loadingSpinner"]{grid-area:text;margin-right:0px !important;place-self:center;color:var(--fgColor-muted,var(--color-fg-muted,#656d76));}/*!sc*/ .gXPTqA [data-component="loadingSpinner"] + [data-component="text"]{visibility:hidden;}/*!sc*/ .gXPTqA:hover:not([disabled]){background-color:var(--control-transparent-bgColor-hover,var(--color-action-list-item-default-hover-bg,rgba(208,215,222,0.32)));}/*!sc*/ .gXPTqA:active:not([disabled]){background-color:var(--control-transparent-bgColor-active,var(--color-action-list-item-default-active-bg,rgba(208,215,222,0.48)));}/*!sc*/ .gXPTqA[aria-expanded=true]{background-color:var(--control-transparent-bgColor-selected,var(--color-action-list-item-default-selected-bg,rgba(208,215,222,0.24)));}/*!sc*/ .gXPTqA[data-component="IconButton"][data-no-visuals]{color:var(--button-invisible-iconColor-rest,var(--fgColor-muted,var(--color-fg-muted,#656d76)));}/*!sc*/ .gXPTqA[data-no-visuals]{color:var(--button-invisible-fgColor-rest,var(--button-default-fgColor-rest,var(--color-btn-text,#24292f)));}/*!sc*/ .gXPTqA:has([data-component="ButtonCounter"]){color:var(--button-invisible-fgColor-rest,var(--button-default-fgColor-rest,var(--color-btn-text,#24292f)));}/*!sc*/ .gXPTqA:disabled[data-no-visuals]{color:var(--fgColor-disabled,var(--color-primer-fg-disabled,#8c959f));}/*!sc*/ .gXPTqA:disabled[data-no-visuals] [data-component=ButtonCounter]{color:inherit;}/*!sc*/ .gXPTqA[data-size="medium"]{color:var(--fgColor-muted,var(--color-fg-subtle,#6e7781));padding-left:8px;padding-right:8px;}/*!sc*/ data-styled.g11[id="types__StyledButton-sc-ws60qy-0"]{content:"gVXRRg,loAzyw,cXsOlJ,gGdPyq,bmlmSe,dPmZyJ,gXPTqA,"}/*!sc*/ .hWlpPn{position:relative;display:inline-block;}/*!sc*/ .hWlpPn::after{position:absolute;z-index:1000000;display:none;padding:0.5em 0.75em;font:normal normal 11px/1.5 -apple-system,BlinkMacSystemFont,"Segoe UI","Noto Sans",Helvetica,Arial,sans-serif,"Apple Color Emoji","Segoe UI Emoji";-webkit-font-smoothing:subpixel-antialiased;color:var(--tooltip-fgColor,var(--fgColor-onEmphasis,var(--color-fg-on-emphasis,#ffffff)));text-align:center;-webkit-text-decoration:none;text-decoration:none;text-shadow:none;text-transform:none;-webkit-letter-spacing:normal;-moz-letter-spacing:normal;-ms-letter-spacing:normal;letter-spacing:normal;word-wrap:break-word;white-space:pre;pointer-events:none;content:attr(aria-label);background:var(--tooltip-bgColor,var(--bgColor-emphasis,var(--color-neutral-emphasis-plus,#24292f)));border-radius:6px;opacity:0;}/*!sc*/ @-webkit-keyframes tooltip-appear{from{opacity:0;}to{opacity:1;}}/*!sc*/ @keyframes tooltip-appear{from{opacity:0;}to{opacity:1;}}/*!sc*/ .hWlpPn:hover::after,.hWlpPn:active::after,.hWlpPn:focus::after,.hWlpPn:focus-within::after{display:inline-block;-webkit-text-decoration:none;text-decoration:none;-webkit-animation-name:tooltip-appear;animation-name:tooltip-appear;-webkit-animation-duration:0.1s;animation-duration:0.1s;-webkit-animation-fill-mode:forwards;animation-fill-mode:forwards;-webkit-animation-timing-function:ease-in;animation-timing-function:ease-in;-webkit-animation-delay:0s;animation-delay:0s;}/*!sc*/ .hWlpPn.tooltipped-no-delay:hover::after,.hWlpPn.tooltipped-no-delay:active::after,.hWlpPn.tooltipped-no-delay:focus::after,.hWlpPn.tooltipped-no-delay:focus-within::after{-webkit-animation-delay:0s;animation-delay:0s;}/*!sc*/ .hWlpPn.tooltipped-multiline:hover::after,.hWlpPn.tooltipped-multiline:active::after,.hWlpPn.tooltipped-multiline:focus::after,.hWlpPn.tooltipped-multiline:focus-within::after{display:table-cell;}/*!sc*/ .hWlpPn.tooltipped-s::after,.hWlpPn.tooltipped-se::after,.hWlpPn.tooltipped-sw::after{top:100%;right:50%;margin-top:6px;}/*!sc*/ .hWlpPn.tooltipped-se::after{right:auto;left:50%;margin-left:-16px;}/*!sc*/ .hWlpPn.tooltipped-sw::after{margin-right:-16px;}/*!sc*/ .hWlpPn.tooltipped-n::after,.hWlpPn.tooltipped-ne::after,.hWlpPn.tooltipped-nw::after{right:50%;bottom:100%;margin-bottom:6px;}/*!sc*/ .hWlpPn.tooltipped-ne::after{right:auto;left:50%;margin-left:-16px;}/*!sc*/ .hWlpPn.tooltipped-nw::after{margin-right:-16px;}/*!sc*/ .hWlpPn.tooltipped-s::after,.hWlpPn.tooltipped-n::after{-webkit-transform:translateX(50%);-ms-transform:translateX(50%);transform:translateX(50%);}/*!sc*/ .hWlpPn.tooltipped-w::after{right:100%;bottom:50%;margin-right:6px;-webkit-transform:translateY(50%);-ms-transform:translateY(50%);transform:translateY(50%);}/*!sc*/ .hWlpPn.tooltipped-e::after{bottom:50%;left:100%;margin-left:6px;-webkit-transform:translateY(50%);-ms-transform:translateY(50%);transform:translateY(50%);}/*!sc*/ .hWlpPn.tooltipped-multiline::after{width:-webkit-max-content;width:-moz-max-content;width:max-content;max-width:250px;word-wrap:break-word;white-space:pre-line;border-collapse:separate;}/*!sc*/ .hWlpPn.tooltipped-multiline.tooltipped-s::after,.hWlpPn.tooltipped-multiline.tooltipped-n::after{right:auto;left:50%;-webkit-transform:translateX(-50%);-ms-transform:translateX(-50%);transform:translateX(-50%);}/*!sc*/ .hWlpPn.tooltipped-multiline.tooltipped-w::after,.hWlpPn.tooltipped-multiline.tooltipped-e::after{right:100%;}/*!sc*/ .hWlpPn.tooltipped-align-right-2::after{right:0;margin-right:0;}/*!sc*/ .hWlpPn.tooltipped-align-left-2::after{left:0;margin-left:0;}/*!sc*/ data-styled.g14[id="Tooltip__TooltipBase-sc-17tf59c-0"]{content:"hWlpPn,"}/*!sc*/ .kbCLEG{border:0;font-size:inherit;font-family:inherit;background-color:transparent;-webkit-appearance:none;color:inherit;width:100%;}/*!sc*/ .kbCLEG:focus{outline:0;}/*!sc*/ data-styled.g15[id="UnstyledTextInput-sc-14ypya-0"]{content:"kbCLEG,"}/*!sc*/ .liVpTx{display:inline-block;overflow:hidden;text-overflow:ellipsis;vertical-align:top;white-space:nowrap;max-width:125px;}/*!sc*/ data-styled.g17[id="Truncate__StyledTruncate-sc-23o1d2-0"]{content:"liVpTx,"}/*!sc*/ .iBVwpg{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;padding-inline:var(--stack-padding-normal,16px);-webkit-box-pack:start;-webkit-justify-content:flex-start;-ms-flex-pack:start;justify-content:flex-start;-webkit-align-items:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;min-height:var(--control-xlarge-size,48px);box-shadow:inset 0px -1px var(--borderColor-muted,var(--borderColor-muted,var(--color-border-muted,hsla(210,18%,87%,1))));-webkit-box-flex:1;-webkit-flex-grow:1;-ms-flex-positive:1;flex-grow:1;border-bottom:none;max-width:100%;padding-left:8px;padding-right:8px;}/*!sc*/ data-styled.g92[id="UnderlineTabbedInterface__StyledUnderlineWrapper-sc-4ilrg0-0"]{content:"iBVwpg,"}/*!sc*/ .gJyWUl{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;list-style:none;white-space:nowrap;padding:0;margin:0;-webkit-align-items:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;gap:8px;position:relative;}/*!sc*/ data-styled.g93[id="UnderlineTabbedInterface__StyledUnderlineItemList-sc-4ilrg0-1"]{content:"gJyWUl,"}/*!sc*/ .beOdPj{-webkit-appearance:none;-moz-appearance:none;appearance:none;background-color:transparent;border:0;cursor:pointer;font:inherit;position:relative;display:-webkit-inline-box;display:-webkit-inline-flex;display:-ms-inline-flexbox;display:inline-flex;color:var(--fgColor-default,var(--color-fg-default,#1F2328));text-align:center;-webkit-text-decoration:none;text-decoration:none;line-height:var(--text-body-lineHeight-medium,1.4285);border-radius:var(--borderRadius-medium,6px);font-size:var(--text-body-size-medium,14px);padding-inline:var(--control-medium-paddingInline-condensed,8px);padding-block:var(--control-medium-paddingBlock,6px);-webkit-align-items:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;}/*!sc*/ @media (hover:hover){.beOdPj:hover{background-color:var(--bgColor-neutral-muted,var(--bgColor-neutral-muted,var(--color-neutral-subtle,rgba(234,238,242,0.5))));-webkit-transition:background 0.12s ease-out;transition:background 0.12s ease-out;-webkit-text-decoration:none;text-decoration:none;}}/*!sc*/ .beOdPj:focus:{outline:2px solid transparent;box-shadow:inset 0 0 0 2px var(--fgColor-accent,var(--fgColor-accent,var(--color-accent-fg,#0969da)));}/*!sc*/ .beOdPj:focus::not(:focus-visible){box-shadow:none;}/*!sc*/ .beOdPj:focus-visible{outline:2px solid transparent;box-shadow:inset 0 0 0 2px var(--fgColor-accent,var(--fgColor-accent,var(--color-accent-fg,#0969da)));}/*!sc*/ .beOdPj [data-content]::before{content:attr(data-content);display:block;height:0;font-weight:var(--base-text-weight-semibold,500);visibility:hidden;white-space:nowrap;}/*!sc*/ .beOdPj [data-component='icon']{color:var(--fgColor-muted,var(--fgColor-muted,var(--color-fg-muted,#656d76)));-webkit-align-items:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;display:-webkit-inline-box;display:-webkit-inline-flex;display:-ms-inline-flexbox;display:inline-flex;margin-inline-end:var(--control-medium-gap,8px);}/*!sc*/ .beOdPj [data-component='counter']{margin-inline-start:var(--control-medium-gap,8px);display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-align-items:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;}/*!sc*/ .beOdPj::after{position:absolute;right:50%;bottom:calc(50% - calc(var(--control-xlarge-size,48px) / 2 + 1px));width:100%;height:2px;content:'';background-color:transparent;border-radius:0;-webkit-transform:translate(50%,-50%);-ms-transform:translate(50%,-50%);transform:translate(50%,-50%);}/*!sc*/ .beOdPj[aria-current]:not([aria-current='false']) [data-component='text'],.beOdPj[aria-selected='true'] [data-component='text']{font-weight:var(--base-text-weight-semibold,500);}/*!sc*/ .beOdPj[aria-current]:not([aria-current='false'])::after,.beOdPj[aria-selected='true']::after{background-color:var(--underlineNav-borderColor-active,var(--color-primer-border-active,#fd8c73));}/*!sc*/ @media (forced-colors:active){.beOdPj[aria-current]:not([aria-current='false'])::after,.beOdPj[aria-selected='true']::after{background-color:LinkText;}}/*!sc*/ data-styled.g94[id="UnderlineTabbedInterface__StyledUnderlineItem-sc-4ilrg0-2"]{content:"beOdPj,"}/*!sc*/ </style> <!-- --> <!-- --> <div class="Box-sc-g0xbh4-0 iVEunk"><div class="Box-sc-g0xbh4-0 jzuOtQ"><div class="Box-sc-g0xbh4-0 bGojzy"></div></div><div class="Box-sc-g0xbh4-0 iNSVHo"><div class="Box-sc-g0xbh4-0 bVgnfw"><div class="Box-sc-g0xbh4-0 CEgMp"><button type="button" aria-haspopup="true" aria-expanded="false" tabindex="0" aria-label="patch-1 branch" data-testid="anchor-button" class="types__StyledButton-sc-ws60qy-0 gVXRRg overview-ref-selector width-full" data-loading="false" data-size="medium" aria-describedby="branch-picker-repos-header-ref-selector-loading-announcement" id="branch-picker-repos-header-ref-selector"><span data-component="buttonContent" class="Box-sc-g0xbh4-0 gUkoLg"><span data-component="text"><div class="Box-sc-g0xbh4-0 bZBlpz"><div class="Box-sc-g0xbh4-0 lhTYNA"><svg aria-hidden="true" focusable="false" class="octicon octicon-git-branch" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" style="display:inline-block;user-select:none;vertical-align:text-bottom;overflow:visible"><path d="M9.5 3.25a2.25 2.25 0 1 1 3 2.122V6A2.5 2.5 0 0 1 10 8.5H6a1 1 0 0 0-1 1v1.128a2.251 2.251 0 1 1-1.5 0V5.372a2.25 2.25 0 1 1 1.5 0v1.836A2.493 2.493 0 0 1 6 7h4a1 1 0 0 0 1-1v-.628A2.25 2.25 0 0 1 9.5 3.25Zm-6 0a.75.75 0 1 0 1.5 0 .75.75 0 0 0-1.5 0Zm8.25-.75a.75.75 0 1 0 0 1.5.75.75 0 0 0 0-1.5ZM4.25 12a.75.75 0 1 0 0 1.5.75.75 0 0 0 0-1.5Z"></path></svg></div><div class="Box-sc-g0xbh4-0 ffLUq ref-selector-button-text-container"><span class="Text__StyledText-sc-17v1xeu-0 eMMFM"> <!-- -->patch-1</span></div></div></span><span data-component="trailingVisual" class="Box-sc-g0xbh4-0 hzSPyu"><svg aria-hidden="true" focusable="false" class="octicon octicon-triangle-down" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" style="display:inline-block;user-select:none;vertical-align:text-bottom;overflow:visible"><path d="m4.427 7.427 3.396 3.396a.25.25 0 0 0 .354 0l3.396-3.396A.25.25 0 0 0 11.396 7H4.604a.25.25 0 0 0-.177.427Z"></path></svg></span></span></button><button hidden="" data-hotkey-scope="read-only-cursor-text-area"></button></div><div class="Box-sc-g0xbh4-0 fLXEGX"><a style="--button-color:fg.muted" type="button" href="/adelnobel/awesome-scalability/branches" class="types__StyledButton-sc-ws60qy-0 loAzyw" data-loading="false" data-size="medium" aria-describedby=":Rclab:-loading-announcement"><span data-component="buttonContent" class="Box-sc-g0xbh4-0 gUkoLg"><span data-component="leadingVisual" class="Box-sc-g0xbh4-0 hzSPyu"><svg aria-hidden="true" focusable="false" class="octicon octicon-git-branch" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" style="display:inline-block;user-select:none;vertical-align:text-bottom;overflow:visible"><path d="M9.5 3.25a2.25 2.25 0 1 1 3 2.122V6A2.5 2.5 0 0 1 10 8.5H6a1 1 0 0 0-1 1v1.128a2.251 2.251 0 1 1-1.5 0V5.372a2.25 2.25 0 1 1 1.5 0v1.836A2.493 2.493 0 0 1 6 7h4a1 1 0 0 0 1-1v-.628A2.25 2.25 0 0 1 9.5 3.25Zm-6 0a.75.75 0 1 0 1.5 0 .75.75 0 0 0-1.5 0Zm8.25-.75a.75.75 0 1 0 0 1.5.75.75 0 0 0 0-1.5ZM4.25 12a.75.75 0 1 0 0 1.5.75.75 0 0 0 0-1.5Z"></path></svg></span><span data-component="text">Branches</span></span></a><a style="--button-color:fg.muted" type="button" href="/adelnobel/awesome-scalability/tags" class="types__StyledButton-sc-ws60qy-0 loAzyw" data-loading="false" data-size="medium" aria-describedby=":Rklab:-loading-announcement"><span data-component="buttonContent" class="Box-sc-g0xbh4-0 gUkoLg"><span data-component="leadingVisual" class="Box-sc-g0xbh4-0 hzSPyu"><svg aria-hidden="true" focusable="false" class="octicon octicon-tag" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" style="display:inline-block;user-select:none;vertical-align:text-bottom;overflow:visible"><path d="M1 7.775V2.75C1 1.784 1.784 1 2.75 1h5.025c.464 0 .91.184 1.238.513l6.25 6.25a1.75 1.75 0 0 1 0 2.474l-5.026 5.026a1.75 1.75 0 0 1-2.474 0l-6.25-6.25A1.752 1.752 0 0 1 1 7.775Zm1.5 0c0 .066.026.13.073.177l6.25 6.25a.25.25 0 0 0 .354 0l5.025-5.025a.25.25 0 0 0 0-.354l-6.25-6.25a.25.25 0 0 0-.177-.073H2.75a.25.25 0 0 0-.25.25ZM6 5a1 1 0 1 1 0 2 1 1 0 0 1 0-2Z"></path></svg></span><span data-component="text">Tags</span></span></a></div><div class="Box-sc-g0xbh4-0 dqfxud"><a style="--button-color:fg.muted" type="button" aria-label="Go to Branches page" href="/adelnobel/awesome-scalability/branches" class="types__StyledButton-sc-ws60qy-0 cXsOlJ" data-loading="false" data-no-visuals="true" data-size="medium" aria-describedby=":Relab:-loading-announcement"><svg aria-hidden="true" focusable="false" class="octicon octicon-git-branch" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" style="display:inline-block;user-select:none;vertical-align:text-bottom;overflow:visible"><path d="M9.5 3.25a2.25 2.25 0 1 1 3 2.122V6A2.5 2.5 0 0 1 10 8.5H6a1 1 0 0 0-1 1v1.128a2.251 2.251 0 1 1-1.5 0V5.372a2.25 2.25 0 1 1 1.5 0v1.836A2.493 2.493 0 0 1 6 7h4a1 1 0 0 0 1-1v-.628A2.25 2.25 0 0 1 9.5 3.25Zm-6 0a.75.75 0 1 0 1.5 0 .75.75 0 0 0-1.5 0Zm8.25-.75a.75.75 0 1 0 0 1.5.75.75 0 0 0 0-1.5ZM4.25 12a.75.75 0 1 0 0 1.5.75.75 0 0 0 0-1.5Z"></path></svg></a><a style="--button-color:fg.muted" type="button" aria-label="Go to Tags page" href="/adelnobel/awesome-scalability/tags" class="types__StyledButton-sc-ws60qy-0 cXsOlJ" data-loading="false" data-no-visuals="true" data-size="medium" aria-describedby=":Rmlab:-loading-announcement"><svg aria-hidden="true" focusable="false" class="octicon octicon-tag" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" style="display:inline-block;user-select:none;vertical-align:text-bottom;overflow:visible"><path d="M1 7.775V2.75C1 1.784 1.784 1 2.75 1h5.025c.464 0 .91.184 1.238.513l6.25 6.25a1.75 1.75 0 0 1 0 2.474l-5.026 5.026a1.75 1.75 0 0 1-2.474 0l-6.25-6.25A1.752 1.752 0 0 1 1 7.775Zm1.5 0c0 .066.026.13.073.177l6.25 6.25a.25.25 0 0 0 .354 0l5.025-5.025a.25.25 0 0 0 0-.354l-6.25-6.25a.25.25 0 0 0-.177-.073H2.75a.25.25 0 0 0-.25.25ZM6 5a1 1 0 1 1 0 2 1 1 0 0 1 0-2Z"></path></svg></a></div></div><div class="Box-sc-g0xbh4-0 jxTzTd"><div class="Box-sc-g0xbh4-0 gqqBXN"><div class="Box-sc-g0xbh4-0 dzXgxt"><!--$--><div class="Box-sc-g0xbh4-0 iWFGlI"><span class="TextInputWrapper__TextInputBaseWrapper-sc-1mqhpbi-0 TextInputWrapper-sc-1mqhpbi-1 gwqFqs decvaq TextInput-wrapper" aria-busy="false"><span class="TextInput-icon" id=":R2j5ab:" aria-hidden="true"><svg aria-hidden="true" focusable="false" class="octicon octicon-search" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" style="display:inline-block;user-select:none;vertical-align:text-bottom;overflow:visible"><path d="M10.68 11.74a6 6 0 0 1-7.922-8.982 6 6 0 0 1 8.982 7.922l3.04 3.04a.749.749 0 0 1-.326 1.275.749.749 0 0 1-.734-.215ZM11.5 7a4.499 4.499 0 1 0-8.997 0A4.499 4.499 0 0 0 11.5 7Z"></path></svg></span><input type="text" aria-label="Go to file" role="combobox" aria-controls="file-results-list" aria-expanded="false" aria-haspopup="dialog" autoCorrect="off" spellcheck="false" placeholder="Go to file" aria-describedby=":R2j5ab: :R2j5abH1:" data-component="input" class="UnstyledTextInput-sc-14ypya-0 kbCLEG" value=""/><span class="TextInput-icon" id=":R2j5abH1:" aria-hidden="true"></span></span></div><!--/$--></div><div class="Box-sc-g0xbh4-0 YUPas"><button type="button" class="types__StyledButton-sc-ws60qy-0 gGdPyq" data-loading="false" data-no-visuals="true" data-size="medium" aria-describedby=":Rr5ab:-loading-announcement"><span data-component="buttonContent" class="Box-sc-g0xbh4-0 gUkoLg"><span data-component="text">Go to file</span></span></button></div><div class="react-directory-add-file-icon"></div><div class="react-directory-remove-file-icon"></div></div><button type="button" aria-haspopup="true" aria-expanded="false" tabindex="0" class="types__StyledButton-sc-ws60qy-0 bmlmSe" data-loading="false" data-size="medium" aria-describedby=":R55ab:-loading-announcement" id=":R55ab:"><span data-component="buttonContent" class="Box-sc-g0xbh4-0 gUkoLg"><span data-component="leadingVisual" class="Box-sc-g0xbh4-0 hzSPyu"><svg aria-hidden="true" focusable="false" class="hide-sm" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" style="display:inline-block;user-select:none;vertical-align:text-bottom;overflow:visible"><path d="m11.28 3.22 4.25 4.25a.75.75 0 0 1 0 1.06l-4.25 4.25a.749.749 0 0 1-1.275-.326.749.749 0 0 1 .215-.734L13.94 8l-3.72-3.72a.749.749 0 0 1 .326-1.275.749.749 0 0 1 .734.215Zm-6.56 0a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042L2.06 8l3.72 3.72a.749.749 0 0 1-.326 1.275.749.749 0 0 1-.734-.215L.47 8.53a.75.75 0 0 1 0-1.06Z"></path></svg></span><span data-component="text">Code</span><span data-component="trailingVisual" class="Box-sc-g0xbh4-0 hzSPyu"><svg aria-hidden="true" focusable="false" class="octicon octicon-triangle-down" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" style="display:inline-block;user-select:none;vertical-align:text-bottom;overflow:visible"><path d="m4.427 7.427 3.396 3.396a.25.25 0 0 0 .354 0l3.396-3.396A.25.25 0 0 0 11.396 7H4.604a.25.25 0 0 0-.177.427Z"></path></svg></span></span></button><div class="Box-sc-g0xbh4-0 izFOf"><button data-component="IconButton" type="button" aria-label="Open more actions menu" aria-haspopup="true" aria-expanded="false" tabindex="0" class="types__StyledButton-sc-ws60qy-0 gGdPyq prc-Button-IconButton-szpyj" data-loading="false" data-no-visuals="true" data-size="medium" aria-describedby=":R75ab:-loading-announcement" id=":R75ab:"><svg aria-hidden="true" focusable="false" class="octicon octicon-kebab-horizontal" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" style="display:inline-block;user-select:none;vertical-align:text-bottom;overflow:visible"><path d="M8 9a1.5 1.5 0 1 0 0-3 1.5 1.5 0 0 0 0 3ZM1.5 9a1.5 1.5 0 1 0 0-3 1.5 1.5 0 0 0 0 3Zm13 0a1.5 1.5 0 1 0 0-3 1.5 1.5 0 0 0 0 3Z"></path></svg></button></div></div></div><div data-testid="branch-info-bar" aria-live="polite" class="Box-sc-g0xbh4-0 cjVDqW"><div style="width:40%" class="Skeleton Skeleton--text"> </div><div style="width:30%" class="Skeleton Skeleton--text"> </div></div><div class="Box-sc-g0xbh4-0 vIPPs"><div data-hpc="true"><button hidden="" data-testid="focus-next-element-button" data-hotkey="j"></button><button hidden="" data-testid="focus-previous-element-button" data-hotkey="k"></button><h2 class="sr-only prc-Heading-Heading-6CmGO" data-testid="screen-reader-heading" id="folders-and-files">Folders and files</h2><table aria-labelledby="folders-and-files" class="Box-sc-g0xbh4-0 fdROMU"><thead class="Box-sc-g0xbh4-0 jGKpsv"><tr class="Box-sc-g0xbh4-0 jdgHnn"><th colSpan="2" class="Box-sc-g0xbh4-0 bQivRW"><span class="text-bold">Name</span></th><th colSpan="1" class="Box-sc-g0xbh4-0 ldkMIO"><span class="text-bold">Name</span></th><th class="hide-sm"><div title="Last commit message" class="Truncate__StyledTruncate-sc-23o1d2-0 liVpTx width-fit"><span class="text-bold">Last commit message</span></div></th><th colSpan="1" class="Box-sc-g0xbh4-0 jMbWeI"><div title="Last commit date" class="Truncate__StyledTruncate-sc-23o1d2-0 liVpTx width-fit"><span class="text-bold">Last commit date</span></div></th></tr></thead><tbody><tr class="Box-sc-g0xbh4-0 gpqjiB"><td colSpan="3" class="bgColor-muted p-1 rounded-top-2"><div class="Box-sc-g0xbh4-0 dzCJzi"><h2 class="sr-only prc-Heading-Heading-6CmGO" data-testid="screen-reader-heading">Latest commit</h2><div style="width:120px" class="Skeleton Skeleton--text" data-testid="loading"> </div><div class="d-flex flex-shrink-0 gap-2"><div data-testid="latest-commit-details" class="d-none d-sm-flex flex-items-center"></div><div class="d-flex gap-2"><h2 class="sr-only prc-Heading-Heading-6CmGO" data-testid="screen-reader-heading">History</h2><a href="/adelnobel/awesome-scalability/commits/patch-1/" class="types__StyledButton-sc-ws60qy-0 dPmZyJ d-none d-lg-flex LinkButton-module__code-view-link-button--xvCGA flex-items-center fgColor-default" data-loading="false" data-size="small" aria-describedby=":Raqj8pab:-loading-announcement"><span data-component="buttonContent" class="Box-sc-g0xbh4-0 gUkoLg"><span data-component="leadingVisual" class="Box-sc-g0xbh4-0 hzSPyu"><svg aria-hidden="true" focusable="false" class="octicon octicon-history" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" style="display:inline-block;user-select:none;vertical-align:text-bottom;overflow:visible"><path d="m.427 1.927 1.215 1.215a8.002 8.002 0 1 1-1.6 5.685.75.75 0 1 1 1.493-.154 6.5 6.5 0 1 0 1.18-4.458l1.358 1.358A.25.25 0 0 1 3.896 6H.25A.25.25 0 0 1 0 5.75V2.104a.25.25 0 0 1 .427-.177ZM7.75 4a.75.75 0 0 1 .75.75v2.992l2.028.812a.75.75 0 0 1-.557 1.392l-2.5-1A.751.751 0 0 1 7 8.25v-3.5A.75.75 0 0 1 7.75 4Z"></path></svg></span><span data-component="text"><span class="fgColor-default">1,112 Commits</span></span></span></a><div class="d-sm-none"></div><div class="d-flex d-lg-none"><span role="tooltip" aria-label="1,112 Commits" id="history-icon-button-tooltip" class="Tooltip__TooltipBase-sc-17tf59c-0 hWlpPn tooltipped-n"><a href="/adelnobel/awesome-scalability/commits/patch-1/" class="types__StyledButton-sc-ws60qy-0 dPmZyJ LinkButton-module__code-view-link-button--xvCGA flex-items-center fgColor-default" data-loading="false" data-size="small" aria-describedby=":R1iqj8pab:-loading-announcement history-icon-button-tooltip"><span data-component="buttonContent" class="Box-sc-g0xbh4-0 gUkoLg"><span data-component="leadingVisual" class="Box-sc-g0xbh4-0 hzSPyu"><svg aria-hidden="true" focusable="false" class="octicon octicon-history" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" style="display:inline-block;user-select:none;vertical-align:text-bottom;overflow:visible"><path d="m.427 1.927 1.215 1.215a8.002 8.002 0 1 1-1.6 5.685.75.75 0 1 1 1.493-.154 6.5 6.5 0 1 0 1.18-4.458l1.358 1.358A.25.25 0 0 1 3.896 6H.25A.25.25 0 0 1 0 5.75V2.104a.25.25 0 0 1 .427-.177ZM7.75 4a.75.75 0 0 1 .75.75v2.992l2.028.812a.75.75 0 0 1-.557 1.392l-2.5-1A.751.751 0 0 1 7 8.25v-3.5A.75.75 0 0 1 7.75 4Z"></path></svg></span></span></a></span></div></div></div></div></td></tr><tr class="react-directory-row undefined" id="folder-row-0"><td class="react-directory-row-name-cell-small-screen" colSpan="2"><div class="react-directory-filename-column"><svg aria-hidden="true" focusable="false" class="icon-directory" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" style="display:inline-block;user-select:none;vertical-align:text-bottom;overflow:visible"><path d="M1.75 1A1.75 1.75 0 0 0 0 2.75v10.5C0 14.216.784 15 1.75 15h12.5A1.75 1.75 0 0 0 16 13.25v-8.5A1.75 1.75 0 0 0 14.25 3H7.5a.25.25 0 0 1-.2-.1l-.9-1.2C6.07 1.26 5.55 1 5 1H1.75Z"></path></svg><div class="overflow-hidden"><div class="react-directory-filename-cell"><div class="react-directory-truncate"><a title=".github" aria-label=".github, (Directory)" class="Link--primary" href="/adelnobel/awesome-scalability/tree/patch-1/.github">.github</a></div></div></div></div></td><td class="react-directory-row-name-cell-large-screen" colSpan="1"><div class="react-directory-filename-column"><svg aria-hidden="true" focusable="false" class="icon-directory" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" style="display:inline-block;user-select:none;vertical-align:text-bottom;overflow:visible"><path d="M1.75 1A1.75 1.75 0 0 0 0 2.75v10.5C0 14.216.784 15 1.75 15h12.5A1.75 1.75 0 0 0 16 13.25v-8.5A1.75 1.75 0 0 0 14.25 3H7.5a.25.25 0 0 1-.2-.1l-.9-1.2C6.07 1.26 5.55 1 5 1H1.75Z"></path></svg><div class="overflow-hidden"><div class="react-directory-filename-cell"><div class="react-directory-truncate"><a title=".github" aria-label=".github, (Directory)" class="Link--primary" href="/adelnobel/awesome-scalability/tree/patch-1/.github">.github</a></div></div></div></div></td><td class="react-directory-row-commit-cell"><div class="Skeleton Skeleton--text"> </div></td><td><div class="Skeleton Skeleton--text"> </div></td></tr><tr class="react-directory-row undefined" id="folder-row-1"><td class="react-directory-row-name-cell-small-screen" colSpan="2"><div class="react-directory-filename-column"><svg aria-hidden="true" focusable="false" class="color-fg-muted" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" style="display:inline-block;user-select:none;vertical-align:text-bottom;overflow:visible"><path d="M2 1.75C2 .784 2.784 0 3.75 0h6.586c.464 0 .909.184 1.237.513l2.914 2.914c.329.328.513.773.513 1.237v9.586A1.75 1.75 0 0 1 13.25 16h-9.5A1.75 1.75 0 0 1 2 14.25Zm1.75-.25a.25.25 0 0 0-.25.25v12.5c0 .138.112.25.25.25h9.5a.25.25 0 0 0 .25-.25V6h-2.75A1.75 1.75 0 0 1 9 4.25V1.5Zm6.75.062V4.25c0 .138.112.25.25.25h2.688l-.011-.013-2.914-2.914-.013-.011Z"></path></svg><div class="overflow-hidden"><div class="react-directory-filename-cell"><div class="react-directory-truncate"><a title="CODE_OF_CONDUCT.md" aria-label="CODE_OF_CONDUCT.md, (File)" class="Link--primary" href="/adelnobel/awesome-scalability/blob/patch-1/CODE_OF_CONDUCT.md">CODE_OF_CONDUCT.md</a></div></div></div></div></td><td class="react-directory-row-name-cell-large-screen" colSpan="1"><div class="react-directory-filename-column"><svg aria-hidden="true" focusable="false" class="color-fg-muted" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" style="display:inline-block;user-select:none;vertical-align:text-bottom;overflow:visible"><path d="M2 1.75C2 .784 2.784 0 3.75 0h6.586c.464 0 .909.184 1.237.513l2.914 2.914c.329.328.513.773.513 1.237v9.586A1.75 1.75 0 0 1 13.25 16h-9.5A1.75 1.75 0 0 1 2 14.25Zm1.75-.25a.25.25 0 0 0-.25.25v12.5c0 .138.112.25.25.25h9.5a.25.25 0 0 0 .25-.25V6h-2.75A1.75 1.75 0 0 1 9 4.25V1.5Zm6.75.062V4.25c0 .138.112.25.25.25h2.688l-.011-.013-2.914-2.914-.013-.011Z"></path></svg><div class="overflow-hidden"><div class="react-directory-filename-cell"><div class="react-directory-truncate"><a title="CODE_OF_CONDUCT.md" aria-label="CODE_OF_CONDUCT.md, (File)" class="Link--primary" href="/adelnobel/awesome-scalability/blob/patch-1/CODE_OF_CONDUCT.md">CODE_OF_CONDUCT.md</a></div></div></div></div></td><td class="react-directory-row-commit-cell"><div class="Skeleton Skeleton--text"> </div></td><td><div class="Skeleton Skeleton--text"> </div></td></tr><tr class="react-directory-row undefined" id="folder-row-2"><td class="react-directory-row-name-cell-small-screen" colSpan="2"><div class="react-directory-filename-column"><svg aria-hidden="true" focusable="false" class="color-fg-muted" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" style="display:inline-block;user-select:none;vertical-align:text-bottom;overflow:visible"><path d="M2 1.75C2 .784 2.784 0 3.75 0h6.586c.464 0 .909.184 1.237.513l2.914 2.914c.329.328.513.773.513 1.237v9.586A1.75 1.75 0 0 1 13.25 16h-9.5A1.75 1.75 0 0 1 2 14.25Zm1.75-.25a.25.25 0 0 0-.25.25v12.5c0 .138.112.25.25.25h9.5a.25.25 0 0 0 .25-.25V6h-2.75A1.75 1.75 0 0 1 9 4.25V1.5Zm6.75.062V4.25c0 .138.112.25.25.25h2.688l-.011-.013-2.914-2.914-.013-.011Z"></path></svg><div class="overflow-hidden"><div class="react-directory-filename-cell"><div class="react-directory-truncate"><a title="CONTRIBUTING.md" aria-label="CONTRIBUTING.md, (File)" class="Link--primary" href="/adelnobel/awesome-scalability/blob/patch-1/CONTRIBUTING.md">CONTRIBUTING.md</a></div></div></div></div></td><td class="react-directory-row-name-cell-large-screen" colSpan="1"><div class="react-directory-filename-column"><svg aria-hidden="true" focusable="false" class="color-fg-muted" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" style="display:inline-block;user-select:none;vertical-align:text-bottom;overflow:visible"><path d="M2 1.75C2 .784 2.784 0 3.75 0h6.586c.464 0 .909.184 1.237.513l2.914 2.914c.329.328.513.773.513 1.237v9.586A1.75 1.75 0 0 1 13.25 16h-9.5A1.75 1.75 0 0 1 2 14.25Zm1.75-.25a.25.25 0 0 0-.25.25v12.5c0 .138.112.25.25.25h9.5a.25.25 0 0 0 .25-.25V6h-2.75A1.75 1.75 0 0 1 9 4.25V1.5Zm6.75.062V4.25c0 .138.112.25.25.25h2.688l-.011-.013-2.914-2.914-.013-.011Z"></path></svg><div class="overflow-hidden"><div class="react-directory-filename-cell"><div class="react-directory-truncate"><a title="CONTRIBUTING.md" aria-label="CONTRIBUTING.md, (File)" class="Link--primary" href="/adelnobel/awesome-scalability/blob/patch-1/CONTRIBUTING.md">CONTRIBUTING.md</a></div></div></div></div></td><td class="react-directory-row-commit-cell"><div class="Skeleton Skeleton--text"> </div></td><td><div class="Skeleton Skeleton--text"> </div></td></tr><tr class="react-directory-row undefined" id="folder-row-3"><td class="react-directory-row-name-cell-small-screen" colSpan="2"><div class="react-directory-filename-column"><svg aria-hidden="true" focusable="false" class="color-fg-muted" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" style="display:inline-block;user-select:none;vertical-align:text-bottom;overflow:visible"><path d="M2 1.75C2 .784 2.784 0 3.75 0h6.586c.464 0 .909.184 1.237.513l2.914 2.914c.329.328.513.773.513 1.237v9.586A1.75 1.75 0 0 1 13.25 16h-9.5A1.75 1.75 0 0 1 2 14.25Zm1.75-.25a.25.25 0 0 0-.25.25v12.5c0 .138.112.25.25.25h9.5a.25.25 0 0 0 .25-.25V6h-2.75A1.75 1.75 0 0 1 9 4.25V1.5Zm6.75.062V4.25c0 .138.112.25.25.25h2.688l-.011-.013-2.914-2.914-.013-.011Z"></path></svg><div class="overflow-hidden"><div class="react-directory-filename-cell"><div class="react-directory-truncate"><a title="LICENSE" aria-label="LICENSE, (File)" class="Link--primary" href="/adelnobel/awesome-scalability/blob/patch-1/LICENSE">LICENSE</a></div></div></div></div></td><td class="react-directory-row-name-cell-large-screen" colSpan="1"><div class="react-directory-filename-column"><svg aria-hidden="true" focusable="false" class="color-fg-muted" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" style="display:inline-block;user-select:none;vertical-align:text-bottom;overflow:visible"><path d="M2 1.75C2 .784 2.784 0 3.75 0h6.586c.464 0 .909.184 1.237.513l2.914 2.914c.329.328.513.773.513 1.237v9.586A1.75 1.75 0 0 1 13.25 16h-9.5A1.75 1.75 0 0 1 2 14.25Zm1.75-.25a.25.25 0 0 0-.25.25v12.5c0 .138.112.25.25.25h9.5a.25.25 0 0 0 .25-.25V6h-2.75A1.75 1.75 0 0 1 9 4.25V1.5Zm6.75.062V4.25c0 .138.112.25.25.25h2.688l-.011-.013-2.914-2.914-.013-.011Z"></path></svg><div class="overflow-hidden"><div class="react-directory-filename-cell"><div class="react-directory-truncate"><a title="LICENSE" aria-label="LICENSE, (File)" class="Link--primary" href="/adelnobel/awesome-scalability/blob/patch-1/LICENSE">LICENSE</a></div></div></div></div></td><td class="react-directory-row-commit-cell"><div class="Skeleton Skeleton--text"> </div></td><td><div class="Skeleton Skeleton--text"> </div></td></tr><tr class="react-directory-row undefined" id="folder-row-4"><td class="react-directory-row-name-cell-small-screen" colSpan="2"><div class="react-directory-filename-column"><svg aria-hidden="true" focusable="false" class="color-fg-muted" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" style="display:inline-block;user-select:none;vertical-align:text-bottom;overflow:visible"><path d="M2 1.75C2 .784 2.784 0 3.75 0h6.586c.464 0 .909.184 1.237.513l2.914 2.914c.329.328.513.773.513 1.237v9.586A1.75 1.75 0 0 1 13.25 16h-9.5A1.75 1.75 0 0 1 2 14.25Zm1.75-.25a.25.25 0 0 0-.25.25v12.5c0 .138.112.25.25.25h9.5a.25.25 0 0 0 .25-.25V6h-2.75A1.75 1.75 0 0 1 9 4.25V1.5Zm6.75.062V4.25c0 .138.112.25.25.25h2.688l-.011-.013-2.914-2.914-.013-.011Z"></path></svg><div class="overflow-hidden"><div class="react-directory-filename-cell"><div class="react-directory-truncate"><a title="README.md" aria-label="README.md, (File)" class="Link--primary" href="/adelnobel/awesome-scalability/blob/patch-1/README.md">README.md</a></div></div></div></div></td><td class="react-directory-row-name-cell-large-screen" colSpan="1"><div class="react-directory-filename-column"><svg aria-hidden="true" focusable="false" class="color-fg-muted" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" style="display:inline-block;user-select:none;vertical-align:text-bottom;overflow:visible"><path d="M2 1.75C2 .784 2.784 0 3.75 0h6.586c.464 0 .909.184 1.237.513l2.914 2.914c.329.328.513.773.513 1.237v9.586A1.75 1.75 0 0 1 13.25 16h-9.5A1.75 1.75 0 0 1 2 14.25Zm1.75-.25a.25.25 0 0 0-.25.25v12.5c0 .138.112.25.25.25h9.5a.25.25 0 0 0 .25-.25V6h-2.75A1.75 1.75 0 0 1 9 4.25V1.5Zm6.75.062V4.25c0 .138.112.25.25.25h2.688l-.011-.013-2.914-2.914-.013-.011Z"></path></svg><div class="overflow-hidden"><div class="react-directory-filename-cell"><div class="react-directory-truncate"><a title="README.md" aria-label="README.md, (File)" class="Link--primary" href="/adelnobel/awesome-scalability/blob/patch-1/README.md">README.md</a></div></div></div></div></td><td class="react-directory-row-commit-cell"><div class="Skeleton Skeleton--text"> </div></td><td><div class="Skeleton Skeleton--text"> </div></td></tr><tr class="react-directory-row undefined" id="folder-row-5"><td class="react-directory-row-name-cell-small-screen" colSpan="2"><div class="react-directory-filename-column"><svg aria-hidden="true" focusable="false" class="color-fg-muted" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" style="display:inline-block;user-select:none;vertical-align:text-bottom;overflow:visible"><path d="M2 1.75C2 .784 2.784 0 3.75 0h6.586c.464 0 .909.184 1.237.513l2.914 2.914c.329.328.513.773.513 1.237v9.586A1.75 1.75 0 0 1 13.25 16h-9.5A1.75 1.75 0 0 1 2 14.25Zm1.75-.25a.25.25 0 0 0-.25.25v12.5c0 .138.112.25.25.25h9.5a.25.25 0 0 0 .25-.25V6h-2.75A1.75 1.75 0 0 1 9 4.25V1.5Zm6.75.062V4.25c0 .138.112.25.25.25h2.688l-.011-.013-2.914-2.914-.013-.011Z"></path></svg><div class="overflow-hidden"><div class="react-directory-filename-cell"><div class="react-directory-truncate"><a title="SECURITY.md" aria-label="SECURITY.md, (File)" class="Link--primary" href="/adelnobel/awesome-scalability/blob/patch-1/SECURITY.md">SECURITY.md</a></div></div></div></div></td><td class="react-directory-row-name-cell-large-screen" colSpan="1"><div class="react-directory-filename-column"><svg aria-hidden="true" focusable="false" class="color-fg-muted" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" style="display:inline-block;user-select:none;vertical-align:text-bottom;overflow:visible"><path d="M2 1.75C2 .784 2.784 0 3.75 0h6.586c.464 0 .909.184 1.237.513l2.914 2.914c.329.328.513.773.513 1.237v9.586A1.75 1.75 0 0 1 13.25 16h-9.5A1.75 1.75 0 0 1 2 14.25Zm1.75-.25a.25.25 0 0 0-.25.25v12.5c0 .138.112.25.25.25h9.5a.25.25 0 0 0 .25-.25V6h-2.75A1.75 1.75 0 0 1 9 4.25V1.5Zm6.75.062V4.25c0 .138.112.25.25.25h2.688l-.011-.013-2.914-2.914-.013-.011Z"></path></svg><div class="overflow-hidden"><div class="react-directory-filename-cell"><div class="react-directory-truncate"><a title="SECURITY.md" aria-label="SECURITY.md, (File)" class="Link--primary" href="/adelnobel/awesome-scalability/blob/patch-1/SECURITY.md">SECURITY.md</a></div></div></div></div></td><td class="react-directory-row-commit-cell"><div class="Skeleton Skeleton--text"> </div></td><td><div class="Skeleton Skeleton--text"> </div></td></tr><tr class="react-directory-row undefined" id="folder-row-6"><td class="react-directory-row-name-cell-small-screen" colSpan="2"><div class="react-directory-filename-column"><svg aria-hidden="true" focusable="false" class="color-fg-muted" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" style="display:inline-block;user-select:none;vertical-align:text-bottom;overflow:visible"><path d="M2 1.75C2 .784 2.784 0 3.75 0h6.586c.464 0 .909.184 1.237.513l2.914 2.914c.329.328.513.773.513 1.237v9.586A1.75 1.75 0 0 1 13.25 16h-9.5A1.75 1.75 0 0 1 2 14.25Zm1.75-.25a.25.25 0 0 0-.25.25v12.5c0 .138.112.25.25.25h9.5a.25.25 0 0 0 .25-.25V6h-2.75A1.75 1.75 0 0 1 9 4.25V1.5Zm6.75.062V4.25c0 .138.112.25.25.25h2.688l-.011-.013-2.914-2.914-.013-.011Z"></path></svg><div class="overflow-hidden"><div class="react-directory-filename-cell"><div class="react-directory-truncate"><a title="_config.yml" aria-label="_config.yml, (File)" class="Link--primary" href="/adelnobel/awesome-scalability/blob/patch-1/_config.yml">_config.yml</a></div></div></div></div></td><td class="react-directory-row-name-cell-large-screen" colSpan="1"><div class="react-directory-filename-column"><svg aria-hidden="true" focusable="false" class="color-fg-muted" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" style="display:inline-block;user-select:none;vertical-align:text-bottom;overflow:visible"><path d="M2 1.75C2 .784 2.784 0 3.75 0h6.586c.464 0 .909.184 1.237.513l2.914 2.914c.329.328.513.773.513 1.237v9.586A1.75 1.75 0 0 1 13.25 16h-9.5A1.75 1.75 0 0 1 2 14.25Zm1.75-.25a.25.25 0 0 0-.25.25v12.5c0 .138.112.25.25.25h9.5a.25.25 0 0 0 .25-.25V6h-2.75A1.75 1.75 0 0 1 9 4.25V1.5Zm6.75.062V4.25c0 .138.112.25.25.25h2.688l-.011-.013-2.914-2.914-.013-.011Z"></path></svg><div class="overflow-hidden"><div class="react-directory-filename-cell"><div class="react-directory-truncate"><a title="_config.yml" aria-label="_config.yml, (File)" class="Link--primary" href="/adelnobel/awesome-scalability/blob/patch-1/_config.yml">_config.yml</a></div></div></div></div></td><td class="react-directory-row-commit-cell"><div class="Skeleton Skeleton--text"> </div></td><td><div class="Skeleton Skeleton--text"> </div></td></tr><tr class="react-directory-row undefined" id="folder-row-7"><td class="react-directory-row-name-cell-small-screen" colSpan="2"><div class="react-directory-filename-column"><svg aria-hidden="true" focusable="false" class="color-fg-muted" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" style="display:inline-block;user-select:none;vertical-align:text-bottom;overflow:visible"><path d="M2 1.75C2 .784 2.784 0 3.75 0h6.586c.464 0 .909.184 1.237.513l2.914 2.914c.329.328.513.773.513 1.237v9.586A1.75 1.75 0 0 1 13.25 16h-9.5A1.75 1.75 0 0 1 2 14.25Zm1.75-.25a.25.25 0 0 0-.25.25v12.5c0 .138.112.25.25.25h9.5a.25.25 0 0 0 .25-.25V6h-2.75A1.75 1.75 0 0 1 9 4.25V1.5Zm6.75.062V4.25c0 .138.112.25.25.25h2.688l-.011-.013-2.914-2.914-.013-.011Z"></path></svg><div class="overflow-hidden"><div class="react-directory-filename-cell"><div class="react-directory-truncate"><a title="logo.png" aria-label="logo.png, (File)" class="Link--primary" href="/adelnobel/awesome-scalability/blob/patch-1/logo.png">logo.png</a></div></div></div></div></td><td class="react-directory-row-name-cell-large-screen" colSpan="1"><div class="react-directory-filename-column"><svg aria-hidden="true" focusable="false" class="color-fg-muted" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" style="display:inline-block;user-select:none;vertical-align:text-bottom;overflow:visible"><path d="M2 1.75C2 .784 2.784 0 3.75 0h6.586c.464 0 .909.184 1.237.513l2.914 2.914c.329.328.513.773.513 1.237v9.586A1.75 1.75 0 0 1 13.25 16h-9.5A1.75 1.75 0 0 1 2 14.25Zm1.75-.25a.25.25 0 0 0-.25.25v12.5c0 .138.112.25.25.25h9.5a.25.25 0 0 0 .25-.25V6h-2.75A1.75 1.75 0 0 1 9 4.25V1.5Zm6.75.062V4.25c0 .138.112.25.25.25h2.688l-.011-.013-2.914-2.914-.013-.011Z"></path></svg><div class="overflow-hidden"><div class="react-directory-filename-cell"><div class="react-directory-truncate"><a title="logo.png" aria-label="logo.png, (File)" class="Link--primary" href="/adelnobel/awesome-scalability/blob/patch-1/logo.png">logo.png</a></div></div></div></div></td><td class="react-directory-row-commit-cell"><div class="Skeleton Skeleton--text"> </div></td><td><div class="Skeleton Skeleton--text"> </div></td></tr><tr class="Box-sc-g0xbh4-0 eNCcrz d-none" data-testid="view-all-files-row"><td colSpan="3" class="Box-sc-g0xbh4-0 bHTcCe"><div><button class="prc-Link-Link-85e08">View all files</button></div></td></tr></tbody></table></div><div class="Box-sc-g0xbh4-0 csrIcr"><div class="Box-sc-g0xbh4-0 bUQNHB"><div itemscope="" itemType="https://schema.org/abstract" class="Box-sc-g0xbh4-0 jPdcfu"><h2 class="_VisuallyHidden__VisuallyHidden-sc-11jhm7a-0 brGdpi">Repository files navigation</h2><nav aria-label="Repository files" class="UnderlineTabbedInterface__StyledUnderlineWrapper-sc-4ilrg0-0 iBVwpg"><ul role="list" class="UnderlineTabbedInterface__StyledUnderlineItemList-sc-4ilrg0-1 gJyWUl"><li class="Box-sc-g0xbh4-0 hUCRAk"><a href="#" aria-current="page" class="UnderlineTabbedInterface__StyledUnderlineItem-sc-4ilrg0-2 beOdPj"><span data-component="icon"><svg aria-hidden="true" focusable="false" class="octicon octicon-book" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" style="display:inline-block;user-select:none;vertical-align:text-bottom;overflow:visible"><path d="M0 1.75A.75.75 0 0 1 .75 1h4.253c1.227 0 2.317.59 3 1.501A3.743 3.743 0 0 1 11.006 1h4.245a.75.75 0 0 1 .75.75v10.5a.75.75 0 0 1-.75.75h-4.507a2.25 2.25 0 0 0-1.591.659l-.622.621a.75.75 0 0 1-1.06 0l-.622-.621A2.25 2.25 0 0 0 5.258 13H.75a.75.75 0 0 1-.75-.75Zm7.251 10.324.004-5.073-.002-2.253A2.25 2.25 0 0 0 5.003 2.5H1.5v9h3.757a3.75 3.75 0 0 1 1.994.574ZM8.755 4.75l-.004 7.322a3.752 3.752 0 0 1 1.992-.572H14.5v-9h-3.495a2.25 2.25 0 0 0-2.25 2.25Z"></path></svg></span><span data-component="text" data-content="README">README</span></a></li><li class="Box-sc-g0xbh4-0 hUCRAk"><a href="#" class="UnderlineTabbedInterface__StyledUnderlineItem-sc-4ilrg0-2 beOdPj"><span data-component="icon"><svg aria-hidden="true" focusable="false" class="octicon octicon-code-of-conduct" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" style="display:inline-block;user-select:none;vertical-align:text-bottom;overflow:visible"><path d="M8.048 2.241c.964-.709 2.079-1.238 3.325-1.241a4.616 4.616 0 0 1 3.282 1.355c.41.408.757.86.996 1.428.238.568.348 1.206.347 1.968 0 2.193-1.505 4.254-3.081 5.862-1.496 1.526-3.213 2.796-4.249 3.563l-.22.163a.749.749 0 0 1-.895 0l-.221-.163c-1.036-.767-2.753-2.037-4.249-3.563C1.51 10.008.007 7.952.002 5.762a4.614 4.614 0 0 1 1.353-3.407C3.123.585 6.223.537 8.048 2.24Zm-1.153.983c-1.25-1.033-3.321-.967-4.48.191a3.115 3.115 0 0 0-.913 2.335c0 1.556 1.109 3.24 2.652 4.813C5.463 11.898 6.96 13.032 8 13.805c.353-.262.758-.565 1.191-.905l-1.326-1.223a.75.75 0 0 1 1.018-1.102l1.48 1.366c.328-.281.659-.577.984-.887L9.99 9.802a.75.75 0 1 1 1.019-1.103l1.384 1.28c.295-.329.566-.661.81-.995L12.92 8.7l-1.167-1.168c-.674-.671-1.78-.664-2.474.03-.268.269-.538.537-.802.797-.893.882-2.319.843-3.185-.032-.346-.35-.693-.697-1.043-1.047a.75.75 0 0 1-.04-1.016c.162-.191.336-.401.52-.623.62-.748 1.356-1.637 2.166-2.417Zm7.112 4.442c.313-.65.491-1.293.491-1.916v-.001c0-.614-.088-1.045-.23-1.385-.143-.339-.357-.633-.673-.949a3.111 3.111 0 0 0-2.218-.915c-1.092.003-2.165.627-3.226 1.602-.823.755-1.554 1.637-2.228 2.45l-.127.154.562.566a.755.755 0 0 0 1.066.02l.794-.79c1.258-1.258 3.312-1.31 4.594-.032.396.394.792.791 1.173 1.173Z"></path></svg></span><span data-component="text" data-content="Code of conduct">Code of conduct</span></a></li><li class="Box-sc-g0xbh4-0 hUCRAk"><a href="#" class="UnderlineTabbedInterface__StyledUnderlineItem-sc-4ilrg0-2 beOdPj"><span data-component="icon"><svg aria-hidden="true" focusable="false" class="octicon octicon-law" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" style="display:inline-block;user-select:none;vertical-align:text-bottom;overflow:visible"><path d="M8.75.75V2h.985c.304 0 .603.08.867.231l1.29.736c.038.022.08.033.124.033h2.234a.75.75 0 0 1 0 1.5h-.427l2.111 4.692a.75.75 0 0 1-.154.838l-.53-.53.529.531-.001.002-.002.002-.006.006-.006.005-.01.01-.045.04c-.21.176-.441.327-.686.45C14.556 10.78 13.88 11 13 11a4.498 4.498 0 0 1-2.023-.454 3.544 3.544 0 0 1-.686-.45l-.045-.04-.016-.015-.006-.006-.004-.004v-.001a.75.75 0 0 1-.154-.838L12.178 4.5h-.162c-.305 0-.604-.079-.868-.231l-1.29-.736a.245.245 0 0 0-.124-.033H8.75V13h2.5a.75.75 0 0 1 0 1.5h-6.5a.75.75 0 0 1 0-1.5h2.5V3.5h-.984a.245.245 0 0 0-.124.033l-1.289.737c-.265.15-.564.23-.869.23h-.162l2.112 4.692a.75.75 0 0 1-.154.838l-.53-.53.529.531-.001.002-.002.002-.006.006-.016.015-.045.04c-.21.176-.441.327-.686.45C4.556 10.78 3.88 11 3 11a4.498 4.498 0 0 1-2.023-.454 3.544 3.544 0 0 1-.686-.45l-.045-.04-.016-.015-.006-.006-.004-.004v-.001a.75.75 0 0 1-.154-.838L2.178 4.5H1.75a.75.75 0 0 1 0-1.5h2.234a.249.249 0 0 0 .125-.033l1.288-.737c.265-.15.564-.23.869-.23h.984V.75a.75.75 0 0 1 1.5 0Zm2.945 8.477c.285.135.718.273 1.305.273s1.02-.138 1.305-.273L13 6.327Zm-10 0c.285.135.718.273 1.305.273s1.02-.138 1.305-.273L3 6.327Z"></path></svg></span><span data-component="text" data-content="License">License</span></a></li><li class="Box-sc-g0xbh4-0 hUCRAk"><a href="#" class="UnderlineTabbedInterface__StyledUnderlineItem-sc-4ilrg0-2 beOdPj"><span data-component="icon"><svg aria-hidden="true" focusable="false" class="octicon octicon-law" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" style="display:inline-block;user-select:none;vertical-align:text-bottom;overflow:visible"><path d="M8.75.75V2h.985c.304 0 .603.08.867.231l1.29.736c.038.022.08.033.124.033h2.234a.75.75 0 0 1 0 1.5h-.427l2.111 4.692a.75.75 0 0 1-.154.838l-.53-.53.529.531-.001.002-.002.002-.006.006-.006.005-.01.01-.045.04c-.21.176-.441.327-.686.45C14.556 10.78 13.88 11 13 11a4.498 4.498 0 0 1-2.023-.454 3.544 3.544 0 0 1-.686-.45l-.045-.04-.016-.015-.006-.006-.004-.004v-.001a.75.75 0 0 1-.154-.838L12.178 4.5h-.162c-.305 0-.604-.079-.868-.231l-1.29-.736a.245.245 0 0 0-.124-.033H8.75V13h2.5a.75.75 0 0 1 0 1.5h-6.5a.75.75 0 0 1 0-1.5h2.5V3.5h-.984a.245.245 0 0 0-.124.033l-1.289.737c-.265.15-.564.23-.869.23h-.162l2.112 4.692a.75.75 0 0 1-.154.838l-.53-.53.529.531-.001.002-.002.002-.006.006-.016.015-.045.04c-.21.176-.441.327-.686.45C4.556 10.78 3.88 11 3 11a4.498 4.498 0 0 1-2.023-.454 3.544 3.544 0 0 1-.686-.45l-.045-.04-.016-.015-.006-.006-.004-.004v-.001a.75.75 0 0 1-.154-.838L2.178 4.5H1.75a.75.75 0 0 1 0-1.5h2.234a.249.249 0 0 0 .125-.033l1.288-.737c.265-.15.564-.23.869-.23h.984V.75a.75.75 0 0 1 1.5 0Zm2.945 8.477c.285.135.718.273 1.305.273s1.02-.138 1.305-.273L13 6.327Zm-10 0c.285.135.718.273 1.305.273s1.02-.138 1.305-.273L3 6.327Z"></path></svg></span><span data-component="text" data-content="Security">Security</span></a></li></ul></nav><button style="--button-color:fg.subtle" type="button" aria-label="Outline" aria-haspopup="true" aria-expanded="false" tabindex="0" class="types__StyledButton-sc-ws60qy-0 gXPTqA" data-loading="false" data-size="medium" aria-describedby=":Rr9ab:-loading-announcement" id=":Rr9ab:"><svg aria-hidden="true" focusable="false" class="octicon octicon-list-unordered" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" style="display:inline-block;user-select:none;vertical-align:text-bottom;overflow:visible"><path d="M5.75 2.5h8.5a.75.75 0 0 1 0 1.5h-8.5a.75.75 0 0 1 0-1.5Zm0 5h8.5a.75.75 0 0 1 0 1.5h-8.5a.75.75 0 0 1 0-1.5Zm0 5h8.5a.75.75 0 0 1 0 1.5h-8.5a.75.75 0 0 1 0-1.5ZM2 14a1 1 0 1 1 0-2 1 1 0 0 1 0 2Zm1-6a1 1 0 1 1-2 0 1 1 0 0 1 2 0ZM2 4a1 1 0 1 1 0-2 1 1 0 0 1 0 2Z"></path></svg></button></div><div class="Box-sc-g0xbh4-0 QkQOb js-snippet-clipboard-copy-unpositioned" data-hpc="true"><article class="markdown-body entry-content container-lg" itemprop="text"><p dir="auto"><a href="http://awesome-scalability.com/" rel="nofollow"><img src="/adelnobel/awesome-scalability/raw/patch-1/logo.png" alt="Logo" style="max-width: 100%;"></a></p> <p dir="auto">An updated and organized reading list for illustrating the patterns of scalable, reliable, and performant large-scale systems. Concepts are explained in the articles of prominent engineers and credible references. Case studies are taken from battle-tested systems that serve millions to billions of users.</p> <div class="markdown-heading" dir="auto"><h4 tabindex="-1" class="heading-element" dir="auto">If your system goes slow</h4><a id="user-content-if-your-system-goes-slow" class="anchor" aria-label="Permalink: If your system goes slow" href="#if-your-system-goes-slow"><svg class="octicon octicon-link" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg></a></div> <blockquote> <p dir="auto">Understand your problems: scalability problem (fast for a single user but slow under heavy load) or performance problem (slow for a single user) by reviewing some <a href="#principle">design principles</a> and checking how <a href="#scalability">scalability</a> and <a href="#performance">performance</a> problems are solved at tech companies. The section of <a href="#intelligence">intelligence</a> are created for those who work with data and machine learning at big (data) and deep (learning) scale.</p> </blockquote> <div class="markdown-heading" dir="auto"><h4 tabindex="-1" class="heading-element" dir="auto">If your system goes down</h4><a id="user-content-if-your-system-goes-down" class="anchor" aria-label="Permalink: If your system goes down" href="#if-your-system-goes-down"><svg class="octicon octicon-link" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg></a></div> <blockquote> <p dir="auto">"Even if you lose all one day, you can build all over again if you retain your calm!" - Thuan Pham, former CTO of Uber. So, keep calm and mind the <a href="#availability">availability</a> and <a href="#stability">stability</a> matters!</p> </blockquote> <div class="markdown-heading" dir="auto"><h4 tabindex="-1" class="heading-element" dir="auto">If you are having a system design interview</h4><a id="user-content-if-you-are-having-a-system-design-interview" class="anchor" aria-label="Permalink: If you are having a system design interview" href="#if-you-are-having-a-system-design-interview"><svg class="octicon octicon-link" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg></a></div> <blockquote> <p dir="auto">Look at some <a href="#interview">interview notes</a> and <a href="#architecture">real-world architectures with completed diagrams</a> to get a comprehensive view before designing your system on whiteboard. You can check some <a href="#talk">talks</a> of engineers from tech giants to know how they build, scale, and optimize their systems. There are some selected <a href="#book">books</a> for you (most of them are free)! Good luck!</p> </blockquote> <div class="markdown-heading" dir="auto"><h4 tabindex="-1" class="heading-element" dir="auto">If you are building your dream team</h4><a id="user-content-if-you-are-building-your-dream-team" class="anchor" aria-label="Permalink: If you are building your dream team" href="#if-you-are-building-your-dream-team"><svg class="octicon octicon-link" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg></a></div> <blockquote> <p dir="auto">The goal of scaling team is not growing team size but increasing team output and value. You can find out how tech companies reach that goal in various aspects: hiring, management, organization, culture, and communication in the <a href="#organization">organization</a> section.</p> </blockquote> <div class="markdown-heading" dir="auto"><h4 tabindex="-1" class="heading-element" dir="auto">Community power</h4><a id="user-content-community-power" class="anchor" aria-label="Permalink: Community power" href="#community-power"><svg class="octicon octicon-link" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg></a></div> <blockquote> <p dir="auto">Contributions are greatly welcome! You may want to take a look at the <a href="/adelnobel/awesome-scalability/blob/patch-1/CONTRIBUTING.md">contribution guidelines</a>. If you see a link here that is no longer maintained or is not a good fit, please submit a pull request!</p> </blockquote> <blockquote> <p dir="auto">Many long hours of hard work have gone into this project. If you find it helpful, please share on Facebook, <a href="https://ctt.ec/V8B2p" rel="nofollow">on Twitter</a>, <a href="http://t.cn/RnjFLCB" rel="nofollow">on Weibo</a>, or on your chat groups! Knowledge is power, knowledge shared is power multiplied. Thank you!</p> </blockquote> <div class="markdown-heading" dir="auto"><h2 tabindex="-1" class="heading-element" dir="auto">Content</h2><a id="user-content-content" class="anchor" aria-label="Permalink: Content" href="#content"><svg class="octicon octicon-link" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg></a></div> <ul dir="auto"> <li><a href="#principle">Principle</a></li> <li><a href="#scalability">Scalability</a></li> <li><a href="#availability">Availability</a></li> <li><a href="#stability">Stability</a></li> <li><a href="#performance">Performance</a></li> <li><a href="#intelligence">Intelligence</a></li> <li><a href="#architecture">Architecture</a></li> <li><a href="#interview">Interview</a></li> <li><a href="#organization">Organization</a></li> <li><a href="#talk">Talk</a></li> <li><a href="#book">Book</a></li> </ul> <div class="markdown-heading" dir="auto"><h2 tabindex="-1" class="heading-element" dir="auto">Principle</h2><a id="user-content-principle" class="anchor" aria-label="Permalink: Principle" href="#principle"><svg class="octicon octicon-link" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg></a></div> <ul dir="auto"> <li><a href="https://people.eecs.berkeley.edu/~brewer/papers/GiantScale-IEEE.pdf" rel="nofollow">Lessons from Giant-Scale Services - Eric Brewer, UC Berkeley & Google</a></li> <li><a href="https://www.cs.cornell.edu/projects/ladis2009/talks/dean-keynote-ladis2009.pdf" rel="nofollow">Designs, Lessons and Advice from Building Large Distributed Systems - Jeff Dean, Google</a></li> <li><a href="https://www.infoq.com/presentations/effective-api-design" rel="nofollow">How to Design a Good API & Why it Matters - Joshua Bloch, CMU & Google</a></li> <li><a href="http://mvdirona.com/jrh/work/" rel="nofollow">On Efficiency, Reliability, Scaling - James Hamilton, VP at AWS</a></li> <li><a href="https://blog.box.com/blog/4-things-to-keep-in-mind-when-building-a-platform-for-the-enterprise/" rel="nofollow">Things to Keep in Mind When Building a Platform for the Enterprise - Heidi Williams, VP Platform at Box</a></li> <li><a href="https://www.usenix.org/conference/srecon17americas/program/presentation/rosenthal" rel="nofollow">Principles of Chaos Engineering</a></li> <li><a href="https://www.usenix.org/conference/srecon16/program/presentation/lueder" rel="nofollow">Finding the Order in Chaos</a></li> <li><a href="https://12factor.net/" rel="nofollow">The Twelve-Factor App</a></li> <li><a href="https://8thlight.com/blog/uncle-bob/2012/08/13/the-clean-architecture.html" rel="nofollow">Clean Architecture</a></li> <li><a href="http://www.math-cs.gordon.edu/courses/cs211/lectures-2009/Cohesion,Coupling,MVC.pdf" rel="nofollow">High Cohesion and Low Coupling</a></li> <li><a href="https://medium.com/@SkyscannerEng/monoliths-and-microservices-8c65708c3dbf" rel="nofollow">Monoliths and Microservices</a></li> <li><a href="http://robertgreiner.com/2014/08/cap-theorem-revisited/" rel="nofollow">CAP Theorem and Trade-offs</a></li> <li><a href="https://blog.andyet.com/2014/10/01/right-database" rel="nofollow">CP Databases and AP Databases</a></li> <li><a href="http://ithare.com/scaling-stateful-objects/" rel="nofollow">Stateless vs Stateful Scalability</a></li> <li><a href="https://www.brianjgraf.com/scalability-scale-up-scale-out-care/" rel="nofollow">Scale Up vs Scale Out</a></li> <li><a href="https://blog.codinghorror.com/scaling-up-vs-scaling-out-hidden-costs/" rel="nofollow">Scale Up vs Scale Out: Hidden Costs</a></li> <li><a href="https://neo4j.com/blog/acid-vs-base-consistency-models-explained/" rel="nofollow">ACID and BASE</a></li> <li><a href="https://blogs.msdn.microsoft.com/csliu/2009/08/27/io-concept-blockingnon-blocking-vs-syncasync/" rel="nofollow">Blocking/Non-Blocking and Sync/Async</a></li> <li><a href="https://use-the-index-luke.com/sql/testing-scalability" rel="nofollow">Performance and Scalability of Databases</a></li> <li><a href="http://highscalability.com/blog/2011/2/10/database-isolation-levels-and-their-effects-on-performance-a.html" rel="nofollow">Database Isolation Levels and Effects on Performance and Scalability</a></li> <li><a href="https://martin.kleppmann.com/2017/01/26/data-loss-in-large-clusters.html" rel="nofollow">The Probability of Data Loss in Large Clusters</a></li> <li><a href="https://docs.microsoft.com/en-us/previous-versions/msp-n-p/dn271399(v=pandp.10)" rel="nofollow">Data Access for Highly-Scalable Solutions: Using SQL, NoSQL, and Polyglot Persistence</a></li> <li><a href="https://www.upwork.com/hiring/data/sql-vs-nosql-databases-whats-the-difference/" rel="nofollow">SQL vs NoSQL</a></li> <li><a href="https://engineering.salesforce.com/sql-or-nosql-9eaf1d92545b" rel="nofollow">SQL vs NoSQL - Lesson Learned at Salesforce</a></li> <li><a href="https://medium.baqend.com/nosql-databases-a-survey-and-decision-guidance-ea7823a822d" rel="nofollow">NoSQL Databases: Survey and Decision Guidance</a></li> <li><a href="https://medium.com/@jeeyoungk/how-sharding-works-b4dec46b3f6" rel="nofollow">How Sharding Works</a></li> <li><a href="http://www.tom-e-white.com/2007/11/consistent-hashing.html" rel="nofollow">Consistent Hashing</a></li> <li><a href="https://medium.com/@dgryski/consistent-hashing-algorithmic-tradeoffs-ef6b8e2fcae8" rel="nofollow">Consistent Hashing: Algorithmic Tradeoffs</a></li> <li><a href="https://booking.ai/dont-be-tricked-by-the-hashing-trick-192a6aae3087" rel="nofollow">Don’t be tricked by the Hashing Trick</a></li> <li><a href="https://medium.com/netflix-techblog/distributing-content-to-open-connect-3e3e391d4dc9" rel="nofollow">Uniform Consistent Hashing at Netflix</a></li> <li><a href="https://www.allthingsdistributed.com/2008/12/eventually_consistent.html" rel="nofollow">Eventually Consistent - Werner Vogels, CTO at Amazon</a></li> <li><a href="https://www.stevesouders.com/blog/2012/10/11/cache-is-king/" rel="nofollow">Cache is King</a></li> <li><a href="https://www.the-paper-trail.org/post/2014-06-06-paper-notes-anti-caching/" rel="nofollow">Anti-Caching</a></li> <li><a href="http://highscalability.com/latency-everywhere-and-it-costs-you-sales-how-crush-it" rel="nofollow">Understand Latency</a></li> <li><a href="http://norvig.com/21-days.html#answers" rel="nofollow">Latency Numbers Every Programmer Should Know</a></li> <li><a href="https://queue.acm.org/detail.cfm?id=3096459&__s=dnkxuaws9pogqdnxmx8i" rel="nofollow">The Calculus of Service Availability</a></li> <li><a href="http://highscalability.com/blog/2014/5/12/4-architecture-issues-when-scaling-web-applications-bottlene.html" rel="nofollow">Architecture Issues When Scaling Web Applications: Bottlenecks, Database, CPU, IO</a></li> <li><a href="http://highscalability.com/blog/2012/5/16/big-list-of-20-common-bottlenecks.html" rel="nofollow">Common Bottlenecks</a></li> <li><a href="https://queue.acm.org/detail.cfm?id=3025012" rel="nofollow">Life Beyond Distributed Transactions</a></li> <li><a href="https://www.usenix.org/conference/srecon15/program/presentation/taveira" rel="nofollow">Relying on Software to Redirect Traffic Reliably at Various Layers</a></li> <li><a href="https://www.usenix.org/conference/srecon17americas/program/presentation/andrus" rel="nofollow">Breaking Things on Purpose</a></li> <li><a href="https://medium.com/@rdsubhas/10-modern-software-engineering-mistakes-bc67fbef4fc8" rel="nofollow">Avoid Over Engineering</a></li> <li><a href="https://www.infoq.com/articles/scalability-worst-practices" rel="nofollow">Scalability Worst Practices</a></li> <li><a href="https://medium.com/@DataStax/instagram-engineerings-3-rules-to-a-scalable-cloud-application-architecture-c44afed31406" rel="nofollow">Use Solid Technologies - Don’t Re-invent the Wheel - Keep It Simple!</a></li> <li><a href="https://jobs.zalando.com/tech/blog/simplicity-by-distributing-complexity/" rel="nofollow">Simplicity by Distributing Complexity</a></li> <li><a href="http://tech.transferwise.com/why-over-reusing-is-bad/" rel="nofollow">Why Over-Reusing is Bad</a></li> <li><a href="https://blog.codinghorror.com/performance-is-a-feature/" rel="nofollow">Performance is a Feature</a></li> <li><a href="https://codeascraft.com/2014/12/11/make-performance-part-of-your-workflow/" rel="nofollow">Make Performance Part of Your Workflow</a></li> <li><a href="https://medium.com/walmartlabs/the-benefits-of-server-side-rendering-over-client-side-rendering-5d07ff2cefe8" rel="nofollow">The Benefits of Server Side Rendering over Client Side Rendering</a></li> <li><a href="https://architecht.io/lessons-from-facebook-on-engineering-for-scale-f5716f0afc7a" rel="nofollow">Automate and Abstract: Lessons at Facebook</a></li> <li><a href="https://8thlight.com/blog/sarah-sunday/2017/09/15/aws-dos-and-donts.html" rel="nofollow">AWS Do's and Don'ts</a></li> <li><a href="https://medium.com/@hellostanley/design-doesnt-scale-4d81e12cbc3e" rel="nofollow">(UI) Design Doesn’t Scale - Stanley Wood, Design Director at Spotify</a></li> <li><a href="http://www.brendangregg.com/linuxperf.html" rel="nofollow">Linux Performance</a></li> <li><a href="https://www.igvita.com/2016/05/20/building-fast-and-resilient-web-applications/" rel="nofollow">Building Fast and Resilient Web Applications - Ilya Grigorik</a></li> <li><a href="https://www.usenix.org/conference/srecon17asia/program/presentation/wang_daxin" rel="nofollow">Accept Partial Failures, Minimize Service Loss</a></li> <li><a href="http://highscalability.com/blog/2012/12/31/designing-for-resiliency-will-be-so-2013.html" rel="nofollow">Design for Resiliency</a></li> <li><a href="https://docs.microsoft.com/en-us/azure/architecture/guide/design-principles/self-healing" rel="nofollow">Design for Self-healing</a></li> <li><a href="https://docs.microsoft.com/en-us/azure/architecture/guide/design-principles/scale-out" rel="nofollow">Design for Scaling Out</a></li> <li><a href="https://docs.microsoft.com/en-us/azure/architecture/guide/design-principles/design-for-evolution" rel="nofollow">Design for Evolution</a></li> <li><a href="http://highscalability.com/blog/2013/8/26/reddit-lessons-learned-from-mistakes-made-scaling-to-1-billi.html" rel="nofollow">Learn from Mistakes</a></li> </ul> <div class="markdown-heading" dir="auto"><h2 tabindex="-1" class="heading-element" dir="auto">Scalability</h2><a id="user-content-scalability" class="anchor" aria-label="Permalink: Scalability" href="#scalability"><svg class="octicon octicon-link" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg></a></div> <ul dir="auto"> <li><a href="https://martinfowler.com/microservices/" rel="nofollow">Microservices and Orchestration</a> <ul dir="auto"> <li><a href="https://eng.uber.com/microservice-architecture/" rel="nofollow">Domain-Oriented Microservice Architecture at Uber</a></li> <li><a href="https://engineering.riotgames.com/news/thinking-inside-container" rel="nofollow">Container (8 parts) at Riot Games</a></li> <li><a href="https://medium.com/@Pinterest_Engineering/containerization-at-pinterest-92295347f2f3" rel="nofollow">Containerization at Pinterest</a></li> <li><a href="https://medium.com/netflix-techblog/the-evolution-of-container-usage-at-netflix-3abfc096781b" rel="nofollow">Evolution of Container Usage at Netflix</a></li> <li><a href="https://eng.uber.com/dockerizing-mysql/" rel="nofollow">Dockerizing MySQL at Uber</a></li> <li><a href="https://labs.spotify.com/2018/01/11/testing-of-microservices/" rel="nofollow">Testing of Microservices at Spotify</a></li> <li><a href="https://medium.com/treehouse-engineering/lessons-learned-running-docker-in-production-5dce99ece770" rel="nofollow">Docker in Production at Treehouse</a></li> <li><a href="https://developers.soundcloud.com/blog/inside-a-soundcloud-microservice" rel="nofollow">Microservice at SoundCloud</a></li> <li><a href="https://stripe.com/blog/operating-kubernetes" rel="nofollow">Operate Kubernetes Reliably at Stripe</a></li> <li><a href="https://tech.trivago.com/2020/06/10/cross-cluster-traffic-mirroring-with-istio/" rel="nofollow">Cross-Cluster Traffic Mirroring with Istio at Trivago</a></li> <li><a href="https://open.nytimes.com/agrarian-scale-kubernetes-part-3-ee459887ed7e" rel="nofollow">Agrarian-Scale Kubernetes (3 parts) at New York Times</a></li> <li><a href="https://medium.com/bbc-design-engineering/powering-bbc-online-with-nanoservices-727840ba015b" rel="nofollow">Nanoservices at BBC</a></li> <li><a href="https://www.techatbloomberg.com/blog/powerfulseal-testing-tool-kubernetes-clusters/" rel="nofollow">PowerfulSeal: Testing Tool for Kubernetes Clusters at Bloomberg</a></li> <li><a href="https://medium.com/netflix-techblog/netflix-conductor-a-microservices-orchestrator-2e8d4771bf40" rel="nofollow">Conductor: Microservices Orchestrator at Netflix</a></li> <li><a href="https://shopifyengineering.myshopify.com/blogs/engineering/docker-at-shopify-how-we-built-containers-that-power-over-100-000-online-shops" rel="nofollow">Docker Containers that Power Over 100.000 Online Shops at Shopify</a></li> <li><a href="https://medium.engineering/microservice-architecture-at-medium-9c33805eb74f" rel="nofollow">Microservice Architecture at Medium</a></li> <li><a href="https://boxunix.com/post/bare_metal_to_kube/" rel="nofollow">From bare-metal to Kubernetes at Betabrand</a></li> <li><a href="https://medium.com/tinder-engineering/tinders-move-to-kubernetes-cda2a6372f44" rel="nofollow">Kubernetes at Tinder</a></li> <li><a href="https://www.quora.com/q/quoraengineering/Adopting-Kubernetes-at-Quora" rel="nofollow">Kubernetes at Quora</a></li> <li><a href="https://medium.com/pinterest-engineering/building-a-kubernetes-platform-at-pinterest-fb3d9571c948" rel="nofollow">Kubernetes Platform at Pinterest</a></li> <li><a href="https://medium.com/building-nubank/microservices-at-nubank-an-overview-2ebcb336c64d" rel="nofollow">Microservices at Nubank</a></li> <li><a href="https://engineering.mercari.com/en/blog/entry/20210831-2019-06-07-155849/" rel="nofollow">Payment Transaction Management in Microservices at Mercari</a></li> <li><a href="https://tech.ebayinc.com/engineering/grit-a-protocol-for-distributed-transactions-across-microservices/" rel="nofollow">GRIT: Protocol for Distributed Transactions across Microservices at eBay</a></li> <li><a href="https://medium.com/palantir/introducing-rubix-kubernetes-at-palantir-ab0ce16ea42e" rel="nofollow">Rubix: Kubernetes at Palantir</a></li> <li><a href="https://eng.uber.com/crisp-critical-path-analysis-for-microservice-architectures/" rel="nofollow">CRISP: Critical Path Analysis for Microservice Architectures at Uber</a></li> </ul> </li> <li><a href="https://www.wix.engineering/post/scaling-to-100m-to-cache-or-not-to-cache" rel="nofollow">Distributed Caching</a> <ul dir="auto"> <li><a href="https://medium.com/netflix-techblog/caching-for-a-global-netflix-7bcc457012f1" rel="nofollow">EVCache: Distributed In-memory Caching at Netflix</a></li> <li><a href="https://medium.com/netflix-techblog/cache-warming-agility-for-a-stateful-service-2d3b1da82642" rel="nofollow">EVCache Cache Warmer Infrastructure at Netflix</a></li> <li><a href="https://blog.box.com/blog/introducing-memsniff-robust-memcache-traffic-analyzer/" rel="nofollow">Memsniff: Robust Memcache Traffic Analyzer at Box</a></li> <li><a href="https://codeascraft.com/2017/11/30/how-etsy-caches/" rel="nofollow">Caching with Consistent Hashing and Cache Smearing at Etsy</a></li> <li><a href="https://code.facebook.com/posts/220956754772273/an-analysis-of-facebook-photo-caching/" rel="nofollow">Analysis of Photo Caching at Facebook</a></li> <li><a href="https://code.facebook.com/posts/964122680272229/web-performance-cache-efficiency-exercise/" rel="nofollow">Cache Efficiency Exercise at Facebook</a></li> <li><a href="http://tech.trivago.com/2015/10/15/tcache/" rel="nofollow">tCache: Scalable Data-aware Java Caching at Trivago</a></li> <li><a href="https://engineering.quora.com/Pycache-lightning-fast-in-process-caching" rel="nofollow">Pycache: In-process Caching at Quora</a></li> <li><a href="http://tech.trivago.com/2017/12/19/how-trivago-reduced-memcached-memory-usage-by-50/" rel="nofollow">Reduce Memcached Memory Usage by 50% at Trivago</a></li> <li><a href="https://engineeringblog.yelp.com/2018/03/caching-internal-service-calls-at-yelp.html" rel="nofollow">Caching Internal Service Calls at Yelp</a></li> <li><a href="https://allegro.tech/2017/01/estimating-the-cache-efficiency-using-big-data.html" rel="nofollow">Estimating the Cache Efficiency using Big Data at Allegro</a></li> <li><a href="https://jobs.zalando.com/tech/blog/distributed-cache-akka-kubernetes/" rel="nofollow">Distributed Cache at Zalando</a></li> <li><a href="https://medium.com/netflix-techblog/evolution-of-application-data-caching-from-ram-to-ssd-a33d6fa7a690" rel="nofollow">Application Data Caching from RAM to SSD at NetFlix</a></li> <li><a href="https://medium.com/@SkyscannerEng/the-tradeoffs-of-a-replicated-cache-b6680c722f58" rel="nofollow">Tradeoffs of Replicated Cache at Skyscanner</a></li> <li><a href="https://blog.doordash.com/avoiding-cache-stampede-at-doordash-55bbf596d94b" rel="nofollow">Avoiding Cache Stampede at DoorDash</a></li> <li><a href="http://engblog.yext.com/post/geolocation-caching" rel="nofollow">Location Caching with Quadtrees at Yext</a></li> <li><a href="https://medium.com/vimeo-engineering-blog/video-metadata-caching-at-vimeo-a54b25f0b304" rel="nofollow">Video Metadata Caching at Vimeo</a></li> <li><a href="http://highscalability.com/blog/2014/9/8/how-twitter-uses-redis-to-scale-105tb-ram-39mm-qps-10000-ins.html" rel="nofollow">Scaling Redis at Twitter</a></li> <li><a href="https://slack.engineering/scaling-slacks-job-queue-687222e9d100" rel="nofollow">Scaling Job Queue with Redis at Slack</a></li> <li><a href="https://githubengineering.com/moving-persistent-data-out-of-redis/" rel="nofollow">Moving persistent data out of Redis at Github</a></li> <li><a href="https://engineering.instagram.com/storing-hundreds-of-millions-of-simple-key-value-pairs-in-redis-1091ae80f74c" rel="nofollow">Storing Hundreds of Millions of Simple Key-Value Pairs in Redis at Instagram</a></li> <li><a href="http://tech.trivago.com/2017/01/25/learn-redis-the-hard-way-in-production/" rel="nofollow">Redis at Trivago</a></li> <li><a href="https://deliveroo.engineering/2017/01/19/optimising-membership-queries.html" rel="nofollow">Optimizing Redis Storage at Deliveroo</a></li> <li><a href="http://engineering.wattpad.com/post/23244724794/store-more-stuff-memory-optimization-in-redis" rel="nofollow">Memory Optimization in Redis at Wattpad</a></li> <li><a href="https://blog.heroku.com/rolling-redis-fleet" rel="nofollow">Redis Fleet at Heroku</a></li> <li><a href="https://developers.soundcloud.com/blog/gradle-remote-build-cache-misses-part-2" rel="nofollow">Solving Remote Build Cache Misses (2 parts) at SoundCloud</a></li> <li><a href="https://tech.ebayinc.com/engineering/prefetch-caching-of-ebay-items/" rel="nofollow">Prefetch Caching of Items at eBay</a></li> <li><a href="https://developer.mozilla.org/en-US/docs/Web/HTTP/Caching" rel="nofollow">HTTP Caching and CDN</a> <ul dir="auto"> <li><a href="https://www.zynga.com/blogs/engineering/zynga-geo-proxy-reducing-mobile-game-latency" rel="nofollow">Zynga Geo Proxy: Reducing Mobile Game Latency at Zynga</a></li> <li><a href="https://technology.condenast.com/story/the-why-and-how-of-google-amp-at-conde-nast" rel="nofollow">Google AMP at Condé Nast</a></li> <li><a href="https://deliveroo.engineering/2016/09/19/ab-testing-cdns.html" rel="nofollow">A/B Tests on Hosting Infrastructure (CDNs) at Deliveroo</a></li> <li><a href="https://developers.soundcloud.com/blog/how-soundcloud-uses-haproxy-with-kubernetes-for-user-facing-traffic" rel="nofollow">HAProxy with Kubernetes for User-facing Traffic at SoundCloud</a></li> <li><a href="https://blogs.dropbox.com/tech/2018/03/meet-bandaid-the-dropbox-service-proxy/" rel="nofollow">Bandaid: Service Proxy at Dropbox</a></li> <li><a href="https://engineering.linecorp.com/en/blog/detail/230" rel="nofollow">CDN in LIVE's Encoder Layer at LINE</a></li> <li><a href="https://slack.engineering/service-workers-at-slack-our-quest-for-faster-boot-times-and-offline-support-3492cf79c88" rel="nofollow">Service Workers at Slack</a></li> <li><a href="https://labs.spotify.com/2020/02/24/how-spotify-aligned-cdn-services-for-a-lightning-fast-streaming-experience/" rel="nofollow">CDN Services at Spotify</a></li> </ul> </li> </ul> </li> <li><a href="https://martin.kleppmann.com/2016/02/08/how-to-do-distributed-locking.html" rel="nofollow">Distributed Locking</a> <ul dir="auto"> <li><a href="https://blog.acolyer.org/2015/02/13/the-chubby-lock-service-for-loosely-coupled-distributed-systems/" rel="nofollow">Chubby: Lock Service for Loosely Coupled Distributed Systems at Google</a></li> <li><a href="https://www.youtube.com/watch?v=MDuagr729aU" rel="nofollow">Distributed Locking at Uber</a></li> <li><a href="https://engineering.gosquared.com/distributed-locks-using-redis" rel="nofollow">Distributed Locks using Redis at GoSquared</a></li> <li><a href="https://blog.twitter.com/engineering/en_us/topics/infrastructure/2018/zookeeper-at-twitter.html" rel="nofollow">ZooKeeper at Twitter</a></li> <li><a href="https://blog.chartio.com/posts/eliminating-duplicate-queries-using-distributed-locking" rel="nofollow">Eliminating Duplicate Queries using Distributed Locking at Chartio</a></li> </ul> </li> <li><a href="https://www.oreilly.com/ideas/understanding-the-value-of-distributed-tracing" rel="nofollow">Distributed Tracking, Tracing, and Measuring</a> <ul dir="auto"> <li><a href="https://blog.twitter.com/engineering/en_us/a/2012/distributed-systems-tracing-with-zipkin.html" rel="nofollow">Zipkin: Distributed Systems Tracing at Twitter</a></li> <li><a href="https://developers.soundcloud.com/blog/using-kubernetes-pod-metadata-to-improve-zipkin-traces" rel="nofollow">Improve Zipkin Traces using Kubernetes Pod Metadata at SoundCloud</a></li> <li><a href="https://www.infoq.com/presentations/canopy-scalable-tracing-analytics-facebook" rel="nofollow">Canopy: Scalable Distributed Tracing & Analysis at Facebook</a></li> <li><a href="https://medium.com/@Pinterest_Engineering/distributed-tracing-at-pinterest-with-new-open-source-tools-a4f8a5562f6b" rel="nofollow">Pintrace: Distributed Tracing at Pinterest</a></li> <li><a href="https://engineering.atspotify.com/2021/01/20/introducing-xcmetrics-our-all-in-one-tool-for-tracking-xcode-build-metrics/" rel="nofollow">XCMetrics: All-in-One Tool for Tracking Xcode Build Metrics at Spotify</a></li> <li><a href="https://engineering.linkedin.com/distributed-service-call-graph/real-time-distributed-tracing-website-performance-and-efficiency" rel="nofollow">Real-time Distributed Tracing at LinkedIn</a></li> <li><a href="https://www.usenix.org/conference/srecon17americas/program/presentation/arthorne" rel="nofollow">Tracking Service Infrastructure at Scale at Shopify</a></li> <li><a href="https://engineering.hellofresh.com/scaling-hellofresh-distributed-tracing-7b182928247d" rel="nofollow">Distributed Tracing at HelloFresh</a></li> <li><a href="https://medium.com/@Pinterest_Engineering/analyzing-distributed-trace-data-6aae58919949" rel="nofollow">Analyzing Distributed Trace Data at Pinterest</a></li> <li><a href="https://eng.uber.com/distributed-tracing/" rel="nofollow">Distributed Tracing at Uber</a></li> <li><a href="https://eng.uber.com/jvm-profiler/" rel="nofollow">JVM Profiler: Tracing Distributed JVM Applications at Uber</a></li> <li><a href="https://www.usenix.org/conference/srecon17asia/program/presentation/mah" rel="nofollow">Data Checking at Dropbox</a></li> <li><a href="https://tech.showmax.com/2016/10/tracing-distributed-systems-at-showmax/" rel="nofollow">Tracing Distributed Systems at Showmax</a></li> <li><a href="https://medium.com/@palantir/osquery-across-the-enterprise-3c3c9d13ec55" rel="nofollow">osquery Across the Enterprise at Palantir</a></li> <li><a href="https://codeascraft.com/2011/02/15/measure-anything-measure-everything/" rel="nofollow">StatsD at Etsy</a></li> <li><a href="https://blog.doordash.com/scaling-statsd-84d456a7cc2a" rel="nofollow">StatsD at DoorDash</a></li> </ul> </li> <li><a href="https://www.csee.umbc.edu/courses/graduate/CMSC621/fall02/lectures/ch11.pdf" rel="nofollow">Distributed Scheduling</a> <ul dir="auto"> <li><a href="https://www.pagerduty.com/eng/distributed-task-scheduling-3/" rel="nofollow">Distributed Task Scheduling (3 parts) at PagerDuty</a></li> <li><a href="https://landing.google.com/sre/sre-book/chapters/distributed-periodic-scheduling/" rel="nofollow">Building Cron at Google</a></li> <li><a href="https://engineering.quora.com/Quoras-Distributed-Cron-Architecture" rel="nofollow">Distributed Cron Architecture at Quora</a></li> <li><a href="https://medium.com/airbnb-engineering/chronos-a-replacement-for-cron-f05d7d986a9d" rel="nofollow">Chronos: A Replacement for Cron at Airbnb</a></li> <li><a href="https://engblog.nextdoor.com/we-don-t-run-cron-jobs-at-nextdoor-6f7f9cc62040" rel="nofollow">Scheduler at Nextdoor</a></li> <li><a href="https://eng.uber.com/peloton/" rel="nofollow">Peloton: Unified Resource Scheduler for Diverse Cluster Workloads at Uber</a></li> <li><a href="https://medium.com/netflix-techblog/fenzo-oss-scheduler-for-apache-mesos-frameworks-5c340e77e543" rel="nofollow">Fenzo: OSS Scheduler for Apache Mesos Frameworks at Netflix</a></li> <li><a href="https://airflow.apache.org/" rel="nofollow">Airflow - Workflow Orchestration</a> <ul dir="auto"> <li><a href="https://medium.com/airbnb-engineering/airflow-a-workflow-management-platform-46318b977fd8" rel="nofollow">Airflow at Airbnb</a></li> <li><a href="https://engineering.pandora.com/apache-airflow-at-pandora-1d7a844d68ee" rel="nofollow">Airflow at Pandora</a></li> <li><a href="https://robinhood.engineering/why-robinhood-uses-airflow-aed13a9a90c8" rel="nofollow">Airflow at Robinhood</a></li> <li><a href="https://eng.lyft.com/running-apache-airflow-at-lyft-6e53bb8fccff" rel="nofollow">Airflow at Lyft</a></li> <li><a href="https://drivy.engineering/airflow-architecture/" rel="nofollow">Airflow at Drivy</a></li> <li><a href="https://engineering.grab.com/experimentation-platform-data-pipeline" rel="nofollow">Airflow at Grab</a></li> <li><a href="https://medium.com/adobetech/adobe-experience-platform-orchestration-service-with-apache-airflow-952203723c0b" rel="nofollow">Airflow at Adobe</a></li> <li><a href="https://medium.com/walmartlabs/auditing-airflow-batch-jobs-73b45100045" rel="nofollow">Auditing Airflow Job Runs at Walmart</a></li> <li><a href="https://hackernoon.com/meet-maat-alibabas-dag-based-distributed-task-scheduler-7c9cf0c83438" rel="nofollow">MaaT: DAG-based Distributed Task Scheduler at Alibaba</a></li> <li><a href="https://codeascraft.com/2018/11/14/boundary-layer%e2%80%89-declarative-airflow-workflows/" rel="nofollow">boundary-layer: Declarative Airflow Workflows at Etsy</a></li> </ul> </li> </ul> </li> <li><a href="https://www.oreilly.com/ideas/monitoring-distributed-systems" rel="nofollow">Distributed Monitoring and Alerting</a> <ul dir="auto"> <li><a href="https://www.ebayinc.com/stories/blogs/tech/unicorn-rheos-remediation-center/" rel="nofollow">Unicorn: Remediation System at eBay</a></li> <li><a href="https://eng.uber.com/optimizing-m3/" rel="nofollow">M3: Metrics and Monitoring Platform at Uber</a></li> <li><a href="https://blogs.dropbox.com/tech/2019/05/athena-our-automated-build-health-management-system/" rel="nofollow">Athena: Automated Build Health Management System at Dropbox</a></li> <li><a href="https://blogs.dropbox.com/tech/2019/11/monitoring-server-applications-with-vortex/" rel="nofollow">Vortex: Monitoring Server Applications at Dropbox</a></li> <li><a href="https://engineering.linkedin.com/blog/2019/solving-manageability-challenges-with-nuage" rel="nofollow">Nuage: Cloud Management Service at LinkedIn</a></li> <li><a href="https://netflixtechblog.com/telltale-netflix-application-monitoring-simplified-5c08bfa780ba" rel="nofollow">Telltale: Application Monitoring at Netflix</a></li> <li><a href="https://engineering.linkedin.com/blog/2019/06/smart-alerts-in-thirdeye--linkedins-real-time-monitoring-platfor" rel="nofollow">ThirdEye: Monitoring Platform at LinkedIn</a></li> <li><a href="https://developers.soundcloud.com/blog/periskop-exception-monitoring-service" rel="nofollow">Periskop: Exception Monitoring Service at SoundCloud</a></li> <li><a href="https://blogs.dropbox.com/tech/2017/02/meet-securitybot-open-sourcing-automated-security-at-scale/" rel="nofollow">Securitybot: Distributed Alerting Bot at Dropbox</a></li> <li><a href="https://www.usenix.org/conference/srecon18asia/presentation/xinchi" rel="nofollow">Monitoring System at Alibaba</a></li> <li><a href="https://medium.com/dailymotion/real-user-monitoring-1948375f8be5" rel="nofollow">Real User Monitoring at Dailymotion</a></li> <li><a href="https://eng.uber.com/observability-at-scale/" rel="nofollow">Alerting Ecosystem at Uber</a></li> <li><a href="https://medium.com/airbnb-engineering/alerting-framework-at-airbnb-35ba48df894f" rel="nofollow">Alerting Framework at Airbnb</a></li> <li><a href="https://developers.soundcloud.com/blog/alerting-on-slos" rel="nofollow">Alerting on Service-Level Objectives (SLOs) at SoundCloud</a></li> <li><a href="https://eng.uber.com/observability-anomaly-detection/" rel="nofollow">Job-based Forecasting Workflow for Observability Anomaly Detection at Uber</a></li> <li><a href="http://engineering.hackerearth.com/2017/03/21/monitoring-and-alert-system-using-graphite-and-cabot/" rel="nofollow">Monitoring and Alert System using Graphite and Cabot at HackerEarth</a></li> <li><a href="https://blog.twitter.com/engineering/en_us/a/2016/observability-at-twitter-technical-overview-part-ii.html" rel="nofollow">Observability (2 parts) at Twitter</a></li> <li><a href="https://slack.engineering/distributed-security-alerting-c89414c992d6" rel="nofollow">Distributed Security Alerting at Slack</a></li> <li><a href="https://www.infoq.com/presentations/news-alerting-bloomberg" rel="nofollow">Real-Time News Alerting at Bloomberg</a></li> <li><a href="https://engineering.linkedin.com/blog/2019/an-inside-look-at-linkedins-data-pipeline-monitoring-system-" rel="nofollow">Data Pipeline Monitoring System at LinkedIn</a></li> <li><a href="https://blog.picnic.nl/monitoring-and-observability-at-picnic-684cefd845c4" rel="nofollow">Monitoring and Observability at Picnic</a></li> </ul> </li> <li><a href="https://msdn.microsoft.com/en-us/library/cc767123.aspx" rel="nofollow">Distributed Security</a> <ul dir="auto"> <li><a href="https://blogs.dropbox.com/tech/2018/02/security-at-scale-the-dropbox-approach/" rel="nofollow">Approach to Security at Scale at Dropbox</a></li> <li><a href="https://medium.com/netflix-techblog/introducing-aardvark-and-repokid-53b081bf3a7e" rel="nofollow">Aardvark and Repokid: AWS Least Privilege for Distributed, High-Velocity Development at Netflix</a></li> <li><a href="https://www.slideshare.net/MikeSvoboda/2017-lisa-linkedins-distributed-firewall-dfw" rel="nofollow">LISA: Distributed Firewall at LinkedIn</a></li> <li><a href="https://engineering.coinbase.com/how-coinbase-builds-secure-infrastructure-to-store-bitcoin-in-the-cloud-30a6504e40ba" rel="nofollow">Secure Infrastructure To Store Bitcoin In The Cloud at Coinbase</a></li> <li><a href="https://medium.com/airbnb-engineering/binaryalert-real-time-serverless-malware-detection-ca44370c1b90" rel="nofollow">BinaryAlert: Real-time Serverless Malware Detection at Airbnb</a></li> <li><a href="https://segment.com/blog/secure-access-to-100-aws-accounts/" rel="nofollow">Scalable IAM Architecture to Secure Access to 100 AWS Accounts at Segment</a></li> <li><a href="http://engineering.indeedblog.com/blog/2018/04/oaudit-toolbox/" rel="nofollow">OAuth Audit Toolbox at Indeed</a></li> <li><a href="https://engineeringblog.yelp.com/2018/04/ad-password-blacklisting.html" rel="nofollow">Active Directory Password Blacklisting at Yelp</a></li> <li><a href="https://slack.engineering/syscall-auditing-at-scale-e6a3ca8ac1b8" rel="nofollow">Syscall Auditing at Scale at Slack</a></li> <li><a href="https://yahooeng.tumblr.com/post/160481899076/open-sourcing-athenz-fine-grained-role-based" rel="nofollow">Athenz: Fine-Grained, Role-Based Access Control at Yahoo</a></li> <li><a href="https://blogs.dropbox.com/tech/2018/05/introducing-webauthn-support-for-secure-dropbox-sign-in/" rel="nofollow">WebAuthn Support for Secure Sign In at Dropbox</a></li> <li><a href="https://slack.engineering/moving-fast-and-securing-things-540e6c5ae58a" rel="nofollow">Security Development Lifecycle at Slack</a></li> <li><a href="https://kinvolk.io/blog/2018/04/towards-unprivileged-container-builds/" rel="nofollow">Unprivileged Container Builds at Kinvolk</a></li> <li><a href="https://medium.com/netflix-techblog/netflix-sirt-releases-diffy-a-differencing-engine-for-digital-forensics-in-the-cloud-37b71abd2698" rel="nofollow">Diffy: Differencing Engine for Digital Forensics in the Cloud at Netflix</a></li> <li><a href="https://medium.com/netflix-techblog/netflix-cloud-security-detecting-credential-compromise-in-aws-9493d6fd373a" rel="nofollow">Detecting Credential Compromise in AWS at Netflix</a></li> <li><a href="https://labs.spotify.com/2018/09/18/scalable-user-privacy/" rel="nofollow">Scalable User Privacy at Spotify</a></li> <li><a href="https://engineering.indeedblog.com/blog/2018/09/application-scanning/" rel="nofollow">AVA: Audit Web Applications at Indeed</a></li> <li><a href="https://engineeringblog.yelp.com/2018/11/ttl-as-a-service.html" rel="nofollow">TTL as a Service: Automatic Revocation of Stale Privileges at Yelp</a></li> <li><a href="https://slack.engineering/engineering-dive-into-slack-enterprise-key-management-1fce471b178c" rel="nofollow">Enterprise Key Management at Slack</a></li> <li><a href="https://blog.twitch.tv/en/2019/03/15/how-twitch-addresses-scalability-and-authentication-718d6ed3c471/" rel="nofollow">Scalability and Authentication at Twitch</a></li> <li><a href="https://netflixtechblog.com/edge-authentication-and-token-agnostic-identity-propagation-514e47e0b602" rel="nofollow">Edge Authentication and Token-Agnostic Identity Propagation at Netflix</a></li> <li><a href="https://blog.palantir.com/hardening-palantirs-kubernetes-infrastructure-with-cilium-1c40d4c7ef0" rel="nofollow">Hardening Kubernetes Infrastructure with Cilium at Palantir</a></li> </ul> </li> <li><a href="https://arxiv.org/pdf/1704.00411.pdf" rel="nofollow">Distributed Messaging, Queuing, and Event Streaming</a> <ul dir="auto"> <li><a href="https://blogs.dropbox.com/tech/2017/05/introducing-cape/" rel="nofollow">Cape: Event Stream Processing Framework at Dropbox</a></li> <li><a href="https://engineering.linkedin.com/blog/2019/brooklin-open-source" rel="nofollow">Brooklin: Distributed Service for Near Real-Time Data Streaming at LinkedIn</a></li> <li><a href="https://engineering.linkedin.com/blog/2018/04/samza-aeon--latency-insights-for-asynchronous-one-way-flows" rel="nofollow">Samza: Stream Processing System for Latency Insighs at LinkedIn</a></li> <li><a href="https://yahooeng.tumblr.com/post/161855616651/open-sourcing-bullet-yahoos-forward-looking" rel="nofollow">Bullet: Forward-Looking Query Engine for Streaming Data at Yahoo</a></li> <li><a href="https://codeascraft.com/2018/05/29/the-eventhorizon-saga/" rel="nofollow">EventHorizon: Tool for Watching Events Streaming at Etsy</a></li> <li><a href="https://engineering.quora.com/Qmessage-Handling-Billions-of-Tasks-Per-Day" rel="nofollow">Qmessage: Distributed, Asynchronous Task Queue at Quora</a></li> <li><a href="https://eng.uber.com/cherami/" rel="nofollow">Cherami: Message Queue System for Transporting Async Tasks at Uber</a></li> <li><a href="https://dropbox.tech/infrastructure/asynchronous-task-scheduling-at-dropbox" rel="nofollow">ATF: An an async task framework at Dropbox</a></li> <li><a href="https://medium.com/airbnb-engineering/dynein-building-a-distributed-delayed-job-queueing-system-93ab10f05f99" rel="nofollow">Dynein: Distributed Delayed Job Queueing System at Airbnb</a></li> <li><a href="https://engineering.riotgames.com/news/riot-messaging-service" rel="nofollow">Messaging Service at Riot Games</a></li> <li><a href="https://www.zillow.com/engineering/debugging-production-event-logging/" rel="nofollow">Debugging Production with Event Logging at Zillow</a></li> <li><a href="https://medium.com/netflix-techblog/building-a-cross-platform-in-app-messaging-orchestration-service-86ba614f92d8" rel="nofollow">Cross-platform In-app Messaging Orchestration Service at Netflix</a></li> <li><a href="https://medium.com/netflix-techblog/re-architecting-the-video-gatekeeper-f7b0ac2f6b00" rel="nofollow">Video Gatekeeper at Netflix</a></li> <li><a href="https://www.infoq.com/presentations/neflix-push-messaging-scale" rel="nofollow">Scaling Push Messaging for Millions of Devices at Netflix</a></li> <li><a href="http://engineering.indeedblog.com/blog/2017/06/delaying-messages/" rel="nofollow">Delaying Asynchronous Message Processing with RabbitMQ at Indeed</a></li> <li><a href="https://yahooeng.tumblr.com/post/135321837876/benchmarking-streaming-computation-engines-at" rel="nofollow">Benchmarking Streaming Computation Engines at Yahoo</a></li> <li><a href="https://deliveroo.engineering/2019/02/05/improving-stream-data-quality-with-protobuf-schema-validation.html" rel="nofollow">Improving Stream Data Quality With Protobuf Schema Validation at Deliveroo</a></li> <li><a href="https://medium.engineering/scaling-email-infrastructure-for-medium-digest-254223c883b8" rel="nofollow">Scaling Email Infrastructure at Medium</a></li> <li><a href="https://medium.com/nikeengineering/moving-faster-with-aws-by-creating-an-event-stream-database-dedec8ca3eeb" rel="nofollow">Event Stream Database at Nike</a></li> <li><a href="https://martinfowler.com/articles/201701-event-driven.html" rel="nofollow">Event-Driven Messaging</a> <ul dir="auto"> <li><a href="https://medium.com/swlh/creating-coding-excellence-with-domain-driven-design-88f73d2232c3" rel="nofollow">Domain-Driven Design at Alibaba</a></li> <li><a href="https://medium.com/weebly-engineering/how-to-organize-your-monolith-before-breaking-it-into-services-69cbdb9248b0" rel="nofollow">Domain-Driven Design at Weebly</a></li> <li><a href="https://engineering.moonpig.com/development/modelling-for-domain-driven-design" rel="nofollow">Domain-Driven Design at Moonpig</a></li> <li><a href="https://www.infoq.com/presentations/netflix-scale-event-sourcing" rel="nofollow">Scaling Event Sourcing for Netflix Downloads</a></li> <li><a href="https://medium.com/@eulerfx/scaling-event-sourcing-at-jet-9c873cac33b8" rel="nofollow">Scaling Event-Sourcing at Jet.com</a></li> <li><a href="https://www.ebayinc.com/stories/blogs/tech/event-sourcing-in-action-with-ebays-continuous-delivery-team/" rel="nofollow">Event Sourcing (2 parts) at eBay</a></li> <li><a href="https://medium.com/inside-freenow/event-sourcing-an-evolutionary-perspective-31e7387aa6f1" rel="nofollow">Event Sourcing at FREE NOW</a></li> <li><a href="https://medium.com/engineering-brainly/scalable-content-feed-using-event-sourcing-and-cqrs-patterns-e09df98bf977" rel="nofollow">Scalable content feed using Event Sourcing and CQRS patterns at Brainly</a></li> </ul> </li> <li><a href="https://aws.amazon.com/pub-sub-messaging/" rel="nofollow">Pub-Sub Messaging</a> <ul dir="auto"> <li><a href="https://yahooeng.tumblr.com/post/150078336821/open-sourcing-pulsar-pub-sub-messaging-at-scale" rel="nofollow">Pulsar: Pub-Sub Messaging at Scale at Yahoo</a></li> <li><a href="https://code.facebook.com/posts/188966771280871/wormhole-pub-sub-system-moving-data-through-space-and-time/" rel="nofollow">Wormhole: Pub-Sub System at Facebook</a></li> <li><a href="https://engineering.linecorp.com/en/blog/detail/85" rel="nofollow">Pub-Sub in Chatting Architecture at LINE</a></li> <li><a href="https://medium.com/netflix-techblog/how-netflix-microservices-tackle-dataset-pub-sub-4a068adcc9a" rel="nofollow">Pub-Sub in Microservices at Netflix</a></li> </ul> </li> <li><a href="https://martin.kleppmann.com/papers/kafka-debull15.pdf" rel="nofollow">Kafka - Message Broker</a> <ul dir="auto"> <li><a href="https://engineering.linkedin.com/kafka/running-kafka-scale" rel="nofollow">Kafka at LinkedIn</a></li> <li><a href="https://medium.com/pinterest-engineering/how-pinterest-runs-kafka-at-scale-ff9c6f735be" rel="nofollow">Kafka at Pinterest</a></li> <li><a href="https://tech.trello.com/why-we-chose-kafka/" rel="nofollow">Kafka at Trello</a></li> <li><a href="https://engineering.salesforce.com/how-apache-kafka-inspired-our-platform-events-architecture-2f351fe4cf63" rel="nofollow">Kafka at Salesforce</a></li> <li><a href="https://open.nytimes.com/publishing-with-apache-kafka-at-the-new-york-times-7f0e3b7d2077" rel="nofollow">Kafka at The New York Times</a></li> <li><a href="https://engineeringblog.yelp.com/2016/07/billions-of-messages-a-day-yelps-real-time-data-pipeline.html" rel="nofollow">Kafka at Yelp</a></li> <li><a href="https://medium.com/criteo-labs/upgrading-kafka-on-a-large-infra-3ee99f56e970" rel="nofollow">Kafka at Criteo</a></li> <li><a href="https://shopifyengineering.myshopify.com/blogs/engineering/running-apache-kafka-on-kubernetes-at-shopify" rel="nofollow">Kafka on Kubernetes at Shopify</a></li> <li><a href="https://engineeringblog.yelp.com/2019/01/migrating-kafkas-zookeeper-with-no-downtime.html" rel="nofollow">Migrating Kafka's Zookeeper with No Downtime at Yelp</a></li> <li><a href="https://eng.uber.com/reliable-reprocessing/" rel="nofollow">Reprocessing and Dead Letter Queues with Kafka at Uber</a></li> <li><a href="https://eng.uber.com/chaperone/" rel="nofollow">Chaperone: Audit Kafka End-to-End at Uber</a></li> <li><a href="https://blogs.dropbox.com/tech/2019/01/finding-kafkas-throughput-limit-in-dropbox-infrastructure/" rel="nofollow">Finding Kafka throughput limit in infrastructure at Dropbox</a></li> <li><a href="https://medium.com/walmartlabs/cost-orchestration-at-walmart-f34918af67c4" rel="nofollow">Cost Orchestration at Walmart</a></li> <li><a href="https://medium.com/hulu-tech-blog/how-hulu-uses-influxdb-and-kafka-to-scale-to-over-1-million-metrics-a-second-1721476aaff5" rel="nofollow">InfluxDB and Kafka to Scale to Over 1 Million Metrics a Second at Hulu</a></li> </ul> </li> <li><a href="https://en.wikipedia.org/wiki/Data_deduplication" rel="nofollow">Stream Data Deduplication</a> <ul dir="auto"> <li><a href="https://www.confluent.io/blog/exactly-once-semantics-are-possible-heres-how-apache-kafka-does-it/" rel="nofollow">Exactly-once Semantics with Kafka</a></li> <li><a href="http://eng.tapjoy.com/blog-list/real-time-deduping-at-scale" rel="nofollow">Real-time Deduping at Tapjoy</a></li> <li><a href="https://segment.com/blog/exactly-once-delivery/" rel="nofollow">Deduplication at Segment</a></li> <li><a href="https://medium.com/@andrewsumin/efficient-storage-how-we-went-down-from-50-pb-to-32-pb-99f9c61bf6b4" rel="nofollow">Deduplication at Mail.Ru</a></li> <li><a href="https://medium.com/mixpaneleng/petabyte-scale-data-deduplication-mixpanel-engineering-e808c70c99f8" rel="nofollow">Petabyte Scale Data Deduplication at Mixpanel</a></li> </ul> </li> </ul> </li> <li><a href="https://blog.codinghorror.com/the-problem-with-logging/" rel="nofollow">Distributed Logging</a> <ul dir="auto"> <li><a href="https://engineering.linkedin.com/distributed-systems/log-what-every-software-engineer-should-know-about-real-time-datas-unifying" rel="nofollow">Logging at LinkedIn</a></li> <li><a href="https://medium.com/@Pinterest_Engineering/scalable-and-reliable-data-ingestion-at-pinterest-b921c2ee8754" rel="nofollow">Scalable and Reliable Log Ingestion at Pinterest</a></li> <li><a href="https://blog.twitter.com/engineering/en_us/topics/infrastructure/2015/building-distributedlog-twitter-s-high-performance-replicated-log-servic.html" rel="nofollow">High-performance Replicated Log Service at Twitter</a></li> <li><a href="https://databricks.com/blog/2017/12/14/the-architecture-of-the-next-cern-accelerator-logging-service.html" rel="nofollow">Logging Service with Spark at CERN Accelerator</a></li> <li><a href="https://engineering.quora.com/Logging-and-Aggregation-at-Quora" rel="nofollow">Logging and Aggregation at Quora</a></li> <li><a href="https://badoo.com/techblog/blog/2016/06/06/collection-and-analysis-of-daemon-logs-at-badoo/" rel="nofollow">Collection and Analysis of Daemon Logs at Badoo</a></li> <li><a href="https://medium.com/palantir/using-static-code-analysis-to-improve-log-parsing-18f0d1843965" rel="nofollow">Log Parsing with Static Code Analysis at Palantir</a></li> <li><a href="https://tech.ebayinc.com/engineering/low-latency-and-high-throughput-cal-ingress/" rel="nofollow">Centralized Application Logging at eBay</a></li> <li><a href="https://netflixtechblog.com/hyper-scale-vpc-flow-logs-enrichment-to-provide-network-insight-e5f1db02910d" rel="nofollow">Enrich VPC Flow Logs at Hyper Scale to provide Network Insight at Netflix</a></li> <li><a href="https://yahooeng.tumblr.com/post/109908973316/bookkeeper-yahoos-distributed-log-storage-is" rel="nofollow">BookKeeper: Distributed Log Storage at Yahoo</a></li> <li><a href="https://code.facebook.com/posts/357056558062811/logdevice-a-distributed-data-store-for-logs/" rel="nofollow">LogDevice: Distributed Data Store for Logs at Facebook</a></li> <li><a href="https://engineeringblog.yelp.com/2018/03/introducing-logfeeder.html" rel="nofollow">LogFeeder: Log Collection System at Yelp</a></li> <li><a href="https://medium.com/netflix-techblog/dblog-a-generic-change-data-capture-framework-69351fb9099b" rel="nofollow">DBLog: Generic Change-Data-Capture Framework at Netflix</a></li> </ul> </li> <li><a href="http://nwds.cs.washington.edu/files/nwds/pdf/Distributed-WR.pdf" rel="nofollow">Distributed Searching</a> <ul dir="auto"> <li><a href="https://instagram-engineering.com/search-architecture-eeb34a936d3a" rel="nofollow">Search Architecture at Instagram</a></li> <li><a href="http://www.cs.otago.ac.nz/homepages/andrew/papers/2017-8.pdf" rel="nofollow">Search Architecture at eBay</a></li> <li><a href="https://medium.com/box-tech-blog/scaling-box-search-using-lumos-22d9e0cb4175" rel="nofollow">Search Architecture at Box</a></li> <li><a href="https://medium.com/coupang-tech/the-evolution-of-search-discovery-indexing-platform-fa43e41305f9" rel="nofollow">Search Discovery Indexing Platform at Coupang</a></li> <li><a href="https://medium.com/pinterest-engineering/building-a-universal-search-system-for-pinterest-e4cb03a898d4" rel="nofollow">Universal Search System at Pinterest</a></li> <li><a href="https://www.ebayinc.com/stories/blogs/tech/making-e-commerce-search-faster/" rel="nofollow">Improving Search Engine Efficiency by over 25% at eBay</a></li> <li><a href="https://medium.com/palantir/indexing-and-querying-telemetry-logs-with-lucene-234c5ce3e5f3" rel="nofollow">Indexing and Querying Telemetry Logs with Lucene at Palantir</a></li> <li><a href="https://www.tripadvisor.com/engineering/query-understanding-at-tripadvisor/" rel="nofollow">Query Understanding at TripAdvisor</a></li> <li><a href="https://engineering.linkedin.com/blog/2018/03/search-federation-architecture-at-linkedin" rel="nofollow">Search Federation Architecture at LinkedIn (2018)</a></li> <li><a href="https://slack.engineering/search-at-slack-431f8c80619e" rel="nofollow">Search at Slack</a></li> <li><a href="https://blog.doordash.com/powering-search-recommendations-at-doordash-8310c5cfd88c" rel="nofollow">Search and Recommendations at DoorDash</a></li> <li><a href="https://blog.twitter.com/engineering/en_us/a/2014/building-a-complete-tweet-index.html" rel="nofollow">Search Service at Twitter (2014)</a></li> <li><a href="https://medium.com/traveloka-engineering/high-quality-autocomplete-search-part-2-d5b15bb0dadf" rel="nofollow">Autocomplete Search (2 parts) at Traveloka</a></li> <li><a href="https://product.canva.com/building-a-data-driven-autocorrection-system/" rel="nofollow">Data-Driven Autocorrection System at Canva</a></li> <li><a href="https://tech.flipkart.com/adapting-search-to-indian-phonetics-cdbe65259686" rel="nofollow">Adapting Search to Indian Phonetics at Flipkart</a></li> <li><a href="https://blogs.dropbox.com/tech/2018/09/architecture-of-nautilus-the-new-dropbox-search-engine/" rel="nofollow">Nautilus: Search Engine at Dropbox</a></li> <li><a href="https://engineering.linkedin.com/search/did-you-mean-galene" rel="nofollow">Galene: Search Architecture of LinkedIn</a></li> <li><a href="https://medium.com/@Pinterest_Engineering/manas-a-high-performing-customized-search-system-cf189f6ca40f" rel="nofollow">Manas: High Performing Customized Search System at Pinterest</a></li> <li><a href="https://tech.flipkart.com/sherlock-near-real-time-search-indexing-95519783859d" rel="nofollow">Sherlock: Near Real Time Search Indexing at Flipkart</a></li> <li><a href="https://medium.com/airbnb-engineering/nebula-as-a-storage-platform-to-build-airbnbs-search-backends-ecc577b05f06" rel="nofollow">Nebula: Storage Platform to Build Search Backends at Airbnb</a></li> <li><a href="https://logz.io/blog/15-tech-companies-chose-elk-stack/" rel="nofollow">ELK (Elasticsearch, Logstash, Kibana) Stack</a> <ul dir="auto"> <li><a href="https://eng.uber.com/elk/" rel="nofollow">Predictions in Real Time with ELK at Uber</a></li> <li><a href="https://webuild.envato.com/blog/building-a-scalable-elk-stack/" rel="nofollow">Building a scalable ELK stack at Envato</a></li> <li><a href="https://robinhood.engineering/taming-elk-4e1349f077c3" rel="nofollow">ELK at Robinhood</a></li> <li><a href="https://www.infoq.com/presentations/uber-elasticsearch-clusters?utm_source=presentations_about_Case_Study&utm_medium=link&utm_campaign=Case_Study" rel="nofollow">Scaling Elasticsearch Clusters at Uber</a></li> <li><a href="https://www.ebayinc.com/stories/blogs/tech/elasticsearch-performance-tuning-practice-at-ebay/" rel="nofollow">Elasticsearch Performance Tuning Practice at eBay</a></li> <li><a href="https://medium.com/tinder-engineering/how-we-improved-our-performance-using-elasticsearch-plugins-part-2-b051da2ee85b" rel="nofollow">Improve Performance using Elasticsearch Plugins (2 parts) at Tinder</a></li> <li><a href="https://kickstarter.engineering/elasticsearch-at-kickstarter-db3c487887fc" rel="nofollow">Elasticsearch at Kickstarter</a></li> <li><a href="https://tech.target.com/2017/05/25/elasticsearch-cloud.html" rel="nofollow">Elasticsearch at Target</a></li> <li><a href="https://tech.trivago.com/2016/01/19/logstash_protobuf_codec/" rel="nofollow">Log Parsing with Logstash and Google Protocol Buffers at Trivago</a></li> <li><a href="https://engineeringblog.yelp.com/2018/06/fast-order-search.html" rel="nofollow">Fast Order Search using Data Pipeline and Elasticsearch at Yelp</a></li> <li><a href="https://engineeringblog.yelp.com/2017/06/moving-yelps-core-business-search-to-elasticsearch.html" rel="nofollow">Moving Core Business Search to Elasticsearch at Yelp</a></li> <li><a href="http://engineering.vinted.com/2017/06/05/sharding-out-elasticsearch/" rel="nofollow">Sharding out Elasticsearch at Vinted</a></li> <li><a href="http://engineering.wattpad.com/post/146216619727/self-ranking-search-with-elasticsearch-at-wattpad" rel="nofollow">Self-Ranking Search with Elasticsearch at Wattpad</a></li> <li><a href="https://github.blog/2019-03-05-vulcanizer-a-library-for-operating-elasticsearch/" rel="nofollow">Vulcanizer: a library for operating Elasticsearch at Github</a></li> </ul> </li> </ul> </li> <li><a href="http://highscalability.com/blog/2011/11/1/finding-the-right-data-solution-for-your-application-in-the.html" rel="nofollow">Distributed Storage</a> <ul dir="auto"> <li><a href="https://medium.com/@denisanikin/what-an-in-memory-database-is-and-how-it-persists-data-efficiently-f43868cff4c1" rel="nofollow">In-memory Storage</a> <ul dir="auto"> <li><a href="http://highscalability.com/blog/2012/8/14/memsql-architecture-the-fast-mvcc-inmem-lockfree-codegen-and.html" rel="nofollow">MemSQL Architecture - The Fast (MVCC, InMem, LockFree, CodeGen) And Familiar (SQL)</a></li> <li><a href="https://engineering.quora.com/Optimizing-Memcached-Efficiency" rel="nofollow">Optimizing Memcached Efficiency at Quora</a></li> <li><a href="https://blogs.cisco.com/datacenter/memsql" rel="nofollow">Real-Time Data Warehouse with MemSQL on Cisco UCS</a></li> <li><a href="http://eng.tapjoy.com/blog-list/moving-to-memsql" rel="nofollow">Moving to MemSQL at Tapjoy</a></li> <li><a href="https://conferences.oreilly.com/strata/strata-ca/public/schedule/detail/68131" rel="nofollow">MemSQL and Kinesis for Real-time Insights at Disney</a></li> <li><a href="https://engineering.pandora.com/using-memsql-at-pandora-79a86cb09b57" rel="nofollow">MemSQL to Query Hundreds of Billions of Rows in a Dashboard at Pandora</a></li> </ul> </li> <li><a href="http://www.datacenterknowledge.com/archives/2013/10/04/object-storage-the-future-of-scale-out" rel="nofollow">Object Storage</a> <ul dir="auto"> <li><a href="https://eng.uber.com/scaling-hdfs/" rel="nofollow">Scaling HDFS at Uber</a></li> <li><a href="https://databricks.com/blog/2017/05/31/top-5-reasons-for-choosing-s3-over-hdfs.html" rel="nofollow">Reasons for Choosing S3 over HDFS at Databricks</a></li> <li><a href="https://www.quantcast.com/blog/quantcast-file-system-on-amazon-s3/" rel="nofollow">File System on Amazon S3 at Quantcast</a></li> <li><a href="https://tech.trivago.com/2018/09/03/efficient-image-recovery-at-scale-using-amazon-s3-versioning/" rel="nofollow">Image Recovery at Scale Using S3 Versioning at Trivago</a></li> <li><a href="https://yahooeng.tumblr.com/post/116391291701/yahoo-cloud-object-store-object-storage-at" rel="nofollow">Cloud Object Store at Yahoo</a></li> <li><a href="https://www.usenix.org/conference/srecon17americas/program/presentation/shenoy" rel="nofollow">Ambry: Distributed Immutable Object Store at LinkedIn</a></li> <li><a href="https://engineering.linkedin.com/blog/2018/02/dynamometer--scale-testing-hdfs-on-minimal-hardware-with-maximum" rel="nofollow">Dynamometer: Scale Testing HDFS on Minimal Hardware with Maximum Fidelity at LinkedIn</a></li> <li><a href="https://medium.com/airbnb-engineering/hammerspace-persistent-concurrent-off-heap-storage-3db39bb04472" rel="nofollow">Hammerspace: Persistent, Concurrent, Off-heap Storage at Airbnb</a></li> <li><a href="https://medium.com/netflix-techblog/mezzfs-mounting-object-storage-in-netflixs-media-processing-platform-cda01c446ba" rel="nofollow">MezzFS: Mounting Object Storage in Media Processing Platform at Netflix</a></li> <li><a href="https://blogs.dropbox.com/tech/2016/05/inside-the-magic-pocket/" rel="nofollow">Magic Pocket: In-house Multi-exabyte Storage System at Dropbox</a></li> </ul> </li> </ul> </li> <li><a href="https://www.mysql.com/products/cluster/scalability.html" rel="nofollow">Relational Databases</a> <ul dir="auto"> <li><a href="https://backchannel.org/blog/friendfeed-schemaless-mysql" rel="nofollow">MySQL for Schema-less Data at FriendFeed</a></li> <li><a href="https://medium.com/@Pinterest_Engineering/learn-to-stop-using-shiny-new-things-and-love-mysql-3e1613c2ce14" rel="nofollow">MySQL at Pinterest</a></li> <li><a href="https://blog.twitch.tv/how-twitch-uses-postgresql-c34aa9e56f58" rel="nofollow">PostgreSQL at Twitch</a></li> <li><a href="https://medium.com/airbnb-engineering/tracking-the-money-scaling-financial-reporting-at-airbnb-6d742b80f040" rel="nofollow">Scaling MySQL-based Financial Reporting System at Airbnb</a></li> <li><a href="https://www.wix.engineering/single-post/scaling-to-100m-mysql-is-a-better-nosql" rel="nofollow">Scaling MySQL at Wix</a></li> <li><a href="https://medium.com/airbnb-engineering/unlocking-horizontal-scalability-in-our-web-serving-tier-d907449cdbcf" rel="nofollow">MaxScale (MySQL) Database Proxy at Airbnb</a></li> <li><a href="https://eng.uber.com/mysql-migration/" rel="nofollow">Switching from Postgres to MySQL at Uber</a></li> <li><a href="https://engineering.instagram.com/handling-growth-with-postgres-5-tips-from-instagram-d5d7e7ffdfcb" rel="nofollow">Handling Growth with Postgres at Instagram</a></li> <li><a href="http://tech.transferwise.com/scaling-our-analytics-database/" rel="nofollow">Scaling the Analytics Database (Postgres) at TransferWise</a></li> <li><a href="https://medium.com/adyen/updating-a-50-terabyte-postgresql-database-f64384b799e7" rel="nofollow">Updating a 50 Terabyte PostgreSQL Database at Adyen</a></li> <li><a href="https://medium.com/paypal-engineering/scaling-database-access-for-100s-of-billions-of-queries-per-day-paypal-introducing-hera-e192adacda54" rel="nofollow">Scaling Database Access for 100s of Billions of Queries per Day at PayPal</a></li> <li><a href="https://engineeringblog.yelp.com/2020/11/minimizing-read-write-mysql-downtime.html" rel="nofollow">Minimizing Read-Write MySQL Downtime at Yelp</a></li> <li><a href="https://m.alphasights.com/a-primer-on-database-replication-381b319cd032" rel="nofollow">Replication</a> <ul dir="auto"> <li><a href="https://medium.com/booking-com-infrastructure/evaluating-mysql-parallel-replication-part-4-annex-under-the-hood-eb456cf8b2fb" rel="nofollow">MySQL Parallel Replication (4 parts) at Booking.com</a></li> <li><a href="https://githubengineering.com/mitigating-replication-lag-and-reducing-read-load-with-freno/" rel="nofollow">Mitigating MySQL Replication Lag and Reducing Read Load at Github</a></li> <li><a href="https://shopify.engineering/read-consistency-database-replicas" rel="nofollow">Read Consistency with Database Replicas at Shopify</a></li> <li><a href="https://engineeringblog.yelp.com/2018/04/black-box-auditing.html" rel="nofollow">Black-Box Auditing: Verifying End-to-End Replication Integrity between MySQL and Redshift at Yelp</a></li> <li><a href="https://medium.com/airbnb-engineering/how-we-partitioned-airbnb-s-main-database-in-two-weeks-55f7e006ff21" rel="nofollow">Partitioning Main MySQL Database at Airbnb</a></li> <li><a href="https://eng.uber.com/herb-datacenter-replication/" rel="nofollow">Herb: Multi-DC Replication Engine for Schemaless Datastore at Uber</a></li> </ul> </li> <li><a href="https://quabase.sei.cmu.edu/mediawiki/index.php/Shard_data_set_across_multiple_servers_(Range-based)" rel="nofollow">Sharding</a> <ul dir="auto"> <li><a href="https://medium.com/@Pinterest_Engineering/sharding-pinterest-how-we-scaled-our-mysql-fleet-3f341e96ca6f" rel="nofollow">Sharding MySQL at Pinterest</a></li> <li><a href="https://www.twilio.com/engineering/2014/06/26/how-we-replaced-our-data-pipeline-with-zero-downtime" rel="nofollow">Sharding MySQL at Twilio</a></li> <li><a href="https://medium.com/square-corner-blog/sharding-cash-10280fa3ef3b" rel="nofollow">Sharding MySQL at Square</a></li> <li><a href="https://www.quora.com/q/quoraengineering/MySQL-sharding-at-Quora" rel="nofollow">Sharding MySQL at Quora</a></li> <li><a href="https://eng.uber.com/schemaless-rewrite/" rel="nofollow">Sharding Layer of Schemaless Datastore at Uber</a></li> <li><a href="https://instagram-engineering.com/sharding-ids-at-instagram-1cf5a71e5a5c" rel="nofollow">Sharding & IDs at Instagram</a></li> <li><a href="https://www.notion.so/blog/sharding-postgres-at-notion" rel="nofollow">Sharding Postgres at Notion</a></li> <li><a href="https://blog.box.com/blog/solr-improving-performance-batch-indexing/" rel="nofollow">Solr: Improving Performance for Batch Indexing at Box</a></li> <li><a href="https://medium.com/tinder-engineering/geosharded-recommendations-part-3-consistency-2d2cb2f0594b" rel="nofollow">Geosharded Recommendations (3 parts) at Tinder</a></li> <li><a href="https://engineering.fb.com/production-engineering/scaling-services-with-shard-manager/" rel="nofollow">Scaling Services with Shard Manager at Facebook</a></li> </ul> </li> <li><a href="https://research.fb.com/wp-content/uploads/2019/03/Presto-SQL-on-Everything.pdf?" rel="nofollow">Presto the Distributed SQL Query Engine</a> <ul dir="auto"> <li><a href="https://medium.com/@Pinterest_Engineering/presto-at-pinterest-a8bda7515e52" rel="nofollow">Presto at Pinterest</a></li> <li><a href="https://eng.lyft.com/presto-infrastructure-at-lyft-b10adb9db01" rel="nofollow">Presto Infrastructure at Lyft</a></li> <li><a href="https://engineering.grab.com/scaling-like-a-boss-with-presto" rel="nofollow">Presto at Grab</a></li> <li><a href="https://eng.uber.com/presto/" rel="nofollow">Engineering Data Analytics with Presto and Apache Parquet at Uber</a></li> <li><a href="https://slack.engineering/data-wrangling-at-slack-f2e0ff633b69" rel="nofollow">Data Wrangling at Slack</a></li> <li><a href="https://medium.com/netflix-techblog/using-presto-in-our-big-data-platform-on-aws-938035909fd4" rel="nofollow">Presto in Big Data Platform on AWS at Netflix</a></li> <li><a href="https://www.eventbrite.com/engineering/big-data-workloads-presto-auto-scaling/" rel="nofollow">Presto Auto Scaling at Eventbrite</a></li> </ul> </li> </ul> </li> <li><a href="https://www.thoughtworks.com/insights/blog/nosql-databases-overview" rel="nofollow">NoSQL Databases</a> <ul dir="auto"> <li><a href="http://www.cs.ucsb.edu/~agrawal/fall2009/dynamo.pdf" rel="nofollow">Key-Value Databases</a> <ul dir="auto"> <li><a href="https://medium.com/nikeengineering/becoming-a-nimble-giant-how-dynamo-db-serves-nike-at-scale-4cc375dbb18e" rel="nofollow">DynamoDB at Nike</a></li> <li><a href="https://segment.com/blog/the-million-dollar-eng-problem/" rel="nofollow">DynamoDB at Segment</a></li> <li><a href="https://blog.mapbox.com/scaling-mapbox-infrastructure-with-dynamodb-streams-d53eabc5e972" rel="nofollow">DynamoDB at Mapbox</a></li> <li><a href="https://blog.twitter.com/engineering/en_us/a/2014/manhattan-our-real-time-multi-tenant-distributed-database-for-twitter-scale.html" rel="nofollow">Manhattan: Distributed Key-Value Database at Twitter</a></li> <li><a href="https://yahooeng.tumblr.com/post/120730204806/sherpa-scales-new-heights" rel="nofollow">Sherpa: Distributed NoSQL Key-Value Store at Yahoo</a></li> <li><a href="https://yahooeng.tumblr.com/post/178262468576/introducing-halodb-a-fast-embedded-key-value" rel="nofollow">HaloDB: Embedded Key-Value Storage Engine at Yahoo</a></li> <li><a href="http://engineering.indeedblog.com/blog/2018/02/indeed-mph/" rel="nofollow">MPH: Fast and Compact Immutable Key-Value Stores at Indeed</a></li> <li><a href="https://engineering.linkedin.com/blog/2017/02/building-venice-with-apache-helix" rel="nofollow">Venice: Distributed Key-Value Database at Linkedin</a></li> </ul> </li> <li><a href="https://aws.amazon.com/nosql/columnar/" rel="nofollow">Columnar Databases</a> <ul dir="auto"> <li><a href="http://www.cs.cornell.edu/projects/ladis2009/papers/lakshman-ladis2009.pdf" rel="nofollow">Cassandra</a> <ul dir="auto"> <li><a href="https://www.slideshare.net/DataStax/cassandra-at-instagram-2016" rel="nofollow">Cassandra at Instagram</a></li> <li><a href="https://medium.com/walmartlabs/building-object-store-storing-images-in-cassandra-walmart-scale-a6b9c02af593" rel="nofollow">Storing Images in Cassandra at Walmart</a></li> <li><a href="https://blog.discordapp.com/how-discord-stores-billions-of-messages-7fa6ec7ee4c7" rel="nofollow">Storing Messages with Cassandra at Discord</a></li> <li><a href="https://medium.com/walmartlabs/avoid-pitfalls-in-scaling-your-cassandra-cluster-lessons-and-remedies-a71ca01f8c04" rel="nofollow">Scaling Cassandra Cluster at Walmart</a></li> <li><a href="https://engineeringblog.yelp.com/2016/08/how-we-scaled-our-ad-analytics-with-cassandra.html" rel="nofollow">Scaling Ad Analytics with Cassandra at Yelp</a></li> <li><a href="https://medium.com/dream11-tech-blog/leaderboard-dream11-4efc6f93c23e" rel="nofollow">Scaling to 100+ Million Reads/Writes using Spark and Cassandra at Dream11</a></li> <li><a href="https://www.zomato.com/blog/how-we-moved-our-food-feed-from-redis-to-cassandra" rel="nofollow">Moving Food Feed from Redis to Cassandra at Zomato</a></li> <li><a href="https://medium.com/netflix-techblog/benchmarking-cassandra-scalability-on-aws-over-a-million-writes-per-second-39f45f066c9e" rel="nofollow">Benchmarking Cassandra Scalability on AWS at Netflix</a></li> <li><a href="https://quickbooks-engineering.intuit.com/service-decomposition-at-scale-70405ac2f637" rel="nofollow">Service Decomposition at Scale with Cassandra at Intuit QuickBooks</a></li> <li><a href="https://developers.soundcloud.com/blog/keeping-counts-in-sync" rel="nofollow">Cassandra for Keeping Counts In Sync at SoundCloud</a></li> <li><a href="https://labs.spotify.com/2018/09/04/introducing-cstar-the-spotify-cassandra-orchestration-tool-now-open-source/" rel="nofollow">cstar: Cassandra Orchestration Tool at Spotify</a></li> </ul> </li> <li><a href="https://hbase.apache.org/" rel="nofollow">HBase</a> <ul dir="auto"> <li><a href="https://engineering.salesforce.com/investing-in-big-data-apache-hbase-b9d98661a66b" rel="nofollow">HBase at Salesforce</a></li> <li><a href="https://www.facebook.com/notes/facebook-engineering/the-underlying-technology-of-messages/454991608919/" rel="nofollow">HBase in Facebook Messages</a></li> <li><a href="https://blog.imgur.com/2015/09/15/tech-tuesday-imgur-notifications-from-mysql-to-hbase/" rel="nofollow">HBase in Imgur Notification</a></li> <li><a href="https://medium.com/@Pinterest_Engineering/improving-hbase-backup-efficiency-at-pinterest-86159da4b954" rel="nofollow">Improving HBase Backup Efficiency at Pinterest</a></li> <li><a href="https://www.slideshare.net/HBaseCon/hbase-practice-at-xiaomi" rel="nofollow">HBase at Xiaomi</a></li> </ul> </li> <li><a href="https://www.allthingsdistributed.com/2018/11/amazon-redshift-performance-optimization.html" rel="nofollow">Redshift</a> <ul dir="auto"> <li><a href="https://engineering.giphy.com/scaling-redshift-without-scaling-costs/" rel="nofollow">Redshift at GIPHY</a></li> <li><a href="https://www.hudl.com/bits/the-low-hanging-fruit-of-redshift-performance" rel="nofollow">Redshift at Hudl</a></li> <li><a href="https://drivy.engineering/redshift_tips_ticks_part_1/" rel="nofollow">Redshift at Drivy</a></li> </ul> </li> </ul> </li> <li><a href="https://msdn.microsoft.com/en-us/magazine/hh547103.aspx" rel="nofollow">Document Databases</a> <ul dir="auto"> <li><a href="https://www.mongodb.com/blog/post/ebay-building-mission-critical-multi-data-center-applications-with-mongodb" rel="nofollow">eBay: Building Mission-Critical Multi-Data Center Applications with MongoDB</a></li> <li><a href="https://www.mongodb.com/blog/post/mongodb-at-baidu-powering-100-apps-across-600-nodes-at-pb-scale" rel="nofollow">MongoDB at Baidu: Multi-Tenant Cluster Storing 200+ Billion Documents across 160 Shards</a></li> <li><a href="https://medium.com/build-addepar/migrating-mountains-of-mongo-data-63e530539952" rel="nofollow">Migrating Mongo Data at Addepar</a></li> <li><a href="https://medium.baqend.com/parse-is-gone-a-few-secrets-about-their-infrastructure-91b3ab2fcf71" rel="nofollow">The AWS and MongoDB Infrastructure of Parse (acquired by Facebook)</a></li> <li><a href="https://medium.com/build-addepar/migrating-mountains-of-mongo-data-63e530539952" rel="nofollow">Migrating Mountains of Mongo Data at Addepar</a></li> <li><a href="https://engineering.linkedin.com/blog/2017/12/couchbase-ecosystem-at-linkedin" rel="nofollow">Couchbase Ecosystem at LinkedIn</a></li> <li><a href="https://medium.com/zendesk-engineering/resurrecting-amazon-simpledb-9404034ec506" rel="nofollow">SimpleDB at Zendesk</a></li> <li><a href="https://engineering.linkedin.com/espresso/introducing-espresso-linkedins-hot-new-distributed-document-store" rel="nofollow">Espresso: Distributed Document Store at LinkedIn</a></li> </ul> </li> <li><a href="https://www.eecs.harvard.edu/margo/papers/systor13-bench/" rel="nofollow">Graph Databases</a> <ul dir="auto"> <li><a href="https://blog.twitter.com/engineering/en_us/a/2010/introducing-flockdb.html" rel="nofollow">FlockDB: Distributed Graph Database at Twitter</a></li> <li><a href="https://www.cs.cmu.edu/~pavlo/courses/fall2013/static/papers/11730-atc13-bronson.pdf" rel="nofollow">TAO: Distributed Data Store for the Social Graph at Facebook</a></li> <li><a href="https://tech.ebayinc.com/engineering/akutan-a-distributed-knowledge-graph-store/" rel="nofollow">Akutan: Distributed Knowledge Graph Store at eBay</a></li> </ul> </li> </ul> </li> <li><a href="https://www.influxdata.com/time-series-database/" rel="nofollow">Time Series Databases</a> <ul dir="auto"> <li><a href="https://code.facebook.com/posts/952820474848503/beringei-a-high-performance-time-series-storage-engine/" rel="nofollow">Beringei: High-performance Time Series Storage Engine at Facebook</a></li> <li><a href="https://blog.twitter.com/engineering/en_us/topics/infrastructure/2019/metricsdb.html" rel="nofollow">MetricsDB: TimeSeries Database for storing metrics at Twitter</a></li> <li><a href="https://medium.com/netflix-techblog/introducing-atlas-netflixs-primary-telemetry-platform-bd31f4d8ed9a" rel="nofollow">Atlas: In-memory Dimensional Time Series Database at Netflix</a></li> <li><a href="https://labs.spotify.com/2015/11/17/monitoring-at-spotify-introducing-heroic/" rel="nofollow">Heroic: Time Series Database at Spotify</a></li> <li><a href="https://developers.soundcloud.com/blog/roshi-a-crdt-system-for-timestamped-events" rel="nofollow">Roshi: Distributed Storage System for Time-Series Event at SoundCloud</a></li> <li><a href="https://medium.com/@Pinterest_Engineering/goku-building-a-scalable-and-high-performant-time-series-database-system-a8ff5758a181" rel="nofollow">Goku: Time Series Database at Pinterest</a></li> <li><a href="https://medium.com/netflix-techblog/scaling-time-series-data-storage-part-ii-d67939655586" rel="nofollow">Scaling Time Series Data Storage (2 parts) at Netflix</a></li> <li><a href="https://druid.apache.org/" rel="nofollow">Druid - Real-time Analytics Database</a> <ul dir="auto"> <li><a href="https://medium.com/airbnb-engineering/druid-airbnb-data-platform-601c312f2a4c" rel="nofollow">Druid at Airbnb</a></li> <li><a href="https://medium.com/walmartlabs/event-stream-analytics-at-walmart-with-druid-dcf1a37ceda7" rel="nofollow">Druid at Walmart</a></li> <li><a href="https://tech.ebayinc.com/engineering/monitoring-at-ebay-with-druid/" rel="nofollow">Druid at eBay</a></li> <li><a href="https://netflixtechblog.com/how-netflix-uses-druid-for-real-time-insights-to-ensure-a-high-quality-experience-19e1e8568d06" rel="nofollow">Druid at Netflix</a></li> </ul> </li> </ul> </li> <li><a href="https://betterexplained.com/articles/intro-to-distributed-version-control-illustrated/" rel="nofollow">Distributed Repositories, Dependencies, and Configurations Management</a> <ul dir="auto"> <li><a href="https://githubengineering.com/introducing-dgit/" rel="nofollow">DGit: Distributed Git at Github</a></li> <li><a href="https://medium.com/@palantir/stemma-distributed-git-server-70afbca0fc29" rel="nofollow">Stemma: Distributed Git Server at Palantir</a></li> <li><a href="https://code.flickr.net/2016/03/24/configuration-management-for-distributed-systems-using-github-and-cfg4j/" rel="nofollow">Configuration Management for Distributed Systems at Flickr</a></li> <li><a href="https://blogs.msdn.microsoft.com/bharry/2017/05/24/the-largest-git-repo-on-the-planet/" rel="nofollow">Git Repository at Microsoft</a></li> <li><a href="https://www.infoq.com/news/2017/02/GVFS" rel="nofollow">Solve Git Problem with Large Repositories at Microsoft</a></li> <li><a href="https://cacm.acm.org/magazines/2016/7/204032-why-google-stores-billions-of-lines-of-code-in-a-single-repository/fulltext" rel="nofollow">Single Repository at Google</a></li> <li><a href="https://medium.com/adyen/from-0-100-billion-scaling-infrastructure-and-workflow-at-adyen-7b63b690dfb6" rel="nofollow">Scaling Infrastructure and (Git) Workflow at Adyen</a></li> <li><a href="https://medium.com/booking-com-infrastructure/dotfiles-distribution-dedb69c66a75" rel="nofollow">Dotfiles Distribution at Booking.com</a></li> <li><a href="https://engineeringblog.yelp.com/2018/06/yelps-secret-detector.html" rel="nofollow">Secret Detector: Preventing Secrets in Source Code at Yelp</a></li> <li><a href="https://engineering.linkedin.com/blog/2018/09/managing-software-dependency-at-scale" rel="nofollow">Managing Software Dependency at Scale at LinkedIn</a></li> <li><a href="https://engineering.linkedin.com/blog/2020/continuous-integration" rel="nofollow">Merging Code in High-velocity Repositories at LinkedIn</a></li> <li><a href="https://blog.twitter.com/engineering/en_us/topics/infrastructure/2018/dynamic-configuration-at-twitter.html" rel="nofollow">Dynamic Configuration at Twitter</a></li> <li><a href="https://medium.com/mixpaneleng/dynamic-configuration-at-mixpanel-94bfcf97d6b8" rel="nofollow">Dynamic Configuration at Mixpanel</a></li> <li><a href="https://sg.godaddy.com/engineering/2019/03/06/dynamic-configuration-for-nodejs/" rel="nofollow">Dynamic Configuration at GoDaddy</a></li> </ul> </li> <li><a href="https://www.synopsys.com/blogs/software-security/agile-cicd-devops-glossary/" rel="nofollow">Scaling Continuous Integration and Continuous Delivery</a> <ul dir="auto"> <li><a href="https://code.fb.com/web/rapid-release-at-massive-scale/" rel="nofollow">Continuous Integration Stack at Facebook</a></li> <li><a href="https://medium.com/netflix-techblog/towards-true-continuous-integration-distributed-repositories-and-dependencies-2a2e3108c051" rel="nofollow">Continuous Integration with Distributed Repositories and Dependencies at Netflix</a></li> <li><a href="https://blogs.dropbox.com/tech/2019/12/continuous-integration-and-deployment-with-bazel/" rel="nofollow">Continuous Integration and Deployment with Bazel at Dropbox</a></li> <li><a href="https://tech.buzzfeed.com/continuous-deployments-at-buzzfeed-d171f76c1ac4" rel="nofollow">Continuous Deployments at BuzzFeed</a></li> <li><a href="https://yahooeng.tumblr.com/post/155765242061/open-sourcing-screwdriver-yahoos-continuous" rel="nofollow">Screwdriver: Continuous Delivery Build System for Dynamic Infrastructure at Yahoo</a></li> <li><a href="https://www.betterment.com/resources/ci-cd-shortening-the-feedback-loop/" rel="nofollow">CI/CD at Betterment</a></li> <li><a href="https://medium.com/engineering-brainly/ci-cd-at-scale-fdfb0f49e031" rel="nofollow">CI/CD at Brainly</a></li> <li><a href="https://engineering.shopify.com/blogs/engineering/scaling-ios-ci-with-anka" rel="nofollow">Scaling iOS CI with Anka at Shopify</a></li> <li><a href="https://engineeringblog.yelp.com/2019/04/Scaling-Jira-Server-Administration-For-The-Enterprise.html" rel="nofollow">Scaling Jira Server at Yelp</a></li> <li><a href="https://flexport.engineering/how-flexport-halved-testing-costs-with-an-auto-scaling-ci-cd-cluster-8304297222f" rel="nofollow">Auto-scaling CI/CD cluster at Flexport</a></li> </ul> </li> </ul> <div class="markdown-heading" dir="auto"><h2 tabindex="-1" class="heading-element" dir="auto">Availability</h2><a id="user-content-availability" class="anchor" aria-label="Permalink: Availability" href="#availability"><svg class="octicon octicon-link" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg></a></div> <ul dir="auto"> <li><a href="https://queue.acm.org/detail.cfm?id=2371297" rel="nofollow">Resilience Engineering: Learning to Embrace Failure</a> <ul dir="auto"> <li><a href="https://engineering.linkedin.com/blog/2017/11/resilience-engineering-at-linkedin-with-project-waterbear" rel="nofollow">Resilience Engineering with Project Waterbear at LinkedIn</a></li> <li><a href="https://tech.iheart.com/resiliency-against-traffic-oversaturation-77c5ed92a5fb" rel="nofollow">Resiliency against Traffic Oversaturation at iHeartRadio</a></li> <li><a href="https://blog.gojekengineering.com/resiliency-in-distributed-systems-efd30f74baf4" rel="nofollow">Resiliency in Distributed Systems at GO-JEK</a></li> <li><a href="https://www.ebayinc.com/stories/blogs/tech/practical-nosql-resilience-design-pattern-for-the-enterprise/" rel="nofollow">Practical NoSQL Resilience Design Pattern for the Enterprise at eBay</a></li> <li><a href="https://engineering.quora.com/Ensuring-Quoras-Resilience-to-Disaster" rel="nofollow">Ensuring Resilience to Disaster at Quora</a></li> <li><a href="https://www.infoq.com/presentations/expedia-website-resiliency?utm_source=presentations_about_Case_Study&utm_medium=link&utm_campaign=Case_Study" rel="nofollow">Site Resiliency at Expedia</a></li> <li><a href="https://tech.ebayinc.com/engineering/resiliency-and-disaster-recovery-with-kafka/" rel="nofollow">Resiliency and Disaster Recovery with Kafka at eBay</a></li> <li><a href="https://eng.uber.com/kafka/" rel="nofollow">Disaster Recovery for Multi-Region Kafka at Uber</a></li> </ul> </li> <li><a href="http://cloudpatterns.org/mechanisms/failover_system" rel="nofollow">Failover</a> <ul dir="auto"> <li><a href="https://www.usenix.org/conference/srecon16/program/presentation/heady" rel="nofollow">The Evolution of Global Traffic Routing and Failover</a></li> <li><a href="https://www.usenix.org/conference/srecon17asia/program/presentation/liu_zehua" rel="nofollow">Testing for Disaster Recovery Failover Testing</a></li> <li><a href="https://blog.risingstack.com/designing-microservices-architecture-for-failure/" rel="nofollow">Designing a Microservices Architecture for Failure</a></li> <li><a href="https://engineering.gosquared.com/use-elb-automatic-failover" rel="nofollow">ELB for Automatic Failover at GoSquared</a></li> <li><a href="http://americanexpress.io/eliminate-the-database-for-higher-availability/" rel="nofollow">Eliminate the Database for Higher Availability at American Express</a></li> <li><a href="http://engineering.vinted.com/2015/09/03/failover-with-redis-sentinel/" rel="nofollow">Failover with Redis Sentinel at Vinted</a></li> <li><a href="http://engineering.freeagent.com/2017/02/06/ha-infrastructure-without-breaking-the-bank/" rel="nofollow">High-availability SaaS Infrastructure at FreeAgent</a></li> <li><a href="https://github.blog/2018-06-20-mysql-high-availability-at-github/" rel="nofollow">MySQL High Availability at GitHub</a></li> <li><a href="https://www.eventbrite.com/engineering/mysql-high-availability-at-eventbrite/" rel="nofollow">MySQL High Availability at Eventbrite</a></li> <li><a href="https://medium.com/walmartlabs/business-continuity-disaster-recovery-in-the-microservices-world-ef2adca363df" rel="nofollow">Business Continuity & Disaster Recovery at Walmart</a></li> </ul> </li> <li><a href="https://blog.vivekpanyam.com/scaling-a-web-service-load-balancing/" rel="nofollow">Load Balancing</a> <ul dir="auto"> <li><a href="https://blog.envoyproxy.io/introduction-to-modern-network-load-balancing-and-proxying-a57f6ff80236" rel="nofollow">Introduction to Modern Network Load Balancing and Proxying</a></li> <li><a href="https://www.f5.com/company/blog/top-five-scalability-patterns" rel="nofollow">Top Five (Load Balancing) Scalability Patterns</a></li> <li><a href="https://www.usenix.org/conference/srecon15europe/program/presentation/shuff" rel="nofollow">Load Balancing infrastructure to support more than 1.3 billion users at Facebook</a></li> <li><a href="https://code.facebook.com/posts/1734309626831603/dhcplb-an-open-source-load-balancer/" rel="nofollow">DHCPLB: DHCP Load Balancer at Facebook</a></li> <li><a href="https://code.facebook.com/posts/1906146702752923/open-sourcing-katran-a-scalable-network-load-balancer/" rel="nofollow">Katran: Scalable Network Load Balancer at Facebook</a></li> <li><a href="https://blog.twitter.com/engineering/en_us/topics/infrastructure/2019/daperture-load-balancer.html" rel="nofollow">Deterministic Aperture: A Distributed, Load Balancing Algorithm at Twitter</a></li> <li><a href="https://medium.com/netflix-techblog/netflix-shares-cloud-load-balancing-and-failover-tool-eureka-c10647ef95e5" rel="nofollow">Load Balancing with Eureka at Netflix</a></li> <li><a href="https://medium.com/netflix-techblog/netflix-edge-load-balancing-695308b5548c" rel="nofollow">Edge Load Balancing at Netflix</a></li> <li><a href="https://medium.com/netflix-techblog/open-sourcing-zuul-2-82ea476cb2b3" rel="nofollow">Zuul 2: Cloud Gateway at Netflix</a></li> <li><a href="https://engineeringblog.yelp.com/2017/05/taking-zero-downtime-load-balancing-even-further.html" rel="nofollow">Load Balancing at Yelp</a></li> <li><a href="https://githubengineering.com/introducing-glb/" rel="nofollow">Load Balancing at Github</a></li> <li><a href="https://medium.com/vimeo-engineering-blog/improving-load-balancing-with-a-new-consistent-hashing-algorithm-9f1bd75709ed" rel="nofollow">Consistent Hashing to Improve Load Balancing at Vimeo</a></li> <li><a href="https://developers.500px.com/udp-load-balancing-with-keepalived-167382d7ad08" rel="nofollow">UDP Load Balancing at 500 pixel</a></li> <li><a href="https://eng.uber.com/qalm/" rel="nofollow">QALM: QoS Load Management Framework at Uber</a></li> <li><a href="https://www.usenix.org/conference/srecon17europe/program/presentation/rastogi" rel="nofollow">Traffic Steering using Rum DNS at LinkedIn</a></li> <li><a href="https://blogs.dropbox.com/tech/2018/10/dropbox-traffic-infrastructure-edge-network/" rel="nofollow">Traffic Infrastructure (Edge Network) at Dropbox</a></li> <li><a href="https://blogs.dropbox.com/tech/2020/01/intelligent-dns-based-load-balancing-at-dropbox/" rel="nofollow">Intelligent DNS based load balancing at Dropbox</a></li> <li><a href="https://stripe.com/en-sg/blog/secret-life-of-dns" rel="nofollow">Monitor DNS systems at Stripe</a></li> <li><a href="https://medium.com/monday-engineering/how-and-why-we-migrated-our-dns-from-cloudflare-to-a-multi-dns-architecture-part-3-584a470f4062" rel="nofollow">Multi-DNS Architecture (3 parts) at Monday</a></li> <li><a href="https://medium.com/hulu-tech-blog/building-hulus-dynamic-anycast-dns-infrastructure-985a7a11fd30" rel="nofollow">Dynamic Anycast DNS Infrastructure at Hulu</a></li> </ul> </li> <li><a href="https://www.keycdn.com/support/rate-limiting/" rel="nofollow">Rate Limiting</a> <ul dir="auto"> <li><a href="https://blog.cloudflare.com/counting-things-a-lot-of-different-things/" rel="nofollow">Rate Limiting for Scaling to Millions of Domains at Cloudflare</a></li> <li><a href="https://yahooeng.tumblr.com/post/111288877956/cloud-bouncer-distributed-rate-limiting-at-yahoo" rel="nofollow">Cloud Bouncer: Distributed Rate Limiting at Yahoo</a></li> <li><a href="https://stripe.com/blog/rate-limiters" rel="nofollow">Scaling API with Rate Limiters at Stripe</a></li> <li><a href="https://allegro.tech/2017/04/hermes-max-rate.html" rel="nofollow">Distributed Rate Limiting at Allegro</a></li> <li><a href="https://www.twilio.com/blog/2017/11/chaos-engineering-ratequeue-ha.html" rel="nofollow">Ratequeue: Core Queueing-And-Rate-Limiting System at Twilio</a></li> <li><a href="https://engineering.grab.com/quotas-service" rel="nofollow">Quotas Service at Grab</a></li> </ul> </li> <li><a href="https://medium.com/@BotmetricHQ/top-11-hard-won-lessons-learned-about-aws-auto-scaling-5bfe56da755f" rel="nofollow">Autoscaling</a> <ul dir="auto"> <li><a href="https://medium.com/@Pinterest_Engineering/auto-scaling-pinterest-df1d2beb4d64" rel="nofollow">Autoscaling Pinterest</a></li> <li><a href="https://medium.com/square-corner-blog/autoscaling-based-on-request-queuing-c4c0f57f860f" rel="nofollow">Autoscaling Based on Request Queuing at Square</a></li> <li><a href="http://tech.trivago.com/2017/02/17/your-definite-guide-for-autoscaling-jenkins/" rel="nofollow">Autoscaling Jenkins at Trivago</a></li> <li><a href="https://labs.spotify.com/2017/11/20/autoscaling-pub-sub-consumers/" rel="nofollow">Autoscaling Pub-Sub Consumers at Spotify</a></li> <li><a href="https://labs.spotify.com/2018/12/18/bigtable-autoscaler-saving-money-and-time-using-managed-storage/" rel="nofollow">Autoscaling Bigtable Clusters based on CPU Load at Spotify</a></li> <li><a href="https://engineeringblog.yelp.com/2019/06/autoscaling-aws-step-functions-activities.html" rel="nofollow">Autoscaling AWS Step Functions Activities at Yelp</a></li> <li><a href="https://medium.com/netflix-techblog/scryer-netflixs-predictive-auto-scaling-engine-a3f8fc922270" rel="nofollow">Scryer: Predictive Auto Scaling Engine at Netflix</a></li> <li><a href="https://medium.com/palantir/bouncer-simple-aws-auto-scaling-rollovers-c5af601d65d4" rel="nofollow">Bouncer: Simple AWS Auto Scaling Rollovers at Palantir</a></li> <li><a href="https://engineeringblog.yelp.com/2019/02/autoscaling-mesos-clusters-with-clusterman.html" rel="nofollow">Clusterman: Autoscaling Mesos Clusters at Yelp</a></li> </ul> </li> <li><a href="http://static.googleusercontent.com/media/research.google.com/en/us/pubs/archive/36737.pdf" rel="nofollow">Availability in Globally Distributed Storage Systems at Google</a></li> <li><a href="https://yahooeng.tumblr.com/post/68823943185/nodejs-high-availability" rel="nofollow">NodeJS High Availability at Yahoo</a></li> <li><a href="https://www.linkedin.com/pulse/introduction-every-day-monday-operations-benjamin-purgason" rel="nofollow">Operations (11 parts) at LinkedIn</a></li> <li><a href="https://www.usenix.org/conference/srecon17americas/program/presentation/barot" rel="nofollow">Monitoring Powers High Availability for LinkedIn Feed</a></li> <li><a href="https://code.facebook.com/posts/166966743929963/how-production-engineers-support-global-events-on-facebook/" rel="nofollow">Supporting Global Events at Facebook</a></li> <li><a href="https://medium.com/blablacar-tech/the-expendables-backends-high-availability-at-blablacar-8cea3b95b26b" rel="nofollow">High Availability at BlaBlaCar</a></li> <li><a href="https://medium.com/@NetflixTechBlog/tips-for-high-availability-be0472f2599c" rel="nofollow">High Availability at Netflix</a></li> <li><a href="https://www.twilio.com/engineering/2011/12/12/scaling-high-availablity-infrastructure-in-cloud" rel="nofollow">High Availability Cloud Infrastructure at Twilio</a></li> <li><a href="https://blogs.dropbox.com/tech/2019/01/automating-datacenter-operations-at-dropbox/" rel="nofollow">Automating Datacenter Operations at Dropbox</a></li> <li><a href="https://technology.riotgames.com/news/globalizing-player-accounts" rel="nofollow">Globalizing Player Accounts at Riot Games</a></li> </ul> <div class="markdown-heading" dir="auto"><h2 tabindex="-1" class="heading-element" dir="auto">Stability</h2><a id="user-content-stability" class="anchor" aria-label="Permalink: Stability" href="#stability"><svg class="octicon octicon-link" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg></a></div> <ul dir="auto"> <li><a href="https://martinfowler.com/bliki/CircuitBreaker.html" rel="nofollow">Circuit Breaker</a> <ul dir="auto"> <li><a href="https://www.infoq.com/presentations/circuit-breaking-distributed-systems" rel="nofollow">Circuit Breaking in Distributed Systems</a></li> <li><a href="https://f5.com/about-us/blog/articles/the-art-of-scaling-containers-circuit-breakers-28919" rel="nofollow">Circuit Breaker for Scaling Containers</a></li> <li><a href="https://engineering.linecorp.com/en/blog/detail/76" rel="nofollow">Circuit Breakers for Distributed Services at LINE</a></li> <li><a href="https://engineering.linecorp.com/en/blog/detail/78" rel="nofollow">Applying Circuit Breaker to Channel Gateway at LINE</a></li> <li><a href="https://developers.soundcloud.com/blog/lessons-in-resilience-at-SoundCloud" rel="nofollow">Lessons in Resilience at SoundCloud</a></li> <li><a href="http://tech.trivago.com/2016/02/23/protector/" rel="nofollow">Protector: Circuit Breaker for Time Series Databases at Trivago</a></li> <li><a href="https://blog.heroku.com/improved-production-stability-with-circuit-breakers" rel="nofollow">Improved Production Stability with Circuit Breakers at Heroku</a></li> <li><a href="https://medium.com/zendesk-engineering/the-joys-of-circuit-breaking-ee6584acd687" rel="nofollow">Circuit Breaker at Zendesk</a></li> <li><a href="https://medium.com/traveloka-engineering/circuit-breakers-dont-let-your-dependencies-bring-you-down-5ba1c5cf1eec" rel="nofollow">Circuit Breaker at Traveloka</a></li> <li><a href="https://shopify.engineering/circuit-breaker-misconfigured" rel="nofollow">Circuit Breaker at Shopify</a></li> </ul> </li> <li><a href="https://www.javaworld.com/article/2824163/application-performance/stability-patterns-applied-in-a-restful-architecture.html" rel="nofollow">Timeouts</a> <ul dir="auto"> <li><a href="https://medium.com/netflix-techblog/fault-tolerance-in-a-high-volume-distributed-system-91ab4faae74a" rel="nofollow">Fault Tolerance (Timeouts and Retries, Thread Separation, Semaphores, Circuit Breakers) at Neflix</a></li> <li><a href="https://doordash.engineering/2018/12/21/enforce-timeout-a-doordash-reliability-methodology/" rel="nofollow">Enforce Timeout: A Reliability Methodology at DoorDash</a></li> <li><a href="https://www.ebayinc.com/stories/blogs/tech/a-vip-connection-timeout-issue-caused-by-snat-and-tcp-tw-recycle/" rel="nofollow">Troubleshooting a Connection Timeout Issue with tcp_tw_recycle Enabled at eBay</a></li> </ul> </li> <li><a href="https://medium.com/booking-com-infrastructure/better-crash-safe-replication-for-mysql-a336a69b317f" rel="nofollow">Crash-safe Replication for MySQL at Booking.com</a></li> <li><a href="https://skife.org/architecture/fault-tolerance/2009/12/31/bulkheads.html" rel="nofollow">Bulkheads: Partition and Tolerate Failure in One Part</a></li> <li><a href="https://docs.microsoft.com/en-us/sql/relational-databases/policy-based-management/place-data-and-log-files-on-separate-drives" rel="nofollow">Steady State: Always Put Logs on Separate Disk</a></li> <li><a href="http://www.sosp.org/2001/papers/welsh.pdf" rel="nofollow">Throttling: Maintain a Steady Pace</a></li> <li><a href="https://engineering.linkedin.com/blog/2017/11/improving-resiliency-and-stability-of-a-large-scale-api" rel="nofollow">Multi-Clustering: Improving Resiliency and Stability of a Large-scale Monolithic API Service at LinkedIn</a></li> <li><a href="https://engineering.riotgames.com/news/determinism-league-legends-fixing-divergences" rel="nofollow">Determinism (4 parts) in League of Legends Server</a></li> </ul> <div class="markdown-heading" dir="auto"><h2 tabindex="-1" class="heading-element" dir="auto">Performance</h2><a id="user-content-performance" class="anchor" aria-label="Permalink: Performance" href="#performance"><svg class="octicon octicon-link" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg></a></div> <ul dir="auto"> <li><a href="https://stackify.com/application-performance-metrics/" rel="nofollow">Performance Optimization on OS, Storage, Database, Network</a> <ul dir="auto"> <li><a href="https://engineering.instagram.com/improving-performance-with-background-data-prefetching-b191acb39898" rel="nofollow">Improving Performance with Background Data Prefetching at Instagram</a></li> <li><a href="https://engineering.linkedin.com/blog/2020/fixing-linux-filesystem-performance-regressions" rel="nofollow">Fixing Linux filesystem performance regressions at LinkedIn</a></li> <li><a href="https://www.ebayinc.com/stories/blogs/tech/how-ebays-shopping-cart-used-compression-techniques-to-solve-network-io-bottlenecks/" rel="nofollow">Compression Techniques to Solve Network I/O Bottlenecks at eBay</a></li> <li><a href="https://blogs.dropbox.com/tech/2017/09/optimizing-web-servers-for-high-throughput-and-low-latency/" rel="nofollow">Optimizing Web Servers for High Throughput and Low Latency at Dropbox</a></li> <li><a href="https://medium.com/netflix-techblog/linux-performance-analysis-in-60-000-milliseconds-accc10403c55" rel="nofollow">Linux Performance Analysis in 60.000 Milliseconds at Netflix</a></li> <li><a href="https://engineering.mixpanel.com/2018/07/31/live-downsizing-google-cloud-pds-for-fun-and-profit/" rel="nofollow">Live Downsizing Google Cloud Persistent Disks (PD-SSD) at Mixpanel</a></li> <li><a href="https://zapier.com/engineering/celery-python-jemalloc/" rel="nofollow">Decreasing RAM Usage by 40% Using jemalloc with Python & Celery at Zapier</a></li> <li><a href="https://slack.engineering/reducing-slacks-memory-footprint-4480fec7e8eb" rel="nofollow">Reducing Memory Footprint at Slack</a></li> <li><a href="https://medium.com/@Pinterest_Engineering/driving-user-growth-with-performance-improvements-cfc50dafadd7" rel="nofollow">Performance Improvements at Pinterest</a></li> <li><a href="https://www.youtube.com/watch?v=f9xI2jR71Ms" rel="nofollow">Server Side Rendering at Wix</a></li> <li><a href="https://engineeringblog.yelp.com/2018/02/making-30x-performance-improvements-on-yelps-mysqlstreamer.html" rel="nofollow">30x Performance Improvements on MySQLStreamer at Yelp</a></li> <li><a href="https://medium.com/netflix-techblog/optimizing-the-netflix-api-5c9ac715cf19" rel="nofollow">Optimizing APIs at Netflix</a></li> <li><a href="https://medium.com/walmartlabs/performance-monitoring-with-riemann-and-clojure-eafc07fcd375" rel="nofollow">Performance Monitoring with Riemann and Clojure at Walmart</a></li> <li><a href="https://www.zynga.com/blogs/engineering/live-games-have-evolving-performance" rel="nofollow">Performance Tracking Dashboard for Live Games at Zynga</a></li> <li><a href="https://www.ebayinc.com/stories/blogs/tech/optimization-of-cal-report-hadoop-mapreduce-job/" rel="nofollow">Optimizing CAL Report Hadoop MapReduce Jobs at eBay</a></li> <li><a href="https://www.ebayinc.com/stories/blogs/tech/performance-tuning-on-quartz-scheduler/" rel="nofollow">Performance Tuning on Quartz Scheduler at eBay</a></li> <li><a href="https://engineering.riotgames.com/news/profiling-optimisation" rel="nofollow">Profiling C++ (Part 1: Optimization, Part 2: Measurement and Analysis) at Riot Games</a></li> <li><a href="https://medium.com/homeaway-tech-blog/profiling-react-server-side-rendering-to-free-the-node-js-event-loop-7f0fe455a901" rel="nofollow">Profiling React Server-Side Rendering at HomeAway</a></li> <li><a href="https://medium.com/dailymotion-engineering/hardware-assisted-video-transcoding-at-dailymotion-66cd2db448ae" rel="nofollow">Hardware-Assisted Video Transcoding at Dailymotion</a></li> <li><a href="https://blogs.dropbox.com/tech/2018/11/cross-shard-transactions-at-10-million-requests-per-second/" rel="nofollow">Cross Shard Transactions at 10 Million RPS at Dropbox</a></li> <li><a href="https://medium.com/@Pinterest_Engineering/api-profiling-at-pinterest-6fa9333b4961" rel="nofollow">API Profiling at Pinterest</a></li> <li><a href="https://engineeringblog.yelp.com/2017/07/generating-web-pages-in-parallel-with-pagelets.html" rel="nofollow">Pagelets Parallelize Server-side Processing at Yelp</a></li> <li><a href="https://blog.twitter.com/engineering/en_us/topics/infrastructure/2019/improving-key-expiration-in-redis.html" rel="nofollow">Improving key expiration in Redis at Twitter</a></li> <li><a href="https://medium.com/mindgeek-engineering-blog/ad-delivery-network-performance-optimization-with-flame-graphs-bc550cf59cf7" rel="nofollow">Ad Delivery Network Performance Optimization with Flame Graphs at MindGeek</a></li> <li><a href="https://medium.com/netflix-techblog/predictive-cpu-isolation-of-containers-at-netflix-91f014d856c7" rel="nofollow">Predictive CPU isolation of containers at Netflix</a></li> <li><a href="https://eng.uber.com/improving-hdfs-i-o-utilization-for-efficiency/" rel="nofollow">Improving HDFS I/O Utilization for Efficiency at Uber</a></li> <li><a href="https://codeascraft.com/2020/04/23/cloud-jewels-estimating-kwh-in-the-cloud/" rel="nofollow">Cloud Jewels: Estimating kWh in the Cloud at Etsy</a></li> <li><a href="https://engineering.indeedblog.com/blog/2019/12/unthrottled-fixing-cpu-limits-in-the-cloud/" rel="nofollow">Unthrottled: Fixing CPU Limits in the Cloud (2 parts) at Indeed</a></li> </ul> </li> <li><a href="https://confluence.atlassian.com/enterprise/garbage-collection-gc-tuning-guide-461504616.html" rel="nofollow">Performance Optimization by Tuning Garbage Collection</a> <ul dir="auto"> <li><a href="https://engineering.linkedin.com/garbage-collection/garbage-collection-optimization-high-throughput-and-low-latency-java-applications" rel="nofollow">Garbage Collection in Java Applications at LinkedIn</a></li> <li><a href="https://medium.com/adobetech/engineering-high-throughput-low-latency-machine-learning-services-7d45edac0271" rel="nofollow">Garbage Collection in High-Throughput, Low-Latency Machine Learning Services at Adobe</a></li> <li><a href="https://developers.soundcloud.com/blog/garbage-collection-in-redux-applications" rel="nofollow">Garbage Collection in Redux Applications at SoundCloud</a></li> <li><a href="https://blog.twitch.tv/go-memory-ballast-how-i-learnt-to-stop-worrying-and-love-the-heap-26c2462549a2" rel="nofollow">Garbage Collection in Go Application at Twitch</a></li> <li><a href="https://www.linux.com/blog/can-nodejs-scale-ask-team-alibaba" rel="nofollow">Analyzing V8 Garbage Collection Logs at Alibaba</a></li> <li><a href="https://instagram-engineering.com/copy-on-write-friendly-python-garbage-collection-ad6ed5233ddf" rel="nofollow">Python Garbage Collection for Dropping 50% Memory Growth Per Request at Instagram</a></li> <li><a href="https://githubengineering.com/removing-oobgc/" rel="nofollow">Performance Impact of Removing Out of Band Garbage Collector (OOBGC) at Github</a></li> <li><a href="https://allegro.tech/2018/05/a-comedy-of-errors-debugging-java-memory-leaks.html" rel="nofollow">Debugging Java Memory Leaks at Allegro</a></li> <li><a href="https://www.youtube.com/watch?v=X4tmr3nhZRg" rel="nofollow">Optimizing JVM at Alibaba</a></li> <li><a href="https://eng.uber.com/jvm-tuning-garbage-collection/" rel="nofollow">Tuning JVM Memory for Large-scale Services at Uber</a></li> <li><a href="https://medium.com/walmartglobaltech/solr-performance-tuning-beb7d0d0f8d9" rel="nofollow">Solr Performance Tuning at Walmart</a></li> <li><a href="https://tech.flipkart.com/memory-tuning-a-high-throughput-microservice-ed57b3e60997" rel="nofollow">Memory Tuning a High Throughput Microservice at Flipkart</a></li> </ul> </li> <li><a href="https://developers.google.com/web/fundamentals/performance/why-performance-matters/" rel="nofollow">Performance Optimization on Image, Video, Page Load</a> <ul dir="auto"> <li><a href="https://code.facebook.com/posts/129055711052260/optimizing-360-photos-at-scale/" rel="nofollow">Optimizing 360 Photos at Scale at Facebook</a></li> <li><a href="https://codeascraft.com/2017/05/30/reducing-image-file-size-at-etsy/" rel="nofollow">Reducing Image File Size in the Photos Infrastructure at Etsy</a></li> <li><a href="https://medium.com/@Pinterest_Engineering/improving-gif-performance-on-pinterest-8dad74bf92f1" rel="nofollow">Improving GIF Performance at Pinterest</a></li> <li><a href="https://medium.com/@Pinterest_Engineering/optimizing-video-playback-performance-caf55ce310d1" rel="nofollow">Optimizing Video Playback Performance at Pinterest</a></li> <li><a href="https://medium.com/netflix-techblog/optimized-shot-based-encodes-now-streaming-4b9464204830" rel="nofollow">Optimizing Video Stream for Low Bandwidth with Dynamic Optimizer at Netflix</a></li> <li><a href="https://youtube-eng.googleblog.com/2018/04/making-high-quality-video-efficient.html" rel="nofollow">Adaptive Video Streaming at YouTube</a></li> <li><a href="https://medium.com/dailymotion/reducing-video-loading-time-fa9c997a2294" rel="nofollow">Reducing Video Loading Time at Dailymotion</a></li> <li><a href="https://www.zillow.com/engineering/improving-homepage-performance/" rel="nofollow">Improving Homepage Performance at Zillow</a></li> <li><a href="https://medium.com/expedia-engineering/go-fast-or-go-home-the-process-of-optimizing-for-client-performance-57bb497402e" rel="nofollow">The Process of Optimizing for Client Performance at Expedia</a></li> <li><a href="https://medium.com/bbc-design-engineering/bbc-world-service-web-performance-26b08f7abfcc" rel="nofollow">Web Performance at BBC</a></li> </ul> </li> <li><a href="https://blogs.akamai.com/2016/02/understanding-brotlis-potential.html" rel="nofollow">Performance Optimization by Brotli Compression</a> <ul dir="auto"> <li><a href="https://engineering.linkedin.com/blog/2017/05/boosting-site-speed-using-brotli-compression" rel="nofollow">Boosting Site Speed Using Brotli Compression at LinkedIn</a></li> <li><a href="https://medium.com/booking-com-development/bookings-journey-with-brotli-978b249d34f3" rel="nofollow">Brotli at Booking.com</a></li> <li><a href="https://tech.treebo.com/a-tale-of-brotli-compression-bcb071d9780a" rel="nofollow">Brotli at Treebo</a></li> <li><a href="https://dropbox.tech/infrastructure/deploying-brotli-for-static-content" rel="nofollow">Deploying Brotli for Static Content at Dropbox</a></li> <li><a href="https://engineeringblog.yelp.com/2017/07/progressive-enhancement-with-brotli.html" rel="nofollow">Progressive Enhancement with Brotli at Yelp</a></li> <li><a href="https://doordash.engineering/2019/01/02/speeding-up-redis-with-compression/" rel="nofollow">Speeding Up Redis with Compression at Doordash</a></li> </ul> </li> <li><a href="https://www.techempower.com/benchmarks/" rel="nofollow">Performance Optimization on Languages and Frameworks</a> <ul dir="auto"> <li><a href="https://netflixtechblog.com/python-at-netflix-bba45dae649e" rel="nofollow">Python at Netflix</a></li> <li><a href="https://instagram-engineering.com/python-at-scale-strict-modules-c0bb9245c834" rel="nofollow">Python at scale (3 parts) at Instagram</a></li> <li><a href="https://engineering.issuu.com/2018/12/10/our-current-ocaml-best-practices-part-2" rel="nofollow">OCaml best practices (2 parts) at Issuu</a></li> <li><a href="https://slack.engineering/taking-php-seriously-cf7a60065329" rel="nofollow">PHP at Slack</a></li> <li><a href="https://tech.trivago.com/2020/03/02/why-we-chose-go/" rel="nofollow">Go at Trivago</a></li> <li><a href="https://codeascraft.com/2021/11/08/etsys-journey-to-typescript/" rel="nofollow">TypeScript at Etsy</a></li> <li><a href="https://medium.com/bumble-tech/bpf-and-go-modern-forms-of-introspection-in-linux-6b9802682223" rel="nofollow">BPF and Go at Bumble</a></li> <li><a href="https://medium.com/gitlab-magazine/why-we-use-ruby-on-rails-to-build-gitlab-601dce4a7a38" rel="nofollow">Ruby on Rails at GitLab</a></li> <li><a href="https://engineering.wework.com/choosing-a-language-stack-cac3726928f6" rel="nofollow">Choosing a Language Stack at WeWork</a></li> <li><a href="https://blog.discord.com/why-discord-is-switching-from-go-to-rust-a190bbca2b1f" rel="nofollow">Switching from Go to Rust at Discord</a></li> <li><a href="https://medium.com/agoda-engineering/happy-asp-net-core-performance-optimization-4e21a383d299" rel="nofollow">ASP.NET Core Performance Optimization at Agoda</a></li> </ul> </li> </ul> <div class="markdown-heading" dir="auto"><h2 tabindex="-1" class="heading-element" dir="auto">Intelligence</h2><a id="user-content-intelligence" class="anchor" aria-label="Permalink: Intelligence" href="#intelligence"><svg class="octicon octicon-link" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg></a></div> <ul dir="auto"> <li><a href="https://insights.sei.cmu.edu/sei_blog/2017/05/reference-architectures-for-big-data-systems.html" rel="nofollow">Big Data</a> <ul dir="auto"> <li><a href="https://eng.uber.com/uber-big-data-platform/" rel="nofollow">Data Platform at Uber</a></li> <li><a href="https://www.unibw.de/code/events-u/jt-2018-workshops/ws3_bigdata_vortrag_widmann.pdf" rel="nofollow">Data Platform at BMW</a></li> <li><a href="https://www.youtube.com/watch?v=CSDIThSwA7s" rel="nofollow">Data Platform at Netflix</a></li> <li><a href="https://tech.flipkart.com/overview-of-flipkart-data-platform-20c6d3e9a196" rel="nofollow">Data Platform at Flipkart</a></li> <li><a href="https://medium.com/coupang-tech/evolving-the-coupang-data-platform-308e305a9c45" rel="nofollow">Data Platform at Coupang</a></li> <li><a href="https://doordash.engineering/2020/09/25/how-doordash-is-scaling-its-data-platform/" rel="nofollow">Data Platform at DoorDash</a></li> <li><a href="http://engineering.khanacademy.org/posts/khanalytics.htm" rel="nofollow">Data Platform at Khan Academy</a></li> <li><a href="https://medium.com/airbnb-engineering/data-infrastructure-at-airbnb-8adfb34f169c" rel="nofollow">Data Infrastructure at Airbnb</a></li> <li><a href="https://www.infoq.com/presentations/big-data-infrastructure-linkedin" rel="nofollow">Data Infrastructure at LinkedIn</a></li> <li><a href="https://blog.gojekengineering.com/data-infrastructure-at-go-jek-cd4dc8cbd929" rel="nofollow">Data Infrastructure at GO-JEK</a></li> <li><a href="https://medium.com/@Pinterest_Engineering/scalable-and-reliable-data-ingestion-at-pinterest-b921c2ee8754" rel="nofollow">Data Ingestion Infrastructure at Pinterest</a></li> <li><a href="https://medium.com/@Pinterest_Engineering/behind-the-pins-building-analytics-f7b508cdacab" rel="nofollow">Data Analytics Architecture at Pinterest</a></li> <li><a href="https://labs.spotify.com/2017/10/23/big-data-processing-at-spotify-the-road-to-scio-part-2/" rel="nofollow">Big Data Processing (2 parts) at Spotify</a></li> <li><a href="https://cdn.oreillystatic.com/en/assets/1/event/160/Big%20data%20processing%20with%20Hadoop%20and%20Spark%2C%20the%20Uber%20way%20Presentation.pdf" rel="nofollow">Big Data Processing at Uber</a></li> <li><a href="https://cdn.oreillystatic.com/en/assets/1/event/269/Lyft_s%20analytics%20pipeline_%20From%20Redshift%20to%20Apache%20Hive%20and%20Presto%20Presentation.pdf" rel="nofollow">Analytics Pipeline at Lyft</a></li> <li><a href="https://tech.grammarly.com/blog/building-a-versatile-analytics-pipeline-on-top-of-apache-spark" rel="nofollow">Analytics Pipeline at Grammarly</a></li> <li><a href="https://medium.com/teads-engineering/give-meaning-to-100-billion-analytics-events-a-day-d6ba09aa8f44" rel="nofollow">Analytics Pipeline at Teads</a></li> <li><a href="https://www.infoq.com/presentations/paypal-ml-fraud-prevention-2018" rel="nofollow">ML Data Pipelines for Real-Time Fraud Prevention at PayPal</a></li> <li><a href="https://cdn.oreillystatic.com/en/assets/1/event/269/Big%20data%20analytics%20and%20machine%20learning%20techniques%20to%20drive%20and%20grow%20business%20Presentation%201.pdf" rel="nofollow">Big Data Analytics and ML Techniques at LinkedIn</a></li> <li><a href="https://cdn.oreillystatic.com/en/assets/1/event/137/Building%20a%20self-serve%20real-time%20reporting%20platform%20at%20LinkedIn%20Presentation%201.pdf" rel="nofollow">Self-Serve Reporting Platform on Hadoop at LinkedIn</a></li> <li><a href="https://engineering.linkedin.com/blog/2019/04/privacy-preserving-analytics-and-reporting-at-linkedin" rel="nofollow">Privacy-Preserving Analytics and Reporting at LinkedIn</a></li> <li><a href="https://medium.com/walmartlabs/how-we-build-a-robust-analytics-platform-using-spark-kafka-and-cassandra-lambda-architecture-70c2d1bc8981" rel="nofollow">Analytics Platform for Tracking Item Availability at Walmart</a></li> <li><a href="https://code.fb.com/data-center-engineering/hardware-analytics-and-lifecycle-optimization-halo-at-facebook/" rel="nofollow">HALO: Hardware Analytics and Lifecycle Optimization at Facebook</a></li> <li><a href="https://techblog.king.com/rbea-scalable-real-time-analytics-king/" rel="nofollow">RBEA: Real-time Analytics Platform at King</a></li> <li><a href="https://eng.uber.com/aresdb/" rel="nofollow">AresDB: GPU-Powered Real-time Analytics Engine at Uber</a></li> <li><a href="https://eng.uber.com/athenax/" rel="nofollow">AthenaX: Streaming Analytics Platform at Uber</a></li> <li><a href="https://medium.com/netflix-techblog/delta-a-data-synchronization-and-enrichment-platform-e82c36a79aee" rel="nofollow">Delta: Data Synchronization and Enrichment Platform at Netflix</a></li> <li><a href="https://medium.com/netflix-techblog/keystone-real-time-stream-processing-platform-a3ee651812a" rel="nofollow">Keystone: Real-time Stream Processing Platform at Netflix</a></li> <li><a href="https://eng.uber.com/databook/" rel="nofollow">Databook: Turning Big Data into Knowledge with Metadata at Uber</a></li> <li><a href="https://eng.lyft.com/amundsen-lyfts-data-discovery-metadata-engine-62d27254fbb9" rel="nofollow">Amundsen: Data Discovery & Metadata Engine at Lyft</a></li> <li><a href="https://eng.uber.com/maze/" rel="nofollow">Maze: Funnel Visualization Platform at Uber</a></li> <li><a href="https://medium.com/netflix-techblog/metacat-making-big-data-discoverable-and-meaningful-at-netflix-56fb36a53520" rel="nofollow">Metacat: Making Big Data Discoverable and Meaningful at Netflix</a></li> <li><a href="https://medium.com/airbnb-engineering/capturing-data-evolution-in-a-service-oriented-architecture-72f7c643ee6f" rel="nofollow">SpinalTap: Change Data Capture System at Airbnb</a></li> <li><a href="https://www.ebayinc.com/stories/blogs/tech/announcing-the-accelerator-processing-1-000-000-000-lines-per-second-on-a-single-computer/" rel="nofollow">Accelerator: Fast Data Processing Framework at eBay</a></li> <li><a href="https://yahooeng.tumblr.com/post/180867271141/a-new-chapter-for-omid" rel="nofollow">Omid: Transaction Processing Platform at Yahoo</a></li> <li><a href="https://yahooeng.tumblr.com/post/157196488076/open-sourcing-tensorflowonspark-distributed-deep" rel="nofollow">TensorFlowOnSpark: Distributed Deep Learning on Big Data Clusters at Yahoo</a></li> <li><a href="https://yahooeng.tumblr.com/post/139916828451/caffeonspark-open-sourced-for-distributed-deep" rel="nofollow">CaffeOnSpark: Distributed Deep Learning on Big Data Clusters at Yahoo</a></li> <li><a href="https://medium.com/adobetech/spark-on-scala-adobe-analytics-reference-architecture-7457f5614b4c" rel="nofollow">Spark on Scala: Analytics Reference Architecture at Adobe</a></li> <li><a href="https://engineering.atspotify.com/2020/11/02/spotifys-new-experimentation-platform-part-2/" rel="nofollow">Experimentation Platform (2 parts) at Spotify</a></li> <li><a href="https://medium.com/airbnb-engineering/https-medium-com-jonathan-parks-scaling-erf-23fd17c91166" rel="nofollow">Experimentation Platform at Airbnb</a></li> <li><a href="https://jobs.zalando.com/tech/blog/zalando-smart-product-platform/?gh_src=4n3gxh1" rel="nofollow">Smart Product Platform at Zalando</a></li> <li><a href="https://www.slideshare.net/wyukawa/strata2017-sg" rel="nofollow">Log Analysis Platform at LINE</a></li> <li><a href="https://medium.com/myntra-engineering/universal-dashboarding-platform-udp-data-visualisation-platform-at-myntra-5f2522fcf72d" rel="nofollow">Data Visualisation Platform at Myntra</a></li> <li><a href="https://medium.com/netflix-techblog/building-and-scaling-data-lineage-at-netflix-to-improve-data-infrastructure-reliability-and-1a52526a7977" rel="nofollow">Building and Scaling Data Lineage at Netflix</a></li> <li><a href="https://medium.com/@Pinterest_Engineering/building-a-scalable-data-management-system-for-computer-vision-tasks-a6dee8f1c580" rel="nofollow">Building a scalable data management system for computer vision tasks at Pinterest</a></li> <li><a href="https://codeascraft.com/2019/07/31/an-introduction-to-structured-data-at-etsy/" rel="nofollow">Structured Data at Etsy</a></li> <li><a href="https://medium.com/airbnb-engineering/scaling-a-mature-data-pipeline-managing-overhead-f34835cbc866" rel="nofollow">Scaling a Mature Data Pipeline - Managing Overhead at Airbnb</a></li> <li><a href="https://medium.com/airbnb-engineering/on-spark-hive-and-small-files-an-in-depth-look-at-spark-partitioning-strategies-a9a364f908" rel="nofollow">Spark Partitioning Strategies at Airbnb</a></li> <li><a href="https://engineering.linkedin.com/blog/2021/the-exabyte-club--linkedin-s-journey-of-scaling-the-hadoop-distr" rel="nofollow">Scaling the Hadoop Distributed File System at LinkedIn</a></li> <li><a href="https://engineering.linkedin.com/blog/2021/scaling-linkedin-s-hadoop-yarn-cluster-beyond-10-000-nodes" rel="nofollow">Scaling Hadoop YARN cluster beyond 10,000 nodes at LinkedIn</a></li> </ul> </li> <li><a href="https://www.csie.ntu.edu.tw/~cjlin/talks/bigdata-bilbao.pdf" rel="nofollow">Distributed Machine Learning</a> <ul dir="auto"> <li><a href="https://code.fb.com/developer-tools/aroma/" rel="nofollow">Aroma: Using ML for Code Recommendation at Facebook</a></li> <li><a href="https://eng.lyft.com/introducing-flyte-cloud-native-machine-learning-and-data-processing-platform-fb2bb3046a59" rel="nofollow">Flyte: Cloud Native Machine Learning and Data Processing Platform at Lyft</a></li> <li><a href="https://eng.lyft.com/lyftlearn-ml-model-training-infrastructure-built-on-kubernetes-aef8218842bb" rel="nofollow">LyftLearn: ML Model Training Infrastructure built on Kubernetes at Lyft</a></li> <li><a href="https://eng.uber.com/michelangelo/" rel="nofollow">Michelangelo: Machine Learning Platform at Uber</a></li> <li><a href="https://eng.uber.com/scaling-michelangelo/" rel="nofollow">Scaling Michelangelo</a></li> <li><a href="https://engineeringblog.yelp.com/2020/07/ML-platform-overview.html" rel="nofollow">Machine Learning Platform at Yelp</a></li> <li><a href="https://eng.uber.com/horovod/" rel="nofollow">Horovod: Open Source Distributed Deep Learning Framework for TensorFlow at Uber</a></li> <li><a href="https://eng.uber.com/cota/" rel="nofollow">COTA: Improving Customer Care with NLP & Machine Learning at Uber</a></li> <li><a href="https://eng.uber.com/manifold/" rel="nofollow">Manifold: Model-Agnostic Visual Debugging Tool for Machine Learning at Uber</a></li> <li><a href="https://githubengineering.com/topics/" rel="nofollow">Repo-Topix: Topic Extraction Framework at Github</a></li> <li><a href="https://engineering.linkedin.com/blog/2018/05/concourse--generating-personalized-content-notifications-in-near" rel="nofollow">Concourse: Generating Personalized Content Notifications in Near-Real-Time at LinkedIn</a></li> <li><a href="https://www.ebayinc.com/stories/blogs/tech/altus-care-apply-chatbot-to-ebay-platform-engineering/" rel="nofollow">Altus Care: Applying a Chatbot to Platform Engineering at eBay</a></li> <li><a href="https://tech.ebayinc.com/engineering/pykrylov-accelerating-machine-learning-research-at-ebay/" rel="nofollow">PyKrylov: Accelerating Machine Learning Research at eBay</a></li> <li><a href="https://blog.box.com/blog/box-graph-how-we-built-spontaneous-social-network/" rel="nofollow">Box Graph: Spontaneous Social Network at Box</a></li> <li><a href="https://hackernoon.com/pricingnet-modelling-the-global-airline-industry-with-neural-networks-833844d20ea6" rel="nofollow">PricingNet: Pricing Modelling with Neural Networks at Skyscanner</a></li> <li><a href="https://medium.com/pinterest-engineering/pintext-a-multitask-text-embedding-system-in-pinterest-b80ece364555" rel="nofollow">PinText: Multitask Text Embedding System at Pinterest</a></li> <li><a href="https://medium.com/pinterest-engineering/searchsage-learning-search-query-representations-at-pinterest-654f2bb887fc" rel="nofollow">SearchSage: Learning Search Query Representations at Pinterest</a></li> <li><a href="https://dropbox.tech/machine-learning/cannes--how-ml-saves-us--1-7m-a-year-on-document-previews" rel="nofollow">Cannes: ML saves $1.7M a year on document previews at Dropbox</a></li> <li><a href="https://engineeringblog.yelp.com/2018/01/building-a-distributed-ml-pipeline-part1.html" rel="nofollow">Scaling Gradient Boosted Trees for Click-Through-Rate Prediction at Yelp</a></li> <li><a href="https://machinelearning.apple.com/2017/12/06/learning-with-privacy-at-scale.html" rel="nofollow">Learning with Privacy at Scale at Apple</a></li> <li><a href="https://medium.com/mercari-engineering/mercaris-image-classification-experiment-using-deep-learning-9b4e994a18ec" rel="nofollow">Deep Learning for Image Classification Experiment at Mercari</a></li> <li><a href="https://allegro.tech/2016/12/deep-learning-for-frame-detection.html" rel="nofollow">Deep Learning for Frame Detection in Product Images at Allegro</a></li> <li><a href="https://medium.com/hulu-tech-blog/content-based-video-relevance-prediction-b2c448e14752" rel="nofollow">Content-based Video Relevance Prediction at Hulu</a></li> <li><a href="http://engineering.tripadvisor.com/improving-tripadvisor-photo-selection-deep-learning/" rel="nofollow">Improving Photo Selection With Deep Learning at TripAdvisor</a></li> <li><a href="https://www.tripadvisor.com/engineering/personalized-recommendations-for-experiences-using-deep-learning/" rel="nofollow">Personalized Recommendations for Experiences Using Deep Learning at TripAdvisor</a></li> <li><a href="https://medium.com/bbc-design-engineering/developing-personalised-recommender-systems-at-the-bbc-e26c5e0c4216" rel="nofollow">Personalised Recommender Systems at BBC</a></li> <li><a href="https://technology.condenast.com/story/handbag-brand-and-color-detection" rel="nofollow">Machine Learning (2 parts) at Condé Nast</a></li> <li><a href="https://technology.condenast.com/story/natural-language-processing-and-content-analysis-at-conde-nast-part-2-system-architecture" rel="nofollow">Natural Language Processing and Content Analysis (2 parts) at Condé Nast</a></li> <li><a href="https://tech.iheart.com/mapping-the-world-of-music-using-machine-learning-part-2-aa50b6a0304c" rel="nofollow">Mapping the World of Music Using Machine Learning (2 parts) at iHeartRadio</a></li> <li><a href="https://medium.com/netflix-techblog/using-machine-learning-to-improve-streaming-quality-at-netflix-9651263ef09f" rel="nofollow">Machine Learning to Improve Streaming Quality at Netflix</a></li> <li><a href="https://blog.gojekengineering.com/how-we-use-machine-learning-to-match-drivers-riders-b06d617b9e5" rel="nofollow">Machine Learning to Match Drivers & Riders at GO-JEK</a></li> <li><a href="https://youtube-eng.googleblog.com/2015/10/improving-youtube-video-thumbnails-with_8.html" rel="nofollow">Improving Video Thumbnails with Deep Neural Nets at YouTube</a></li> <li><a href="https://tech.instacart.com/how-instacart-delivers-on-time-using-quantile-regression-2383e2e03edb" rel="nofollow">Quantile Regression for Delivering On Time at Instacart</a></li> <li><a href="https://jobs.zalando.com/tech/blog/search-deep-neural-network/" rel="nofollow">Cross-Lingual End-to-End Product Search with Deep Learning at Zalando</a></li> <li><a href="https://blog.janestreet.com/real-world-machine-learning-part-1/" rel="nofollow">Machine Learning at Jane Street</a></li> <li><a href="https://engineering.quora.com/A-Machine-Learning-Approach-to-Ranking-Answers-on-Quora" rel="nofollow">Machine Learning for Ranking Answers End-to-End at Quora</a></li> <li><a href="http://engineering.flipboard.com/2017/02/storyclustering" rel="nofollow">Clustering Similar Stories Using LDA at Flipboard</a></li> <li><a href="https://code.flickr.net/2017/03/07/introducing-similarity-search-at-flickr/" rel="nofollow">Similarity Search at Flickr</a></li> <li><a href="http://engineering.indeedblog.com/blog/2016/04/building-a-large-scale-machine-learning-pipeline-for-job-recommendations/" rel="nofollow">Large-Scale Machine Learning Pipeline for Job Recommendations at Indeed</a></li> <li><a href="http://engineering.taboola.com/deep-learning-from-prototype-to-production/" rel="nofollow">Deep Learning from Prototype to Production at Taboola</a></li> <li><a href="https://cdn.oreillystatic.com/en/assets/1/event/144/Atom%20smashing%20using%20machine%20learning%20at%20CERN%20Presentation.pdf" rel="nofollow">Atom Smashing using Machine Learning at CERN</a></li> <li><a href="https://medium.engineering/mapping-mediums-tags-1b9a78d77cf0" rel="nofollow">Mapping Tags at Medium</a></li> <li><a href="http://engineering.monsanto.com/2015/11/23/chinese-restaurant-process/" rel="nofollow">Clustering with the Dirichlet Process Mixture Model in Scala at Monsanto</a></li> <li><a href="https://engineering.foursquare.com/you-are-probably-here-better-map-pins-with-dbscan-random-forests-9d51e8c1964d" rel="nofollow">Map Pins with DBSCAN & Random Forests at Foursquare</a></li> <li><a href="https://eng.uber.com/advanced-technologies-detecting-preventing-fraud-uber/" rel="nofollow">Detecting and Preventing Fraud at Uber</a></li> <li><a href="https://eng.uber.com/forecasting-introduction/" rel="nofollow">Forecasting at Uber</a></li> <li><a href="https://eng.uber.com/transforming-financial-forecasting-machine-learning/" rel="nofollow">Financial Forecasting at Uber</a></li> <li><a href="https://blog.twitter.com/engineering/en_us/topics/insights/2018/ml-workflows.html" rel="nofollow">Productionizing ML with Workflows at Twitter</a></li> <li><a href="https://www.ebayinc.com/stories/blogs/tech/gui-testing-powered-by-deep-learning/" rel="nofollow">GUI Testing Powered by Deep Learning at eBay</a></li> <li><a href="http://engineering.pivotal.io/post/scaling-machine-learning-to-recommend-driving-routes/" rel="nofollow">Scaling Machine Learning to Recommend Driving Routes at Pivotal</a></li> <li><a href="https://www.infoq.com/presentations/doordash-real-time-predictions" rel="nofollow">Real-Time Predictions at DoorDash</a></li> <li><a href="https://blogs.dropbox.com/tech/2018/09/machine-intelligence-at-dropbox-an-update-from-our-dbxi-team/" rel="nofollow">Machine Intelligence at Dropbox</a></li> <li><a href="https://blogs.dropbox.com/tech/2018/10/using-machine-learning-to-index-text-from-billions-of-images/" rel="nofollow">Machine Learning for Indexing Text from Billions of Images at Dropbox</a></li> <li><a href="https://codeascraft.com/2018/07/12/modeling-user-journey-via-semantic-embeddings/" rel="nofollow">Modeling User Journeys via Semantic Embeddings at Etsy</a></li> <li><a href="https://engineering.linkedin.com/blog/2018/09/automated-fake-account-detection-at-linkedin" rel="nofollow">Automated Fake Account Detection at LinkedIn</a></li> <li><a href="https://medium.com/airbnb-engineering/contextualizing-airbnb-by-building-knowledge-graph-b7077e268d5a" rel="nofollow">Building Knowledge Graph at Airbnb</a></li> <li><a href="https://instagram-engineering.com/core-modeling-at-instagram-a51e0158aa48" rel="nofollow">Core Modeling at Instagram</a></li> <li><a href="https://tech.mercari.com/entry/2019/04/26/163000" rel="nofollow">Neural Architecture Search (NAS) for Prohibited Item Detection at Mercari</a></li> <li><a href="https://medium.com/airbnb-engineering/amenity-detection-and-beyond-new-frontiers-of-computer-vision-at-airbnb-144a4441b72e" rel="nofollow">Computer Vision at Airbnb</a></li> <li><a href="https://www.zillow.com/engineering/behind-zillow-3d-home-backend-algorithms/" rel="nofollow">3D Home Backend Algorithms at Zillow</a></li> <li><a href="https://eng.lyft.com/making-long-term-forecasts-at-lyft-fac475b3ba52" rel="nofollow">Long-term Forecasts at Lyft</a></li> <li><a href="https://engineeringblog.yelp.com/2019/10/discovering-popular-dishes-with-deep-learning.html" rel="nofollow">Discovering Popular Dishes with Deep Learning at Yelp</a></li> <li><a href="https://blog.twitter.com/engineering/en_us/topics/infrastructure/2019/splitnet-architecture-for-ad-candidate-ranking.html" rel="nofollow">SplitNet Architecture for Ad Candidate Ranking at Twitter</a></li> <li><a href="https://engineering.indeedblog.com/blog/2019/09/jobs-filter/" rel="nofollow">Jobs Filter at Indeed</a></li> <li><a href="https://engineeringblog.yelp.com/2019/12/architecting-wait-time-estimations.html" rel="nofollow">Architecting Restaurant Wait Time Predictions at Yelp</a></li> <li><a href="https://labs.spotify.com/2016/08/07/commodity-music-ml-services/" rel="nofollow">Music Personalization at Spotify</a></li> <li><a href="https://sg.godaddy.com/engineering/2019/07/26/domain-name-valuation/" rel="nofollow">Deep Learning for Domain Name Valuation at GoDaddy</a></li> <li><a href="https://stripe.com/blog/similarity-clustering" rel="nofollow">Similarity Clustering to Catch Fraud Rings at Stripe</a></li> <li><a href="https://codeascraft.com/2020/10/29/bringing-personalized-search-to-etsy/" rel="nofollow">Personalized Search at Etsy</a></li> <li><a href="https://eng.lyft.com/ml-feature-serving-infrastructure-at-lyft-d30bf2d3c32a" rel="nofollow">ML Feature Serving Infrastructure at Lyft</a></li> <li><a href="https://codeascraft.com/2021/03/23/how-we-built-a-context-specific-bidding-system-for-etsy-ads/" rel="nofollow">Context-Specific Bidding System at Etsy</a></li> <li><a href="https://engineeringblog.yelp.com/2021/05/moderating-promotional-spam-and-inappropriate-content-in-photos-at-scale-at-yelp.html" rel="nofollow">Moderating Promotional Spam and Inappropriate Content in Photos at Scale at Yelp</a></li> <li><a href="https://dropbox.tech/machine-learning/optimizing-payments-with-machine-learning" rel="nofollow">Optimizing Payments with Machine Learning at Dropbox</a></li> </ul> </li> </ul> <div class="markdown-heading" dir="auto"><h2 tabindex="-1" class="heading-element" dir="auto">Architecture</h2><a id="user-content-architecture" class="anchor" aria-label="Permalink: Architecture" href="#architecture"><svg class="octicon octicon-link" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg></a></div> <ul dir="auto"> <li><a href="https://systemswemake.com/" rel="nofollow">Systems We Make</a></li> <li><a href="https://eng.uber.com/tech-stack-part-two/" rel="nofollow">Tech Stack (2 parts) at Uber</a></li> <li><a href="https://medium.engineering/the-stack-that-helped-medium-drive-2-6-millennia-of-reading-time-e56801f7c492" rel="nofollow">Tech Stack at Medium</a></li> <li><a href="https://engineering.shopify.com/blogs/engineering/e-commerce-at-scale-inside-shopifys-tech-stack" rel="nofollow">Tech Stack at Shopify</a></li> <li><a href="https://medium.com/airbnb-engineering/building-services-at-airbnb-part-4-23c95e428064" rel="nofollow">Building Services (4 parts) at Airbnb</a></li> <li><a href="https://evernote.com/blog/a-digest-of-evernotes-architecture/" rel="nofollow">Architecture of Evernote</a></li> <li><a href="https://engineering.riotgames.com/news/chat-service-architecture-persistence" rel="nofollow">Architecture of Chat Service (3 parts) at Riot Games</a></li> <li><a href="https://technology.riotgames.com/news/architecture-league-client-update" rel="nofollow">Architecture of League of Legends Client Update</a></li> <li><a href="https://blog.twitter.com/engineering/en_us/topics/infrastructure/2020/building-twitters-ad-platform-architecture-for-the-future.html" rel="nofollow">Architecture of Ad Platform at Twitter</a></li> <li><a href="https://eng.uber.com/architecture-api-gateway/" rel="nofollow">Architecture of API Gateway at Uber</a></li> <li><a href="https://slack.engineering/how-slack-built-shared-channels-8d42c895b19f" rel="nofollow">Basic Architecture of Slack</a></li> <li><a href="https://engineering.linkedin.com/architecture/brief-history-scaling-linkedin" rel="nofollow">Back-end at LinkedIn</a></li> <li><a href="https://yahooeng.tumblr.com/post/157200523046/introducing-tripod-flickrs-backend-refactored" rel="nofollow">Back-end at Flickr</a></li> <li><a href="https://medium.com/zendesk-engineering/the-history-of-infrastructure-at-zendesk-part-3-foundation-team-forming-and-evolving-9859e40f5390" rel="nofollow">Infrastructure (3 parts) at Zendesk</a></li> <li><a href="https://bytes.grubhub.com/cloud-infrastructure-at-grubhub-94db998a898a" rel="nofollow">Cloud Infrastructure at Grubhub</a></li> <li><a href="https://engineering.linkedin.com/blog/2018/01/now-you-see-me--now-you-dont--linkedins-real-time-presence-platf" rel="nofollow">Real-time Presence Platform at LinkedIn</a></li> <li><a href="https://engineering.linkedin.com/blog/2019/05/building-member-trust-through-a-centralized-and-scalable-setting" rel="nofollow">Settings Platform at LinkedIn</a></li> <li><a href="https://medium.com/glassdoor-engineering/building-a-nearline-system-for-scale-and-performance-part-ii-9e01bf51b23d" rel="nofollow">Nearline System for Scale and Performance (2 parts) at Glassdoor</a></li> <li><a href="https://medium.com/@Pinterest_Engineering/building-a-real-time-user-action-counting-system-for-ads-88a60d9c9a" rel="nofollow">Real-time User Action Counting System for Ads at Pinterest</a></li> <li><a href="https://engineering.riotgames.com/news/riot-games-api-deep-dive" rel="nofollow">API Platform at Riot Games</a></li> <li><a href="https://open.nytimes.com/play-by-play-moving-the-nyt-games-platform-to-gcp-with-zero-downtime-cf425898d569" rel="nofollow">Games Platform at The New York Times</a></li> <li><a href="https://bytes.swiggy.com/kabootar-swiggys-communication-platform-e5a43cc25629" rel="nofollow">Kabootar: Communication Platform at Swiggy</a></li> <li><a href="https://medium.com/netflix-techblog/https-medium-com-netflix-techblog-simone-a-distributed-simulation-service-b2c85131ca1b" rel="nofollow">Simone: Distributed Simulation Service at Netflix</a></li> <li><a href="https://engineeringblog.yelp.com/2017/04/how-yelp-runs-millions-of-tests-every-day.html" rel="nofollow">Seagull: Distributed System that Helps Running > 20 Million Tests Per Day at Yelp</a></li> <li><a href="https://medium.com/agoda-engineering/priceaggregator-an-intelligent-system-for-hotel-price-fetching-part-3-52acfc705081" rel="nofollow">PriceAggregator: Intelligent System for Hotel Price Fetching (3 parts) at Agoda</a></li> <li><a href="https://medium.com/tinder-engineering/phoenix-tinders-testing-platform-part-iii-520728b9537" rel="nofollow">Phoenix: Testing Platform (3 parts) at Tinder</a></li> <li><a href="https://netflixtechblog.com/ready-for-changes-with-hexagonal-architecture-b315ec967749" rel="nofollow">Hexagonal Architecture at Netflix</a></li> <li><a href="https://qconsf.com/system/files/presentation-slides/qcon_netflix_play_api.pdf" rel="nofollow">Architecture of Play API Service at Netflix</a></li> <li><a href="https://www.slideshare.net/linecorp/architecture-sustaining-line-sticker-services" rel="nofollow">Architecture of Sticker Services at LINE</a></li> <li><a href="https://medium.com/@palantir/terraforming-stack-overflow-enterprise-in-aws-47ee431e6be7" rel="nofollow">Stack Overflow Enterprise at Palantir</a></li> <li><a href="https://medium.com/@Pinterest_Engineering/building-a-dynamic-and-responsive-pinterest-7d410e99f0a9" rel="nofollow">Architecture of Following Feed, Interest Feed, and Picked For You at Pinterest</a></li> <li><a href="https://engineering.wework.com/our-api-specification-workflow-9337448d6ee6" rel="nofollow">API Specification Workflow at WeWork</a></li> <li><a href="https://medium.com/netflix-techblog/implementing-the-netflix-media-database-53b5a840b42a" rel="nofollow">Media Database at Netflix</a></li> <li><a href="https://medium.com/walmartlabs/member-transaction-history-architecture-8b6e34b87c21" rel="nofollow">Member Transaction History Architecture at Walmart</a></li> <li><a href="https://dropbox.tech/infrastructure/-testing-our-new-sync-engine" rel="nofollow">Sync Engine (2 parts) at Dropbox</a></li> <li><a href="https://www.sesameindia.com/images/core-banking-system-architecture" rel="nofollow">Architectures of Finance and Banking Systems</a> <ul dir="auto"> <li><a href="https://monzo.com/blog/2016/09/19/building-a-modern-bank-backend/" rel="nofollow">Bank Backend at Monzo</a></li> <li><a href="https://medium.com/@Wealthsimple/engineering-at-wealthsimple-reinventing-our-trading-platform-for-scale-17e332241b6c" rel="nofollow">Trading Platform for Scale at Wealthsimple</a></li> <li><a href="https://medium.com/margobank/choosing-an-architecture-85750e1e5a03" rel="nofollow">Core Banking System at Margo Bank</a></li> <li><a href="https://www.infoq.com/presentations/nubank-architecture" rel="nofollow">Architecture of Nubank</a></li> <li><a href="http://tech.transferwise.com/the-transferwise-stack-heartbeat-of-our-little-revolution/" rel="nofollow">Tech Stack at TransferWise</a></li> <li><a href="https://medium.com/build-addepar/our-tech-stack-a4f55dab4b0d" rel="nofollow">Tech Stack at Addepar</a></li> <li><a href="https://medium.com/airbnb-engineering/avoiding-double-payments-in-a-distributed-payments-system-2981f6b070bb" rel="nofollow">Avoiding Double Payments in a Distributed Payments System at Airbnb</a></li> </ul> </li> </ul> <div class="markdown-heading" dir="auto"><h2 tabindex="-1" class="heading-element" dir="auto">Interview</h2><a id="user-content-interview" class="anchor" aria-label="Permalink: Interview" href="#interview"><svg class="octicon octicon-link" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg></a></div> <ul dir="auto"> <li><a href="https://www.somethingsimilar.com/2013/01/14/notes-on-distributed-systems-for-young-bloods/" rel="nofollow">Designing Large-Scale Systems</a> <ul dir="auto"> <li><a href="https://blog.codinghorror.com/my-scaling-hero/" rel="nofollow">My Scaling Hero - Jeff Atwood (a dose of Endorphins before your interview, JK)</a></li> <li><a href="https://static.googleusercontent.com/media/research.google.com/en//people/jeff/stanford-295-talk.pdf" rel="nofollow">Software Engineering Advice from Building Large-Scale Distributed Systems - Jeff Dean</a></li> <li><a href="https://lethain.com/introduction-to-architecting-systems-for-scale/" rel="nofollow">Introduction to Architecting Systems for Scale</a></li> <li><a href="https://hackernoon.com/anatomy-of-a-system-design-interview-4cb57d75a53f" rel="nofollow">Anatomy of a System Design Interview</a></li> <li><a href="http://blog.gainlo.co/index.php/2015/10/22/8-things-you-need-to-know-before-system-design-interviews/" rel="nofollow">8 Things You Need to Know Before a System Design Interview</a></li> <li><a href="https://hackernoon.com/top-10-system-design-interview-questions-for-software-engineers-8561290f0444" rel="nofollow">Top 10 System Design Interview Questions </a></li> <li><a href="https://towardsdatascience.com/10-common-software-architectural-patterns-in-a-nutshell-a0b47a1e9013" rel="nofollow">Top 10 Common Large-Scale Software Architectural Patterns in a Nutshell</a></li> <li><a href="https://lynnlangit.com/2017/03/14/beyond-relational/" rel="nofollow">Cloud Big Data Design Patterns - Lynn Langit</a></li> <li><a href="https://hackernoon.com/how-not-to-design-netflix-in-your-45-minute-system-design-interview-64953391a054" rel="nofollow">How NOT to design Netflix in your 45-minute System Design Interview?</a></li> <li><a href="https://zapier.com/engineering/api-best-practices/" rel="nofollow">API Best Practices: Webhooks, Deprecation, and Design</a></li> </ul> </li> <li><a href="https://www.palantir.com/how-to-ace-a-systems-design-interview/" rel="nofollow">Explaining Low-Level Systems (OS, Network/Protocol, Database, Storage)</a> <ul dir="auto"> <li><a href="http://jaredheinrichs.com/mastering-the-osi-tcpip-models.html" rel="nofollow">OSI and TCP/IP Cheat Sheet</a></li> <li><a href="http://veithen.github.io/2013/11/18/iowait-linux.html" rel="nofollow">The Precise Meaning of I/O Wait Time in Linux</a></li> <li><a href="https://research.google.com/archive/paxos_made_live.html" rel="nofollow">Paxos Made Live – An Engineering Perspective</a></li> <li><a href="https://martin.kleppmann.com/2016/02/08/how-to-do-distributed-locking.html" rel="nofollow">How to do Distributed Locking</a></li> <li><a href="http://elliot.land/post/sql-transaction-isolation-levels-explained" rel="nofollow">SQL Transaction Isolation Levels Explained</a></li> </ul> </li> <li><a href="https://www.glassdoor.com/Interview/What-happens-when-you-type-www-google-com-in-your-browser-QTN_56396.htm" rel="nofollow">"What Happens When... and How" Questions</a> <ul dir="auto"> <li><a href="http://highscalability.com/blog/2017/12/11/netflix-what-happens-when-you-press-play.html" rel="nofollow">Netflix: What Happens When You Press Play?</a></li> <li><a href="https://monzo.com/blog/2018/04/05/how-monzo-to-monzo-payments-work/" rel="nofollow">Monzo: How Peer-To-Peer Payments Work</a></li> <li><a href="https://githubengineering.com/transit-and-peering-how-your-requests-reach-github/" rel="nofollow">Transit and Peering: How Your Requests Reach GitHub</a></li> <li><a href="https://labs.spotify.com/2018/08/31/smoother-streaming-with-bbr/" rel="nofollow">How Spotify Streams Music</a></li> </ul> </li> </ul> <div class="markdown-heading" dir="auto"><h2 tabindex="-1" class="heading-element" dir="auto">Organization</h2><a id="user-content-organization" class="anchor" aria-label="Permalink: Organization" href="#organization"><svg class="octicon octicon-link" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg></a></div> <ul dir="auto"> <li><a href="https://developers.soundcloud.com/blog/engineering-levels" rel="nofollow">Engineering Levels at SoundCloud</a></li> <li><a href="https://medium.com/palantir/dev-versus-delta-demystifying-engineering-roles-at-palantir-ad44c2a6e87" rel="nofollow">Engineering Roles at Palantir</a></li> <li><a href="https://www.youtube.com/watch?v=-PXi_7Ld5kU" rel="nofollow">Scaling Engineering Teams at Twitter</a></li> <li><a href="https://engineering.linkedin.com/blog/2018/03/scaling-decision-making-across-teams-within-linkedin-engineering" rel="nofollow">Scaling Decision-Making Across Teams at LinkedIn</a></li> <li><a href="https://blog.gojekengineering.com/the-dynamics-of-scaling-an-organisation-cb96dbe8aecd" rel="nofollow">Scaling Data Science Team at GOJEK</a></li> <li><a href="https://jobs.zalando.com/tech/blog/scaling-agile-zalando/?gh_src=4n3gxh1" rel="nofollow">Scaling Agile at Zalando</a></li> <li><a href="https://hackernoon.com/how-we-run-bol-com-with-60-autonomous-teams-fe7a98c0759" rel="nofollow">Scaling Agile at bol.com</a></li> <li><a href="https://blog.intercom.com/how-we-build-software/" rel="nofollow">Lessons Learned from Scaling a Product Team at Intercom</a></li> <li><a href="https://medium.com/@eleonorazucconi/toby-oliver-cto-typeform-on-hiring-managing-and-scaling-engineering-teams-86bef9e5a708" rel="nofollow">Hiring, Managing, and Scaling Engineering Teams at Typeform</a></li> <li><a href="https://instagram-engineering.com/scaling-the-datagram-team-fc67bcf9b721" rel="nofollow">Scaling the Datagram Team at Instagram</a></li> <li><a href="https://medium.com/flexport-design/designing-a-design-team-a9a066bc48a5" rel="nofollow">Scaling the Design Team at Flexport</a></li> <li><a href="https://medium.com/salesforce-ux/the-salesforce-team-model-for-scaling-a-design-system-d89c2a2d404b" rel="nofollow">Team Model for Scaling a Design System at Salesforce</a></li> <li><a href="https://medium.com/wish-engineering/scaling-the-analytics-team-at-wish-part-4-recruiting-2a9823b9f5a" rel="nofollow">Building Analytics Team (4 parts) at Wish</a></li> <li><a href="https://medium.com/transferwise-ideas/from-2-founders-to-1000-employees-how-a-small-scale-startup-grew-into-a-global-community-9f26371a551b" rel="nofollow">From 2 Founders to 1000 Employees at Transferwise</a></li> <li><a href="https://medium.com/thinking-design/lessons-learned-growing-a-ux-team-from-10-to-170-f7b47be02262" rel="nofollow">Lessons Learned Growing a UX Team from 10 to 170 at Adobe</a></li> <li><a href="https://medium.com/@sarahtavel/five-lessons-from-scaling-pinterest-6a699a889b08" rel="nofollow">Five Lessons from Scaling at Pinterest</a></li> <li><a href="http://engineering.vinted.com/2018/09/04/how-we-approach-engineering-at-vinted/" rel="nofollow">Approach Engineering at Vinted</a></li> <li><a href="https://engineering.indeedblog.com/blog/2018/10/using-metrics-to-improve-the-development-process-and-coach-people/" rel="nofollow">Using Metrics to Improve the Development Process (and Coach People) at Indeed</a></li> <li><a href="https://medium.com/@SkyscannerEng/9-mistakes-to-avoid-while-creating-an-internal-product-63d579b00b1a" rel="nofollow">Mistakes to Avoid while Creating an Internal Product at Skyscanner</a></li> <li><a href="https://codeascraft.com/2018/01/04/selecting-a-cloud-provider/" rel="nofollow">RACI (Responsible, Accountable, Consulted, Informed) at Etsy</a></li> <li><a href="https://jobs.zalando.com/tech/blog/four-pillars-leadership/" rel="nofollow">Four Pillars of Leading People (Empathy, Inspiration, Trust, Honesty) at Zalando</a></li> <li><a href="https://engineering.shopify.com/blogs/engineering/pair-programming-explained" rel="nofollow">Pair Programming at Shopify</a></li> <li><a href="https://blog.asana.com/2017/12/distributed-responsibility-engineering-manager/" rel="nofollow">Distributed Responsibility at Asana</a></li> <li><a href="https://jobs.zalando.com/tech/blog/rotating-engineers-at-zalando/" rel="nofollow">Rotating Engineers at Zalando</a></li> <li><a href="https://medium.com/pinterest-engineering/how-pinterest-supercharged-its-growth-team-with-experiment-idea-review-fd6571a02fb8" rel="nofollow">Experiment Idea Review at Pinterest</a></li> <li><a href="https://engineering.atspotify.com/2020/06/25/tech-migrations-the-spotify-way/" rel="nofollow">Tech Migrations at Spotify</a></li> <li><a href="https://engineeringblog.yelp.com/2021/01/whose-code-is-it-anyway.html" rel="nofollow">Improving Code Ownership at Yelp</a></li> <li><a href="https://tech.ebayinc.com/engineering/how-creating-an-agile-code-base-helped-ebay-pivot-for-apple-silicon/" rel="nofollow">Agile Code Base at eBay</a></li> <li><a href="https://ai.google/research/pubs/pub47025" rel="nofollow">Code Review</a> <ul dir="auto"> <li><a href="https://medium.com/@palantir/code-review-best-practices-19e02780015f" rel="nofollow">Code Review at Palantir</a></li> <li><a href="https://engineering.linecorp.com/en/blog/effective-code-review/" rel="nofollow">Code Review at LINE</a></li> <li><a href="https://medium.engineering/code-reviews-at-medium-bed2c0dce13a" rel="nofollow">Code Reviews at Medium</a></li> <li><a href="https://engineering.linkedin.com/blog/2018/06/scaling-collective-code-ownership-with-code-reviews" rel="nofollow">Code Review at LinkedIn</a></li> <li><a href="https://medium.com/disney-streaming/the-secret-to-better-code-reviews-c14c7884b9ac" rel="nofollow">Code Review at Disney</a></li> <li><a href="https://www.netlify.com/blog/2020/03/05/feedback-ladders-how-we-encode-code-reviews-at-netlify/" rel="nofollow">Code Review at Netlify</a></li> </ul> </li> </ul> <div class="markdown-heading" dir="auto"><h2 tabindex="-1" class="heading-element" dir="auto">Talk</h2><a id="user-content-talk" class="anchor" aria-label="Permalink: Talk" href="#talk"><svg class="octicon octicon-link" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg></a></div> <ul dir="auto"> <li><a href="https://www.youtube.com/watch?v=Y6Ev8GIlbxc" rel="nofollow">Distributed Systems in One Lesson - Tim Berglund, Senior Director of Developer Experience at Confluent</a></li> <li><a href="https://www.usenix.org/conference/srecon17americas/program/presentation/erlich" rel="nofollow">Building Real Time Infrastructure at Facebook - Jeff Barber and Shie Erlich, Software Engineer at Facebook</a></li> <li><a href="https://www.usenix.org/conference/srecon16/program/presentation/alvidrez" rel="nofollow">Building Reliable Social Infrastructure for Google - Marc Alvidrez, Senior Manager at Google</a></li> <li><a href="https://www.youtube.com/watch?v=K8YuavUy6Qc" rel="nofollow">Building a Distributed Build System at Google Scale - Aysylu Greenberg, SDE at Google</a></li> <li><a href="https://www.youtube.com/watch?v=ggizCjUCCqE" rel="nofollow">Site Reliability Engineering at Dropbox - Tammy Butow, Site Reliability Engineering Manager at Dropbox</a></li> <li><a href="https://www.youtube.com/watch?v=H4vMcD7zKM0" rel="nofollow">How Google Does Planet-Scale for Planet-Scale Infra - Melissa Binde, SRE Director for Google Cloud Platform</a></li> <li><a href="https://www.youtube.com/watch?v=CZ3wIuvmHeM&t=2837s" rel="nofollow">Netflix Guide to Microservices - Josh Evans, Director of Operations Engineering at Netflix</a></li> <li><a href="https://www.youtube.com/watch?v=1-3Ahy7Fxsc" rel="nofollow">Achieving Rapid Response Times in Large Online Services - Jeff Dean, Google Senior Fellow</a></li> <li><a href="https://www.youtube.com/watch?v=N8NWDHgWA28" rel="nofollow">Architecture to Handle 80K RPS Celebrity Sales at Shopify - Simon Eskildsen, Engineering Lead at Shopify</a></li> <li><a href="https://www.youtube.com/watch?v=QCHiNEw73AU" rel="nofollow">Lessons of Scale at Facebook - Bobby Johnson, Director of Engineering at Facebook</a></li> <li><a href="https://www.salesforce.com/video/1757880/" rel="nofollow">Performance Optimization for the Greater China Region at Salesforce - Jeff Cheng, Enterprise Architect at Salesforce</a></li> <li><a href="https://vimeo.com/252367076" rel="nofollow">How GIPHY Delivers a GIF to 300 Millions Users - Alex Hoang and Nima Khoshini, Services Engineers at GIPHY</a></li> <li><a href="https://www.youtube.com/watch?v=wzsxJqeVIhY&list=PLMu8-hpCxIVENuAue7bd0eCAglLGY_8AW&index=7" rel="nofollow">High Performance Packet Processing Platform at Alibaba - Haiyong Wang, Senior Director at Alibaba</a></li> <li><a href="https://atscaleconference.com/videos/solving-large-scale-data-center-and-cloud-interconnection-problems/" rel="nofollow">Solving Large-scale Data Center and Cloud Interconnection Problems - Ihab Tarazi, CTO at Equinix</a></li> <li><a href="https://www.youtube.com/watch?v=PE4gwstWhmc" rel="nofollow">Scaling Dropbox - Kevin Modzelewski, Back-end Engineer at Dropbox</a></li> <li><a href="https://www.youtube.com/watch?v=IhGWOaD5BYQ" rel="nofollow">Scaling Reliability at Dropbox - Sat Kriya Khalsa, SRE at Dropbox</a></li> <li><a href="https://atscaleconference.com/videos/performance-scale-2018-opening-remarks/" rel="nofollow">Scaling with Performance at Facebook - Bill Jia, VP of Infrastructure at Facebook</a></li> <li><a href="https://www.youtube.com/watch?v=IO4teCbHvZw" rel="nofollow">Scaling Live Videos to a Billion Users at Facebook - Sachin Kulkarni, Director of Engineering at Facebook</a></li> <li><a href="https://www.youtube.com/watch?v=hnpzNAPiC0E" rel="nofollow">Scaling Infrastructure at Instagram - Lisa Guo, Instagram Engineering</a></li> <li><a href="https://www.youtube.com/watch?v=6OvrFkLSoZ0" rel="nofollow">Scaling Infrastructure at Twitter - Yao Yue, Staff Software Engineer at Twitter</a></li> <li><a href="https://www.youtube.com/watch?v=LfqyhM1LeIU" rel="nofollow">Scaling Infrastructure at Etsy - Bethany Macri, Engineering Manager at Etsy</a></li> <li><a href="https://atscaleconference.com/videos/scaling-alibabas-real-time-infrastructure-for-global-shopping-holiday/" rel="nofollow">Scaling Real-time Infrastructure at Alibaba for Global Shopping Holiday - Xiaowei Jiang, Senior Director at Alibaba</a></li> <li><a href="https://www.youtube.com/watch?v=cdsfRXr9pJU" rel="nofollow">Scaling Data Infrastructure at Spotify - Matti (Lepistö) Pehrs, Spotify</a></li> <li><a href="https://www.youtube.com/watch?v=jQNCuD_hxdQ&list=RDhnpzNAPiC0E&index=11" rel="nofollow">Scaling Pinterest - Marty Weiner, Pinterest’s founding engineer</a></li> <li><a href="https://www.infoq.com/presentations/slack-scalability" rel="nofollow">Scaling Slack - Bing Wei, Software Engineer (Infrastructure) at Slack</a></li> <li><a href="https://www.youtube.com/watch?v=5yDO-tmIoXY&feature=youtu.be" rel="nofollow">Scaling Backend at Youtube - Sugu Sougoumarane, SDE at Youtube</a></li> <li><a href="https://www.youtube.com/watch?v=nuiLcWE8sPA" rel="nofollow">Scaling Backend at Uber - Matt Ranney, Chief Systems Architect at Uber</a></li> <li><a href="https://www.youtube.com/watch?v=tbqcsHg-Q_o" rel="nofollow">Scaling Global CDN at Netflix - Dave Temkin, Director of Global Networks at Netflix</a></li> <li><a href="https://www.youtube.com/watch?v=bxhYNfFeVF4" rel="nofollow">Scaling Load Balancing Infra to Support 1.3 Billion Users at Facebook - Patrick Shuff, Production Engineer at Facebook</a></li> <li><a href="https://www.youtube.com/watch?v=RlkCdM_f3p4" rel="nofollow">Scaling (a NSFW site) to 200 Million Views A Day And Beyond - Eric Pickup, Lead Platform Developer at MindGeek</a></li> <li><a href="https://www.infoq.com/presentations/quora-analytics" rel="nofollow">Scaling Counting Infrastructure at Quora - Chun-Ho Hung and Nikhil Gar, SEs at Quora</a></li> <li><a href="https://www.youtube.com/watch?v=g_MPGU_m01s" rel="nofollow">Scaling Git at Microsoft - Saeed Noursalehi, Principal Program Manager at Microsoft</a></li> <li><a href="https://www.youtube.com/watch?v=F-f0-k46WVk" rel="nofollow">Scaling Multitenant Architecture Across Multiple Data Centres at Shopify - Weingarten, Engineering Lead at Shopify</a></li> </ul> <div class="markdown-heading" dir="auto"><h2 tabindex="-1" class="heading-element" dir="auto">Book</h2><a id="user-content-book" class="anchor" aria-label="Permalink: Book" href="#book"><svg class="octicon octicon-link" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg></a></div> <ul dir="auto"> <li><a href="http://www.oreilly.com/webops/free/" rel="nofollow">Big Data, Web Ops & DevOps Ebooks - O'Reilly (Online - Free)</a></li> <li><a href="https://landing.google.com/sre/book.html" rel="nofollow">Google Site Reliability Engineering (Online - Free)</a></li> <li><a href="http://book.mixu.net/distsys/" rel="nofollow">Distributed Systems for Fun and Profit (Online - Free)</a></li> <li><a href="https://use-the-index-luke.com/sql/table-of-contents" rel="nofollow">What Every Developer Should Know About SQL Performance (Online - Free)</a></li> <li><a href="http://www.oreilly.com/webops-perf/free/beyond-the-twelve-factor-app.csp" rel="nofollow">Beyond the Twelve-Factor App - Exploring the DNA of Highly Scalable, Resilient Cloud Applications (Free)</a></li> <li><a href="http://www.oreilly.com/webops-perf/free/chaos-engineering.csp?intcmp=il-webops-free-product-na_new_site_chaos_engineering_text_cta" rel="nofollow">Chaos Engineering - Building Confidence in System Behavior through Experiments (Free)</a></li> <li><a href="http://theartofscalability.com/" rel="nofollow">The Art of Scalability</a></li> <li><a href="https://www.goodreads.com/book/show/23615147-web-scalability-for-startup-engineers" rel="nofollow">Web Scalability for Startup Engineers</a></li> <li><a href="http://scalabilityrules.com/" rel="nofollow">Scalability Rules: 50 Principles for Scaling Web Sites</a></li> </ul> <div class="markdown-heading" dir="auto"><h2 tabindex="-1" class="heading-element" dir="auto">Donation</h2><a id="user-content-donation" class="anchor" aria-label="Permalink: Donation" href="#donation"><svg class="octicon octicon-link" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg></a></div> <p dir="auto">Roses are red. Violets are blue. <a href="https://nguyenquocbinh.org/" rel="nofollow">Binh</a> likes sweet. <a href="https://paypal.me/binhnguyennus" rel="nofollow">Treat Binh a tiramisu?</a> 🍰</p> </article></div></div></div></div></div> <!-- --> <!-- --> <script type="application/json" id="__PRIMER_DATA_:R0:__">{"resolvedServerColorMode":"day"}</script></div> </react-partial> <input type="hidden" data-csrf="true" value="uNUziNSI04/r1LMqARYRO3LWobxVfHdivx86utW8gOVixqc/DlkheLmOtD/j058c2dlI9YvQIdTJ2ZxEjz+Jtg==" /> </div> <div data-view-component="true" class="Layout-sidebar"> <div class="BorderGrid about-margin" data-pjax> <div class="BorderGrid-row"> <div class="BorderGrid-cell"> <div class="hide-sm hide-md"> <h2 class="mb-3 h4">About</h2> <p class="f4 my-3"> The Patterns of Scalable, Reliable, and Performant Large-Scale Systems </p> <div class="my-3 d-flex flex-items-center"> <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-link flex-shrink-0 mr-2"> <path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path> </svg> <span class="flex-auto min-width-0 css-truncate css-truncate-target width-fit"> <a title="http://awesome-scalability.com/" role="link" target="_blank" rel="noopener noreferrer nofollow" class="text-bold" href="http://awesome-scalability.com/">awesome-scalability.com/</a> </span> </div> <h3 class="sr-only">Resources</h3> <div class="mt-2"> <a class="Link--muted" data-analytics-event="{"category":"Repository Overview","action":"click","label":"location:sidebar;file:readme"}" href="#readme-ov-file"> <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-book mr-2"> <path d="M0 1.75A.75.75 0 0 1 .75 1h4.253c1.227 0 2.317.59 3 1.501A3.743 3.743 0 0 1 11.006 1h4.245a.75.75 0 0 1 .75.75v10.5a.75.75 0 0 1-.75.75h-4.507a2.25 2.25 0 0 0-1.591.659l-.622.621a.75.75 0 0 1-1.06 0l-.622-.621A2.25 2.25 0 0 0 5.258 13H.75a.75.75 0 0 1-.75-.75Zm7.251 10.324.004-5.073-.002-2.253A2.25 2.25 0 0 0 5.003 2.5H1.5v9h3.757a3.75 3.75 0 0 1 1.994.574ZM8.755 4.75l-.004 7.322a3.752 3.752 0 0 1 1.992-.572H14.5v-9h-3.495a2.25 2.25 0 0 0-2.25 2.25Z"></path> </svg> Readme </a> </div> <h3 class="sr-only">License</h3> <div class="mt-2"> <a href="/adelnobel/awesome-scalability/blob/master/LICENSE" class="Link--muted" data-analytics-event="{"category":"Repository Overview","action":"click","label":"location:sidebar;file:license"}" > <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-law mr-2"> <path d="M8.75.75V2h.985c.304 0 .603.08.867.231l1.29.736c.038.022.08.033.124.033h2.234a.75.75 0 0 1 0 1.5h-.427l2.111 4.692a.75.75 0 0 1-.154.838l-.53-.53.529.531-.001.002-.002.002-.006.006-.006.005-.01.01-.045.04c-.21.176-.441.327-.686.45C14.556 10.78 13.88 11 13 11a4.498 4.498 0 0 1-2.023-.454 3.544 3.544 0 0 1-.686-.45l-.045-.04-.016-.015-.006-.006-.004-.004v-.001a.75.75 0 0 1-.154-.838L12.178 4.5h-.162c-.305 0-.604-.079-.868-.231l-1.29-.736a.245.245 0 0 0-.124-.033H8.75V13h2.5a.75.75 0 0 1 0 1.5h-6.5a.75.75 0 0 1 0-1.5h2.5V3.5h-.984a.245.245 0 0 0-.124.033l-1.289.737c-.265.15-.564.23-.869.23h-.162l2.112 4.692a.75.75 0 0 1-.154.838l-.53-.53.529.531-.001.002-.002.002-.006.006-.016.015-.045.04c-.21.176-.441.327-.686.45C4.556 10.78 3.88 11 3 11a4.498 4.498 0 0 1-2.023-.454 3.544 3.544 0 0 1-.686-.45l-.045-.04-.016-.015-.006-.006-.004-.004v-.001a.75.75 0 0 1-.154-.838L2.178 4.5H1.75a.75.75 0 0 1 0-1.5h2.234a.249.249 0 0 0 .125-.033l1.288-.737c.265-.15.564-.23.869-.23h.984V.75a.75.75 0 0 1 1.5 0Zm2.945 8.477c.285.135.718.273 1.305.273s1.02-.138 1.305-.273L13 6.327Zm-10 0c.285.135.718.273 1.305.273s1.02-.138 1.305-.273L3 6.327Z"></path> </svg> MIT license </a> </div> <h3 class="sr-only">Code of conduct</h3> <div class="mt-2"> <a href="#coc-ov-file" class="Link--muted" data-analytics-event="{"category":"Repository Overview","action":"click","label":"location:sidebar;file:code of conduct"}" > <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-code-of-conduct mr-2"> <path d="M8.048 2.241c.964-.709 2.079-1.238 3.325-1.241a4.616 4.616 0 0 1 3.282 1.355c.41.408.757.86.996 1.428.238.568.348 1.206.347 1.968 0 2.193-1.505 4.254-3.081 5.862-1.496 1.526-3.213 2.796-4.249 3.563l-.22.163a.749.749 0 0 1-.895 0l-.221-.163c-1.036-.767-2.753-2.037-4.249-3.563C1.51 10.008.007 7.952.002 5.762a4.614 4.614 0 0 1 1.353-3.407C3.123.585 6.223.537 8.048 2.24Zm-1.153.983c-1.25-1.033-3.321-.967-4.48.191a3.115 3.115 0 0 0-.913 2.335c0 1.556 1.109 3.24 2.652 4.813C5.463 11.898 6.96 13.032 8 13.805c.353-.262.758-.565 1.191-.905l-1.326-1.223a.75.75 0 0 1 1.018-1.102l1.48 1.366c.328-.281.659-.577.984-.887L9.99 9.802a.75.75 0 1 1 1.019-1.103l1.384 1.28c.295-.329.566-.661.81-.995L12.92 8.7l-1.167-1.168c-.674-.671-1.78-.664-2.474.03-.268.269-.538.537-.802.797-.893.882-2.319.843-3.185-.032-.346-.35-.693-.697-1.043-1.047a.75.75 0 0 1-.04-1.016c.162-.191.336-.401.52-.623.62-.748 1.356-1.637 2.166-2.417Zm7.112 4.442c.313-.65.491-1.293.491-1.916v-.001c0-.614-.088-1.045-.23-1.385-.143-.339-.357-.633-.673-.949a3.111 3.111 0 0 0-2.218-.915c-1.092.003-2.165.627-3.226 1.602-.823.755-1.554 1.637-2.228 2.45l-.127.154.562.566a.755.755 0 0 0 1.066.02l.794-.79c1.258-1.258 3.312-1.31 4.594-.032.396.394.792.791 1.173 1.173Z"></path> </svg> Code of conduct </a> </div> <h3 class="sr-only">Security policy</h3> <div class="mt-2"> <a href="#security-ov-file" class="Link--muted" data-analytics-event="{"category":"Repository Overview","action":"click","label":"location:sidebar;file:security policy"}" > <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-law mr-2"> <path d="M8.75.75V2h.985c.304 0 .603.08.867.231l1.29.736c.038.022.08.033.124.033h2.234a.75.75 0 0 1 0 1.5h-.427l2.111 4.692a.75.75 0 0 1-.154.838l-.53-.53.529.531-.001.002-.002.002-.006.006-.006.005-.01.01-.045.04c-.21.176-.441.327-.686.45C14.556 10.78 13.88 11 13 11a4.498 4.498 0 0 1-2.023-.454 3.544 3.544 0 0 1-.686-.45l-.045-.04-.016-.015-.006-.006-.004-.004v-.001a.75.75 0 0 1-.154-.838L12.178 4.5h-.162c-.305 0-.604-.079-.868-.231l-1.29-.736a.245.245 0 0 0-.124-.033H8.75V13h2.5a.75.75 0 0 1 0 1.5h-6.5a.75.75 0 0 1 0-1.5h2.5V3.5h-.984a.245.245 0 0 0-.124.033l-1.289.737c-.265.15-.564.23-.869.23h-.162l2.112 4.692a.75.75 0 0 1-.154.838l-.53-.53.529.531-.001.002-.002.002-.006.006-.016.015-.045.04c-.21.176-.441.327-.686.45C4.556 10.78 3.88 11 3 11a4.498 4.498 0 0 1-2.023-.454 3.544 3.544 0 0 1-.686-.45l-.045-.04-.016-.015-.006-.006-.004-.004v-.001a.75.75 0 0 1-.154-.838L2.178 4.5H1.75a.75.75 0 0 1 0-1.5h2.234a.249.249 0 0 0 .125-.033l1.288-.737c.265-.15.564-.23.869-.23h.984V.75a.75.75 0 0 1 1.5 0Zm2.945 8.477c.285.135.718.273 1.305.273s1.02-.138 1.305-.273L13 6.327Zm-10 0c.285.135.718.273 1.305.273s1.02-.138 1.305-.273L3 6.327Z"></path> </svg> Security policy </a> </div> <include-fragment src="/adelnobel/awesome-scalability/hovercards/citation/sidebar_partial?tree_name=patch-1"> </include-fragment> <div class="mt-2"> <a href="/adelnobel/awesome-scalability/activity" data-view-component="true" class="Link Link--muted"> <svg text="gray" aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-pulse mr-2"> <path d="M6 2c.306 0 .582.187.696.471L10 10.731l1.304-3.26A.751.751 0 0 1 12 7h3.25a.75.75 0 0 1 0 1.5h-2.742l-1.812 4.528a.751.751 0 0 1-1.392 0L6 4.77 4.696 8.03A.75.75 0 0 1 4 8.5H.75a.75.75 0 0 1 0-1.5h2.742l1.812-4.529A.751.751 0 0 1 6 2Z"></path> </svg> <span class="color-fg-muted">Activity</span> </a> </div> <h3 class="sr-only">Stars</h3> <div class="mt-2"> <a href="/adelnobel/awesome-scalability/stargazers" data-view-component="true" class="Link Link--muted"> <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-star mr-2"> <path d="M8 .25a.75.75 0 0 1 .673.418l1.882 3.815 4.21.612a.75.75 0 0 1 .416 1.279l-3.046 2.97.719 4.192a.751.751 0 0 1-1.088.791L8 12.347l-3.766 1.98a.75.75 0 0 1-1.088-.79l.72-4.194L.818 6.374a.75.75 0 0 1 .416-1.28l4.21-.611L7.327.668A.75.75 0 0 1 8 .25Zm0 2.445L6.615 5.5a.75.75 0 0 1-.564.41l-3.097.45 2.24 2.184a.75.75 0 0 1 .216.664l-.528 3.084 2.769-1.456a.75.75 0 0 1 .698 0l2.77 1.456-.53-3.084a.75.75 0 0 1 .216-.664l2.24-2.183-3.096-.45a.75.75 0 0 1-.564-.41L8 2.694Z"></path> </svg> <strong>0</strong> stars </a> </div> <h3 class="sr-only">Watchers</h3> <div class="mt-2"> <a href="/adelnobel/awesome-scalability/watchers" data-view-component="true" class="Link Link--muted"> <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-eye mr-2"> <path d="M8 2c1.981 0 3.671.992 4.933 2.078 1.27 1.091 2.187 2.345 2.637 3.023a1.62 1.62 0 0 1 0 1.798c-.45.678-1.367 1.932-2.637 3.023C11.67 13.008 9.981 14 8 14c-1.981 0-3.671-.992-4.933-2.078C1.797 10.83.88 9.576.43 8.898a1.62 1.62 0 0 1 0-1.798c.45-.677 1.367-1.931 2.637-3.022C4.33 2.992 6.019 2 8 2ZM1.679 7.932a.12.12 0 0 0 0 .136c.411.622 1.241 1.75 2.366 2.717C5.176 11.758 6.527 12.5 8 12.5c1.473 0 2.825-.742 3.955-1.715 1.124-.967 1.954-2.096 2.366-2.717a.12.12 0 0 0 0-.136c-.412-.621-1.242-1.75-2.366-2.717C10.824 4.242 9.473 3.5 8 3.5c-1.473 0-2.825.742-3.955 1.715-1.124.967-1.954 2.096-2.366 2.717ZM8 10a2 2 0 1 1-.001-3.999A2 2 0 0 1 8 10Z"></path> </svg> <strong>1</strong> watching </a> </div> <h3 class="sr-only">Forks</h3> <div class="mt-2"> <a href="/adelnobel/awesome-scalability/forks" data-view-component="true" class="Link Link--muted"> <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-repo-forked mr-2"> <path d="M5 5.372v.878c0 .414.336.75.75.75h4.5a.75.75 0 0 0 .75-.75v-.878a2.25 2.25 0 1 1 1.5 0v.878a2.25 2.25 0 0 1-2.25 2.25h-1.5v2.128a2.251 2.251 0 1 1-1.5 0V8.5h-1.5A2.25 2.25 0 0 1 3.5 6.25v-.878a2.25 2.25 0 1 1 1.5 0ZM5 3.25a.75.75 0 1 0-1.5 0 .75.75 0 0 0 1.5 0Zm6.75.75a.75.75 0 1 0 0-1.5.75.75 0 0 0 0 1.5Zm-3 8.75a.75.75 0 1 0-1.5 0 .75.75 0 0 0 1.5 0Z"></path> </svg> <strong>0</strong> forks </a> </div> <div class="mt-2"> <a class="Link--muted" href="/contact/report-content?content_url=https%3A%2F%2Fgithub.com%2Fadelnobel%2Fawesome-scalability&report=adelnobel+%28user%29"> Report repository </a> </div> </div> </div> </div> <div class="BorderGrid-row"> <div class="BorderGrid-cell"> <h2 class="h4 mb-3" data-pjax="#repo-content-pjax-container" data-turbo-frame="repo-content-turbo-frame"> <a href="/adelnobel/awesome-scalability/releases" data-view-component="true" class="Link--primary no-underline Link"> Releases </a></h2> <div class="text-small color-fg-muted">No releases published</div> </div> </div> <div class="BorderGrid-row"> <div class="BorderGrid-cell"> <h2 class="h4 mb-3"> <a href="/users/adelnobel/packages?repo_name=awesome-scalability" data-view-component="true" class="Link--primary no-underline Link d-flex flex-items-center"> Packages <span title="0" hidden="hidden" data-view-component="true" class="Counter ml-1">0</span> </a></h2> <div class="text-small color-fg-muted" > No packages published <br> </div> </div> </div> </div> </div> </div></div> </div> </div> </turbo-frame> </main> </div> </div> <footer class="footer pt-8 pb-6 f6 color-fg-muted p-responsive" role="contentinfo" > <h2 class='sr-only'>Footer</h2> <div class="d-flex flex-justify-center flex-items-center flex-column-reverse flex-lg-row flex-wrap flex-lg-nowrap"> <div class="d-flex flex-items-center flex-shrink-0 mx-2"> <a aria-label="Homepage" title="GitHub" class="footer-octicon mr-2" href="https://github.com"> <svg aria-hidden="true" height="24" viewBox="0 0 24 24" version="1.1" width="24" data-view-component="true" class="octicon octicon-mark-github"> <path d="M12.5.75C6.146.75 1 5.896 1 12.25c0 5.089 3.292 9.387 7.863 10.91.575.101.79-.244.79-.546 0-.273-.014-1.178-.014-2.142-2.889.532-3.636-.704-3.866-1.35-.13-.331-.69-1.352-1.18-1.625-.402-.216-.977-.748-.014-.762.906-.014 1.553.834 1.769 1.179 1.035 1.74 2.688 1.25 3.349.948.1-.747.402-1.25.733-1.538-2.559-.287-5.232-1.279-5.232-5.678 0-1.25.445-2.285 1.178-3.09-.115-.288-.517-1.467.115-3.048 0 0 .963-.302 3.163 1.179.92-.259 1.897-.388 2.875-.388.977 0 1.955.13 2.875.388 2.2-1.495 3.162-1.179 3.162-1.179.633 1.581.23 2.76.115 3.048.733.805 1.179 1.825 1.179 3.09 0 4.413-2.688 5.39-5.247 5.678.417.36.776 1.05.776 2.128 0 1.538-.014 2.774-.014 3.162 0 .302.216.662.79.547C20.709 21.637 24 17.324 24 12.25 24 5.896 18.854.75 12.5.75Z"></path> </svg> </a> <span> © 2024 GitHub, Inc. </span> </div> <nav aria-label="Footer"> <h3 class="sr-only" id="sr-footer-heading">Footer navigation</h3> <ul class="list-style-none d-flex flex-justify-center flex-wrap mb-2 mb-lg-0" aria-labelledby="sr-footer-heading"> <li class="mx-2"> <a data-analytics-event="{"category":"Footer","action":"go to Terms","label":"text:terms"}" href="https://docs.github.com/site-policy/github-terms/github-terms-of-service" data-view-component="true" class="Link--secondary Link">Terms</a> </li> <li class="mx-2"> <a data-analytics-event="{"category":"Footer","action":"go to privacy","label":"text:privacy"}" href="https://docs.github.com/site-policy/privacy-policies/github-privacy-statement" data-view-component="true" class="Link--secondary Link">Privacy</a> </li> <li class="mx-2"> <a data-analytics-event="{"category":"Footer","action":"go to security","label":"text:security"}" href="https://github.com/security" data-view-component="true" class="Link--secondary Link">Security</a> </li> <li class="mx-2"> <a data-analytics-event="{"category":"Footer","action":"go to status","label":"text:status"}" href="https://www.githubstatus.com/" data-view-component="true" class="Link--secondary Link">Status</a> </li> <li class="mx-2"> <a data-analytics-event="{"category":"Footer","action":"go to docs","label":"text:docs"}" href="https://docs.github.com/" data-view-component="true" class="Link--secondary Link">Docs</a> </li> <li class="mx-2"> <a data-analytics-event="{"category":"Footer","action":"go to contact","label":"text:contact"}" href="https://support.github.com?tags=dotcom-footer" data-view-component="true" class="Link--secondary Link">Contact</a> </li> <li class="mx-2" > <cookie-consent-link> <button type="button" class="Link--secondary underline-on-hover border-0 p-0 color-bg-transparent" data-action="click:cookie-consent-link#showConsentManagement" data-analytics-event="{"location":"footer","action":"cookies","context":"subfooter","tag":"link","label":"cookies_link_subfooter_footer"}" > Manage cookies </button> </cookie-consent-link> </li> <li class="mx-2"> <cookie-consent-link> <button type="button" class="Link--secondary underline-on-hover border-0 p-0 color-bg-transparent" data-action="click:cookie-consent-link#showConsentManagement" data-analytics-event="{"location":"footer","action":"dont_share_info","context":"subfooter","tag":"link","label":"dont_share_info_link_subfooter_footer"}" > Do not share my personal information </button> </cookie-consent-link> </li> </ul> </nav> </div> </footer> <ghcc-consent id="ghcc" class="position-fixed bottom-0 left-0" style="z-index: 999999" data-initial-cookie-consent-allowed="" data-cookie-consent-required="false"></ghcc-consent> <div id="ajax-error-message" class="ajax-error-message flash flash-error" hidden> <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-alert"> <path d="M6.457 1.047c.659-1.234 2.427-1.234 3.086 0l6.082 11.378A1.75 1.75 0 0 1 14.082 15H1.918a1.75 1.75 0 0 1-1.543-2.575Zm1.763.707a.25.25 0 0 0-.44 0L1.698 13.132a.25.25 0 0 0 .22.368h12.164a.25.25 0 0 0 .22-.368Zm.53 3.996v2.5a.75.75 0 0 1-1.5 0v-2.5a.75.75 0 0 1 1.5 0ZM9 11a1 1 0 1 1-2 0 1 1 0 0 1 2 0Z"></path> </svg> <button type="button" class="flash-close js-ajax-error-dismiss" aria-label="Dismiss error"> <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-x"> <path d="M3.72 3.72a.75.75 0 0 1 1.06 0L8 6.94l3.22-3.22a.749.749 0 0 1 1.275.326.749.749 0 0 1-.215.734L9.06 8l3.22 3.22a.749.749 0 0 1-.326 1.275.749.749 0 0 1-.734-.215L8 9.06l-3.22 3.22a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042L6.94 8 3.72 4.78a.75.75 0 0 1 0-1.06Z"></path> </svg> </button> You can’t perform that action at this time. </div> <template id="site-details-dialog"> <details class="details-reset details-overlay details-overlay-dark lh-default color-fg-default hx_rsm" open> <summary role="button" aria-label="Close dialog"></summary> <details-dialog class="Box Box--overlay d-flex flex-column anim-fade-in fast hx_rsm-dialog hx_rsm-modal"> <button class="Box-btn-octicon m-0 btn-octicon position-absolute right-0 top-0" type="button" aria-label="Close dialog" data-close-dialog> <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-x"> <path d="M3.72 3.72a.75.75 0 0 1 1.06 0L8 6.94l3.22-3.22a.749.749 0 0 1 1.275.326.749.749 0 0 1-.215.734L9.06 8l3.22 3.22a.749.749 0 0 1-.326 1.275.749.749 0 0 1-.734-.215L8 9.06l-3.22 3.22a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042L6.94 8 3.72 4.78a.75.75 0 0 1 0-1.06Z"></path> </svg> </button> <div class="octocat-spinner my-6 js-details-dialog-spinner"></div> </details-dialog> </details> </template> <div class="Popover js-hovercard-content position-absolute" style="display: none; outline: none;"> <div class="Popover-message Popover-message--bottom-left Popover-message--large Box color-shadow-large" style="width:360px;"> </div> </div> <template id="snippet-clipboard-copy-button"> <div class="zeroclipboard-container position-absolute right-0 top-0"> <clipboard-copy aria-label="Copy" class="ClipboardButton btn js-clipboard-copy m-2 p-0" data-copy-feedback="Copied!" data-tooltip-direction="w"> <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-copy js-clipboard-copy-icon m-2"> <path d="M0 6.75C0 5.784.784 5 1.75 5h1.5a.75.75 0 0 1 0 1.5h-1.5a.25.25 0 0 0-.25.25v7.5c0 .138.112.25.25.25h7.5a.25.25 0 0 0 .25-.25v-1.5a.75.75 0 0 1 1.5 0v1.5A1.75 1.75 0 0 1 9.25 16h-7.5A1.75 1.75 0 0 1 0 14.25Z"></path><path d="M5 1.75C5 .784 5.784 0 6.75 0h7.5C15.216 0 16 .784 16 1.75v7.5A1.75 1.75 0 0 1 14.25 11h-7.5A1.75 1.75 0 0 1 5 9.25Zm1.75-.25a.25.25 0 0 0-.25.25v7.5c0 .138.112.25.25.25h7.5a.25.25 0 0 0 .25-.25v-7.5a.25.25 0 0 0-.25-.25Z"></path> </svg> <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-check js-clipboard-check-icon color-fg-success d-none m-2"> <path d="M13.78 4.22a.75.75 0 0 1 0 1.06l-7.25 7.25a.75.75 0 0 1-1.06 0L2.22 9.28a.751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018L6 10.94l6.72-6.72a.75.75 0 0 1 1.06 0Z"></path> </svg> </clipboard-copy> </div> </template> <template id="snippet-clipboard-copy-button-unpositioned"> <div class="zeroclipboard-container"> <clipboard-copy aria-label="Copy" class="ClipboardButton btn btn-invisible js-clipboard-copy m-2 p-0 d-flex flex-justify-center flex-items-center" data-copy-feedback="Copied!" data-tooltip-direction="w"> <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-copy js-clipboard-copy-icon"> <path d="M0 6.75C0 5.784.784 5 1.75 5h1.5a.75.75 0 0 1 0 1.5h-1.5a.25.25 0 0 0-.25.25v7.5c0 .138.112.25.25.25h7.5a.25.25 0 0 0 .25-.25v-1.5a.75.75 0 0 1 1.5 0v1.5A1.75 1.75 0 0 1 9.25 16h-7.5A1.75 1.75 0 0 1 0 14.25Z"></path><path d="M5 1.75C5 .784 5.784 0 6.75 0h7.5C15.216 0 16 .784 16 1.75v7.5A1.75 1.75 0 0 1 14.25 11h-7.5A1.75 1.75 0 0 1 5 9.25Zm1.75-.25a.25.25 0 0 0-.25.25v7.5c0 .138.112.25.25.25h7.5a.25.25 0 0 0 .25-.25v-7.5a.25.25 0 0 0-.25-.25Z"></path> </svg> <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-check js-clipboard-check-icon color-fg-success d-none"> <path d="M13.78 4.22a.75.75 0 0 1 0 1.06l-7.25 7.25a.75.75 0 0 1-1.06 0L2.22 9.28a.751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018L6 10.94l6.72-6.72a.75.75 0 0 1 1.06 0Z"></path> </svg> </clipboard-copy> </div> </template> </div> <div id="js-global-screen-reader-notice" class="sr-only mt-n1" aria-live="polite" aria-atomic="true" ></div> <div id="js-global-screen-reader-notice-assertive" class="sr-only mt-n1" aria-live="assertive" aria-atomic="true"></div> </body> </html>