Viac

Vrstva z PostGIS s poľom celých čísel?


Mám GeoServer 2.6 a publikoval som vektorovú vrstvu (bod), ktorej niektoré z atribútov poľa sú celočíselné pole.

GeoServer tieto polia nerozpozná vo volaní wfs ani v tabuľke podrobností o type funkcie.

Existuje nejaká možnosť zviditeľniť ich?

Tieto body musím symbolizovať, berúc do úvahy tieto polia.


Okrem pohľadu, jedinou ďalšou možnosťou, ktorá mi napadne, je naučiť GeoServer rozpoznávať tieto polia vylepšením jeho kódu. Môžete sa opýtať na zoznam adries geotools-devel/geoserver-devel, ak to plánujete urobiť sami, alebo sa pozrite na odkazy na komerčnú podporu na geotools.org a geoserver.org


Pripisovanie sezónnych a regionálnych zmien v konvergencii arktickej vlhkosti

Skúmajú sa priestorové a časové zmeny v konvergencii vlhkosti vo vysokých zemepisných šírkach simulované modelom Spoločenstva pre klimatický systém Národného centra pre výskum atmosféry, verzia 3 (CCSM3). Konvergencia vlhkosti sa vypočíta pomocou aerologickej metódy s modelovými poľami špecifickej vlhkosti a vetra pokrývajúcich obdobie od roku 1960 do roku 1999 a od roku 2070 do roku 2089. Dvadsiate prvé storočie zahŕňa scenár A2 zo Osobitnej správy o emisných scenároch. Realizmus modelu v reprodukcii konvergencie vlhkosti dvadsiateho storočia sa hodnotí porovnaním s hodnotami odvodenými zo 40-ročnej ECMWF re-analýzy (ERA-40). V oblasti severne od 75 ° severnej šírky je simulovaná konvergencia vlhkosti podobná pozorovaniam v lete, ale je väčšia v zime, na jar a na jeseň. Model tiež podceňuje (nadhodnocuje) priemernú ročnú konvergenciu vlhkosti vo východnej (západnej) Arktíde. Ročné, sezónne a regionálne zmeny konca dvadsiateho prvého storočia sú určené aplikáciou samoorganizujúcej sa mapovej techniky na tlakové polia modelu na úrovni mora, aby sa identifikovali dominantné režimy cirkulácie atmosféry a ich zodpovedajúce konvergenčné polia vlhkosti. Zmeny v konvergencii vlhkosti od dvadsiateho do dvadsiateho prvého storočia vyplývajú predovšetkým z termodynamických účinkov (∼70%), aj keď zmeny vo frekvencii dominantných cirkulačných vzorov majú pomerne veľký vplyv na budúce zmeny vo východnej Arktíde. Zvýšená konvergencia vlhkosti v centrálnej Arktíde (severný Atlantik) pramení predovšetkým z termodynamických zmien v lete (v zime). Zmeny v sile a umiestnení pólových vlhkostných gradientov sú s najväčšou pravdepodobnosťou zodpovedné za predpokladané odchýlky v transporte vlhkosti, ktoré sú následne dôsledkom zvýšenia antropogénnych emisií skleníkových plynov, ako je predpísané scenárom A2.

Zodpovedajúca adresa autora: Dr. Jennifer Francis, IMCS, 71 Dudley Rd., New Brunswick, NJ 08901. E -mail: [email protected]


Vrstva z PostGIS s poľom celých čísel? - Geografické informačné systémy

Pomôžte s prekladom tejto príručky!


Naučte sa navrhovať rozsiahle systémy.

Príprava na pohovor o návrhu systému.

Naučte sa navrhovať rozsiahle systémy

Naučiť sa navrhovať škálovateľné systémy vám pomôže stať sa lepším inžinierom.

Návrh systému je široká téma. K dispozícii je a obrovské množstvo zdrojov roztrúsených po celom webe o zásadách návrhu systému.

Toto repo je organizovaná zbierka zdrojov, ktoré vám pomôžu naučiť sa vytvárať systémy vo veľkom.

Učte sa od komunity open source

Jedná sa o neustále aktualizovaný, open source projekt.

Príprava na pohovor o návrhu systému

Okrem kódovania rozhovorov je návrh systému a požadovaný komponent z proces technického pohovoru v mnohých technologických spoločnostiach.

Precvičte si otázky súvisiace s pohovorom o navrhovaní systému a porovnať vaše výsledky s ukážkové roztoky: diskusie, kód a diagramy.

Ďalšie témy pre prípravu na pohovor:


Poskytnuté balíčky kariet Anki používajú oddelené opakovanie, ktoré vám pomôže zachovať kľúčové koncepty návrhu systému.

Skvelé na použitie na cestách.

Zdroj kódovania: Interaktívne výzvy pri kódovaní

Hľadáte zdroje, ktoré vám pomôžu pripraviť sa na Rozhovor o kódovaní?


Pozrite sa na sesterské repo Interaktívne výzvy v oblasti kódovania, ktorý obsahuje ďalší balíček Anki:

Neváhajte odoslať žiadosti o stiahnutie, ktoré vám pomôžu:

Obsah, ktorý potrebuje určité leštenie, je vo vývoji.

Register tém návrhu systému

Súhrny rôznych tém návrhu systému vrátane výhod a nevýhod. Všetko je kompromis.

Každá sekcia obsahuje odkazy na podrobnejšie zdroje.


Navrhované témy na kontrolu na základe časovej osi rozhovoru (krátka, stredná, dlhá).

Otázka: Potrebujem tu pri rozhovoroch vedieť všetko?

Odpoveď: Nie, na prípravu na pohovor nemusíte vedieť všetko.

To, čo sa vás na pohovore pýta, závisí od premenných, ako sú:

  • Kolko mas skusenosti
  • Aké máte technické znalosti
  • Na aké pozície robíte pohovory
  • S ktorými spoločnosťami robíte rozhovor
  • Šťastie

Od skúsenejších kandidátov sa spravidla očakáva, že budú vedieť viac o návrhu systému. Od architektov alebo vedúcich tímov sa dá očakávať, že budú vedieť viac ako jednotliví prispievatelia. Špičkové technologické spoločnosti pravdepodobne absolvujú jedno alebo viac pohovorov o dizajne.

Začnite zoširoka a v niekoľkých oblastiach choďte hlbšie. Pomáha vedieť trochu o rôznych kľúčových témach návrhu systému. Nasledujúceho sprievodcu upravte podľa svojej časovej osi, skúseností, pre aké pozície robíte pohovory a s akými spoločnosťami robíte pohovor.

  • Krátka časová os - Cieľom šírka s témami návrhu systému. Cvičte riešením niektorí otázky na pohovore.
  • Stredná časová os - Cieľom šírka a nejaká hĺbka s témami návrhu systému. Cvičte riešením veľa otázky na pohovore.
  • Dlhá časová os - Cieľom šírka a väčšiu hĺbku s témami návrhu systému. Cvičte riešením väčšina otázky na pohovore.

Ako pristupovať k otázke k rozhovoru o návrhu systému

Ako sa vysporiadať s otázkou na pohovor o návrhu systému.

Rozhovor o návrhu systému je otvorený rozhovor. Očakáva sa od vás, že to budete viesť.

Na usmernenie diskusie môžete použiť nasledujúce kroky. Aby ste tento proces upevnili, postupujte podľa nasledujúcich pokynov v časti Otázky k pohovoru s návrhom systému s riešeniami.

Krok 1: Načrtnite prípady použitia, obmedzenia a predpoklady

Zhromaždite požiadavky a rozsah problému. Položte otázky, aby ste objasnili prípady použitia a obmedzenia. Diskutujte o predpokladoch.

  • Kto to bude používať?
  • Ako to budú používať?
  • Koľko je používateľov?
  • Čo robí systém?
  • Aké sú vstupy a výstupy systému?
  • Očakávame, že s akými údajmi budeme pracovať?
  • Koľko požiadaviek za sekundu očakávame?
  • Aký je očakávaný pomer čítania a zápisu?

Krok 2: Vytvorte dizajn na vysokej úrovni

