Strona średniej wielkości - jakie technologie? Java ROR Python?

0

Do zrobienia jest strona e-commerce przedstawiająca kilkanaście tys. produktów, ponieważ wiele z nich jest w kilku lub kilkunastu wariantach to łącznie jest zwykle ok. 150-190 tys produktów (tyle jest rekordów w bazie "Postgres"). Na każdy rekord w bazie składa się tabela ok. 45 pól tekstowych, kilkanaście zdjęć (linki do nich, jedno ma 600KB-1.2 MB), itp. Więc strona jest dość duża i trzeba tu brać pod uwagę takie aspekty jak wydajność (szybkość działania), bezpieczeństwo, itp. Na stronie będą transakcje internetowe (coś w rodzaju płatności Przelewy24 czy PayU).
Strona będzie w RWD ( pewnie Bootstrap 4, ale nie defaultowy, tylko nieco customizowany ) oraz musi być skalowalna, łatwa do rozbudowy o kolejne moduły

Jakich technologii użyć do zrobienia tego projektu, jaki język programowania, jaki framework?

Faworytami są Java EE, Ruby On Rails i Python z którymś z frameworków (Django lub Tornado lub Pyramid)
Jako Frontend myślałem o Angular JS + CoffeScript + CSS3 + HTML5.

Co wybrać i dlaczego? Proszę o uzasadnienie! Proszę o przedstawienie wad i zalet konkretnych rozwiązań.

Wielki Mleczarz

0

"kilkanaście zdjęć (linki do nich, jedno ma 600KB-1.2 MB"- czyly taki ukłon w stronę użytkowników mobilnych :D - czysteskarpety 6 minut temu

Masz rację, ale zrobienie miniaturek dla mobilnych odbiorców to w tym wszystkim najmniejszy problem ;)

0

framework nie ma tu wiele do rzeczy.

Jesli chodzi o frontend to najwazniejsza rzecza bedzie zrobienie na tyle optymalnego HTMLa, CSSa i assetow (np. zdjecia) oraz metody dociagania danych (AJAX itp.) zeby to nie jeb*o przy zwyklym scrollu. I ogolnie zaplanowania interakcji na stronie tak, zeby to bylo wydajne.

Zbyt wiele elementow na stronie (a mowisz ze masz ich iles tysiecy a kazdy zawiera 45 pol tekstowych i kilkanascie zdjec) a mozesz zamulic przegladarke. Oczywiscie, mozna uzyc jakichs frameworkow. Niektore frameworki moga pomoc w pewnych rzeczach, takze w wydajnosci, ale to nie dziala magicznie.

Ja bym radzil najpierw zrobic prototyp tego co chcesz zrobic w jakichs prostych technologiach (jesli chodzi o frontend to chocby w jQuery, ew. w tym co znasz, jak znasz Angulara to moze byc i w Angularze) a potem dopiero zobaczyc jakiego rodzaju problemy wystepuja i pomyslec o wyborze technologii. Bo np. co ci da Angular w kwestii tego, ze obrazki zajmuja ci 600kB-1MB? Albo ze strona zamula przy pobieraniu obrazkow? Owszem, frameworki pomagaja, ale nie sadze, ze nalezy traktowac je jako rozwiazanie wszystkich problemow. sa wazniejsze problemy od wyboru frameworka.

0

Poruszyłeś ważny problem !!! Wielkość przestrzeni dyskowej nie gra większej roli. Transfer (obciążenie serwera) już tak. Ale zdjęcia mają być w galerii (mozaika minaturek) i tylko wyświetlane w całości w "lajtboksie", gdy część użytkowników na to się zdecyduje. Nie do każdego mebla będzie tyle zdjęć i nie wszystkie tak duże. Podałem te wartości, by ukazać, że nie jest to mały projekt "studencki", tylko coś poważniejszego - co docelowo ma zarabiać. Poza tym zdjęcia są b. wysokiej jakości i ukazują całe piękno mebli i akcesoriów, dlatego raczej mocne kompresowanie czy zmniejszanie ich rozdzielczości nie jest wskazane.

0

Wiem, że framework nie jest najważniejszy, ale coś wybrać trzeba

Pierwsze pytanie brzmi, jaki język: JAVA EE, RoR czy Python?

