Fórum Root.cz

Hlavní témata => Vývoj => Téma založeno: Radek Miček 18. 02. 2017, 14:29:44

Název: Erlang/Elixir - zkušenosti s vývojem webových aplikací
Přispěvatel: Radek Miček 18. 02. 2017, 14:29:44
Jaké jsou vaše zkušenosti s vývojem a provozem webových aplikací postavených v jazycích Erlang/Elixir.
Název: Re:Erlang/Elixir - zkušenosti s vývojem webových aplikací
Přispěvatel: . 18. 02. 2017, 15:39:53
nauc se cowboye a udelas v tom cokoliv. my jeli cca od 2011 chicagoboss s vlastnim db backendem (dsl na datamodely kompilovany do beamu a nativnich query procedur pro db) a pak jsme presli na vlastni odlehceny framework postaveny na cowboyi, websocketech, reactu a es6. cele to jede v docker containerech (zacinali jsme na lxc) nad zfs a management je velmi blizko nule.
ted leti phoenix ale elixir je spis takovy lakadlo pro rubysty, erlang je erlang :)
Název: Re:Erlang/Elixir - zkušenosti s vývojem webových aplikací
Přispěvatel: Mirek Prýmek 18. 02. 2017, 16:57:45
Jaké jsou vaše zkušenosti s vývojem a provozem webových aplikací postavených v jazycích Erlang/Elixir.
S vývojem jsou moje zkušenosti skvělé (Phoenix framework). Co se týče nějakého většího nasazení, neumím posoudit, dělám věci víceméně jenom nástroje pro sebe a omezený okruh lidí. Ale s tím by taky neměl být žádný velký problém, možná to chce jenom aby si logiku Erlangu opsáci trochu nastudovali, aby věděli, jak se k tomu chovat...

Kdyžtak zkus nahodit nějaké konkrétnější dotazy, rád pomůžu, jestli budu vědět, Elixir je moje láska :)

ted leti phoenix ale elixir je spis takovy lakadlo pro rubysty, erlang je erlang :)
Elixir rozhodně není jenom o syntaxi. I když i ta ušetří hodně nervů (osobně jsem syntaxi Ruby nesnášel a díky Elixiru jsem si na ni zvykl, ne naopak). K psaní v plain Erlangu moc nevidím důvod, Elixir je super.

Phoenix je výborný framework, dal bych mu rozhodně před ChicagoBossem přednost (v Phoenixu jsem dělal hodně - od ranných fází vývoje, v CB něco málo). Ale je fakt, že jeho síla je hodně v tom klasickém modelu oddělených stránek generovaných na serveru šablonami. Websockety má taky pořešené parádně, takže SPA se s ním taky dá udělat příjemně, ale už to není mainstreamové použití, které je fakt odladěné.

Mám rozchozenou SPA aplikaci, kde Phoenix vyloženě jenom obsluhuje websockety, rendering se dělá na klientovi (v Elmu, ale stejně dobře se dá použít třeba i React). HTTP API v téhle aplikaci vůbec nemám, všechno valí přes ws a funguje to dobře.
Název: Re:Erlang/Elixir - zkušenosti s vývojem webových aplikací
Přispěvatel: gll 18. 02. 2017, 17:31:24
Websockety má taky pořešené parádně, takže SPA se s ním taky dá udělat příjemně, ale už to není mainstreamové použití, které je fakt odladěné.

Jak souvisí SPA s websockety?
Název: Re:Erlang/Elixir - zkušenosti s vývojem webových aplikací
Přispěvatel: Mirek Prýmek 18. 02. 2017, 19:15:21
Jak souvisí SPA s websockety?
Když se stránky renderují na klientovi, musí klient nějak dostat data. Buď přes http api, nebo přes ws. Ws mají výhodu v tom, že je přes ně čistější oboustranná asynchornní komunikace. Takže když SPA, tak mi websockety přijdou jako lepší volba (pokud se s nimi v daném frameworku dobře pracuje).
Název: Re:Erlang/Elixir - zkušenosti s vývojem webových aplikací
Přispěvatel: Radek Miček 19. 02. 2017, 09:53:18
S vývojem jsou moje zkušenosti skvělé (Phoenix framework). Co se týče nějakého většího nasazení, neumím posoudit, dělám věci víceméně jenom nástroje pro sebe a omezený okruh lidí. Ale s tím by taky neměl být žádný velký problém, možná to chce jenom aby si logiku Erlangu opsáci trochu nastudovali, aby věděli, jak se k tomu chovat...