Načrtnite dizajn na vysokej úrovni so všetkými dôležitými komponentmi.

Krok 3: Navrhnite základné komponenty

Ponorte sa do podrobností pre každú základnú súčasť. Ak vás napríklad požiadali o navrhnutie služby skrátenia adresy URL, prediskutujte:

  • Generovanie a ukladanie haša celej adresy URL
      a Base62
  • Hash zrážky
  • SQL alebo NoSQL
  • Schéma databázy
    • Vyhľadávanie v databáze

    Vzhľadom na obmedzenia identifikujte a riešte úzke miesta. Potrebujete napríklad na riešenie problémov so škálovateľnosťou nasledujúce položky?

    Diskutujte o možných riešeniach a kompromisoch. Všetko je kompromis. Riešenie úzkych miest pomocou zásad škálovateľného návrhu systému.

    Môžete byť požiadaní, aby ste urobili niekoľko odhadov ručne. Nasledujúce zdroje nájdete v prílohe:

    Zdroj (y) a ďalšie čítanie

    Pozrite sa na nasledujúce odkazy, aby ste získali lepšiu predstavu o tom, čo môžete očakávať:

    Otázky k rozhovoru s návrhom systému s riešeniami

    Bežné otázky týkajúce sa rozhovoru s návrhom systému so vzorovými diskusiami, kódom a diagrammi.

    Riešenia prepojené s obsahom v priečinku roztoky/.

    Otázka
    Design Pastebin.com (alebo Bit.ly) Riešenie
    Navrhnite časovú os a vyhľadávanie na Twitteri (alebo kanál a vyhľadávanie na Facebooku) Riešenie
    Navrhnite webový prehľadávač Riešenie
    Design Mint.com Riešenie
    Navrhnite dátové štruktúry pre sociálnu sieť Riešenie
    Navrhnite obchod s kľúčovými hodnotami pre vyhľadávací nástroj Riešenie
    Poradie predaja spoločnosti Design podľa funkcie podľa kategórie Riešenie
    Navrhnite systém, ktorý bude prispôsobený miliónom používateľov na AWS Riešenie
    Pridajte otázku týkajúcu sa návrhu systému Prispejte

    Design Pastebin.com (alebo Bit.ly)

    Navrhnite časovú os a vyhľadávanie na Twitteri (alebo kanál a vyhľadávanie na Facebooku)

    Navrhnite dátové štruktúry pre sociálnu sieť

    Navrhnite obchod s kľúčovými hodnotami pre vyhľadávací nástroj

    Poradie predaja spoločnosti Design podľa funkcie podľa kategórie

    Navrhnite systém, ktorý bude prispôsobený miliónom používateľov na AWS

    Otázky k rozhovoru s objektovo orientovaným dizajnom s riešeniami

    Bežné objektovo orientované otázky týkajúce sa pohovoru so vzorom s ukážkovými diskusiami, kódom a diagrammi.

    Riešenia prepojené s obsahom v priečinku roztoky/.

    Poznámka: Táto časť je vo vývoji

    Otázka
    Navrhnite hash mapu Riešenie
    Navrhnite najmenej nedávno používanú vyrovnávaciu pamäť Riešenie
    Navrhnite call centrum Riešenie
    Navrhnite balíček kariet Riešenie
    Navrhnite parkovisko Riešenie
    Navrhnite chatovací server Riešenie
    Navrhnite kruhové pole Prispejte
    Pridajte otázku na objektovo orientovaný dizajn Prispejte

    Témy návrhu systému: začnite tu

    Najprv budete potrebovať základné znalosti o spoločných zásadách, naučíte sa, aké sú, ako sa používajú a aké sú ich výhody a nevýhody.

    Krok 1: Pozrite si prednášku o škálovateľnosti

    • Preberané témy:
      • Vertikálne škálovanie
      • Horizontálne škálovanie
      • Ukladanie do vyrovnávacej pamäte
      • Rozdelenie výkonu
      • Replikácia databázy
      • Rozdelenie databázy

      Krok 2: Prečítajte si článok o škálovateľnosti

      Ďalej sa pozrieme na kompromisy na vysokej úrovni:

      • Výkon vs. škálovateľnosť
      • Latencia vs. priepustnosť
      • Dostupnosť vs. konzistencia

      Majte to na pamäti všetko je kompromis.

      Potom sa ponoríme do konkrétnejších tém, ako sú DNS, CDN a nástroje na vyrovnávanie zaťaženia.

      Výkon vs škálovateľnosť

      Služba je škálovateľné ak to má za následok zvýšenie výkon spôsobom úmerným pridaným zdrojom. Vo všeobecnosti zvýšenie výkonu znamená obslúžiť viac jednotiek práce, ale môže to byť aj zvládnutie väčších jednotiek práce, napríklad keď sa množiny údajov rozrastajú. 1

      Ďalší spôsob, ako sa pozrieť na výkon vs. škálovateľnosť:

      • Ak máte a výkon problém, váš systém je pomalý pre jedného používateľa.
      • Ak máte a škálovateľnosť problém, váš systém je rýchly pre jedného používateľa, ale pomalý pri veľkom zaťažení.

      Zdroj (y) a ďalšie čítanie

      Latencia je čas vykonať nejakú akciu alebo dosiahnuť nejaký výsledok.

      Priepustnosť je počet takýchto akcií alebo výsledkov za jednotku času.

      Vo všeobecnosti by ste sa mali zamerať na maximálna priepustnosť s prijateľná latencia.

      Zdroj (y) a ďalšie čítanie

      Dostupnosť vs konzistencia

      V distribuovanom počítačovom systéme môžete podporovať iba dve z nasledujúcich záruk:

      • Konzistencia - Každé čítanie dostane najnovší zápis alebo chybu
      • Dostupnosť - Každá žiadosť dostane odpoveď bez záruky, že obsahuje najnovšiu verziu informácií
      • Tolerancia oddielov - Systém pokračuje v prevádzke napriek svojvoľnému vytváraniu oddielov v dôsledku zlyhaní siete

      Siete nie sú spoľahlivé, takže budete musieť podporovať toleranciu oddielov. Budete musieť urobiť softvérový kompromis medzi konzistenciou a dostupnosťou.

      CP - konzistencia a tolerancia oddielov

      Čakanie na odpoveď z rozdeleného uzla môže mať za následok chybu časového limitu. CP je dobrou voľbou, ak vaše obchodné potreby vyžadujú atómové čítanie a zápis.

      AP - dostupnosť a tolerancia oddielov

      Odpovede vracajú najľahšie dostupnú verziu údajov dostupných v ľubovoľnom uzle, ktorá nemusí byť najnovšia. Po vyriešení oddielu môže zápisy chvíľu trvať, kým sa rozšíria.

      AP je dobrou voľbou, ak obchodné potreby umožňujú prípadnú konzistenciu alebo keď systém potrebuje pokračovať v práci napriek externým chybám.

      Zdroj (y) a ďalšie čítanie

      Pri viacerých kópiách rovnakých údajov sa stretávame s možnosťami, ako ich synchronizovať, aby mali klienti konzistentný pohľad na údaje. Pripomeňme si definíciu konzistencie z vety o CAP - každé čítanie dostane najnovší zápis alebo chybu.

      Po zápise to prečítané môže, ale nemusí vidieť. Je zvolený prístup maximálneho úsilia.

      Tento prístup sa používa v systémoch, ako je memcached. Slabá konzistencia funguje dobre v prípadoch použitia v reálnom čase, ako sú VoIP, videochat a hry pre viacerých hráčov v reálnom čase. Ak napríklad telefonujete a na niekoľko sekúnd stratíte príjem, pri obnovení spojenia nebudete počuť, čo bolo povedané pri strate spojenia.

      Po zápise sa prečítania nakoniec zobrazia (spravidla do milisekúnd). Údaje sa replikujú asynchrónne.

      Tento prístup sa používa v systémoch, ako sú DNS a e -mail. Prípadná konzistencia funguje dobre vo vysoko dostupných systémoch.

      Po zápise to prečítajú. Dáta sa replikujú synchrónne.

      Tento prístup sa používa v súborových systémoch a RDBMS. Silná konzistencia funguje dobre v systémoch, ktoré vyžadujú transakcie.

      Zdroj (y) a ďalšie čítanie

      Na podporu vysokej dostupnosti existujú dva komplementárne vzory: zlyhanie a replikácia.

      Pri aktívnom pasívnom zlyhaní sa v pohotovostnom režime odosielajú údery srdca medzi aktívnym a pasívnym serverom. Ak je srdcový tep prerušený, pasívny server prevezme aktívnu IP adresu a obnoví službu.

      Dĺžka prestojov je určená tým, či pasívny server už beží v „horúcom“ pohotovostnom režime alebo či sa musí spustiť z „studeného“ pohotovostného režimu. Komunikáciu prevádzkuje iba aktívny server.

      Aktívne pasívne zlyhanie sa môže označovať aj ako záložné zlyhanie typu master-slave.

      V prípade active-active oba servery spravujú prenos a rozdeľujú medzi ne záťaž.

      Ak sú servery zamerané na verejnosť, DNS by potrebovalo vedieť o verejných IP adresách oboch serverov. Ak sú servery orientované na vnútornú stranu, aplikačná logika by musela vedieť o oboch serveroch.

      Aktívne failover môže byť tiež označovaný ako master-master failover.

      • Fail-over zvyšuje hardvér a zvyšuje komplexnosť.
      • Ak aktívny systém zlyhá predtým, ako je možné replikovať všetky novo zapísané údaje na pasívne, existuje možnosť straty údajov.

      Master-slave a master-master

      Táto téma je ďalej prediskutovaná v sekcii Databáza:

      Dostupnosť je často kvantifikovaná dobou prevádzky (alebo prestojmi) ako percento času, kedy je služba k dispozícii. Dostupnosť sa spravidla meria v počte 9 s-služba s 99,99% dostupnosťou je opísaná ako služba so štyrmi 9 s.

      Dostupnosť 99,9% - tri 9 s

      Trvanie Prijateľné prestoje
      Prestoje za rok 8h 45min 57s
      Prestoje za mesiac 43 m 49,7 s
      Prestoje za týždeň 10 m 4,8 s
      Prestoje za deň 1 m 26,4 s

      Dostupnosť 99,99% - štyri 9s

      Trvanie Prijateľné prestoje
      Prestoje za rok 52 minút 35,7 s
      Prestoje za mesiac 4 m 23 s
      Prestoje za týždeň 1 m 5 s
      Prestoje za deň 8,6 s

      Dostupnosť paralelne v poradí

      Ak sa služba skladá z viacerých komponentov náchylných na zlyhanie, celková dostupnosť služby závisí od toho, či sú komponenty v poradí alebo paralelne.

      Celková dostupnosť klesá, keď sú v poradí dve súčasti s dostupnosťou & lt 100%:

      Ak by obaja Foo a Bar mali 99,9% dostupnosť, ich celková dostupnosť v poradí by bola 99,8%.

      Celková dostupnosť sa zvyšuje, ak sú paralelne dva komponenty s dostupnosťou & lt 100%:

      Ak by obaja Foo aj Bar mali 99,9% dostupnosť, ich celková dostupnosť paralelne by bola 99,9999%.

      Systém Domain Name System (DNS) prekladá názov domény, napríklad www.example.com, na adresu IP.

      DNS je hierarchický, s niekoľkými autoritatívnymi servermi na najvyššej úrovni. Váš smerovač alebo poskytovateľ internetových služieb poskytuje informácie o tom, na ktoré servery DNS sa máte pri vyhľadávaní obrátiť. Mapovania vyrovnávacej pamäte serverov DNS nižšej úrovne, ktoré by mohli byť zastarané z dôvodu oneskorenia šírenia DNS. Výsledky DNS môže ukladať do vyrovnávacej pamäte aj váš prehliadač alebo operačný systém na určité časové obdobie, ktoré závisí od času na život (TTL).

      • Záznam NS (server názvov) - Špecifikuje servery DNS pre vašu doménu/subdoménu.
      • MX záznam (výmena pošty) - Špecifikuje poštové servery na prijímanie správ.
      • Záznam (adresa) - Nasmeruje meno na IP adresu.
      • CNAME (kanonický) - Nasmeruje meno na iné meno alebo CNAME (example.com na www.example.com) alebo na záznam A.

      Služby ako CloudFlare a Route 53 poskytujú spravované služby DNS. Niektoré služby DNS môžu smerovať prenos rôznymi spôsobmi:

        • Zabráňte prenosu na servery, ktoré sú v údržbe
        • Rovnováha medzi rôznymi veľkosťami klastra
        • A/B testovanie
        • Prístup k serveru DNS prináša mierne oneskorenie, aj keď je zmiernené vyššie opísaným ukladaním do pamäte cache.
        • Správa servera DNS môže byť zložitá a spravidla ju spravujú vlády, poskytovatelia internetových služieb a veľké spoločnosti.
        • Služby DNS sa nedávno dostali pod útok DDoS, ktorý používateľom bráni v prístupe na webové stránky, ako je Twitter, bez toho, aby poznali jeho IP adresu (adresy).

        Zdroj (y) a ďalšie čítanie

        Sieť na doručovanie obsahu (CDN) je globálne distribuovaná sieť serverov proxy, ktorá poskytuje obsah z miest bližšie k používateľovi. Statické súbory, ako napríklad HTML/CSS/JS, fotografie a videá, sa poskytujú z CDN, aj keď niektoré CDN, ako napríklad Amazon CloudFront, podporujú dynamický obsah. Rozlíšenie DNS stránok oznámi klientom, na ktorý server sa majú obrátiť.

        Poskytovanie obsahu z CDN môže výrazne zlepšiť výkon dvoma spôsobmi:

        • Používatelia dostávajú obsah z blízkych dátových centier
        • Vaše servery nemusia obsluhovať požiadavky, ktoré CDN spĺňa

        Push CDN prijímajú nový obsah vždy, keď na vašom serveri nastanú zmeny. Nesiete plnú zodpovednosť za poskytovanie obsahu, nahrávanie priamo do siete CDN a prepisovanie adries URL tak, aby ukazovali na sieť CDN. Môžete nakonfigurovať, kedy vyprší platnosť obsahu a kedy sa aktualizuje. Obsah sa nahráva iba vtedy, keď je nový alebo zmenený, pričom sa minimalizuje prenos, ale maximalizuje sa úložisko.

        Weby s malým objemom návštevnosti alebo weby s obsahom, ktorý nie je často aktualizovaný, dobre fungujú s push CDN. Obsah je na CDN umiestnený raz, namiesto toho, aby bol v pravidelných intervaloch znova sťahovaný.

        Keď prvý používateľ požiada o obsah, vytiahnite siete CDN a získajte zo svojho servera nový obsah. Necháte obsah na serveri a prepíšete adresy URL tak, aby smerovali na sieť CDN. Výsledkom je pomalšia požiadavka, kým sa obsah neuloží do pamäte CDN.

        Čas dožitia (TTL) určuje, ako dlho sa obsah ukladá do vyrovnávacej pamäte. Potiahnutím siete CDN sa minimalizuje úložný priestor v sieti CDN, ale môže dôjsť k nadbytočnému prenosu, ak vyprší platnosť súborov a stiahnu sa skôr, ako sa skutočne zmenia.

        Webové stránky s vysokou návštevnosťou fungujú dobre s ťažkými sieťami CDN, pretože návštevnosť je rozložená rovnomernejšie a v sieti CDN zostáva iba nedávno požadovaný obsah.

        • Náklady na CDN môžu byť značné v závislosti od návštevnosti, aj keď by sa to malo zvážiť s dodatočnými nákladmi, ktoré by vám vznikli, keby ste CDN nepoužívali.
        • Obsah môže byť zastaraný, ak je aktualizovaný pred vypršaním platnosti TTL.
        • CDN vyžadujú zmenu URL pre statický obsah, aby smeroval na CDN.

        Zdroj (y) a ďalšie čítanie

        Nástroje na vyrovnávanie zaťaženia distribuujú prichádzajúce požiadavky klientov na počítačové prostriedky, akými sú aplikačné servery a databázy. V každom prípade nástroj na vyrovnávanie zaťaženia vráti odpoveď z výpočtového prostriedku príslušnému klientovi. Vyrovnávače zaťaženia sú účinné v:

        • Zabránenie prechodu požiadaviek na nezdravé servery
        • Predchádzanie preťažovaniu zdrojov
        • Pomáha odstrániť jediný bod zlyhania

        Vyrovnávače zaťaženia môžu byť implementované s hardvérom (drahým) alebo so softvérom, ako je HAProxy.

        Medzi ďalšie výhody patrí:

        • Ukončenie SSL - Dešifrujte prichádzajúce požiadavky a šifrujte odpovede serverov, aby servery backend nemuseli vykonávať tieto potenciálne drahé operácie
          • Odstraňuje potrebu inštalácie certifikátov X.509 na každý server

          Na ochranu pred zlyhaniami je bežné nastaviť viac vyvažovačov záťaže, buď v aktívnom pasívnom alebo aktívnom aktívnom režime.

          Vyrovnávače zaťaženia môžu smerovať návštevnosť na základe rôznych metrík vrátane:

          Vyrovnávače zaťaženia vrstvy 4 sa pozerajú na informácie vo transportnej vrstve a rozhodujú, ako distribuovať požiadavky. Spravidla to zahŕňa zdroj, cieľovú adresu IP a porty v hlavičke, ale nie obsah paketu. Vyrovnávače zaťaženia vrstvy 4 preposielajú sieťové pakety na server a od neho, pričom vykonávajú preklad sieťových adries (NAT).

          Vyrovnávače záťaže vrstvy 7 sa pozerajú na aplikačnú vrstvu a rozhodujú, ako distribuovať požiadavky. To môže zahŕňať obsah hlavičky, správy a súborov cookie. Vyrovnávače zaťaženia vrstvy 7 ukončujú sieťovú prevádzku, prečítajú si správu, urobia rozhodnutie o vyrovnaní zaťaženia a potom otvoria pripojenie k zvolenému serveru. Napríklad nástroj na vyrovnávanie zaťaženia vrstvy 7 môže smerovať prenos videa na servery, ktoré sú hostiteľmi videí, a zároveň smerovať citlivejšiu návštevnosť z fakturácie používateľov na servery zabezpečené zabezpečením.

          Za cenu flexibility vyžaduje vyvažovanie záťaže vrstvy 4 menej času a výpočtových zdrojov ako vrstva 7, aj keď vplyv na výkon môže byť na modernom komoditnom hardvéri minimálny.

          Vyrovnávače zaťaženia môžu tiež pomôcť s horizontálnym škálovaním, zlepšením výkonu a dostupnosti. Rozširovanie pomocou komoditných strojov je nákladovo efektívnejšie a má za následok vyššiu dostupnosť ako škálovanie jedného servera na drahšom hardvéri, tzv. Vertikálne škálovanie. Je tiež jednoduchšie zamestnať talentovaných pracovníkov na komoditnom hardvéri, ako je to v špecializovaných podnikových systémoch.

          Nevýhody: horizontálne škálovanie

          • Horizontálne škálovanie prináša komplexnosť a zahŕňa klonovanie serverov
            • Servery by mali byť bez štátnej príslušnosti: nemali by obsahovať žiadne údaje súvisiace s používateľmi, ako sú relácie alebo profilové obrázky
            • Relácie je možné ukladať do centralizovaného úložiska údajov, ako je databáza (SQL, NoSQL) alebo trvalá vyrovnávacia pamäť (Redis, Memcached)

            Nevýhody: vyrovnávač záťaže

            • Nástroj na vyrovnávanie zaťaženia sa môže stať prekážkou výkonu, ak nemá dostatok zdrojov alebo nie je správne nakonfigurovaný.
            • Predstavenie nástroja na vyrovnávanie zaťaženia, ktorý pomôže eliminovať jeden bod zlyhania, povedie k zvýšenej komplexnosti.
            • Jediný nástroj na vyrovnávanie zaťaženia je jediným bodom poruchy. Konfigurácia viacerých nástrojov na vyrovnanie zaťaženia ďalej zvyšuje zložitosť.

            Zdroj (y) a ďalšie čítanie

            Reverzný proxy je webový server, ktorý centralizuje interné služby a poskytuje zjednotené rozhrania pre verejnosť. Požiadavky klientov sú odoslané na server, ktorý ich môže splniť predtým, ako reverzný server proxy vráti odpoveď servera klientovi.

            Medzi ďalšie výhody patrí:

            • Zvýšená bezpečnosť - Skryť informácie o serveroch typu backend, zakázaných IP adresách, obmedziť počet pripojení na klienta
            • Zvýšená škálovateľnosť a flexibilita - Klienti vidia iba adresu IP reverzného servera proxy, čo vám umožňuje meniť veľkosť serverov alebo meniť ich konfiguráciu
            • Ukončenie SSL - Dešifrujte prichádzajúce požiadavky a šifrujte reakcie serverov, aby servery backend nemuseli vykonávať tieto potenciálne drahé operácie
              • Odstraňuje potrebu inštalácie certifikátov X.509 na každý server
              • HTML/CSS/JS
              • Fotografie
              • Videá
              • Atď

              Nástroj na vyrovnávanie zaťaženia vs reverzný server proxy

              • Nasadenie nástroja na vyrovnávanie zaťaženia je užitočné, ak máte viac serverov. Vyrovnávače zaťaženia často smerujú prenos na sadu serverov, ktoré poskytujú rovnakú funkciu.
              • Reverzné proxy servery môžu byť užitočné dokonca iba s jedným webovým serverom alebo aplikačným serverom, čím sa otvárajú výhody popísané v predchádzajúcej časti.
              • Riešenia, ako sú NGINX a HAProxy, môžu podporovať reverzné proxy pre vrstvu 7 aj vyvažovanie záťaže.

              Nevýhody: reverzný proxy server

              • Zavedenie reverzného servera proxy zvyšuje zložitosť.
              • Jeden reverzný server proxy je jediným bodom zlyhania. Konfigurácia viacerých serverov reverzného servera proxy (tj záložného servera) ďalej zvyšuje zložitosť.

              Zdroj (y) a ďalšie čítanie

              Oddelenie webovej vrstvy od aplikačnej vrstvy (známej tiež ako platformová vrstva) vám umožňuje nezávisle škálovať a konfigurovať obe vrstvy. Pridanie nového rozhrania API má za následok pridanie aplikačných serverov bez nevyhnutného pridania ďalších webových serverov. The zásada jednotnej zodpovednosti obhajuje malé a autonómne služby, ktoré spolupracujú. Malé tímy s malými službami môžu agresívnejšie plánovať rýchly rast.

              Pracovníci v aplikačnej vrstve tiež pomáhajú povoliť asynchrónnosť.

              S touto diskusiou súvisia mikroslužby, ktoré možno opísať ako sadu nezávisle nasaditeľných, malých, modulárnych služieb. Každá služba vykonáva jedinečný proces a komunikuje prostredníctvom dobre definovaného a odľahčeného mechanizmu, ktorý slúži obchodnému cieľu. 1

              Pinterest napríklad môže mať nasledujúce mikroslužby: užívateľský profil, sledovateľ, informačný kanál, vyhľadávanie, nahrávanie fotografií atď.

              Systémy ako Consul, Etcd a Zookeeper môžu pomôcť službám nájsť sa navzájom tým, že sledujú registrované mená, adresy a porty. Kontroly stavu pomáhajú overiť integritu služby a často sa vykonávajú pomocou koncového bodu HTTP. Consul aj Etcd majú vstavané úložisko kľúč-hodnota, ktoré môže byť užitočné na ukladanie konfiguračných hodnôt a iných zdieľaných údajov.

              Nevýhody: aplikačná vrstva

              • Pridanie aplikačnej vrstvy s voľne prepojenými službami si vyžaduje iný prístup z architektonického, prevádzkového a procesného hľadiska (oproti monolitickému systému).
              • Microservices môžu zvýšiť náročnosť nasadenia a prevádzky.

              Zdroj (y) a ďalšie čítanie

              Systém správy relačných databáz (RDBMS)

              Relačná databáza ako SQL je zbierka dátových položiek usporiadaných v tabuľkách.

              KYSELINA je sada vlastností transakcií z relačnej databázy.

              • Atomicita - Každá transakcia je všetko alebo nič
              • Konzistencia - Akákoľvek transakcia prenesie databázu z jedného platného stavu do druhého
              • Izolácia - Vykonávanie transakcií súbežne má rovnaké výsledky, ako keby boli transakcie vykonávané sériovo
              • Trvanlivosť - Keď je transakcia potvrdená, zostane taká

              Existuje mnoho techník na škálovanie relačnej databázy: replikácia master-slave, replikácia master-master, federácia, črep, denormalizáciaa Ladenie SQL.

              Master slúži na čítanie a zápis, pričom replikuje zápisy na jedného alebo viacerých otrokov, ktoré slúžia iba na čítanie. Otroci sa môžu tiež replikovať na ďalších otrokov spôsobom podobným stromom. Ak sa master prepne do režimu offline, systém môže pokračovať v prevádzke iba v režime čítania, kým nie je podriadený povýšený na nadriadeného alebo kým nie je zabezpečený nový nadriadený.

              Nevýhody: replikácia master-slave

              • Na podporu otroka majstra je potrebná ďalšia logika.
              • Body súvisiace s replikáciou nájdete v časti Nevýhody: replikácia obaja majster-otrok a majster-majster.

              Obaja majstri slúžia na čítanie a zápis a navzájom sa koordinujú pri zápise. Ak dôjde k výpadku niektorého z hlavných počítačov, systém môže pokračovať v prevádzke s čítaním aj zápisom.

              Nevýhody: replikácia master-master

              • Budete potrebovať nástroj na vyrovnávanie zaťaženia alebo budete musieť vykonať zmeny v logike aplikácie, aby ste určili, kam písať.
              • Väčšina systémov master-master je buď voľne konzistentná (porušujúca ACID), alebo má kvôli synchronizácii zvýšenú latenciu zápisu.
              • Riešenie konfliktov vstupuje do hry viac, pretože sa pridáva viac uzlov na zápis a zvyšuje sa latencia.
              • Body súvisiace s replikáciou nájdete v časti Nevýhody: replikácia obaja majster-otrok a majster-majster.
              • Ak hlavný server zlyhá predtým, ako je možné replikovať všetky novo zapísané údaje do iných uzlov, existuje možnosť straty údajov.
              • Zápisy sa prehrávajú do prečítaných replík. Ak je veľa zápisov, repliky na čítanie sa môžu zablokovať pri prehrávaní zápisov a nedokážu vykonať toľko prečítaní.
              • Čím viac prečítaných otrokov, tým viac ich musíte replikovať, čo vedie k väčšiemu oneskoreniu replikácie.
              • V niektorých systémoch môže zapisovanie na server master vytvárať viac vlákien na paralelné zapisovanie, zatiaľ čo repliky na čítanie podporujú sekvenčné zapisovanie iba do jedného vlákna.
              • Replikácia prináša ďalší hardvér a dodatočnú zložitosť.

              Zdroj (zdroje) a ďalšie čítanie: replikácia

              Federácia (alebo funkčné oddiely) rozdeľuje databázy podľa funkcií. Napríklad namiesto jednej monolitickej databázy môžete mať tri databázy: fóra, používateľova Produkty, čo má za následok menšiu návštevnosť z každej databázy na čítanie a zápis, a teda menšie oneskorenie replikácie. Menšie databázy majú za následok viac údajov, ktoré sa zmestia do pamäte, čo má za následok viac zásahov do vyrovnávacej pamäte v dôsledku vylepšenej lokality vyrovnávacej pamäte. Bez jediného centrálneho hlavného serializačného zápisu môžete písať paralelne, čím sa zvyšuje priepustnosť.

              • Federácia nie je účinná, ak vaša schéma vyžaduje obrovské funkcie alebo tabuľky.
              • Budete musieť aktualizovať logiku svojej aplikácie, aby ste určili, ktorú databázu treba čítať a zapisovať.
              • Pripojenie údajov z dvoch databáz je pomocou prepojenia na server zložitejšie.
              • Federation dodáva ďalší hardvér a dodatočnú komplexnosť.

              Zdroj (zdroje) a ďalšie čítanie: federácia

              Sharding distribuuje údaje medzi rôzne databázy tak, že každá databáza môže spravovať iba podmnožinu údajov. Ak vezmeme ako príklad databázu používateľov, ako sa počet používateľov zvyšuje, do klastra sa pridáva viac fragmentov.

              Podobne ako výhody federácie, skrátenie má za následok menšiu návštevnosť z čítania a zápisu, menšiu replikáciu a viac prístupov do vyrovnávacej pamäte. Zníži sa aj veľkosť indexu, čo vo všeobecnosti zvyšuje výkon pri rýchlejších dotazoch. Ak jeden zlomok zlyhá, ostatné úlomky sú stále funkčné, aj keď budete chcieť pridať nejakú formu replikácie, aby ste predišli strate údajov. Rovnako ako federácia, neexistuje ani jeden centrálny hlavný serializátor zápisov, ktorý by vám umožňoval písať súbežne so zvýšenou priepustnosťou.

              Bežné spôsoby, ako rozdeliť tabuľku používateľov, sú buď počiatočné priezvisko používateľa alebo jeho geografická poloha.

              • Na prácu so zlomkami budete musieť aktualizovať aplikačnú logiku, čo môže viesť k zložitým dotazom SQL.
              • Distribúcia údajov môže byť narúšaná. Napríklad skupina výkonných používateľov na zlomku môže mať za následok zvýšené zaťaženie tohto črepu v porovnaní s ostatnými.
                • Vyváženie prináša ešte väčšiu zložitosť. Shardingová funkcia založená na konzistentnom hashovaní môže znížiť množstvo prenášaných dát.

                Zdroj (zdroje) a ďalšie čítanie: úlomok

                Denormalizácia sa pokúša zlepšiť výkon pri čítaní na úkor určitého výkonu pri zápise. Nadbytočné kópie údajov sú zapísané do viacerých tabuliek, aby sa predišlo drahým spojeniam. Niektoré RDBMS, ako napríklad PostgreSQL a Oracle, podporujú materializované zobrazenia, ktoré zvládajú prácu s ukladaním nadbytočných informácií a udržiavaním konzistentných nadbytočných kópií.

                Akonáhle sú údaje distribuované pomocou techník, ako sú federácia a delenie, správa pripojení medzi dátovými centrami ešte zvyšuje komplexnosť. Denormalizácia by mohla obísť potrebu takýchto komplexných spojení.

                Vo väčšine systémov môžu čítania výrazne prevyšovať počet zápisov 100: 1 alebo dokonca 1 000: 1. Čítanie, ktoré má za následok komplexné spojenie s databázou, môže byť veľmi nákladné a stráviť značné množstvo času operáciami na disku.

                • Údaje sú duplicitné.
                • Obmedzenia môžu pomôcť tomu, aby nadbytočné kópie informácií zostali synchronizované, čo zvyšuje zložitosť návrhu databázy.
                • Denormalizovaná databáza pri veľkom zaťažení zápisom môže fungovať horšie ako jej normalizovaný náprotivok.

                Zdroj (zdroje) a ďalšie čítanie: denormalizácia

                Ladenie SQL je široká téma a mnoho kníh bolo napísaných ako referencia.

                Je dôležité, aby benchmark a profil simulovať a odhaľovať úzke miesta.

                • Benchmark - Simulujte situácie s vysokým zaťažením pomocou nástrojov, ako sú ab.
                • Profil - Povoľte nástroje, ako napríklad protokol pomalých dotazov, ktoré vám pomôžu sledovať problémy s výkonom.

                Benchmarking a profilovanie vás môže nasmerovať na nasledujúce optimalizácie.

                • Server MySQL sa ukladá na disk v priľahlých blokoch kvôli rýchlemu prístupu.
                • V poliach s pevnou dĺžkou použite namiesto VARCHAR CHAR.
                  • CHAR efektívne umožňuje rýchly a náhodný prístup, zatiaľ čo pri VARCHAR musíte nájsť koniec reťazca a až potom prejsť na nasledujúci.
                  • Stĺpce, na ktoré sa pýtate (SELECT, GROUP BY, ORDER BY, JOIN), by mohli byť rýchlejšie s indexmi.
                  • Indexy sú zvyčajne reprezentované ako samovyvažujúci B-strom, ktorý udržuje údaje zoradené a umožňuje vyhľadávanie, sekvenčný prístup, vkladanie a odstraňovanie v logaritmickom čase.
                  • Umiestnenie indexu môže uchovať údaje v pamäti a vyžadovať viac miesta.
                  • Zápisy môžu byť tiež pomalšie, pretože je tiež potrebné aktualizovať index.
                  • Pri načítavaní veľkého množstva údajov môže byť rýchlejšie zakázanie indexov, načítanie údajov a ich opätovné zostavenie.

                  Zdroj (zdroje) a ďalšie čítanie: Ladenie SQL

                  NoSQL je zbierka dátových položiek zastúpených v súbore a obchod s kľúčovými hodnotami, sklad dokumentov, široký stĺpcový obchod, alebo a grafová databáza. Dáta sú denormalizované a spájania sa spravidla vykonávajú v kóde aplikácie. Väčšina obchodov NoSQL nemá skutočné transakcie ACID a uprednostňuje prípadnú konzistenciu.

                  ZÁKLAD sa často používa na opis vlastností databáz NoSQL. V porovnaní s vetou CAP volí BASE dostupnosť pred konzistenciou.

                  • Basically available - the system guarantees availability.
                  • Soft state - the state of the system may change over time, even without input.
                  • Eventual consistency - the system will become consistent over a period of time, given that the system doesn't receive input during that period.

                  In addition to choosing between SQL or NoSQL, it is helpful to understand which type of NoSQL database best fits your use case(s). We'll review key-value stores, document stores, wide column storesa graph databases in the next section.

                  A key-value store generally allows for O(1) reads and writes and is often backed by memory or SSD. Data stores can maintain keys in lexicographic order, allowing efficient retrieval of key ranges. Key-value stores can allow for storing of metadata with a value.

                  Key-value stores provide high performance and are often used for simple data models or for rapidly-changing data, such as an in-memory cache layer. Since they offer only a limited set of operations, complexity is shifted to the application layer if additional operations are needed.

                  A key-value store is the basis for more complex systems such as a document store, and in some cases, a graph database.

                  Source(s) and further reading: key-value store

                  Abstraction: key-value store with documents stored as values

                  A document store is centered around documents (XML, JSON, binary, etc), where a document stores all information for a given object. Document stores provide APIs or a query language to query based on the internal structure of the document itself. Note, many key-value stores include features for working with a value's metadata, blurring the lines between these two storage types.

                  Based on the underlying implementation, documents are organized by collections, tags, metadata, or directories. Although documents can be organized or grouped together, documents may have fields that are completely different from each other.

                  Some document stores like MongoDB and CouchDB also provide a SQL-like language to perform complex queries. DynamoDB supports both key-values and documents.

                  Document stores provide high flexibility and are often used for working with occasionally changing data.

                  Source(s) and further reading: document store

                  Abstraction: nested map ColumnFamily<RowKey, Columns<ColKey, Value, Timestamp>>

                  A wide column store's basic unit of data is a column (name/value pair). A column can be grouped in column families (analogous to a SQL table). Super column families further group column families. You can access each column independently with a row key, and columns with the same row key form a row. Each value contains a timestamp for versioning and for conflict resolution.

                  Google introduced Bigtable as the first wide column store, which influenced the open-source HBase often-used in the Hadoop ecosystem, and Cassandra from Facebook. Stores such as BigTable, HBase, and Cassandra maintain keys in lexicographic order, allowing efficient retrieval of selective key ranges.

                  Wide column stores offer high availability and high scalability. They are often used for very large data sets.

                  Source(s) and further reading: wide column store

                  In a graph database, each node is a record and each arc is a relationship between two nodes. Graph databases are optimized to represent complex relationships with many foreign keys or many-to-many relationships.

                  Graphs databases offer high performance for data models with complex relationships, such as a social network. They are relatively new and are not yet widely-used it might be more difficult to find development tools and resources. Many graphs can only be accessed with REST APIs.

                  Source(s) and further reading: graph

                  Source(s) and further reading: NoSQL

                  Dôvody pre SQL:

                  • Štruktúrované údaje
                  • Strict schema
                  • Relational data
                  • Need for complex joins
                  • Transakcie
                  • Clear patterns for scaling
                  • More established: developers, community, code, tools, etc
                  • Lookups by index are very fast

                  Dôvody pre NoSQL:

                  • Semi-structured data
                  • Dynamic or flexible schema
                  • Non-relational data
                  • No need for complex joins
                  • Store many TB (or PB) of data
                  • Very data intensive workload
                  • Very high throughput for IOPS

                  Sample data well-suited for NoSQL:

                  • Rapid ingest of clickstream and log data
                  • Leaderboard or scoring data
                  • Temporary data, such as a shopping cart
                  • Frequently accessed ('hot') tables
                  • Metadata/lookup tables

                  Source(s) and further reading: SQL or NoSQL

                  Caching improves page load times and can reduce the load on your servers and databases. In this model, the dispatcher will first lookup if the request has been made before and try to find the previous result to return, in order to save the actual execution.

                  Databases often benefit from a uniform distribution of reads and writes across its partitions. Popular items can skew the distribution, causing bottlenecks. Putting a cache in front of a database can help absorb uneven loads and spikes in traffic.

                  Caches can be located on the client side (OS or browser), server side, or in a distinct cache layer.

                  CDNs are considered a type of cache.

                  Reverse proxies and caches such as Varnish can serve static and dynamic content directly. Web servers can also cache requests, returning responses without having to contact application servers.

                  Your database usually includes some level of caching in a default configuration, optimized for a generic use case. Tweaking these settings for specific usage patterns can further boost performance.

                  In-memory caches such as Memcached and Redis are key-value stores between your application and your data storage. Since the data is held in RAM, it is much faster than typical databases where data is stored on disk. RAM is more limited than disk, so cache invalidation algorithms such as least recently used (LRU) can help invalidate 'cold' entries and keep 'hot' data in RAM.

                  Redis has the following additional features:

                  There are multiple levels you can cache that fall into two general categories: database queries a objects:

                  • Row level
                  • Query-level
                  • Fully-formed serializable objects
                  • Fully-rendered HTML

                  Generally, you should try to avoid file-based caching, as it makes cloning and auto-scaling more difficult.

                  Caching at the database query level

                  Whenever you query the database, hash the query as a key and store the result to the cache. This approach suffers from expiration issues:

                  • Hard to delete a cached result with complex queries
                  • If one piece of data changes such as a table cell, you need to delete all cached queries that might include the changed cell

                  Caching at the object level

                  See your data as an object, similar to what you do with your application code. Have your application assemble the dataset from the database into a class instance or a data structure(s):

                  • Remove the object from cache if its underlying data has changed
                  • Allows for asynchronous processing: workers assemble objects by consuming the latest cached object

                  Suggestions of what to cache:

                  • User sessions
                  • Fully rendered web pages
                  • Activity streams
                  • User graph data

                  Since you can only store a limited amount of data in cache, you'll need to determine which cache update strategy works best for your use case.

                  The application is responsible for reading and writing from storage. The cache does not interact with storage directly. The application does the following:

                  • Look for entry in cache, resulting in a cache miss
                  • Load entry from the database
                  • Add entry to cache
                  • Return entry

                  Memcached is generally used in this manner.

                  Subsequent reads of data added to cache are fast. Cache-aside is also referred to as lazy loading. Only requested data is cached, which avoids filling up the cache with data that isn't requested.

                  • Each cache miss results in three trips, which can cause a noticeable delay.
                  • Data can become stale if it is updated in the database. This issue is mitigated by setting a time-to-live (TTL) which forces an update of the cache entry, or by using write-through.
                  • When a node fails, it is replaced by a new, empty node, increasing latency.

                  The application uses the cache as the main data store, reading and writing data to it, while the cache is responsible for reading and writing to the database:

                  • Application adds/updates entry in cache
                  • Cache synchronously writes entry to data store
                  • Návrat

                  Write-through is a slow overall operation due to the write operation, but subsequent reads of just written data are fast. Users are generally more tolerant of latency when updating data than reading data. Data in the cache is not stale.

                  Disadvantage(s): write through

                  • When a new node is created due to failure or scaling, the new node will not cache entries until the entry is updated in the database. Cache-aside in conjunction with write through can mitigate this issue.
                  • Most data written might never be read, which can be minimized with a TTL.

                  In write-behind, the application does the following:

                  • Add/update entry in cache
                  • Asynchronously write entry to the data store, improving write performance
                  • There could be data loss if the cache goes down prior to its contents hitting the data store.
                  • It is more complex to implement write-behind than it is to implement cache-aside or write-through.

                  You can configure the cache to automatically refresh any recently accessed cache entry prior to its expiration.

                  Refresh-ahead can result in reduced latency vs read-through if the cache can accurately predict which items are likely to be needed in the future.

                  • Not accurately predicting which items are likely to be needed in the future can result in reduced performance than without refresh-ahead.
                  • Need to maintain consistency between caches and the source of truth such as the database through cache invalidation.
                  • Cache invalidation is a difficult problem, there is additional complexity associated with when to update the cache.
                  • Need to make application changes such as adding Redis or memcached.

                  Source(s) and further reading

                  Asynchronous workflows help reduce request times for expensive operations that would otherwise be performed in-line. They can also help by doing time-consuming work in advance, such as periodic aggregation of data.

                  Message queues receive, hold, and deliver messages. If an operation is too slow to perform inline, you can use a message queue with the following workflow:

                  • An application publishes a job to the queue, then notifies the user of job status
                  • A worker picks up the job from the queue, processes it, then signals the job is complete

                  The user is not blocked and the job is processed in the background. During this time, the client might optionally do a small amount of processing to make it seem like the task has completed. For example, if posting a tweet, the tweet could be instantly posted to your timeline, but it could take some time before your tweet is actually delivered to all of your followers.

                  Redis is useful as a simple message broker but messages can be lost.

                  RabbitMQ is popular but requires you to adapt to the 'AMQP' protocol and manage your own nodes.

                  Amazon SQS is hosted but can have high latency and has the possibility of messages being delivered twice.

                  Tasks queues receive tasks and their related data, runs them, then delivers their results. They can support scheduling and can be used to run computationally-intensive jobs in the background.

                  Zeler has support for scheduling and primarily has python support.

                  If queues start to grow significantly, the queue size can become larger than memory, resulting in cache misses, disk reads, and even slower performance. Back pressure can help by limiting the queue size, thereby maintaining a high throughput rate and good response times for jobs already in the queue. Once the queue fills up, clients get a server busy or HTTP 503 status code to try again later. Clients can retry the request at a later time, perhaps with exponential backoff.

                  • Use cases such as inexpensive calculations and realtime workflows might be better suited for synchronous operations, as introducing queues can add delays and complexity.

                  Source(s) and further reading

                  Hypertext transfer protocol (HTTP)

                  HTTP is a method for encoding and transporting data between a client and a server. It is a request/response protocol: clients issue requests and servers issue responses with relevant content and completion status info about the request. HTTP is self-contained, allowing requests and responses to flow through many intermediate routers and servers that perform load balancing, caching, encryption, and compression.

                  A basic HTTP request consists of a verb (method) and a resource (endpoint). Below are common HTTP verbs:

                  Verb Popis Idempotent* V bezpečí Cacheable
                  GET Reads a resource Áno Áno Áno
                  POST Creates a resource or trigger a process that handles data Nie Nie Yes if response contains freshness info
                  VLOŽTE Creates or replace a resource Áno Nie Nie
                  PATCH Partially updates a resource Nie Nie Yes if response contains freshness info
                  VYMAZAŤ Deletes a resource Áno Nie Nie

                  *Can be called many times without different outcomes.

                  HTTP is an application layer protocol relying on lower-level protocols such as TCP a UDP.

                  Source(s) and further reading: HTTP

                  Transmission control protocol (TCP)

                  TCP is a connection-oriented protocol over an IP network. Connection is established and terminated using a handshake. All packets sent are guaranteed to reach the destination in the original order and without corruption through:

                  If the sender does not receive a correct response, it will resend the packets. If there are multiple timeouts, the connection is dropped. TCP also implements flow control and congestion control. These guarantees cause delays and generally result in less efficient transmission than UDP.

                  To ensure high throughput, web servers can keep a large number of TCP connections open, resulting in high memory usage. It can be expensive to have a large number of open connections between web server threads and say, a memcached server. Connection pooling can help in addition to switching to UDP where applicable.

                  TCP is useful for applications that require high reliability but are less time critical. Some examples include web servers, database info, SMTP, FTP, and SSH.

                  • You need all of the data to arrive intact
                  • You want to automatically make a best estimate use of the network throughput

                  User datagram protocol (UDP)

                  UDP is connectionless. Datagrams (analogous to packets) are guaranteed only at the datagram level. Datagrams might reach their destination out of order or not at all. UDP does not support congestion control. Without the guarantees that TCP support, UDP is generally more efficient.

                  UDP can broadcast, sending datagrams to all devices on the subnet. This is useful with DHCP because the client has not yet received an IP address, thus preventing a way for TCP to stream without the IP address.

                  UDP is less reliable but works well in real time use cases such as VoIP, video chat, streaming, and realtime multiplayer games.

                  • You need the lowest latency
                  • Late data is worse than loss of data
                  • You want to implement your own error correction

                  Source(s) and further reading: TCP and UDP

                  Remote procedure call (RPC)

                  In an RPC, a client causes a procedure to execute on a different address space, usually a remote server. The procedure is coded as if it were a local procedure call, abstracting away the details of how to communicate with the server from the client program. Remote calls are usually slower and less reliable than local calls so it is helpful to distinguish RPC calls from local calls. Popular RPC frameworks include Protobuf, Thrift, and Avro.

                  RPC is a request-response protocol:

                  • Client program - Calls the client stub procedure. The parameters are pushed onto the stack like a local procedure call.
                  • Client stub procedure - Marshals (packs) procedure id and arguments into a request message.
                  • Client communication module - OS sends the message from the client to the server.
                  • Server communication module - OS passes the incoming packets to the server stub procedure.
                  • Server stub procedure - Unmarshalls the results, calls the server procedure matching the procedure id and passes the given arguments.
                  • The server response repeats the steps above in reverse order.

                  RPC is focused on exposing behaviors. RPCs are often used for performance reasons with internal communications, as you can hand-craft native calls to better fit your use cases.

                  Choose a native library (aka SDK) when:

                  • You know your target platform.
                  • You want to control how your "logic" is accessed.
                  • You want to control how error control happens off your library.
                  • Performance and end user experience is your primary concern.

                  HTTP APIs following REST tend to be used more often for public APIs.

                  • RPC clients become tightly coupled to the service implementation.
                  • A new API must be defined for every new operation or use case.
                  • It can be difficult to debug RPC.
                  • You might not be able to leverage existing technologies out of the box. For example, it might require additional effort to ensure RPC calls are properly cached on caching servers such as Squid.

                  Representational state transfer (REST)

                  REST is an architectural style enforcing a client/server model where the client acts on a set of resources managed by the server. The server provides a representation of resources and actions that can either manipulate or get a new representation of resources. All communication must be stateless and cacheable.

                  There are four qualities of a RESTful interface:

                  • Identify resources (URI in HTTP) - use the same URI regardless of any operation.
                  • Change with representations (Verbs in HTTP) - use verbs, headers, and body.
                  • Self-descriptive error message (status response in HTTP) - Use status codes, don't reinvent the wheel.
                  • HATEOAS (HTML interface for HTTP) - your web service should be fully accessible in a browser.

                  REST is focused on exposing data. It minimizes the coupling between client/server and is often used for public HTTP APIs. REST uses a more generic and uniform method of exposing resources through URIs, representation through headers, and actions through verbs such as GET, POST, PUT, DELETE, and PATCH. Being stateless, REST is great for horizontal scaling and partitioning.

                  • With REST being focused on exposing data, it might not be a good fit if resources are not naturally organized or accessed in a simple hierarchy. For example, returning all updated records from the past hour matching a particular set of events is not easily expressed as a path. With REST, it is likely to be implemented with a combination of URI path, query parameters, and possibly the request body.
                  • REST typically relies on a few verbs (GET, POST, PUT, DELETE, and PATCH) which sometimes doesn't fit your use case. For example, moving expired documents to the archive folder might not cleanly fit within these verbs.
                  • Fetching complicated resources with nested hierarchies requires multiple round trips between the client and server to render single views, e.g. fetching content of a blog entry and the comments on that entry. For mobile applications operating in variable network conditions, these multiple roundtrips are highly undesirable.
                  • Over time, more fields might be added to an API response and older clients will receive all new data fields, even those that they do not need, as a result, it bloats the payload size and leads to larger latencies.

                  RPC and REST calls comparison

                  Prevádzka RPC REST
                  Signup POST /signup POST /persons
                  Resign POST /resign
                  <
                  "personid": "1234"
                  >
                  VYMAZAŤ /persons/1234
                  Read a person GET /readPerson?personid=1234 GET /persons/1234
                  Read a person’s items list GET /readUsersItemsList?personid=1234 GET /persons/1234/items
                  Add an item to a person’s items POST /addItemToUsersItemsList
                  <
                  "personid": "1234"
                  "itemid": "456"
                  >
                  POST /persons/1234/items
                  <
                  "itemid": "456"
                  >
                  Update an item POST /modifyItem
                  <
                  "itemid": "456"
                  "key": "value"
                  >
                  VLOŽTE /items/456
                  <
                  "key": "value"
                  >
                  Delete an item POST /removeItem
                  <
                  "itemid": "456"
                  >
                  VYMAZAŤ /items/456

                  Source(s) and further reading: REST and RPC

                  This section could use some updates. Consider contributing!

                  Security is a broad topic. Unless you have considerable experience, a security background, or are applying for a position that requires knowledge of security, you probably won't need to know more than the basics:

                  • Encrypt in transit and at rest.
                  • Sanitize all user inputs or any input parameters exposed to user to prevent XSS and SQL injection.
                  • Use parameterized queries to prevent SQL injection.
                  • Use the principle of least privilege.

                  Source(s) and further reading

                  You'll sometimes be asked to do 'back-of-the-envelope' estimates. For example, you might need to determine how long it will take to generate 100 image thumbnails from disk or how much memory a data structure will take. The Powers of two table a Latency numbers every programmer should know are handy references.

                  Source(s) and further reading

                  Latency numbers every programmer should know

                  Handy metrics based on numbers above:

                  • Read sequentially from HDD at 30 MB/s
                  • Read sequentially from 1 Gbps Ethernet at 100 MB/s
                  • Read sequentially from SSD at 1 GB/s
                  • Read sequentially from main memory at 4 GB/s
                  • 6-7 world-wide round trips per second
                  • 2,000 round trips per second within a data center

                  Latency numbers visualized

                  Source(s) and further reading

                  Additional system design interview questions

                  Common system design interview questions, with links to resources on how to solve each.

                  Otázka Reference(s)
                  Design a file sync service like Dropbox youtube.com
                  Design a search engine like Google queue.acm.org
                  stackexchange.com
                  ardendertat.com
                  stanford.edu
                  Design a scalable web crawler like Google quora.com
                  Design Google docs code.google.com
                  neil.fraser.name
                  Design a key-value store like Redis slideshare.net
                  Design a cache system like Memcached slideshare.net
                  Design a recommendation system like Amazon's hulu.com
                  ijcai13.org
                  Design a tinyurl system like Bitly n00tc0d3r.blogspot.com
                  Design a chat app like WhatsApp highscalability.com
                  Design a picture sharing system like Instagram highscalability.com
                  highscalability.com
                  Design the Facebook news feed function quora.com
                  quora.com
                  slideshare.net
                  Design the Facebook timeline function facebook.com
                  highscalability.com
                  Design the Facebook chat function erlang-factory.com
                  facebook.com
                  Design a graph search function like Facebook's facebook.com
                  facebook.com
                  facebook.com
                  Design a content delivery network like CloudFlare figshare.com
                  Design a trending topic system like Twitter's michael-noll.com
                  snikolov .wordpress.com
                  Design a random ID generation system blog.twitter.com
                  github.com
                  Return the top k requests during a time interval cs.ucsb.edu
                  wpi.edu
                  Design a system that serves data from multiple data centers highscalability.com
                  Design an online multiplayer card game indieflashblog.com
                  buildnewgames.com
                  Design a garbage collection system stuffwithstuff.com
                  washington.edu
                  Design an API rate limiter https://stripe.com/blog/
                  Design a Stock Exchange (like NASDAQ or Binance) Jane Street
                  Golang Implementation
                  Go Implemenation
                  Add a system design question Contribute

                  Articles on how real world systems are designed.

                  Don't focus on nitty gritty details for the following articles, instead:

                  • Identify shared principles, common technologies, and patterns within these articles
                  • Study what problems are solved by each component, where it works, where it doesn't
                  • Review the lessons learned
                  Company Reference(s)
                  Amazon Amazon architecture
                  Cinchcast Producing 1,500 hours of audio every day
                  DataSift Realtime datamining At 120,000 tweets per second
                  Dropbox How we've scaled Dropbox
                  ESPN Operating At 100,000 duh nuh nuhs per second
                  Google Google architecture
                  Instagram 14 million users, terabytes of photos
                  What powers Instagram
                  Justin.tv Justin.Tv's live video broadcasting architecture
                  Facebook Scaling memcached at Facebook
                  TAO: Facebook’s distributed data store for the social graph
                  Facebook’s photo storage
                  How Facebook Live Streams To 800,000 Simultaneous Viewers
                  Flickr Flickr architecture
                  Schránka From 0 to one million users in 6 weeks
                  Netflix A 360 Degree View Of The Entire Netflix Stack
                  Netflix: What Happens When You Press Play?
                  Pinterest From 0 To 10s of billions of page views a month
                  18 million visitors, 10x growth, 12 employees
                  Playfish 50 million monthly users and growing
                  PlentyOfFish PlentyOfFish architecture
                  Predajná sila How they handle 1.3 billion transactions a day
                  Stack Overflow Stack Overflow architecture
                  TripAdvisor 40M visitors, 200M dynamic page views, 30TB data
                  Tumblr 15 billion page views a month
                  Twitter Making Twitter 10000 percent faster
                  Storing 250 million tweets a day using MySQL
                  150M active users, 300K QPS, a 22 MB/S firehose
                  Timelines at scale
                  Big and small data at Twitter
                  Operations at Twitter: scaling beyond 100 million users
                  How Twitter Handles 3,000 Images Per Second
                  Uber How Uber scales their real-time market platform
                  Lessons Learned From Scaling Uber To 2000 Engineers, 1000 Services, And 8000 Git Repositories
                  WhatsApp The WhatsApp architecture Facebook bought for $19 billion
                  YouTube YouTube scalability
                  YouTube architecture

                  Company engineering blogs

                  Architectures for companies you are interviewing with.

                  Questions you encounter might be from the same domain.

                  Source(s) and further reading

                  Looking to add a blog? To avoid duplicating work, consider adding your company blog to the following repo:

                  Interested in adding a section or helping complete one in-progress? Contribute!

                  Credits and sources are provided throughout this repo.

                  Feel free to contact me to discuss any issues, questions, or comments.

                  My contact info can be found on my GitHub page.

                  I am providing code and resources in this repository to you under an open source license. Because this is my personal repository, the license you receive to my code and resources is from me and not my employer (Facebook).


                  Pozri si video: PostgreSQL backup and restore database with Pgadmin4 (Október 2021).