Strona w zamyśle ma wyglądać jak MEDIAMARKT.pl czy SATURN.pl, tyle, że nie bedzie to AGD, RTV, elektronika a głównie meble, akcesoria wykańczające powierzchnie mieszkalne. itp.

Przykładowo strona główna: www.mediamarkt.pl mogłaby posłużyć za szablon projektu strony z meblami.

Strona kategorii głównej AGD do zabudowy: https://mediamarkt.pl/agd-do-zabudowy - tak może wyglądać strona kategorii

itd. itd. itd. Ten układ jak w MM czy Saturn odpowiada nam, a szatę graficzną można nieco zmienić.

Te kilka - kilkanaście zdjęć w galerii oczywiście wyświetla się dopiero gdy użytkownik dojdzie do strony produktu, a wiec z tych wielu terabajtów, jak kolega czysteskarpety policzył, przeciętny użytkownik ściągnął by kilka do kilkunastu MB.

Mleczarz

0

no to może java , ale niekoniecznie EE? może spring?

a zdjęcia możesz cache'ować i skalować żeby nie obciążyć sobie łącza i użytkownika (dopiero gdy klinie w podgląd wysłać docelowe zdjęcie).

0

@karolinaa Dlaczego Spring a nie Java EE?

0

Dzięki za podpowiedzie, ale prosiłbym jeszcze o jakieś konkrety (dlaczego to rozwiązanie a nie inne) - małe uzasadnienie wyboru.

MleczarzMMM

0

RoR to nie język, chyba że uznamy Springa czy Django za język programowania. - winerfresh 1 godz. temu

Wiem, że Ruby to język, a Rails to framework. Tylko, że 9x % użytkowników Ruby używa Railsy, Sinatra czy inne frameworki to rzadkość.

0

A symfony 2 i php nie dałyby rady przy takim projekcie? I tak będziesz pewnie brał pod to dedyka. Do tego jest fajny e-commerce oparty na symfony - http://sylius.org/
Czy Waszym zdaniem nie ma nawet sensu brać tego na coś tak dużego? Czy to po prostu niechęć do php? :)

0

PHP by pewnie wystarczyło, skoro na PHP z ZENDem czy Symfony stoją duże, a czasem i ogromne strony. Ponoć Allegro jest na PHP (tak coś słyszałem), ale chciałbym ograniczyć wybór do:
Java + .....
Python + ....
Ruby + ....

Widzę, też inne rozwiązanie, zastosować gotowy CMS czy bardziej CMF jak Plone, Django-CMS, tylko niewiele o nich wiem :(

Mleczarz

0

@wielki Mleczarz - Phoenix Framework. IMHO najlepsze i największe perspektywy ma to narzędzie w najbliższych latach.

0

IMHO najlepsze i największe perspektywy ma to narzędzie w najbliższych latach

OK, a na jakiej podstawie tak twierdzisz? Nie mówię, że nie masz racji, tylko pytam.

Czytam o tym frameworku i widzę, że postawili na dużą szybkość / wydajność. Widzę, że piszę się w Elixir-ze - dość chyba egzotyczny język, są w Polsce specjaliści od niego? W Overview coś piszą o Erlangu - o tym słyszałem i niestety tylko słyszałem. Możesz mieć racje, że jest to dobra technologia, ale chyba dość egzotyczna. Wydaje się, że taki zestaw Scala + Play byłby lepszy, bo jest trochę ludzi w kraju, którzy wykonują w tym projekty.

0
ajgoron napisał(a):

A symfony 2 i php nie dałyby rady przy takim projekcie? I tak będziesz pewnie brał pod to dedyka. Do tego jest fajny e-commerce oparty na symfony - http://sylius.org/
Czy Waszym zdaniem nie ma nawet sensu brać tego na coś tak dużego? Czy to po prostu niechęć do php? :)

A po co jest Symfony jeśli nie pod większe projekty? Podobnie zresztą Laravel. Pewnie że jest niechęć do PHP. Goldenline na czym niby stoi jak nie na Symfony 2?

https://speakerdeck.com/sgrodzicki/migracja-goldenline-do-symfony2-case-study

A GL to przecież poważny serwis, więc w czym tu jest problem?

0