Kdyžtak zkus nahodit nějaké konkrétnější dotazy, rád pomůžu, jestli budu vědět, Elixir je moje láska :)

Zeptám se tedy konkrétněji k Phoenix frameworku:

Název: Re:Erlang/Elixir - zkušenosti s vývojem webových aplikací
Přispěvatel: Mirek Prýmek 19. 02. 2017, 10:26:43
Jak je to s upgrady na novou verzi? Bývá potřeba měnit aplikaci nebo jsou nové verze zpětně kompatibilní?
To je různé podle verze. Ze začátku byl vývoj docela bouřlivý, ale teď už je nějakou dobu řekl bych stabilizovaný. Žádné překotné změny bych teď už nečekal, podle mě už bude Phoenix hodně stabilní. Taky z toho důvodu, že z hlediska toho, co umí nejlíp (aplikace založená na oddělených stránkách, templatování) už imho není zas tak moc co vymýšlet :)

Způsoby upgradu na jednotlivé verze je zdokumentovaný, můžete se kouknout sám: http://www.phoenixframework.org/blog/upgrading-from-11x-to-120

Pro přístup k databázi používáte Ecto? A pokud ano, jak dobře se v tom píší složitější dotazy?
Zatím jsem psal věci, kde se mi hodilo jako úložiště použít Mnesia (interní erlangovská databáze), kterou Ecto nepodporuje, takže s Ecto neporadím, zkoušel jsem to snad jenom jednou a velmi krátce.
Název: Re:Erlang/Elixir - zkušenosti s vývojem webových aplikací
Přispěvatel: klaxo 23. 02. 2017, 12:55:27
ake IDE viete doporucit na Erlang / Elixir? Idealne aj s nasepkavacom
Název: Re:Erlang/Elixir - zkušenosti s vývojem webových aplikací
Přispěvatel: Mirek Prýmek 23. 02. 2017, 12:58:09
ake IDE viete doporucit na Erlang / Elixir? Idealne aj s nasepkavacom
Vim. Našeptávač asi neexistuje - na Erlangu nemůže nikdy dobře fungovat, protože moduly je možné (un)loadovat za běhu. Proto funguje našeptávání jenom v shellu, připojenému ke konkrétnímu běžícímu VM.
Název: Re:Erlang/Elixir - zkušenosti s vývojem webových aplikací
Přispěvatel: gll 23. 02. 2017, 18:46:23
ake IDE viete doporucit na Erlang / Elixir? Idealne aj s nasepkavacom
Vim. Našeptávač asi neexistuje - na Erlangu nemůže nikdy dobře fungovat, protože moduly je možné (un)loadovat za běhu. Proto funguje našeptávání jenom v shellu, připojenému ke konkrétnímu běžícímu VM.

Našeptávač pro Elixir existuje https://github.com/tonini/alchemist-server . V Emacsu stačí nainstalovat balíček alchemist.

Název: Re:Erlang/Elixir - zkušenosti s vývojem webových aplikací
Přispěvatel: Bnbb 23. 02. 2017, 19:05:40
Do idei existuje erlang aj elixir pligin
Název: Re:Erlang/Elixir - zkušenosti s vývojem webových aplikací
Přispěvatel: gll 23. 02. 2017, 20:03:35
Jak souvisí SPA s websockety?
Když se stránky renderují na klientovi, musí klient nějak dostat data. Buď přes http api, nebo přes ws. Ws mají výhodu v tom, že je přes ně čistější oboustranná asynchornní komunikace. Takže když SPA, tak mi websockety přijdou jako lepší volba (pokud se s nimi v daném frameworku dobře pracuje).

IMHO pro komunikaci typu požadavek-odpověď se websockety moc nehodí.
Název: Re:Erlang/Elixir - zkušenosti s vývojem webových aplikací
Přispěvatel: v 23. 02. 2017, 20:06:48
Jak souvisí SPA s websockety?
Když se stránky renderují na klientovi, musí klient nějak dostat data. Buď přes http api, nebo přes ws. Ws mají výhodu v tom, že je přes ně čistější oboustranná asynchornní komunikace. Takže když SPA, tak mi websockety přijdou jako lepší volba (pokud se s nimi v daném frameworku dobře pracuje).

