SlideShare une entreprise Scribd logo
1  sur  14
Télécharger pour lire hors ligne
Google App Engine
      Tomáš Holas
Co je to App Engine?
• Prostředí pro vývoj a hostování webových
  aplikací na Google infrastruktuře
• PaaS = Platform as a Service
• Automatické škálování
• Nutnost dodržování pravidel platformy
• Aplikace v Sandboxu
• Vývoj v simulovaném prostředí SDK
• Python, Java, další JVM jazyky, podpora
  většiny webových frameworků
Jaká jsou pravidla?
• Filesystém pouze pro čtení
• 30s čas na odpověď serveru
• Zákaz otevírat síťová spojení
• Žádné nové procesy ani thready
• Zákaz jakýchkoliv systémových volání
• Omezení počtu a velikosti souborů
• Kvóty na využívání systémových
  prostředků
Všechno přes API
• URL Fetch
• Mail
• Images
• Google Accounts
• CRON
• Task Queues
• XMPP (Jabber)
Google Datastore
• Distribuovaná databáze
• Založeno na BigTable
• Podporuje Transakce a Partitioning
• Podporuje Hierarchie
• Není relační databáze
• Bez schématu
• Nepodporuje SQL
Princip Datastore

• Základní jednotkou je Entita … záznam
 • Druh (Kind) … tabulka
 • Klíč (Key) … primární klíč
 • Skupina Entit (Entity Group) … partition
 • 0..N Vlastností (Properties) … sloupce
• Všechny entity v jedné Tabulce
Vlastnosti Entit
• Každá Entita může mít libovolnou kombinaci
  vlastností nezávisle na svém druhu

• Vlastnosti můžou být vícehodnotové, např pole
  •   této vlastnosti lze využít pro 1:N a M:N relace

• Každá entita může mít svého “Rodiče” a vytvářet
  tak hierarchie
  •   Podle Hierarchií se provádí automatický Partitioning

  •   Transakce jsou možné pouze pro Entity se stejné Skupině Entit
Omezení Datastore
•   Nepoužívá SQL, pouze GQL (Python) nebo JDOQL (Java)

•   Neexistuje podpora pro Joiny, ani tam není nic podobného

•   Žádné databázové “constraints” (omezení na cizí klíče)

•   Žádné agregační funkce (count, avg, min, max…)

•   Maximálně 1000 záznamů z jednoho dotazu. Za 1000. záznam v pořadí
    není možné se dostat ani přes offset.

•   Omezení na podmínky dotazu: Nerovnost pouze na 1 vlastnosti
    SELECT * FROM Person WHERE
    birth_year >= 1980 AND birth_year <= 2009
    SELECT * FROM Person WHERE
    birth_year >= 1980 AND height >= 180

•   Žádné globální transakce - pouze v rámci stejné Skupiny Entit

•   Nelze provádět ad-hoc dotazy, protože každý typ dotazu potřebuje
    vlastní index (pomáhá SDK)
Jak se s tím vyrovnat?
• Zvážit vhodnost platformy
  •   Jde v tom moje aplikace vůbec napsat?

• Pokud ano, tak změnit způsob myšlení
• Změnit způsob návrhu aplikace
  •   Nenechat se ovlivňovat stereotypy z relačních databází

• Snažit se využít výhod Datastore
  •   Jednoduchost, rychlost, pružnost, vícehodnotové vlastnosti...

• Denormalizovat!
• Přenést odpovědnost za konzistenci dat z
   databáze na aplikaci
Python API
class Person(db.Model):
  first_name = db.StringProperty()
  last_name = db.StringProperty()
  hobbies = db.StringListProperty()

p = Person(first_name = "Albert", last_name = "Johnson")
p.hobbies = ["chess", "travel"]

query = db.Query(Person)
query.filter("last_name = ", "Johnson")
results = query.fetch
Java API
@PersistenceCapable(identityType = IdentityType.APPLICATION)
public class Person {
    @PrimaryKey
    @Persistent(valueStrategy = IdGeneratorStrategy.IDENTITY)
    private Long id;

      @Persistent
      private String firstName;

      @Persistent
      private String lastName;

      @Persistent
      List<String> hobbies;
  }

Query query = pm.newQuery(Person.class);
query.setFilter("lastName == 'Johnson'");
List<Employee> results = (List<Employee>) query.execute();
DEMO !
Závěr

