SlideShare uma empresa Scribd logo
1 de 16
Baixar para ler offline
Zkušenosti z vývoje ve
Facebooku



Jakub Vrána
Software Engineer
12. 7. 2012, Konference devel.cz
Program
 1   Preparables

 2   mcproxy

 3   XHP
Preparables
Problém 1+N dotazů
▪ SELECT       * FROM posts ORDER BY created DESC LIMIT 20
   ▪   SELECT * FROM comments WHERE post_id = 1
        ▪   SELECT * FROM likes WHERE comment_id = 11
        ▪   SELECT * FROM likes WHERE comment_id = 12
        ▪   SELECT * FROM likes WHERE comment_id = 13
   ▪   SELECT * FROM comments WHERE post_id = 2


▪ Tisíce    dotazů na stránku
Hromadné získání dat
▪ SELECT     * FROM posts ORDER BY created DESC LIMIT 20
  ▪   SELECT * FROM comments WHERE post_id IN (1, 2)
       ▪   SELECT * FROM likes WHERE comment_id IN (11, 12,
           13)
Hromadné získání dat
▪ SELECT      * FROM posts ORDER BY created DESC LIMIT 20
   ▪   SELECT * FROM comments WHERE post_id IN (1, 2)
        ▪   SELECT * FROM likes WHERE comment_id IN (11, 12,
            13)
        ▪   SELECT * FROM users WHERE id IN (101, 102, 103)
▪ SELECT      * FROM user_groups WHERE user_id = 101
   ▪   SELECT * FROM groups WHERE id IN (201, 202, 203)


▪ Stovky    dotazů na stránku
Možné řešení – denormalizace
▪ SELECT* FROM posts_with_comments_and_their_likes
 ORDER BY created DESC LIMIT 20


▪ Desítky   dotazů na stránku
▪ Problémy

   ▪   Duplicita dat
   ▪   Vkládání a změna
Generátory
class PhotoSet {
  function gen() {
    yield wait_for($this->genAssociatedContent());
    yield wait_for($this->genURI());
  }
}


▪ Pro   každou úroveň zanoření jedna komunikace s úložištěm
Preparables
class PhotoSet extends Preparable {
  function prepare($pass) {
    switch ($pass) {
      case 1:
        $this->prepareAssociatedContent();
        return true;
      case 2:
        $this->prepareURI();
        return false;
    }
  }
}

▪ Generátory   pro chudé
mcproxy
Přímá komunikace
mcproxy
XHP
XHP
echo <i title={$hello}>{$world}</i>;


▪ Nemůže   dojít ke XSS
▪ Vyhovuje,   že se neukládají neatomická data
XHP může být generátor nebo Preparable
class :fb:newsfeed {
  function gen() {
    yield wait_for();
  }
  function render() {
    return <div />;
  }
}

echo <fb:newsfeed user-id={$user_id} />;
(c) 2009 Facebook, Inc. or its licensors. "Facebook" is a registered trademark of Facebook, Inc.. All rights reserved. 1.0

Mais conteúdo relacionado

Mais de Develcz

Daniel Steigerwald: WYSIWYG je šik! (když funguje)
Daniel Steigerwald: WYSIWYG je šik! (když funguje)Daniel Steigerwald: WYSIWYG je šik! (když funguje)
Daniel Steigerwald: WYSIWYG je šik! (když funguje)Develcz
 
Ondřej Hlaváček: Životní cyklus featury
Ondřej Hlaváček: Životní cyklus featuryOndřej Hlaváček: Životní cyklus featury
Ondřej Hlaváček: Životní cyklus featuryDevelcz
 
Martin Hassman: Jak se tvoří addony pro World of Warcraft
Martin Hassman: Jak se tvoří addony pro World of WarcraftMartin Hassman: Jak se tvoří addony pro World of Warcraft
Martin Hassman: Jak se tvoří addony pro World of WarcraftDevelcz
 
Ondřej Voves: Jak přepsat monolit do mikroslužeb
Ondřej Voves: Jak přepsat monolit do mikroslužebOndřej Voves: Jak přepsat monolit do mikroslužeb
Ondřej Voves: Jak přepsat monolit do mikroslužebDevelcz
 
Marcel Šulek: Zpraste svoje kódy
Marcel Šulek: Zpraste svoje kódyMarcel Šulek: Zpraste svoje kódy
Marcel Šulek: Zpraste svoje kódyDevelcz
 