IMHO pro komunikaci typu požadavek-odpověď se websockety moc nehodí.
proč? mi to docela funguje
Název: Re:Erlang/Elixir - zkušenosti s vývojem webových aplikací
Přispěvatel: gll 23. 02. 2017, 20:22:07
proč? mi to docela funguje

Třeba protože v HTTP mám spárovanou odpověď s požadavkem zadarmo? Proč používat statefull řešení tam kde není potřeba udržovat stav?
Název: Re:Erlang/Elixir - zkušenosti s vývojem webových aplikací
Přispěvatel: v 23. 02. 2017, 20:46:55
proč? mi to docela funguje

Třeba protože v HTTP mám spárovanou odpověď s požadavkem zadarmo? Proč používat statefull řešení tam kde není potřeba udržovat stav?
to "zadarmo" bych si dovolil zpochybnit, že není potřeba udržovat stav taky IMHO neplatí vždy, pro mě je přirozené, že aplikace naváže spojení spojení se serverem a po skončení aktivity uživaetle sezení uzavře
Název: Re:Erlang/Elixir - zkušenosti s vývojem webových aplikací
Přispěvatel: Mirek Prýmek 23. 02. 2017, 21:13:29
Třeba protože v HTTP mám spárovanou odpověď s požadavkem zadarmo? Proč používat statefull řešení tam kde není potřeba udržovat stav?
To neni zadarmo. To je za cenu udrzovani dvou ruznych API (ws a http).
Název: Re:Erlang/Elixir - zkušenosti s vývojem webových aplikací
Přispěvatel: gll 24. 02. 2017, 16:16:08
Třeba protože v HTTP mám spárovanou odpověď s požadavkem zadarmo? Proč používat statefull řešení tam kde není potřeba udržovat stav?
To neni zadarmo. To je za cenu udrzovani dvou ruznych API (ws a http).

Websockety se dají používat jen pro vyvolání akce načtení dat přes HTTP API. K žádné duplikaci potom nedochází.
Název: Re:Erlang/Elixir - zkušenosti s vývojem webových aplikací
Přispěvatel: gll 24. 02. 2017, 16:31:34
Proč FP programátoři prosazují bezestavovost na úrovni jazyka a stavovost na úrovni fungování aplikace?
Název: Re:Erlang/Elixir - zkušenosti s vývojem webových aplikací
Přispěvatel: Pilsner Urquell1842 24. 02. 2017, 17:03:10
Proč FP programátoři prosazují bezestavovost na úrovni jazyka a stavovost na úrovni fungování aplikace?


Spis pure (eliminaci side-effektu), stavovosti se neda vyhnout. Uz tady je videt pekne proc. Co je stavove a nestavove ? Pokud to ma neco delat, tak to musi menit stav.  Jde o to, aby zmeny stavu meli urcite vlastnosti a dalo se o nich lepe premyslet.
Prekladac si pak muze udelat vesmes co chce za danych garancych.

A pokud tak zapatram v pameti, tak i v Ruby a Jave neplati ze je to bezstavove. Volani je bud deterministicke, nebo nedeterministice. Nam jde o deterministicke, ktere samozrejme ulehci praci prekladaci, dovoli daleko lepsi cachovani atd.
V Ruby a Jave se programuje, tak ze se drzi stav v databazi.
Naopak v OTP se da takhle programovat taky, ale ... prave diky garancim mas tu databazi o jeden krok bliz.

Prakticky to mame nasazene celosvetove, odezvy v radech stovek micro sekund. Alchemist, VSCode ma taky extension. Naseptavace se moc nepouzivaji, moduly se pisou malinke...