@drorat1 - Nie chodzi o niechęć czy sprawę upodobań. Inne rzeczy zadecydowały o ograniczeniu się do tych trzech rozwiązań. Mimo, że PHP jest super popularne, to zwyczajnie nie każdy je zna.

@winerfresh - Jak możesz napisz jakie zalety ma Phoenix Framework, dlaczego uważasz go za optymalne rozwiązanie?

Trochę poczytałem o Elixir (widzę, że to się ma do Erlanga, tak jak Scala/Groovy do Javy). Syntax jest nieco podobny do RoR. Wygląda dość ciekawie.
Jest w tym praca w PL? (na pracuj_pl 11 ofert dla Erlang, jedna dla Elixir).

1

Powiedział bym, że 3 słowa, ale w tym przypadku wystarczą litery: OTP, czyli biblioteka Erlanga (wbudowana) do aktorów.

Dodatkowo to: https://pragprog.com/articles/erlang

9 dziewiątek uptime (99.9999999%) przy projekcie, który ma ~2 mln linii kodu. To znaczy, że w ciągu roku serwis nie działał w sumie przez ~30 milisekund.

0

@winerfresh - dzięki za info, znalazłem o OTP tu: http://learnyousomeerlang.com/what-is-otp

To są wg. autora największe zalety Erlang:

If half of Erlang's greatness comes from its concurrency and distribution and the other half comes from its error handling capabilities, then the OTP framework is the third half of it.

Traktuję Elixir / Erlang bardziej jako ciekawostkę, ale kto wie, może kiedyś w przyszłości... Na razie stawiam na Ruby, Python lub Java ;)

MleczarzMM

0

@MleczarzMM tak się składa, że Erlang jest na rynku dłużej (1986) niż cokolwiek co wymieniłeś (Java i Ryby - 1995, Python - 1991). Więc stara ta "ciekawostka" skoro zostawiasz ją na przyszłość.

0
winerfresh napisał(a):

@MleczarzMM tak się składa, że Erlang jest na rynku dłużej (1986) niż cokolwiek co wymieniłeś (Java i Ryby - 1995, Python - 1991). Więc stara ta "ciekawostka" skoro zostawiasz ją na przyszłość.

Wiem, o Erlangu czytałem pół roku temu co nieco. Dlaczego zostawiam na przyszłość? Prosty powód - u nas nie ma właściwie pracy w Erlang / Elixir / Phoenix Framework (w odróżnieniu od RoR / Python / Java). Nawet na Zachodzie (DE, UK) nie widzę zbyt wielu ofert.

I wydaje mnie się, że próg wejścia do Erlanga i jego braci jest znacznie wyższy.

0

MleczarzMM == Złoty Szczur

Wejdę w E/ E/ P, jak na 4programmers będzie oddzielne subforum dla Elixira ;)