Michal Illich: Vývojáři staví letadlo
Michal Illich: Vývojáři staví letadloMichal Illich: Vývojáři staví letadlo
Michal Illich: Vývojáři staví letadloDevelcz
 
Ondřej Kokeš: Zpracování dat z veřejných zdrojů
Ondřej Kokeš: Zpracování dat z veřejných zdrojůOndřej Kokeš: Zpracování dat z veřejných zdrojů
Ondřej Kokeš: Zpracování dat z veřejných zdrojůDevelcz
 
Patrick Zandl: Open source software, hardware, 3D tiskárny a tvrdý business -...
Patrick Zandl: Open source software, hardware, 3D tiskárny a tvrdý business -...Patrick Zandl: Open source software, hardware, 3D tiskárny a tvrdý business -...
Patrick Zandl: Open source software, hardware, 3D tiskárny a tvrdý business -...Develcz
 
Štěpán Bechynský: Hardware pro IoT projekty nejen pro hobby, ale i pro průmysl
Štěpán Bechynský: Hardware pro IoT projekty nejen pro hobby, ale i pro průmyslŠtěpán Bechynský: Hardware pro IoT projekty nejen pro hobby, ale i pro průmysl
Štěpán Bechynský: Hardware pro IoT projekty nejen pro hobby, ale i pro průmyslDevelcz
 
Tomáš Vondra: Paralelizace dotazu a partitioning v PostgreSQL
Tomáš Vondra: Paralelizace dotazu a partitioning v PostgreSQLTomáš Vondra: Paralelizace dotazu a partitioning v PostgreSQL
Tomáš Vondra: Paralelizace dotazu a partitioning v PostgreSQLDevelcz
 
Tomáš Zvěřina: Flutter.io - multiplatformní vývoj mobilních aplikací
Tomáš Zvěřina: Flutter.io - multiplatformní vývoj mobilních aplikacíTomáš Zvěřina: Flutter.io - multiplatformní vývoj mobilních aplikací
Tomáš Zvěřina: Flutter.io - multiplatformní vývoj mobilních aplikacíDevelcz
 
Jakub Vrána: Dokazatelná bezpečnost
Jakub Vrána: Dokazatelná bezpečnostJakub Vrána: Dokazatelná bezpečnost
Jakub Vrána: Dokazatelná bezpečnostDevelcz
 
Roman Schejbal: From Madness To Reason
Roman Schejbal: From Madness To ReasonRoman Schejbal: From Madness To Reason
Roman Schejbal: From Madness To ReasonDevelcz
 
Michal Illich: Zuri aneb Vývojáři staví letadlo
Michal Illich: Zuri aneb Vývojáři staví letadloMichal Illich: Zuri aneb Vývojáři staví letadlo
Michal Illich: Zuri aneb Vývojáři staví letadloDevelcz
 
Ondřej Šika: Docker, Traefik a CI - Mějte nasazené všeny větve na kterých pra...
Ondřej Šika: Docker, Traefik a CI - Mějte nasazené všeny větve na kterých pra...Ondřej Šika: Docker, Traefik a CI - Mějte nasazené všeny větve na kterých pra...
Ondřej Šika: Docker, Traefik a CI - Mějte nasazené všeny větve na kterých pra...Develcz
 
David Majda: Autoformátování kódu
David Majda: Autoformátování kóduDavid Majda: Autoformátování kódu
David Majda: Autoformátování kóduDevelcz
 
David Grudl: Open source: The Good, the Bad and the Ugly
David Grudl: Open source: The Good, the Bad and the UglyDavid Grudl: Open source: The Good, the Bad and the Ugly
David Grudl: Open source: The Good, the Bad and the UglyDevelcz
 
Ondřej Machulda: Začíná zlatá doba end-to-end testů!
Ondřej Machulda: Začíná zlatá doba end-to-end testů!Ondřej Machulda: Začíná zlatá doba end-to-end testů!
Ondřej Machulda: Začíná zlatá doba end-to-end testů!Develcz
 
Adam Kudrna: Headless WordPress/Drupal
Adam Kudrna: Headless WordPress/DrupalAdam Kudrna: Headless WordPress/Drupal
Adam Kudrna: Headless WordPress/DrupalDevelcz
 
Jaroslav Tulach: GraalVM - z vývoje nejrychlejšího virtuálního stroje na světě
Jaroslav Tulach: GraalVM - z vývoje nejrychlejšího virtuálního stroje na světěJaroslav Tulach: GraalVM - z vývoje nejrychlejšího virtuálního stroje na světě
Jaroslav Tulach: GraalVM - z vývoje nejrychlejšího virtuálního stroje na světěDevelcz
 