• App Engine umožňuje snadný vývoj
  škálovatelných webových aplikací
• Pozor na specifická omezení
• Vhodné pro hodně velké, nebo hodně
  malé projekty
• Platforma se rychle vyvíjí a vylepšuje
Děkuji za pozornost!
      tomas.holas@gmail.com
      linkedin.com/in/tomash
    facebook.com/tomas.holas
        twitter.com/tomaash

Contenu connexe

Similaire à Google App Engine

Jan Čislinský: Seznámení se Sourcery aneb Základy metaprogramování ve Swiftu
Jan Čislinský: Seznámení se Sourcery aneb Základy metaprogramování ve SwiftuJan Čislinský: Seznámení se Sourcery aneb Základy metaprogramování ve Swiftu
Jan Čislinský: Seznámení se Sourcery aneb Základy metaprogramování ve Swiftumdevtalk
 
INPTP Rekapitulace
INPTP Rekapitulace INPTP Rekapitulace
INPTP Rekapitulace Jan Hřídel
 
Automatizace search term optimalizace
Automatizace search term optimalizaceAutomatizace search term optimalizace
Automatizace search term optimalizaceTaste Medio
 
PROFICIO na PPC Restartu 2018
PROFICIO na PPC Restartu 2018PROFICIO na PPC Restartu 2018
PROFICIO na PPC Restartu 2018PROFICIO
 
Výběr vhodných technologii pro startup v prostředí cloudu
Výběr vhodných technologii pro startup v prostředí clouduVýběr vhodných technologii pro startup v prostředí cloudu
Výběr vhodných technologii pro startup v prostředí clouduJan Kodera
 
Úvod do vývoje pro platformu iOS [ZČU 24.4.2014]
Úvod do vývoje pro platformu iOS [ZČU 24.4.2014]Úvod do vývoje pro platformu iOS [ZČU 24.4.2014]
Úvod do vývoje pro platformu iOS [ZČU 24.4.2014]Kuba Břečka
 
Výkonnost webových aplikací
Výkonnost webových aplikacíVýkonnost webových aplikací
Výkonnost webových aplikacíTaste Medio
 
Představení Ruby on Rails
Představení Ruby on RailsPředstavení Ruby on Rails
Představení Ruby on Railsigloonet
 
2007 Technologie Pro Tvorbu Java Enterprise Aplikací
2007 Technologie Pro Tvorbu Java Enterprise Aplikací2007 Technologie Pro Tvorbu Java Enterprise Aplikací
2007 Technologie Pro Tvorbu Java Enterprise AplikacíMartin Ptáček
 
Czech Sun Training Day 2008 - Java Enterprise System
Czech Sun Training Day 2008 - Java Enterprise SystemCzech Sun Training Day 2008 - Java Enterprise System
Czech Sun Training Day 2008 - Java Enterprise SystemMartin Cerveny
 

Similaire à Google App Engine (20)

Jan Čislinský: Seznámení se Sourcery aneb Základy metaprogramování ve Swiftu
Jan Čislinský: Seznámení se Sourcery aneb Základy metaprogramování ve SwiftuJan Čislinský: Seznámení se Sourcery aneb Základy metaprogramování ve Swiftu
Jan Čislinský: Seznámení se Sourcery aneb Základy metaprogramování ve Swiftu
 
INPTP Rekapitulace
INPTP Rekapitulace INPTP Rekapitulace
INPTP Rekapitulace
 
Automatizace search term optimalizace
Automatizace search term optimalizaceAutomatizace search term optimalizace
Automatizace search term optimalizace
 
PROFICIO na PPC Restartu 2018
PROFICIO na PPC Restartu 2018PROFICIO na PPC Restartu 2018
PROFICIO na PPC Restartu 2018
 
Výběr vhodných technologii pro startup v prostředí cloudu
Výběr vhodných technologii pro startup v prostředí clouduVýběr vhodných technologii pro startup v prostředí cloudu
Výběr vhodných technologii pro startup v prostředí cloudu
 
Úvod do vývoje pro platformu iOS [ZČU 24.4.2014]
Úvod do vývoje pro platformu iOS [ZČU 24.4.2014]Úvod do vývoje pro platformu iOS [ZČU 24.4.2014]
Úvod do vývoje pro platformu iOS [ZČU 24.4.2014]
 
