Naučte se používat framework Phoenix, abyste se bavili vytvářením webových/mobilních aplikací v reálném čase
které jsou rychlé pro „koncové uživatele“, spolehlivé,škálovatelné, udržovatelné a (snadno) rozšiřitelné!
- Proč?
- Co?
- Radost vývojářů
- (Měl bych se starat o) benchmarky?
- Nejdůležitější výkonnostní parametry
- Kdo?
- Kdo by se měl naučit Phoenix?
- Kdo by se neměl učit Phoenix?
- Jak?
- Předpoklady/předpoklady?
- Elixir
- Node.js
- Instalace
- Další?
- Praktické příklady?
- Kniha?
- Úvodní video José Valima (tvůrce Elixíru)
- Zdroje
- Našich 10 hlavních důvodů, proč Phoenix
- Otázky?
- Musím se před vyzkoušením/používáním Phoenixu naučit Elixir?
- Musím znát Erlang, abych mohl používat Elixir & Phoenix…?
- Ale Phoenix není „mainstream“ … Měl bych/měli bychom ho používat…?
- Proč už nepoužíváme Hapi.js…?
- Co je „špatného“ na používání Rails nebo Django?
- Ale GitHub stále používá Rails… GitHub je jistě „škálovatelný“?
- Proč NEpoužívat Go?
- Why NOT Use Scala + Play Framework instead…?
- Proč nepoužívat Haskell?
- Položte prosím další otázky: https://github.com/dwyl/learn-phoenix-framework/issues
Proč?
Jako vývojáři webových/mobilních aplikací potřebujeme využívat práci, kterou udělali jiní (opravdu chytří) lidé
namísto toho, abychom neustále vytvářeli věci „od nuly“;proto používáme k vytváření našich aplikací frameworky!
Viz: „10 hlavních důvodů, proč Fénix“ (dále na této stránce!)
Existuje mnoho frameworků, ze kterých si můžete vybrat(několik „populárních“ je uvedeno nížev části „Otázky“).
Ale kdybychom se řídili tím, co je „populární“, stále bychom všude jezdili na koni (a na voze) a žádného pokroku bychom nedosáhli.
Poznámka: všechny důvody „proč „pro Elixír platí i pro Fénixe!
Podívejte se na ně: https://github.com/dwyl/learn-elixir#why
Co?
Webový aplikační framework bez kompromisů!
Radost vývojářů
Největším „omezením“ v každém technologickém projektu jsou lidé. „Podnikatel“/“zakladatel“ nebo „Product Owner“ může mít všechny dobré nápadyna světě, pokud není schopen převést nápad do reality, nemá to smysl.
(Měl bych se starat o) benchmarky?
Zřejmě byste měli provádět vlastní benchmarky na vlastním hardwaru/cloudua činit informovaná rozhodnutí na základě požadavků vaší aplikace/produktu,ale …. když jsme si přečetli statistiky, kolik souběžných uživatelů zvládne aplikace Phoenix (s živými připojeními WebSocket), byli jsme ohromeni!Znamená to, že můžeme vytvořit naši aplikaci (aplikace) v reálném čase s 90 % méně prostředků.
Nejdůležitější výkonnostní parametry
- výrazně nižší latence a doba odezvy na požadavky než cokoli jiného! (díky odlehčeným procesům Erlang a mimořádně efektivnímu zpracování sítí/zpráv)
- 4x více požadavků za sekundu než ekvivalentní aplikace Node.js (Express.js).
- 9x větší propustnost než aplikace založená na Pythonu 2.7. (blokování je opravdu na nic!)
- 10x – 100x více zpracovaných požadavků než Ruby-on-Rails (podle typu aplikace!)
- Podobný výkon jako Go na jednom serveru, ale mnohem jednodušší model souběhu více serverů, takže horizontální škálování napříč více datovými centry („zónami dostupnosti“) je mnohem jednodušší! (Erlang spravuje prostředky pro více serverů/procesorů jako jedinou „flotilu“ aplikací a deleguje na ně požadavky/zpracování napříč clustery/zónami!)
To vše znamená, že utratíte podstatně méně penězza hardware/ cloudovou infrastrukturu, takže vaše aplikace/společnost může získat konkurenční výhodu v oblasti nákladů.
Pokud máte to štěstí a uvažujete o použití něčeho mnohem lepšího pro svůj příští projekt, nehledejte nic jiného než Phoenix!
Přečtěte si více: http://www.phoenixframework.org
Kdo?
Mnoho lidí/týmů/firem již používá Erlang/Elixir a Phoenix a vidí fenomenální výsledky!
Včetně: Adobe, BBC, Spotify, Pinterest, Discord (aplikace pro chatování s hráči),Groupon (Fave), Lonely Planet, Brightcove, Slack …
Podívejte se: https://github.com/doomspork/elixir-companies
Kdo by se měl naučit Phoenix?
- Lidé, kteří chtějí snadný způsob tvorby aplikace se všemi moderními vymoženostmi „generátorů“,vestavěným databázovým rozhraním („ORM“) a prvotřídním WebSocketem pro „reálný čas“ a zároveň získat legendární spolehlivost.
- Týmy, které potřebují produktivitu vývojářů nebo Ruby-on-Rails či Django,ale chtějí méně „magie“ (tj. chtějí rozumět tomu, jak vše funguje!).
- Firmy, které chtějí vynaložit o 90 % méně nákladů na vývojáře i infrastrukturu, abyste mohli obsloužit více lidí s méně prostředky.
Kdo by se neměl učit Phoenix?
- Kdokoli, kdo potřebuje používat „nejpopulárnější“ framework nebo jazyk(ať už z jakéhokoli důvodu).
- Firmy, které už mají spoustu starší Javy/PHP atd. a nemohou investovat čas do učení/používání něčeho nového.
- Vývojáři, kteří chtějí mít „jistotu zaměstnání“ opravováním chyb nespolehlivého kódu.
Jak?
Předpoklady/předpoklady?
Elixir
Nemůžete vytvořit aplikaci Phoenix bez znalosti Elixiru.
Jestliže s Elixirem začínáte, „vyhvězdičkujte“ (udělejte si záložku) this
repozitář (abyste se k němu mohli zítra vrátit)
a pak jděte na:github.com/dwyl/learn-elixirUčte se Elixir, dokud nebudete mít pocit, že rozumíte syntaxi,pak se vraťte a naučte se Phoenix!
Konkrétně by ses měl zaměřit na učení „základů“ jazyka Elixir:
- typy dat
- atomy
- vzorce
- mapy
- definice funkcí
- moduly
Node.js
Phoenix používá Node.js ke kompilaci souborů, jako jsou JavaScript a CSS (pomocí Webpack).
Stačí se ujistit, že máte nainstalovaný Node.js. https://nodejs.org
Pro používání Phoenixu nepotřebujete znát Node.
Instalace
Pokud jste se již naučili trochu Elixiru a nainstalovali Node.js, pak je prvním krokem k zahájení práce s Phoenixem instalace!!!
Dokumentace Phoenixu je úžasná, takže doporučujeme postupovat podle oficiálního návodu k instalaci Phoenixu!
Musíte také nainstalovat PostgreSQL, ve výše odkazované instalační příručce Phoenixu je návod, jak to udělat, ale můžete se také podívat na naše learn-postgresql
repo pro návod, a pokud budete mít nějaké potíže, vzneste dotaz!
Ačkoli základní znalosti JavaScriptu mohou být někdy užitečné,k používání Phoenixu nepotřebujete znát Node.
Pokud vás zajímá, proč si vybrali Brunch.io místo „alternativ“,
krátká odpověď zní: Jednoduchost & Rychlost!Viz: http://brunch.io/docs/why-brunch
Poznámka: Phoenix v1.4 (v době psaní tohoto článku nevydaný)používá pro kompilaci aktiv WebPack,viz: CHANGELOG.md
Další?
Seznamte se s (oficiální) příručkou „Up and Running“:https://hexdocs.pm/phoenix/up_and_running.html#content
Praktické příklady?
Jakmile budete mít nainstalovaný program Phoenixa budete postupovat podle oficiální příručky „up and running“,
vraťte se a vyzkoušejte tyto příklady pro začátečníky:
- Počítadlo (sdílené počítadlo v reálném čase pomocí aplikace Phoenix LiveView):https://github.com/dwyl/phoenix-liveview-counter-tutorial
- Seznam úkolů (návod krok za krokem ukazující, jak vytvořit plně funkční klon TodoMVC):https://github.com/dwyl/phoenix-todo-list-tutorial
- Chat (realtime UI/UX pomocí WebSockets):https://github.com/dwyl/phoenix-chat-example
- Šifrování (zabezpečení):https://github.com/dwyl/phoenix-ecto-encryption-example
- Protokol pouze pro aplikace (jak ukládat data aplikace):https://github.com/dwyl/phoenix-ecto-append-only-log-example
Kniha?
Doporučujeme lidem koupit (nebo si půjčit)knihu @chrismccord: „Programování Fénix“
viz: https://pragprog.com/book/phoenix14/programming-phoenix-1-4
Autoři jsou každý zvlášť působiví a společně srozumitelně pokrývají Phoenix tak, jak to nikdo jiný nedokáže!Chris vytvořil Phoenix, José vytvořil Elixíra Bruce je ultra zkušený technický autors mnoha úspěšnými knihami na svém kontě!
(tj.: kniha je jasnou volbou, jak se naučit Phoenix!)
Úvodní video José Valima (tvůrce Elixíru)
https://youtu.be/MD3P7Qan3pw
https://youtu.be/srtMWzyqdp8
Zdroje
- Elixir vs Ruby Showdown – Phoenix vs Rails: https://littlelines.com/blog/2014/07/08/elixir-vs-ruby-showdown-phoenix-vs-rails
- Srovnávací test: https://github.com/mroth/phoenix-showdown
Našich 10 hlavních důvodů, proč Phoenix
„Phoenix poskytuje produktivitu Ruby-on-Rails
se souběžností a odolností proti chybám Erlangu.“
- Kromě všech (fantastických) technických výhod nás na Phoenixu přitahuje skvělá komunita lidí z celého světa, kteří jsou nadšení z toho, že Phoenix je úžasný nástroj pro tvorbu webových aplikací!
Mít příjemné lidi, kteří vám
- pomohou, když se zaseknete, trpělivě vám vysvětlí věci
- odpoví na otázky (jak „noobů“, tak „pokročilých“) a
- otevřeně diskutují o (vašich) nápadech na zlepšení.viz: https://elixirforum.com/t/phoenix-v1-3-0-rc-0-released/3947
-
Phoenix používá programovací jazyk Elixir, což znamená, že yourapp je zkompilován a spuštěn na virtuálním stroji Erlang „BEAM“.
Erlang je bitvou prověřený vysoce odolný proti chybám virtuální počítač používaný mnoha telekomunikačními společnostmi -
WebSockets („kanály“) jsou zabudovány do frameworkucož znamená, že vytváření aplikací s komunikací a interakcí „v reálném čase“ je mnohem jednodušší než prakticky u jakéhokoli jiného frameworku/platformy!(není potřeba žádný modul
magic
třetí strany! vše, co potřebujete, je již připraveno, abyste mohli sloužit milionům lidí!!!).
viz: http://www.phoenixframework.org/docs/channels -
Snadná asynchronnost, protože veškeré programování ve Phoenixu (Elixir) je funkční! to znamená, že je opravdu jednoduché abstrahovat užitečné funkce, jako je ověřování požadavků, protokolování a zpracování, do „piplines“, které jsou snadno čitelné pro člověka! (není potřeba žádný modul třetí strany
async
! žádné „sliby“, „generátory“ nebo „pozorovatelné“, které je třeba spravovat!!) -
Zabezpečení & Odolnostní myšlení je
default
.Šifrování (SSL) je ve Phoenixu/Elixíru snadné aobojí zmírnění SQL injection,Cross-site Scripting (XSS)a ochrana CSRF jsou vestavěny (povolenydefault
), takže je prakticky nemožné, aby „začínající“ programátor zavedl tento typ bezpečnostní chyby. -
Přesnost kódu nelze podcenit! Můžeme napsat mnohem méněřádků než v ekvivalentní aplikaci Node.js/Java/Rails/Go, to znamená, že vývojáři jsou produktivnější a je třeba udržovat méně kódu!
-
Testovatelnost díky funkčnímu programování všech řadičů!
-
Snadné nasazení: http://www.phoenixframework.org/docs/heroku
-
Nulový downtime Nasazení je zdarma! (opět díky Erlangu). Erlang zvládne přechod „živých/aktivních“ uživatelů ze staré na novou verzi vaší aplikace, aniž by si všimli, že byla aktualizována/aktualizována!!!
-
Vestavěný monitoring/správce vaší aplikace prostřednictvím Erlang supervizorůznamená, že přesně víte, jak vaše aplikace funguje, které části se zhroutily/spustily a proč! To je funkce, za kterou v jiných frameworcích platíme (hodně), a tady je zdarma!!!
Vymyslíte další důvod, proč je používání Phoenixu úžasné?!
Prosím, podělte se o své názory v tomto vlákně:https://github.com/dwyl/learn-phoenix-framework/issues/13
Otázky?
Musím se před vyzkoušením/používáním Phoenixu naučit Elixir?
Ano, viz: https://github.com/dwyl/learn-elixir
Musím znát Erlang, abych mohl používat Elixir & Phoenix…?
Ne. Můžete se začít učit/používat Elixir již dnes a v případě potřeby volat funkce Erlangu,
ale nemusíte znát Erlangbefore
můžete používat Phoenix!
Ale Phoenix není „mainstream“ … Měl bych/měli bychom ho používat…?
Existuje mnoho frameworků pro webové aplikace, ze kterých si můžete vybrat:https://en.wikipedia.org/wiki/Comparison_of_web_frameworks
Tak proč by si někdo vybíral framework napsaný v programovacím jazyce, který není „mainstreamový“…?
Proč už nepoužíváme Hapi.js…?
To je chybná informace. Stále používáme Hapi.jspro řadu projektů, kde je to vhodné.
To zahrnuje několik klientských projektů a interních dwyl aplikací/nástrojů.
Pro naše nové projekty jsme se rozhodli používat Phoenix z těchto prostých důvodů:
- Elixir je hezčí jazyk než JavaScript.
#LessIsMore
#LessButBetter
#SmallIsBeautiful
#SyntaxMatters
- JS může být funkční, zatímco Elixir je (vždy) funkční!!! Ten rozdíl je zásadní!
Při „funkcionálním“ programování je mnohem snazší o programech přemýšlet, zatímco je píšete/udržujete! - Elixir používá Erlang VM, který je mnohem efektivnější/výkonnější než „V8“
- Elixir VM škáluje mnohem snadněji na vícejádrová multi-serverová multi-data-centra než Node.js
(nebo v podstatě cokoli jiného!!)
Pro naše nové projekty potřebujeme multi-data-center fault-tolerance!
to získáme „zadarmo“ použitím Erlang -> Elixir -> Phoenix!!!
Podle našeho názoru je Hapi.js stále „nejlepší“ Node.js framework a budeme ho continue
používat a doporučovat
lidem, kteří potřebují jednoduché aplikace, které se škálují a snadno udržují.
viz: https://github.com/dwyl/learn-hapi
Také stále používáme JavaScript pro všechny naše mikroslužby AWS Lambda,to se nezmění.
Jsou jednoduché, efektivní a opravdu dobře se škálují!
viz: https://github.com/dwyl/learn-aws-lambda
Co je „špatného“ na používání Rails nebo Django?
Původní „produktivní“ webové frameworkybyly „Ruby-on-Rails“ a „Django“ (python) už v roce 2005!
(Oba jsme po určitou dobu na naší „cestě“ používali a můžeme hovořit o výhodách každého z nich!)
Na používání Rails nebo Django není „nic špatného“.
Myslíme si, že stále existuje spousta případů použití pro oba frameworky.
Jen víme, že je (mnohem) snazší vytvářet „real-time“
s Phoenixem, protože jsou v něm zapečené „kanály“ (WebSockets),
a souběžnost Elixir/Erlang je úplně jiná hra!
Erlang (a tedy i Phoenix) zvládne miliony souběžně pracujících uživatelů na jednom serveru,
kdežto server Rails/Django zvládne jen několik tisíc (v nejlepším případě!)
pokud vaše aplikace obsluhuje jen několik tisíc lidí najednou, pak jste v pohodě!!
Líbí se nám, že Erlang používá „lehké procesy s dlouhou životností“,
což znamená, že můžeme připojit miliony zařízení (IoT) … Pro IoT je Erlang (jednoznačně) Odpovědí!
Pro jednodušší webové aplikace, kde očekáváte jen několik uživatelů denně, jsou Rails/Django stále životaschopné.
Ale proč dělat kompromisy, když nemusíte?
Pokud můžete mít Teslu za „cenu“ Fordu Focus,proč byste to neudělali?!?
Proč se spokojit s dobrým, když můžete snadno mít/používat to nejlepší?
Ale GitHub stále používá Rails… GitHub je jistě „škálovatelný“?
Ano, GitHub pro svou webovou aplikaci/stránku stále používá Rails.
Ale zeptejte se kohokoli z hlavního týmu GitHubu, jestli by si (kdyby měl možnost začít znovu)vybral Rails
pro vybudování GitHubu v roce 2017, a uvidíte, kolik z nich řekne „ano, samozřejmě“ (s vážnou tváří…)!
Takže GitHub dělá spoustu věcí pro škálování Rails na pozadí.
A mnoho jejich novějších funkcí (na straně klienta) je napsáno v JavaScriptu!
viz: https://github.com/github
Závěr je: cokoli lze pomocí „DevOps“ škálovat,
ale Phoenix se škálujedefault
protože Erlang (byl) vynalezen (pro) škálování!
Proč NEpoužívat Go?
„Existují dva druhy programovacích jazyků – ty, které nikdo nepoužívá, a ty, na které všichni nadávají.“ ~ Bjarne Stroustrup(tvůrce
C++
)
Go je velmi populární. Z velké části díky tomu, že ho „sponzoruje“ společnost Google.
Mělo to zjednodušit (nahradit) C++
a Java uvnitř Google …
a z velké části se to podařilo!
My máme Go opravdu rádi. Byla to naše volba „číslo dvě“, když jsme se rozhodovali, jaký programovací jazyk
(po Elixíru) v našem „post JS stacku“ …Rozhodnutí použít elixir
namísto čehokoli else
bylo snadné:
- Elixir je funkcionální (mnohem jednodušší na čtení/zápis/údržbu/rozšíření)
- Funkce Elixiru se skládají opravdu elegantním způsobem jako „zástrčky“/“pipelines“
- Data jsou neměnná, což činí stav aplikace předvídatelným (žádné hádání!)
- Typy jsou dynamické a odvozené (není třeba je ručně deklarovat), ale existují pravidla, která věci zjednodušují, a kompilátor je kontroluje a dává příslušné varování.
- Erlang výrazně usnadňuje distribuované aplikace a naším plánem je budovatIoT systémy, které budou znamenat připojení mnoha (milionů) zařízení s trvalými spojeními, Erlang byl pro to stvořen!
- Phoenix obsahuje mnoho užitečných věcí hned po vybalení z krabice, včetně několika bezpečnostních funkcí, na které většina lidí ani nepomyslí.
Další čtení:
- Proč Go není dobré: http://yager.io/programming/go.html
- Webové rámce Go: https://medium.com/code-zen/why-i-don-t-use-go-web-frameworks-1087e1facfa4
- Proč všichni nenávidí Go: https://npf.io/2014/10/why-everyone-hates-go/(click-bait title, několik platných bodů…)
- Diskuse: https://www.reddit.com/r/elixir/comments/3c8yfz/how_does_go_compare_to_elixir
(`help wanted` expanding this answer…)
Why NOT Use Scala + Play Framework instead…?
Pokud jste již zvyklí psát v Javě nebo nasazovat na JVM,Play Framework je vynikající volbou: https://www.playframework.com
Scala je dobrý programovací jazyk a měl by se ho naučit každý!https://www.scala-lang.org/what-is-scala.html
Párkrát jsme Play použili (než jsme přijali Node.js)a opravdu se nám líbil!
Ale Scala je „kuchyňský dřez“ (multiparadigmatický)programovací jazyk, který umožňuje lidem používat „celou Javu“ …
Myslíme si, že „Java Interoperability“ Scaly znamená, že je „příliš snadné“ povolitkomplexnost do své kódové základny. Konkrétně „OOP mutace“ …
Takže proč už (DWYL) nepoužíváme „Play“ pro nové projekty? „Zaprvé, před několika lety jsme přešli na Hapi.js (Node.js), protože byl „lehčí“ a umožňoval nám psát malé programy, které využívaly jen několik megabajtů RAM(kde naše aplikace Play byly velmi náročné na zdroje..!Zkoušeli jste někdy spustit aplikaci Scala na „základním“ notebooku, jako je Chromebook…?)
Shrnutí „důvodů“ pro Phoenix místo Play:
- Tvrdíme, že Play/Scala má stále spoustu platných případů použití.
- Elixir je mnohem jednodušší než Scala.
- Ellang VM je mnohem lepší v souběžnosti než JVM.
- Líbí se nám, že všechna data jsou v Elixiru neměnná.
- Líbí se nám, jak málo prostředků je potřeba ke spuštění aplikace Phoenix(např. na Raspberry Pi!!!).
Prostě si myslíme, že pro náš projekt(y) funguje Erlangův model konkordance lépe a funkční kód transformující neměnná data se lépe testuje a udržuje.
Pokud máte důkazy, že „Scala je jednodušší“, budeme rádi, když nám je sdělíte!
Sdělte nám to: https://github.com/dwyl/learn-phoenix-web-development/issues
Proč nepoužívat Haskell?
Pokud se vám tak líbí funkcionální programování (FP), proč nepoužívat Haskell?