Proste OO udelano spravne a microservice taky.
Název: Re:Erlang/Elixir - zkušenosti s vývojem webových aplikací
Přispěvatel: v 24. 02. 2017, 20:41:01
stavovost na úrovni fungování aplikace
co to vlastně znamená?
Název: Re:Erlang/Elixir - zkušenosti s vývojem webových aplikací
Přispěvatel: jpu 24. 02. 2017, 21:13:41
By ma velmi zaujimalo, kolki z vas realne pouzivaju funkcionalne jazyky ako profesionalny jazyk, s ktorym pracuju
Název: Re:Erlang/Elixir - zkušenosti s vývojem webových aplikací
Přispěvatel: v 24. 02. 2017, 21:49:16
By ma velmi zaujimalo, kolki z vas realne pouzivaju funkcionalne jazyky ako profesionalny jazyk, s ktorym pracuju
haskell na některé nástroje, občas i velké, pro "produkci" ovšem ne
Název: Re:Erlang/Elixir - zkušenosti s vývojem webových aplikací
Přispěvatel: Mirek Prýmek 25. 02. 2017, 00:37:12
Websockety se dají používat jen pro vyvolání akce načtení dat přes HTTP API. K žádné duplikaci potom nedochází.
Nepsal jsem "duplikace", ale dvě různá API. Typicky si na začátku říkáš, že tyhle data přece načteš jenom jednou, takže na to použiješ HTTP, ok, napíšeš to a za půl roku zjistíš, že bys vlastně chtěl, aby ty data byly živý - a přepisuješ to znovu do ws, s úplně jinou logikou, takže se ten kód nedá moc znovupoužít. Protože jsem si tímhle prošel, dospěl jsem k názoru, že nejjednodušší je prostě všechno posílat přes ws a fertig.

Proč FP programátoři prosazují bezestavovost na úrovni jazyka a stavovost na úrovni fungování aplikace?
Mícháš dvě věci dohromady: vedlejší efekty a stavovost. "Sémanticky", význámově "stavová" může být i čistá funkce, třeba když jí jako první parametr dám stav. Taková funkce je čistá (nemá vedlejší efekty) a přitom pracuje se stavem (ještě líp možná "kontextem").

Stavovost "ná úrovni aplikace", resp. spíš komponenty, je prostě daná povahou toho, co ta komponenta dělá. Pokud servíruju statické stránky, pořád vracím stejnou stránku na stejný dotaz, tak mám nestavovou komponentu. Pokud chci, aby v hlavičce stránky bylo jméno uživatele, tak je to prostě komponenta stavová z principu - s jazykem to nemá nic společnýho.

Název: Re:Erlang/Elixir - zkušenosti s vývojem webových aplikací
Přispěvatel: andy 25. 02. 2017, 08:22:18
Docela zajímavá je otázka vytížení serveru - pokud mi víc lidí přistupuje na živé informace, tak když to rozumně navrhnu před REST, tak tam můžu dát HTTP caching reverse proxy; u WS řešení bude výsledkem velké množství simultánních spojení. Nikdy jsem to nedělal (zrovna mám rozdělaný jeden projektík, kde jsem to původně přes WS chtěl řešit), ale nemůže to být trochu problém?
Název: Re:Erlang/Elixir - zkušenosti s vývojem webových aplikací
Přispěvatel: Mirek Prýmek 25. 02. 2017, 08:33:45
Docela zajímavá je otázka vytížení serveru - pokud mi víc lidí přistupuje na živé informace, tak když to rozumně navrhnu před REST, tak tam můžu dát HTTP caching reverse proxy;
Živá data stejně typicky cachovat nemůžeš, protože neznáš expiraci.

ale nemůže to být trochu problém?
Může. Ale erlang se dá dost snadno clusterovat a websockety v Phoenixu jsou na to od začátku navržené, takže se dá jít i touhle cestou. A přinejhorším kritické části můžeš do toho http vždycky přepsat - ale až to reálně bude výkonnostní problém, ne předem.

Viz https://dockyard.com/blog/2016/01/28/running-elixir-and-phoenix-projects-on-a-cluster-of-nodes
https://groups.google.com/d/msg/phoenix-talk/zjwitSVACUc/7gh8q9hBDgAJ
Název: Re:Erlang/Elixir - zkušenosti s vývojem webových aplikací
Přispěvatel: BoneFlute 27. 02. 2017, 01:52:59
Pokud to ma neco delat, tak to musi menit stav.  Jde o to, aby zmeny stavu meli urcite vlastnosti a dalo se o nich lepe premyslet.
Prekladac si pak muze udelat vesmes co chce za danych garancych.
Je zajímavě, že si v tom samém příspěvku odporuješ: Překladač nepracuje se stavem, a přesto rozhodně něco dělá :-)