CQRS v rohlik.cz
CQRS v rohlik.czCQRS v rohlik.cz
CQRS v rohlik.cz
 
ORM
ORMORM
ORM
 
Výkonnost webových aplikací
Výkonnost webových aplikacíVýkonnost webových aplikací
Výkonnost webových aplikací
 
Axure RP training
Axure RP trainingAxure RP training
Axure RP training
 
App Engine Kick Start
App Engine Kick StartApp Engine Kick Start
App Engine Kick Start
 
Představení Ruby on Rails
Představení Ruby on RailsPředstavení Ruby on Rails
Představení Ruby on Rails
 
TNPW2-2016-03
TNPW2-2016-03TNPW2-2016-03
TNPW2-2016-03
 
JS2016
JS2016JS2016
JS2016
 
2007 Technologie Pro Tvorbu Java Enterprise Aplikací
2007 Technologie Pro Tvorbu Java Enterprise Aplikací2007 Technologie Pro Tvorbu Java Enterprise Aplikací
2007 Technologie Pro Tvorbu Java Enterprise Aplikací
 
TNPW2-2013-03
TNPW2-2013-03TNPW2-2013-03
TNPW2-2013-03
 
Sexy infrastruktura
Sexy infrastrukturaSexy infrastruktura
Sexy infrastruktura
 
Czech Sun Training Day 2008 - Java Enterprise System
Czech Sun Training Day 2008 - Java Enterprise SystemCzech Sun Training Day 2008 - Java Enterprise System
Czech Sun Training Day 2008 - Java Enterprise System
 
ASP.NET 3.5 / futures
ASP.NET 3.5 / futuresASP.NET 3.5 / futures
ASP.NET 3.5 / futures
 
TNPW2-2012-03
TNPW2-2012-03TNPW2-2012-03
TNPW2-2012-03
 

Plus de Tomáš Holas

Gwt frameworky GXT + UJORM
Gwt frameworky GXT + UJORMGwt frameworky GXT + UJORM
Gwt frameworky GXT + UJORMTomáš Holas
 
Ondra Kučera: Otevřený web a jeho současný stav
Ondra Kučera: Otevřený web a jeho současný stavOndra Kučera: Otevřený web a jeho současný stav
Ondra Kučera: Otevřený web a jeho současný stavTomáš Holas
 
CZNIC: Správa internetu, routing a IPv6
CZNIC: Správa internetu, routing a IPv6CZNIC: Správa internetu, routing a IPv6
CZNIC: Správa internetu, routing a IPv6Tomáš Holas
 
Google App Engine - exploiting limitations
Google App Engine - exploiting limitationsGoogle App Engine - exploiting limitations
Google App Engine - exploiting limitationsTomáš Holas
 
Erlang: Agile Scaling
Erlang: Agile ScalingErlang: Agile Scaling
Erlang: Agile ScalingTomáš Holas
 

Plus de Tomáš Holas (8)

Gwt frameworky GXT + UJORM
Gwt frameworky GXT + UJORMGwt frameworky GXT + UJORM
Gwt frameworky GXT + UJORM
 
Úvod do OOP
Úvod do OOPÚvod do OOP
Úvod do OOP
 
Ondra Kučera: Otevřený web a jeho současný stav
Ondra Kučera: Otevřený web a jeho současný stavOndra Kučera: Otevřený web a jeho současný stav
Ondra Kučera: Otevřený web a jeho současný stav
 
Základy GWT
Základy GWTZáklady GWT
Základy GWT
 
Úvod do rails
Úvod do railsÚvod do rails
Úvod do rails
 
CZNIC: Správa internetu, routing a IPv6
CZNIC: Správa internetu, routing a IPv6CZNIC: Správa internetu, routing a IPv6
CZNIC: Správa internetu, routing a IPv6
 
Google App Engine - exploiting limitations
Google App Engine - exploiting limitationsGoogle App Engine - exploiting limitations
Google App Engine - exploiting limitations
 
Erlang: Agile Scaling
Erlang: Agile ScalingErlang: Agile Scaling
Erlang: Agile Scaling
 