Tak bardziej serio, wielkość community ma znaczenie, bo gdzie szukać pomocy w razie kłopotów?
Na stronie Phoenixa nie bardzo mogą się pochwalić jakimiś super spektakularnymi "success stories". Raptem 6 stron (mało znanych) wymienili które korzystają z tego frameworka. Może sytuacja się zmieni za kilka lat. Zapowiada się ciekawie, programiści korzystający z Elixir mówią o nim niemal w samych superlatywach (np.http://theerlangelist.com/article/why_elixir )

MleczarzMM

0

Za to Erlang ma ich więcej:

  • Github
  • Facebook
  • WhatsApp
  • Basho Riak
  • CouchDB/CouchBase
  • RabbitMQ
  • ejabberd (chyba jeden z najpopularniejszych serwerów XMPP)
  • MoongoseIM
  • Heroku

Co do pracy, to sądzę, że oni specjalnie się nie ogłaszają https://www.erlang-solutions.com/about/careers.html

Jak to gdzie szukać? Tam gdzie zawsze: IRC i SO.

0

Firmę Erlang Solutions znalazłem szybko i widzę, że na naszym podwórku jest raptem kilka firm korzystających z Erlang. Z Elixirem, póki co, jest jeszcze gorzej.

Przy wszystkich zaletach Erlang / Elixir / Phoenix zastanawiam się czy stosowanie tak zaawansowanego rozwiązania ma sens w przypadku relatywnie prostych stron jak sklep internetowy, katalog produktów, itp. (nawet jeśli mają generować spory ruch). Wydaje mnie się, że Erlang / Elixir / Phoenix są głównie do aplikacji sektora bankowego, telekomunikacji, itp. gdzie trzeba zapewnić obliczenia równoległe, super wydajność, odporność na błędy, itd. Bo tak to jest MZ strzelanie do kaczek z armaty.

MleczarzMM

0

U nas w pracy ostatnio postał projekt do checkinowania się kartami RFID właśnie w Elixirze.

IMHO to nie jest tak, że Erlang/Elixir tylko do systemów bankowych/telekomunikacyjnych. Do nich został stworzony, ale nadaje się również do prostszych rzeczy. Z racji, że Elixir ma całkiem przyjazną składnię i dość niski próg wejścia to ma szansę stać się nowymi Railsami (część guru Railsowych tak go widzi). Dzięki temu mamy całkiem przyjemne narzędzie do pisania aplikacji, a wydajność i stabilność dostajemy niejako za darmo, przy okazji, razem z całym mnóstwem innych przydatnych narzędzi (hot reload na ten przykład). Deployment też można znacznie uprościć, więc całość będzie nie trudniejsza niż hostowanie aplikacji w Javie.

Pytanie było jaką technologię chcesz użyć: Erlang/Elixir/OTP jest IMHO idealnym rozwiązaniem do aplikacji webowych. Masz wydajną VMkę, która jest wyoptymalizowana do granic możliwości pod względem aplikacji sieciowych. Masz hot reload. Masz wbudowany process managament. Masz actor-based concurrency. Masz wszystko o czym można pomarzyć a do tego okraszone całkiem przyjazną składnią.

Masz tam wiele zaawansowanych features, które nie interesują ani Ciebie ani twoich klientów, ale też nie zawadzają. Jak byś pisał w Javie to masz tak samo. Ba, w każdym języku znajdą się takie rzeczy. To nie jest powód by rezygnować z dobrej technologii.

PS http://zerg.erlangonxen.org/

0

Erlang jest dojrzałym językiem programowania. Ale z tego co wyczytałem Elixirowi i frameworkowi Phoenix jeszcze trochę brakuje, żeby zastąpić ROR. ROR to tysiące gemów, tysiące przykładów na sieci, spore community, itd. Developerzy Elixir i Phoenix sami przyznają, że z braku czasu jeszcze co nieco brakuje ich projektom. Trzeba będzie jeszcze trochę poczekać aż dopracują to oprogramowanie. W RoR podoba mnie się to, że jak coś potrzebujesz, jakieś gotowe rozwiązanie, to instalujesz gem i po kłopocie. To co sprawia, że Phoenixa i Elixira odstawiam na przyszłość to perspektywy pracy...

Mimo wszystko dzięki za przybliżenie tych technologii. Spędziłem ostatnie dwa dni na oglądaniu yt z filmami Elixir i Phoenix :)

0

Tak jak pisałem - to wszystko zapowiada się ciekawie.

Nie wiem czy to można nazwać odpowiednikiem gemów, ale widzę, że jest w Phoenixie opcja typu "load dependiences" (mix deps.get).
( Na podstawie: https://github.com/jcieslar/blog_phoenix )

0

Tak, Erlang używa hex jako managera pakietów (odpowiednik RubyGems) i mix jako build tool/dependency list (połączenie Rake z Bundlerem). Poza tym możesz używać wszystkich bibliotek napisanych dla Erlanga poprzez rebar (mix pozwoli nimi zarządzać). Więc nie powiedział bym, że zbiór bibliotek jest mały.

0

Właściwie temat Erlang / Elixir / Phoenix został wyczerpany - dzięki @winerfresh !

Jakby ktoś zechciał napisać coś jeszcze w temacie wątku, wraz z małym uzasadnieniem wyboru, to będzie super.

Dzięki za ewentualne uwagi!

MleczarzMM

0

A jak ktoś zaczyna od zera uczyć się back endu to opłaca się brać PHP, czy może jednak inną młodszą i bardziej przyszłościową technologię po stronie serwera?

1

Cokolwiek, byle by nie PHP.

0

Porównanie web frameworków pod kątem wydajności:

https://www.techempower.com/benchmarks/

MleczarzMM

1 użytkowników online, w tym zalogowanych: 0, gości: 1