node.js: zápisky z fronty (Battle guide to node.js)

  • 340 views
Uploaded on

[czech] V Apiary používáme node.js v produkci už přes rok. …

[czech] V Apiary používáme node.js v produkci už přes rok.

Proč se zamyslet nad tím, zda ho chcete? A na co se připravit a na co si dát pozor, pokud se do toho pustíte?

More in: Technology
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Be the first to comment
    Be the first to like this
No Downloads

Views

Total Views
340
On Slideshare
0
From Embeds
0
Number of Embeds
0

Actions

Shares
Downloads
0
Comments
0
Likes
0

Embeds 0

No embeds

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
    No notes for slide

Transcript

  • 1. zápisky  z  fronty Lukáš  @almadcz  LinhartAhoj, já jsem Almad
  • 2. Historie  webu (stručná  a  nepřesná)Proč mě poslouchat a zabývat se node.js je dobrá otázka, takže nejprve historické okénko
  • 3. Web  ’95Vznik webu: stránky jsou statické, jen nahrajeme HTML přes FTP. Easy-peasy, super.Kdo umí vyslovit HTML bez zakoktání, bere velké peníze.
  • 4. Web  27.8.2001Dynamické “části”, menu, uživatelská jména a informace o posledním přihlášení, datum --tedy šablony. Prorazil šablonovací jazyk PHP nad SSI a CGI, v jednoduchosti a graduální učícíkřivce je síla.Statická část se bouří, argumentuje rychlostí a mladostí “nových” a chce psát moduly v C,případně řešit vše pomocí vkládání přes SSI (server-side includes).Kdo umí vyslovit “CMS” nebo “SEO” bez zakoktání a nainstalovat Wordpress, bere velképeníze.
  • 5. Web  ’05CMS (content management systém, “redakční systémy”) a jejich následovníci. (Jedna) centrálnídatabáze, MVC framework, Rails, Django.PHPkisti se bouří, argumentují pomalostí a neozkoušeností a Davídek Nettuje.
  • 6. Web  ’12        Více datových zdrojů, relační, grafové, dokumentové databáze, 3rd party APIs (více v dalšíchslidech)JavaScriptaři vymýšlí node.js. Djangisti argumentují neefektivitou, postačující rychlostí anovostí bez knihoven.Kdo umí vyslovit “UX” bez zakoktání a nakreslit čtvereček, bere velké peníze.
  • 7. Server  push  je  standard
  • 8. Chtěl  jsi  se  odhlásit?
  • 9. Více  datových  zdrojůAnalytická data v hadoopu, cache v memcached, grafová data v neo4j jste-li bohatí, mnohédruhy dat v redisu, dokumentová data v mongu/couchi.
  • 10. Y  U  NO  ORM  object?nerelacni databaze se mnohdy nemapuji dobre na objekty
  • 11. Data  z  jiných  služebČasté používání API jiných služeb.
  • 12. haters  gonna  hatenode.js je jen jedna z variant. Kazdopadne, Djangisti a Rubysti argumentuji novosti, absencizakladni knihovny, pomalosti, neozkousenosti...
  • 13. SmyčkaEvent loop. Jeden ze způsobů řešení parelelních přístupů, “obchází” cenu za kontext switch.Něco jako cooperative multitasking ve Windows 3.11.
  • 14. V8Jedna z nejlepších language-specific VM, brutálně rychlá. Mozkový výkon by se dal utratit líp,ale co se dá dělat.Byť se tak místy snaží tvářit, pořád to samozřejmě není full-fledged platforma, které jsourozumné jenom dvě (JVM a .NET CLI).
  • 15. JavaScriptStarý, ale lepší jazyk, než si myslíte. Má své chyby, ale jsou všeobecně známé. Novýassembler webu.
  • 16. ...všude...Děsivá představa pro mnohé, ale kupodivu tím ten jazyk dostává lepší rozměr: šetří sekongitivní kontext-switche z hranic mezi systémy.
  • 17.      Kafe  pomáháCoffeeScript opravuje spoustu problematických míst JS, doporučuju.Částečně ovšem ruší tu výhodu z předchozího slajdu, takže je dobré jím nahrazovatkonzistentně.
  • 18. Neblokující  I/ONeblokující != rychlejší. Je tu ovšem lepší odolnost proti problémům se sítí etc., kdy requesty“umřou”, ale původní vlákno typicky stejně blokuje až do timeoutu.
  • 19. Existující  komunitaJS umí spousta lidí, co měli tu smůlu, že pracovali na frontendu. Znamená to, že velmi rychlevznikají knihovny na všechno a ”platforma” se posouvá dopředu překvapivě rychle.
  • 20. StreamováníVýchozí přístup je, že se nebufferuje. Jak přichází data do systému (po chuncích po bufferflushích), tak se zpracovávají. Člověk díky tomu designuje systémy na tohle zpracování taknějak defaultně, což je většínou v kontrastu s přístupem jinde. S pamětí to dělá dobré věci.
  • 21. JavaScript meetup 29.11. Felix Geisendörfer (node.js core commiter) Writing high performance binary parser in node.js http://praguejs.cz/...a hlasujte pro kvadrukoptéru, bude určitě levnější a zábavnější!!!11!!11!
  • 22. EstetikaCoffeeScript: Když si člověk dá práci se zarovnáním šipek a rovnítek (editory pomáhají), kódse velmi dobře čte. Vzhledem k tomu, že pokud to výkonnost dovoluje, je čitelnost snadnejdůležitější atributu kódu...
  • 23. tail  -­‐f  /var/log/messages  |  coffee  logserver.coffeeČteme input a posíláme ho v realtime do browseru. Super flexibilní v unixekosystému...zdarma prakticky na čtyři řádky.Plný funkční kód s HTML bordelem je na https://gist.github.com/3756594
  • 24. ProblémyA nyní, konečně sada varování.
  • 25. CPUNa rozdíl od I/O, CPU je blokující. Cokoliv co se zasekne na procesoru (jako třeba regexpcatastrophic backtracking) “zabije” celý server.
  • 26. Funkce getData  =  -­‐>  “mock  data”Mějmě jednoduchou funkci, která vrací nějaká data -- ještě budeme řešit jaká, takže sivrátíme něco co zatím stačí.
  • 27. Změna  zdroje  dat getData  =  (cb)  -­‐>        Model.findOne()  (m)  -­‐>                cb  m.data...pak se k tomu vrátíme a data od někud skutečně vezmeme, třeba z databáze a vrátíme jeonomu callbacku...
  • 28. ...který tam původně nebyl -> změna signatury funkce a flow všeho co ji používá.Rule of thumb: pokud by se vaše funkce mohla dotknout libovolného I/O, rovnou sipředávejte callback.
  • 29. Chybějící  callbackE.T. volat domu: stává se, že chyba v aplikaci se projeví tak, že člověk zapomene zavolatfinální callback/render do browseru, tj. žádný traceback, nic. Debugging toho je občas mírněfrustrující.
  • 30. PřestíněníCoffeeScript: scoping je dementní.
  • 31. newFunction  =  -­‐>  log  =  abc    newFunction  =  function()  {        var  log;        return  log  =  abc;    };Pakliže funkce ve vyšším scope neexistuje, správně se vytvoří s var, tj. jenom pro podřízenýscope --- výborně, opravuje to jednu z poměrně frustrujících věcí v JS (člověk omylem plevelíglobální scope).
  • 32. log  =  require  ./log newFunction  =  -­‐>  log  =  abc    log  =  require(./log);    newFunction  =  function()  {        return  log  =  abc;    };...nicméně pokud už tam stejná proměnna existuje (samozřejmě nezávisle na tom, jakéhotypu), je místo toho přepsána. To znamená, že funkce nejsou zcela zapouzdřené -- jsouovlivňovány kontextem ze svého nadřazeného scope. IMO nedobrá volba.
  • 33. API  je  pro  konzervyTrochu souvisí s předchozími poznámkami. Komunita je mladá a kreativní a dynamická azměn zpětné kompatibility se nebojí, s čímž je potřeba počítat. Node samotné už nicménědosti stabilní je na změny API dává pozor, ekosystém k tomu ještě musí dojít.
  • 34. Výjimky  zabíjíNeodchycená výjimka zabije celý proces/server a většinou to za vás nikdo moc neřeší:standardní pattern je výjimky nevyhazovat, ale vracet v callbacích jako první parametr. Stát seto ovšem z vašeho kódu může a je potřeba na to dávat pozor.(Třeba node-raven se to snaží řešit přes raven.patchGlobal, ale funguje to tak nějak všelijak.)
  • 35. Škálování The guys that are getting paid the big bucks to deliver scalable solutions aren’t up at night feverishly rewriting their systems in Node. They’re doing what they’ve always done: measuring, testing, benchmarking, thinking hard, keeping up with the academic literature that pertains to their problems. That’s what scaling in the large necessitates. -- Alex PayneKdyž řikám škálování tak myslim cestu ke Škálování, nikoli stránky velikostí čínského eshopujako seznam nebo centrum.
  • 36. Concurrency  lock-­‐inKdyž člověk roste ke škálování, mění se přístupové vzorce. Díky tomu se v čase mění ivhodná řešení. V node.js je člověk zamčen, nemá možnost volby -- All Hail To MightyEvenloop. Tohle časem člověka může bolet...na druhou stranu, v momentě, kdy řeší takovéproblémy, tak to znamená, že je na tom dobře.
  • 37. Kam  s  ním?I/O bound věciDistribuce dat (a APIs)ProxyRealtime / server pushTam, kde se dájí sdílet data mezi serverem a klientem (tj. javascript-heavy appky nebo přisdílení klíčové komponenty, jako třeba DSL/parseru).
  • 38. The Way of Node • Node  is  a  platform. • Node  is  JavaScript. • Node  is  callbacks  &  Streams. • Node  is  not  pretending  it  is  blocking  when  it  is  not. • Node  is  not  going  to  include  that  module. • Node  is  for  building. • Node  is  a  community. • Node  is  faster. • Node  is  fun. -­‐-­‐  Mikeal  RogersPřevzato z http://www.mikealrogers.com/posts/the-way-of-node.html , thx & kudos!
  • 39. Až budete psát příští aplikaci, zamyslete se, jestli na daný problém více nesedí vhodnějšítechnologie, jestli jen neohýbate ty co znáte, protože jste po kotníky zakopání v nějakékomfortní zóně.No a kdyby vám to ve vaší firmě nechteli dovolit...
  • 40. ...dovolíme vám to u nás. http://apiary.io/jobs
  • 41. Thank You (aka Credits) Everything under CC commercial on flickr through compfights -- thanks you too!• http://pinkie.ponychan.net/chan/files/src/133479594662.png • http://www.flickr.com/photos/yakobusan/2995035580/sizes/o/in/photostream/• http://www.flickr.com/photos/sukanto_debnath/519690623/sizes/o/in/photostream/ • http://www.flickr.com/photos/striatic/2191404675/sizes/z/in/photostream/• http://www.flickr.com/photos/nicholasro/4784567537/sizes/z/in/photostream/ • http://www.flickr.com/photos/boltron/4461019149/• http://www.flickr.com/photos/7989285@N07/1794265047/sizes/z/in/photostream/ • http://www.flickr.com/photos/olibac/3462198490/sizes/o/in/photostream/• http://www.flickr.com/photos/28157757@N05/5715697350/sizes/l/in/photostream/ • http://www.flickr.com/photos/anieto2k/5401318057/sizes/l/in/photostream/• http://www.flickr.com/photos/oskay/265899784/sizes/l/in/photostream/ • http://www.flickr.com/photos/68387408@N00/2661844560/• http://www.flickr.com/photos/tambako/4831699383/sizes/l/in/photostream/ • http://www.flickr.com/photos/raindrift/7095243379/in/set-­‐72157629492908038/• http://www.flickr.com/photos/astragony/4852775794/sizes/l/in/photostream/ • http://www.flickr.com/photos/13589188@N00/3164471672/• http://www.flickr.com/photos/albertoalerigi/2886157131/sizes/l/in/photostream/ • http://www.flickr.com/photos/67471595@N00/1353578358/• http://www.flickr.com/photos/tambako/2361526167/sizes/l/in/photostream/ • http://www.flickr.com/photos/26063220@N00/3480359060/• http://www.flickr.com/photos/jam343/4952338/sizes/o/in/photostream/• http://www.flickr.com/photos/stolensnapshot/3333052115/sizes/l/in/photostream/• http://www.flickr.com/photos/seeminglee/601883302/sizes/o/in/photostream/