Google App Engine

  • 1. Google App Engine Tomáš Holas
  • 2. Co je to App Engine? • Prostředí pro vývoj a hostování webových aplikací na Google infrastruktuře • PaaS = Platform as a Service • Automatické škálování • Nutnost dodržování pravidel platformy • Aplikace v Sandboxu • Vývoj v simulovaném prostředí SDK • Python, Java, další JVM jazyky, podpora většiny webových frameworků
  • 3. Jaká jsou pravidla? • Filesystém pouze pro čtení • 30s čas na odpověď serveru • Zákaz otevírat síťová spojení • Žádné nové procesy ani thready • Zákaz jakýchkoliv systémových volání • Omezení počtu a velikosti souborů • Kvóty na využívání systémových prostředků
  • 4. Všechno přes API • URL Fetch • Mail • Images • Google Accounts • CRON • Task Queues • XMPP (Jabber)
  • 5. Google Datastore • Distribuovaná databáze • Založeno na BigTable • Podporuje Transakce a Partitioning • Podporuje Hierarchie • Není relační databáze • Bez schématu • Nepodporuje SQL
  • 6. Princip Datastore • Základní jednotkou je Entita … záznam • Druh (Kind) … tabulka • Klíč (Key) … primární klíč • Skupina Entit (Entity Group) … partition • 0..N Vlastností (Properties) … sloupce • Všechny entity v jedné Tabulce
  • 7. Vlastnosti Entit • Každá Entita může mít libovolnou kombinaci vlastností nezávisle na svém druhu • Vlastnosti můžou být vícehodnotové, např pole • této vlastnosti lze využít pro 1:N a M:N relace • Každá entita může mít svého “Rodiče” a vytvářet tak hierarchie • Podle Hierarchií se provádí automatický Partitioning • Transakce jsou možné pouze pro Entity se stejné Skupině Entit
  • 8. Omezení Datastore • Nepoužívá SQL, pouze GQL (Python) nebo JDOQL (Java) • Neexistuje podpora pro Joiny, ani tam není nic podobného • Žádné databázové “constraints” (omezení na cizí klíče) • Žádné agregační funkce (count, avg, min, max…) • Maximálně 1000 záznamů z jednoho dotazu. Za 1000. záznam v pořadí není možné se dostat ani přes offset. • Omezení na podmínky dotazu: Nerovnost pouze na 1 vlastnosti SELECT * FROM Person WHERE birth_year >= 1980 AND birth_year <= 2009 SELECT * FROM Person WHERE birth_year >= 1980 AND height >= 180 • Žádné globální transakce - pouze v rámci stejné Skupiny Entit • Nelze provádět ad-hoc dotazy, protože každý typ dotazu potřebuje vlastní index (pomáhá SDK)
  • 9. Jak se s tím vyrovnat? • Zvážit vhodnost platformy • Jde v tom moje aplikace vůbec napsat? • Pokud ano, tak změnit způsob myšlení • Změnit způsob návrhu aplikace • Nenechat se ovlivňovat stereotypy z relačních databází • Snažit se využít výhod Datastore • Jednoduchost, rychlost, pružnost, vícehodnotové vlastnosti... • Denormalizovat! • Přenést odpovědnost za konzistenci dat z databáze na aplikaci
  • 10. Python API class Person(db.Model): first_name = db.StringProperty() last_name = db.StringProperty() hobbies = db.StringListProperty() p = Person(first_name = "Albert", last_name = "Johnson") p.hobbies = ["chess", "travel"] query = db.Query(Person) query.filter("last_name = ", "Johnson") results = query.fetch
  • 11. Java API @PersistenceCapable(identityType = IdentityType.APPLICATION) public class Person { @PrimaryKey @Persistent(valueStrategy = IdGeneratorStrategy.IDENTITY) private Long id; @Persistent private String firstName; @Persistent private String lastName; @Persistent List<String> hobbies; } Query query = pm.newQuery(Person.class); query.setFilter("lastName == 'Johnson'"); List<Employee> results = (List<Employee>) query.execute();
  • 13. Závěr • App Engine umožňuje snadný vývoj škálovatelných webových aplikací • Pozor na specifická omezení • Vhodné pro hodně velké, nebo hodně malé projekty • Platforma se rychle vyvíjí a vylepšuje
  • 14. Děkuji za pozornost! tomas.holas@gmail.com linkedin.com/in/tomash facebook.com/tomas.holas twitter.com/tomaash