Mais de Develcz (20)

Daniel Steigerwald: WYSIWYG je šik! (když funguje)
Daniel Steigerwald: WYSIWYG je šik! (když funguje)Daniel Steigerwald: WYSIWYG je šik! (když funguje)
Daniel Steigerwald: WYSIWYG je šik! (když funguje)
 
Ondřej Hlaváček: Životní cyklus featury
Ondřej Hlaváček: Životní cyklus featuryOndřej Hlaváček: Životní cyklus featury
Ondřej Hlaváček: Životní cyklus featury
 
Martin Hassman: Jak se tvoří addony pro World of Warcraft
Martin Hassman: Jak se tvoří addony pro World of WarcraftMartin Hassman: Jak se tvoří addony pro World of Warcraft
Martin Hassman: Jak se tvoří addony pro World of Warcraft
 
Ondřej Voves: Jak přepsat monolit do mikroslužeb
Ondřej Voves: Jak přepsat monolit do mikroslužebOndřej Voves: Jak přepsat monolit do mikroslužeb
Ondřej Voves: Jak přepsat monolit do mikroslužeb
 
Marcel Šulek: Zpraste svoje kódy
Marcel Šulek: Zpraste svoje kódyMarcel Šulek: Zpraste svoje kódy
Marcel Šulek: Zpraste svoje kódy
 
Michal Illich: Vývojáři staví letadlo
Michal Illich: Vývojáři staví letadloMichal Illich: Vývojáři staví letadlo
Michal Illich: Vývojáři staví letadlo
 
Ondřej Kokeš: Zpracování dat z veřejných zdrojů
Ondřej Kokeš: Zpracování dat z veřejných zdrojůOndřej Kokeš: Zpracování dat z veřejných zdrojů
Ondřej Kokeš: Zpracování dat z veřejných zdrojů
 
Patrick Zandl: Open source software, hardware, 3D tiskárny a tvrdý business -...
Patrick Zandl: Open source software, hardware, 3D tiskárny a tvrdý business -...Patrick Zandl: Open source software, hardware, 3D tiskárny a tvrdý business -...
Patrick Zandl: Open source software, hardware, 3D tiskárny a tvrdý business -...
 
Štěpán Bechynský: Hardware pro IoT projekty nejen pro hobby, ale i pro průmysl
Štěpán Bechynský: Hardware pro IoT projekty nejen pro hobby, ale i pro průmyslŠtěpán Bechynský: Hardware pro IoT projekty nejen pro hobby, ale i pro průmysl
Štěpán Bechynský: Hardware pro IoT projekty nejen pro hobby, ale i pro průmysl
 
Tomáš Vondra: Paralelizace dotazu a partitioning v PostgreSQL
Tomáš Vondra: Paralelizace dotazu a partitioning v PostgreSQLTomáš Vondra: Paralelizace dotazu a partitioning v PostgreSQL
Tomáš Vondra: Paralelizace dotazu a partitioning v PostgreSQL
 
Tomáš Zvěřina: Flutter.io - multiplatformní vývoj mobilních aplikací
Tomáš Zvěřina: Flutter.io - multiplatformní vývoj mobilních aplikacíTomáš Zvěřina: Flutter.io - multiplatformní vývoj mobilních aplikací
Tomáš Zvěřina: Flutter.io - multiplatformní vývoj mobilních aplikací
 
Jakub Vrána: Dokazatelná bezpečnost
Jakub Vrána: Dokazatelná bezpečnostJakub Vrána: Dokazatelná bezpečnost
Jakub Vrána: Dokazatelná bezpečnost
 
Roman Schejbal: From Madness To Reason
Roman Schejbal: From Madness To ReasonRoman Schejbal: From Madness To Reason
Roman Schejbal: From Madness To Reason
 
Michal Illich: Zuri aneb Vývojáři staví letadlo
Michal Illich: Zuri aneb Vývojáři staví letadloMichal Illich: Zuri aneb Vývojáři staví letadlo
Michal Illich: Zuri aneb Vývojáři staví letadlo
 
