Vlákno názorů k článku
HTTP 2.0 bude binární protokol od Ondřej Tůma - V dnešní době si tou binární podobou nejsem...

  • Článek je starý, nové názory již nelze přidávat.
  • 10. 7. 2013 13:55

    Ondřej Tůma

    V dnešní době si tou binární podobou nejsem 2x jistej. A to zejména v době, kdy se data běžně komprimují...

  • 10. 7. 2013 15:04

    Filip Jirsák
    Stříbrný podporovatel

    Podle mne vůbec nejde o rychlost při síťovém přenosu, ale o rychlost při zpracování na straně serveru. Představte si nějaký loadbalancer, webhosting se spoustou webů, CDN. Generování nějaké stránky z DB, to prostě nějakou dobu bude trvat a přenosový protokol na tom nic nezmění. Ale kolem té stránky je spousta bižuterie, obrázky, styly, skripty – na jednu stránku jsou jich desítky. A tam se server potřebuje rychle rozhodnout, kam požadavek předat dál, rychle poznat, že může odpovědět 304 atd.

    Všimněte si, co se v naposledy na HTTP rozvíjelo – Connection keep-alive, chunked encoding, SPDY. První a třetí je optimalizace právě pro rychlejší získání bižuterie, chunked encoding umožňuje průběžné odesílání ze serveru, tedy opět snížení zátěže serveru. Binární protokol HTTP jenom v tomhle trendu pokračuje.

    Taky mi vadí, že ladění už nebude tak pohodlné jako s textovým protokolem. Ale chápu, že je dnes požadováno co nejrychlejší odbavení na serveru, a textový protokol v tom má limity. Vždyť se kvůli zrychlení vymýšlejí i náhrady protokolu TCP/IP, aby se obešel úvodní handshake…

  • 10. 7. 2013 15:22

    Ondřej Tůma

    Jenže co mi binární protokol v tomto směru přinese navíc ? Nic...

    Serializovat požadavky na bižuterii - OK, konec konců se to děje už dnes v podobě různých js a css kompresorů, nebo obrázkových map. Takže v konečný fázi můžu mít stránku o jednom středně velkém javascriptu, jednom podobně velkém stylu, obrázku a nakonec html. Díky kompresi i ten relativně velký textový soubor bude zmáčknutý do jednotek kb.

    Mimochodem, generování stránek se řeší různými cache na všech frontách a to včetně bižu, a v konečném stádiu prostě nebude stíhat IO, pokud toho bude tak moc.

    To co chápu jako přínos je nenavazování 150ti malých spojení, které ve skutečnosti stáhnou méně dat než nosný protokol. K tomu ale není potřeba binárního protokolu.

  • 10. 7. 2013 16:38

    Filip Jirsák
    Stříbrný podporovatel

    Binární protokol přinese to, že specializovaný server (loadbalancer, CDN) zpracuje požadavek mnohem rychleji. Nebude muset zpracovávat hlavičky znak po znaku, ale nezajímavé hlavičky přeskáče a vytáhne si těch pár, které ho zajímají – Host, E-tag, If-*, Accept-*.

    Dál bude možné jedním TCP/IP spojením možné přenášet několik požadavků najednou (ne po sobě, jak je to dnes) – to samo o sobě by čitelnost pro člověka výrazně zhoršilo.

    Nakešované soubory má server ideálně v RAM a ten kus paměti jednoduše zkopíruje do paketu – na tom už se toho moc zrychlit nedá. Naopak zpracování hlaviček, kdy dnes musíte je od začátku znak po znaku a čekat, zda se neobjeví zajímavá hlavička, se zrychlit dá.

  • 10. 7. 2013 18:39

    d.c. (neregistrovaný)

    No jasne. Proste jsou lidi (nebo spis firmy), kterym je decentralizovana a otevrena povaha internetu od zacatku nepochopitelna a/nebo trnem v oku. Uz aby se z toho konecne podarilo udelat centralni distribuci manipulace (chci rict obycejny prostredek masove komunikace). Zda se, ze po W3C (a lobby pro DRM) je i IETF ponekud "neverne" technologii a pod tlakem "zlobru".

  • 10. 7. 2013 19:29

    Filip Jirsák
    Stříbrný podporovatel

    Kdyby binární protokol měl nějakou aspoň vzdálenou souvislost s centralizací/de­centralizací a s otevřeností/u­zavřeností internetu, mohl váš komentář dávat nějaký smysl. Škoda, že tomu tak není.

  • 14. 7. 2013 9:38

    Filip Jirsák
    Stříbrný podporovatel

    To jsem udělal samozřejmě před napsání předchozího komentáře. Zjistil jsem, že internet je postavený na binárním protokolu IP a dvojici TCP/IP a UDP - vše binární protokoly. Pro koncové uživatele je pak klíčový ještě protokol DNS - také binární. Takže podle vaší teorie je internet centralizovaný a uzavřený od samého počátku.

    Ve skutečnosti ale decentralizace ani otevřenost nijak nesouvisí s tím, zda je protokol binární nebo textový. V případě protokolů souvisí jen s tím, zda je ten protokol standardizovaný a zda se ta standardizovaná verze reálně používá. Z toho důvodu je HTTP 2.0 krokem k větší otevřenosti. Dnes má Google svůj proprietární protokol SPDY a má sílu prosazovat jej. HTTP 2.0 má ale SPDY nahradit, a bude to protokol standardizovaný konsorciem, takže ho nemůže Google jen tak vzít a změnit (to v případě SPDY může, může ho i uzavřít).

  • 14. 7. 2013 14:55

    SDG (neregistrovaný)

    Nový protokol samozřejmě není sám o sobě "centralizovaný", souvislost je pouze taková, že důvodem pro jeho vývoj je navýšení rychlosti centralizovaných webových aplikací.

  • 15. 7. 2013 8:12

    Filip Jirsák
    Stříbrný podporovatel

    Že by tedy d.c. jenom zaměnil příčinu a následek? Jinak ani ve vašem případě není „centralizovaný“ to správné slovo. Webový e-mail nebo vyhledávač jsou pořád decentralizované aplikace. Jenom shodou okolností pár hráčů udělalo ty aplikace tak dobré, že získali významný podíl na trhu. Pro ty aplikace se tedy nový protokol hodí ne proto, že by byly centralizované, ale proto, že obsluhují velké množství uživatelů současně.

  • 10. 7. 2013 18:56

    Lol Phirae (neregistrovaný)

    Binární protokol přinese to, že specializovaný server (loadbalancer, CDN) zpracuje požadavek mnohem rychleji.

    No, tak z toho sem úplně zvlhnul... :-D

  • 11. 7. 2013 8:20

    Ondřej Tůma

    Problém ale je, že toto v reálu tak velký problém není. Ano je snazší skočit na konkrétní místo v datech, než iterovat znaky a hledat ty správné hlavičky které mě zajímají. Ale protože tu máme IPv6, které rychlost trochu komplikuje, protože síla strojů pořád celkem rychle roste, tak změna na binární protokol je ve stínu tisíce dalších aspektů naprostou výkonostní banalitou.

    Nehledě na to že load-balancing na úrovni http proxy serverů je první krok k řešení zátěže, ale pak existují ještě minimálně 3 další řešení, o úroveň jinde, a tudíž je jim nějaké HTTP úplně volné.

    Proto jestli binární protokol přinese nějaké zrychlení, tak jen na úrovní http proxyn, které zpracovávají http hlavičky. A to ještě zrychlení v konečném stavu krajně pochybné.

    Serializace / paralelizace není na binární podobě protokolu nijak závislá.

    Embeded zařízení, které tu někdo zmínil jsou úplně mimo, protože ty musí zvládat ipv6, variabilně dlouhé dns a hromadu jiných věcí. Takže parsovat jednoduché textové hlavičky, které jsou napsány tak, aby se snadno parsovali, je záležitost těch nejzákladnějších funkcí libovolného programovacího jazyka.

  • 11. 7. 2013 8:56

    Filip Jirsák
    Stříbrný podporovatel

    Já tedy nevím o jiném problému, který by se dnes hromadně řešil napříč webovými servery (a nejviditelněji jej řeší Google). Nepodezíral bych je, že to dělají jen z pouhého rozmaru.

    CDN server dokáže hlavičku 304 nebo i data z diskové cache odeslat na „pár“ taktů procesoru. Jenže před tím musí z hlaviček zjistit, co a zda má vůbec posílat – a je hloupé, když tahle operace je o několik řádu náročnější.

    Paralelizace není na binárním protokolu závislá, ale je to jedna ze změn v HTTP 2.0, která sama o sobě přenášená data pro člověka velmi znečitelní. Holt asi čitelnost pro člověka není tak zásadní přínos – ostatně IP, TCP/IP, DNS nebo HTTPS jsou taky binární a pro člověka nečitelné protokoly.

    Textové HTTP hlavičky nejsou napsané tak, aby se snadno parsovaly – vždyť i když chcete jenom oddělit jednotlivé hlavičky od sebe, musíte jet znak po znaku a hledat první CRLF, který není escapovaný uvnitř řetězce v uvozovkách a není následovaný bílým znakem.

  • 11. 7. 2013 9:37

    Ondřej Tůma

    Google dělá a zkouší různé věci. To že něco začne dělat google ještě neznamená že je to správná cesta, nebo cesta která se ujme.

    Jenže před zpracováním http hlavičky je vrchol dané operace. Z obou stran se totiž musí zpracovat tcp/ip/ethernet a dalších jiných milion přerušení / signálů v rámci přepínání procesů / vláken, logování, různých tcp/ip pravidel, inicializací atd... Proto prostě nevěřím že to zrychlení bude tak super.

    Chápu binární protokoly, v mnoha případech mají svůj zřejmý a jasný význam. Tím spíš, když se přenáší binární data. Ale u http 2.0 mě přijde, že si řekli, je to jeden z mála textových protokolů, uděláme z něj binární.

    Ta paralelizace není zas až takový problém. Ano nepatřím k těm, co vidí problém v použití tcpdumpu a jiných nadstaveb, ale maily které chodí textově taky mohou obsahovat Xkrát vnořené přílohy a dá se v tom vyznat.

    S těmi textovými hlavičky to snad ani nemyslíte važně? V čem je problém iterovat znaky až narazím na ':' a následně na CRLF ? Stejně tak porovnávání celých stringů je teoreticky náročnější proti číslu přesně tolikrát, kolik porovnáváte znaků.

    Ano pokud bych psal nějaký http balancer pro AVR, asi by bylo fajn ušetřit těch pár taktů. Ale i tak bych musel řešit tolik věcí okolo, že textové hlavičky jsou jen zanedbatelnou prkotinou. Ta režie okolo, je prostě výrazně větší.

  • 11. 7. 2013 11:03

    Filip Jirsák
    Stříbrný podporovatel

    Google nebyl argument pro to, že je to správné řešení, ale pro to, že jde o reálný problém.

    Zpracování příchozího paketu s minimem přerušení, kopírování a přepínání kontextů už je vyřešené. Ethernetové a TCP/IP hlavičky zpracuje už síťová karta, data umístí do hlavní paměti a jádro jen tuhle část paměti zpřístupní aplikaci. Pokud vím, v současné době se např. do linuxového jádra implementuje to, aby se pod zátěží nepoužívala pro čtení ze sítě přerušení. Textové hlavičky jsou tedy v současné době jediná věc, kterou nejde tímhle způsobem optimalizovat.

    Problém s iterováním, dokud nenarazíte na CRLF, je v tom, že je to špatně :-) Tohle celé je jedna hlavička, ukončená až tím posledním CRLF:

    X-Header: "ab\[CR]\[LF]cd"[CR][LF][SP]ef[CR][LF]

    Na té režii okolo se asi neshodneme. Když tohle autoři webserverů optimalizují, já jim věřím, že vědí, proč to dělají.

  • 11. 7. 2013 13:03

    Ondřej Tůma

    Pravidla firewallu nahraje systém přímo do síťovky. A síťovka ani nepřijme paket pro neregistrovanej tpc port. Aplikace pak jen dostane naservírovaný data a po pár taktech je rovnou zpracuje. Přijde mi to moc super na to, aby to byla pravda.

    A co se té víceřádkové hlavičky týče, to je pořád velmi jednoduchá logika.

    Ale alespoň na něčem se shodneme. Na tom že se s tou režií neshodneme :)

    Tak jako tak, standard nestandard, dokud ho nebudou mít masivně implementované obě strany (client i server), tak tu můžeme diskutovat donekonečna. Nehledě na to, že pořád musí existovat z5ná kompatibilita, alespoň do té doby, dokud to bude ekonomicky zajímavé.

  • 11. 7. 2013 15:33

    Filip Jirsák
    Stříbrný podporovatel

    Na takovémhle stroji nemají co dělat žádná pravidla firewallu. Mapování port -> aplikace je jednoduché.

    Ta víceřádková a escapovaná hlavička má jednoduchou logiku, ale pořád musíte u každého znaku zjišťovat, zda to není jeden ze tří důležitých. Lépe řešeným protokolem se dostanete třeba na setinu nutných operací.

    Se zpětnou kompatibilitou se určitě počítá. Podle mne to bude jako dnes s SPDY – klient se serverem se dohodnou, zda to podporují, a pokud ano, použijí novější protokol. No a pokud si budou uživatelé Firefoxu a Internet Exploreru stěžovat, jak to že se Google v Chrome načítá rychleji, naimplementují to i autoři ostatních prohlížečů. Podstatné je, že je to vytvářeno jako otevřený standard, že to nebude proprietární protokol Googlu, který by ostatní museli hackovat.

  • 8. 8. 2013 11:35

    Mozog (neregistrovaný)

    Ano, asi mate pravdu, loadbalancer zpracuje pozadavek rychleji. Ale videl jste nekdy takovy loadbalancer postaveny na haproxy v praxi? Asi ne. Pri stovkach az tisicich paralelnich pozadavku jsou ty webove servery poradne zatizene a zatez na loadbalanceru je nula nula nic.

  • 11. 7. 2013 0:12

    Ivan (neregistrovaný)

    Na binarni protokoly je tu wireshark. Tak jako se prohlizec postupne meni v tenkeho aplikacniho klienta, tak se i HTTP protokol meni v aplikacni protokol.

    HTTP je vlatne vyjimka. Vetsina IP protokolu je binarnich. Viz http://en.wikipedia.org/wiki/Abstract_Syntax_Notation_One

  • 11. 7. 2013 2:52

    Santiago (neregistrovaný)

    Je pravda, ze mnoho protokolu je binarnich, ale s ASN.1 to ma maloco spolecneho - to z bezne pouzivanych protokolu pouziva snad jen SNMP a LDAP.

  • 30. 7. 2013 14:50

    Liška Eliška (neregistrovaný)

    VoIP binární protokol H.323, který byl perfektně definován pomocí jazyka ASN.1, umřel na to, že byl binární a nikomu se nechtělo studovat ty datové struktury.

    Zatímco konkurenčnímu SIP, který vychází z HTTP, pšenka těžce komerčně kvete, navzdory tomu, že právě v textových parserech implementací byly (jsou) bezpečnostně kritické chyby.

    Tak se nechme překvapit, jestli se tím web stane bezpečnějším místem. A jestli budou ta binární data dostatečně jednoznačně a kvalitně popsána tak, aby je parsery dokázaly sanitizovat. A jestli to celé časem neumře na znechucení adminů či co...

  • 10. 7. 2013 20:30

    Pavel Burgr (neregistrovaný)

    Binární protokol určitě přinese zrychlení na "velkých" serverech a load balancerech, ale další oblastí kde binár pomůže jsou embeded zařízení. Pársování textového HTTP když nemáte k dispozici skoro ani libc není moc velká zábava... Dnes se to může zdát jako okrajová oblast, ale s nástupem Internet Of Things, M2M a pod. to znamená velké množství zařízení a aplikací.

  • 10. 7. 2013 20:43

    RDa

    Pokud se vas server neumi rychle rozhodnout, tak to rozhodne neni tim, ze hlavicky nemate binarni, ale tim co si pod pojmem server predstavujete. Pokud to delate v skriptovacim jazyce, nebo v jave, ktere bezi ve svem vm, a jeste to cele provozujete ve virtualu, tak se nedivte ze Vam to nestiha.

    Kdyz si vezmu pomerne stare zelezo, 4 jadra po 3GHz, na 1G siti... to mame 100MB/s hlavicek a procesor zvladne zpracovat 4x 3G = 12GB/s. To mame 120 pohledu na kazde pismenko hlavicky. A nepocitam zde prinos 32/64b architektury, nebo berlicky skrze SSE.

    Proste jste linej, nebo neumite programovat a hledate problem tam kde neni. Lidi by meli prestat pouzivat FB a jine nesmysly a premyslet zas vlastni hlavou, pak by mozna na neco i prisli. Pred 10-20-30 lety byl hardware vyuzit na 100%, ale dnes? Dnes mame prevazne neschopne lidi kteri si rikaji vyvojari.

  • 10. 7. 2013 21:54

    Filip Jirsák
    Stříbrný podporovatel

    Loadbalancery nejsou dělané ve skriptovacím jazyce a spuštěné ve virtuálním počítači. Je to specializovaný hardware, který má v sobě protokoly více či méně zadrátované.

    Váš pohled je sice hezký, ale řešíte web na úrovni nějakého bložínku z dovolené. Já jsem psal o nasazení na trochu jiné úrovni, kdy se řeší, aby se obsah paketu v paměti zbytečně nekopíroval, aby se minimalizovalo přepínání mezi uživatelským prostorem a jádrem, aby se zpracování drželo na jednom jádru a využila se tak data načtená v cache nebo aby byla data v paměti uspořádaná tak, aby v cache bylo maximum užitečných dat. Mimochodem, takovéhle věci jsou napsané i v Javě a mohou běžet ve virtuálu, protože se tím žádný výkon neztratí. On je to totiž nakonec stejně optimalizovaný nativní kód běžící na procesoru, a je jedno, že ten kód vytvořila JVM a že někde okolo se vedle jádra plácá také hypervizor. Ono taky to, čemu dnes říkáme procesor, by před pár lety bylo nazýváno virtuální počítač nebo emulátor -- dnešní procesory už nevykonávají jednu instrukci za druhou tak, jak přicházejí, ale převádějí instrukce třeba x86 nebo amd64 do interní instrukční sady procesoru, optimalizují kód, odhadují větvení a spekulativně provádějí instrukce napřed... Tenhle hardwarový "virtuální stroj" (moderní procesor) opravdu neslouží ke zpomalení programů, právě naopak.

  • 8. 8. 2013 11:48

    Mozog (neregistrovaný)

    >Proste jste linej, nebo neumite programovat a hledate problem tam kde neni. Lidi by meli prestat pouzivat FB a jine nesmysly a premyslet zas vlastni hlavou, pak by mozna na neco i prisli. Pred 10-20-30 lety byl hardware vyuzit na 100%, ale dnes? Dnes mame prevazne neschopne lidi kteri si rikaji vyvojari.

    Bohuzel Vam musim dat za pravdu. Je to des velebnosti.