Ondřej Šika: Docker, Traefik a CI - Mějte nasazené všeny větve na kterých pra...
Ondřej Šika: Docker, Traefik a CI - Mějte nasazené všeny větve na kterých pra...Ondřej Šika: Docker, Traefik a CI - Mějte nasazené všeny větve na kterých pra...
Ondřej Šika: Docker, Traefik a CI - Mějte nasazené všeny větve na kterých pra...
 
David Majda: Autoformátování kódu
David Majda: Autoformátování kóduDavid Majda: Autoformátování kódu
David Majda: Autoformátování kódu
 
David Grudl: Open source: The Good, the Bad and the Ugly
David Grudl: Open source: The Good, the Bad and the UglyDavid Grudl: Open source: The Good, the Bad and the Ugly
David Grudl: Open source: The Good, the Bad and the Ugly
 
Ondřej Machulda: Začíná zlatá doba end-to-end testů!
Ondřej Machulda: Začíná zlatá doba end-to-end testů!Ondřej Machulda: Začíná zlatá doba end-to-end testů!
Ondřej Machulda: Začíná zlatá doba end-to-end testů!
 
Adam Kudrna: Headless WordPress/Drupal
Adam Kudrna: Headless WordPress/DrupalAdam Kudrna: Headless WordPress/Drupal
Adam Kudrna: Headless WordPress/Drupal
 
Jaroslav Tulach: GraalVM - z vývoje nejrychlejšího virtuálního stroje na světě
Jaroslav Tulach: GraalVM - z vývoje nejrychlejšího virtuálního stroje na světěJaroslav Tulach: GraalVM - z vývoje nejrychlejšího virtuálního stroje na světě
Jaroslav Tulach: GraalVM - z vývoje nejrychlejšího virtuálního stroje na světě
 

Jakub Vrána: Zkušenosti z vývoje ve Facebooku

  • 1. Zkušenosti z vývoje ve Facebooku Jakub Vrána Software Engineer 12. 7. 2012, Konference devel.cz
  • 2. Program 1 Preparables 2 mcproxy 3 XHP
  • 4. Problém 1+N dotazů ▪ SELECT * FROM posts ORDER BY created DESC LIMIT 20 ▪ SELECT * FROM comments WHERE post_id = 1 ▪ SELECT * FROM likes WHERE comment_id = 11 ▪ SELECT * FROM likes WHERE comment_id = 12 ▪ SELECT * FROM likes WHERE comment_id = 13 ▪ SELECT * FROM comments WHERE post_id = 2 ▪ Tisíce dotazů na stránku
  • 5. Hromadné získání dat ▪ SELECT * FROM posts ORDER BY created DESC LIMIT 20 ▪ SELECT * FROM comments WHERE post_id IN (1, 2) ▪ SELECT * FROM likes WHERE comment_id IN (11, 12, 13)
  • 6. Hromadné získání dat ▪ SELECT * FROM posts ORDER BY created DESC LIMIT 20 ▪ SELECT * FROM comments WHERE post_id IN (1, 2) ▪ SELECT * FROM likes WHERE comment_id IN (11, 12, 13) ▪ SELECT * FROM users WHERE id IN (101, 102, 103) ▪ SELECT * FROM user_groups WHERE user_id = 101 ▪ SELECT * FROM groups WHERE id IN (201, 202, 203) ▪ Stovky dotazů na stránku
  • 7. Možné řešení – denormalizace ▪ SELECT* FROM posts_with_comments_and_their_likes ORDER BY created DESC LIMIT 20 ▪ Desítky dotazů na stránku ▪ Problémy ▪ Duplicita dat ▪ Vkládání a změna
  • 8. Generátory class PhotoSet { function gen() { yield wait_for($this->genAssociatedContent()); yield wait_for($this->genURI()); } } ▪ Pro každou úroveň zanoření jedna komunikace s úložištěm
  • 9. Preparables class PhotoSet extends Preparable { function prepare($pass) { switch ($pass) { case 1: $this->prepareAssociatedContent(); return true; case 2: $this->prepareURI(); return false; } } } ▪ Generátory pro chudé
  • 13. XHP
  • 14. XHP echo <i title={$hello}>{$world}</i>; ▪ Nemůže dojít ke XSS ▪ Vyhovuje, že se neukládají neatomická data
  • 15. XHP může být generátor nebo Preparable class :fb:newsfeed { function gen() { yield wait_for(); } function render() { return <div />; } } echo <fb:newsfeed user-id={$user_id} />;
  • 16. (c) 2009 Facebook, Inc. or its licensors. "Facebook" is a registered trademark of Facebook, Inc.. All rights reserved. 1.0