Nápad na bakalářskou práci se Spring

Re:Nápad na bakalářskou práci se Spring
« Odpověď #15 kdy: 19. 04. 2019, 12:13:14 »
Jak ze na tom nic nevyzkoumas, to si delas srandu ne. Zrovna ohledne cachovani o kterem pises muzes porovnat perfromance SQL a Hibernate kdyz ma databaze delays ze je jakoze remote a kdyz je databaze na stejnem stroji. Databaze si taky umi cachovat, takze nepotrebujes mit cache 2x, paklize jede ta DB na stejne masine.
Co na tom vyzkoumáte jiného, než síťový round-trip databáze?

Uz i samotne na tom nic nevyzkoumas je hlod, vsude se delaji enterprise informacni systemy a tomuhle malokdo dobre rozumi.
Co na tom tedy vyzkoumá užitečného? Tedy takového, co bude platit i pro jiné případy, než pro ten jeden, který zkoumal? V reálném světě je každý systém jiný a chová se jinak. Chování se mění i v závislosti na tom, kolik je zrovna aktivních uživatelů a co dělají. A zrovna u enterprise informačních systémů se milisekundy zpoždění síťové odezvy při přístupu do databáze opravdu neřeší. Navíc u enterprise systému by snad nikoho nenapadlo provozovat aplikační server a databázi na tom samém stroji.

Dyt tam se toho da vyzkouset tolik.

Napr. rozjet Postgresql lokalne a pouzit Hibernate pro praci s entitami, bez pouziti second level cache. Pak zkusit nasimulovat delay do te databaze a zapnout second level cache a porovnat vysledek. Potom zkusit zapnout diskPersitence u te cache a porovnat vysledek. Ucelem toho mereni je, porovnat performance cache kterou ma Hibernate v Jave a kterou by melo Postrgesql. A ty prerformance testy udelat poradne, simulovat treba 100 paralelnich requestu za vterinu.

Citace
<cache name="com.mycompany.MyEntity"
   maxElementsInMemory="50"
   eternal="true"
   overflowToDisk="false"
   timeToIdleSeconds="600"
   timeToLiveSeconds="600"
   diskPersistent="false"
   memoryStoreEvictionPolicy="LRU"       
/>

Ucelem toho vseho je doakazat, ze Hibernate a Java je sracka co akorat zere RAM a zatezuje servery 8) :D A nebo mozna prekvapi?  8)


Da se otestovat spousta zajimavych veci a kdyz se to udela poradne, tak z toho bude uzitecny vystup. Kdezto kdyz bude nekdo vyrabet jakousik webovku, tak to stejne bude stat za houby a nebude to k nicemu, akorat to skonci na skladisti bakalarek tak jako u miliony jeho predchudcu.
« Poslední změna: 19. 04. 2019, 12:18:21 od prihlaseny_uzivatel »


Re:Nápad na bakalářskou práci se Spring
« Odpověď #16 kdy: 19. 04. 2019, 12:37:00 »
tam se toho da vyzkouset tolik.
Já jsem se ale ptal, k čemu to bude.

Napr. rozjet Postgresql lokalne a pouzit Hibernate pro praci s entitami, bez pouziti second level cache. Pak zkusit nasimulovat delay do te databaze a zapnout second level cache a porovnat vysledek. Potom zkusit zapnout diskPersitence u te cache a porovnat vysledek. Ucelem toho mereni je, porovnat performance cache kterou ma Hibernate v Jave a kterou by melo Postrgesql. A ty prerformance testy udelat poradne, simulovat treba 100 paralelnich requestu za vterinu.
Ano, to se dá udělat. A zjistí výsledky, které se vztahují přesně k tomuhle jednomu testu, které ale budou k ničemu ve všech ostatních případech, např. u reálných aplikací. K čemu to tedy bude?

Ucelem toho vseho je doakazat, ze Hibernate a Java je sracka co akorat zere RAM a zatezuje servery 8) :D A nebo mozna prekvapi?  8)
Aha, tak to vysvětluje vše. Prostě máte nějaký výsledek, a teď sháníte libovolný postup, jak se k němu dostat.

Da se otestovat spousta zajimavych veci a kdyz se to udela poradne, tak z toho bude uzitecny vystup.
Aby z toho byl užitečný výstup, musel by otestovat tisíce různých kombinací aplikací, databází, způsobů zátěže a konfigurací. Ten váš příklad s cache nevypovídá vůbec o ničem, protože účinnost cache se samozřejmě bude dramaticky lišit v závislosti na formě pracovní zátěže – záleží na poměru mezi čtením a zápisem, na tom, zda se čtou opakovaně stejná data, na tom, zda je povolené poskytovat starší data.

Kdezto kdyz bude nekdo vyrabet jakousik webovku, tak to stejne bude stat za houby a nebude to k nicemu, akorat to skonci na skladisti bakalarek tak jako u miliony jeho predchudcu.
Webovou aplikaci je možné jako bakalářskou práci udělat pořádně. Vaše měření v žádném případě. Myslíte, že mu někdo pro účely bakalářské práce půjčí Exadatu, stovky gigabajtů dat a stovky uživatelů, kteří budou provádět reálnou práci? Když jste to chtěl vztahovat na enterprise informační systémy…

Re:Nápad na bakalářskou práci se Spring
« Odpověď #17 kdy: 19. 04. 2019, 12:48:06 »
tam se toho da vyzkouset tolik.
Já jsem se ale ptal, k čemu to bude.

A ja se zase ptam, k cemu bude nejaka nedodelana a nefungujici webova aplikace je jedno pro co, treba pro konference. Takovou aplikaci NIKDY jako jednotlivec nedotahne do pouzitelenho konce v ramci nejake pitome bakalarky, pokud nechce ztratit kus drahoceneho zivota.

Napr. rozjet Postgresql lokalne a pouzit Hibernate pro praci s entitami, bez pouziti second level cache. Pak zkusit nasimulovat delay do te databaze a zapnout second level cache a porovnat vysledek. Potom zkusit zapnout diskPersitence u te cache a porovnat vysledek. Ucelem toho mereni je, porovnat performance cache kterou ma Hibernate v Jave a kterou by melo Postrgesql. A ty prerformance testy udelat poradne, simulovat treba 100 paralelnich requestu za vterinu.
Ano, to se dá udělat. A zjistí výsledky, které se vztahují přesně k tomuhle jednomu testu, které ale budou k ničemu ve všech ostatních případech, např. u reálných aplikací. K čemu to tedy bude?

K tomuhle testu se vztahuje vysledek ve smyslu celkhoveho zatizeni pocitace u Postrges vs javovsky Hibernate. Jestli vam to prijde jako nudny a bezvyznamny test, tak to je potom problem.

Ucelem toho vseho je doakazat, ze Hibernate a Java je sracka co akorat zere RAM a zatezuje servery 8) :D A nebo mozna prekvapi?  8)
Aha, tak to vysvětluje vše. Prostě máte nějaký výsledek, a teď sháníte libovolný postup, jak se k němu dostat.
Tomu se rika udrzovat veci jednoduche a nevymyslet kraviny, ale misto toho hledat zpusoby a duvody, proc jednoduchymi muzou zustat. Javy a Hibernate se to tyka prevelice.

Da se otestovat spousta zajimavych veci a kdyz se to udela poradne, tak z toho bude uzitecny vystup.
Aby z toho byl užitečný výstup, musel by otestovat tisíce různých kombinací aplikací, databází, způsobů zátěže a konfigurací. Ten váš příklad s cache nevypovídá vůbec o ničem, protože účinnost cache se samozřejmě bude dramaticky lišit v závislosti na formě pracovní zátěže – záleží na poměru mezi čtením a zápisem, na tom, zda se čtou opakovaně stejná data, na tom, zda je povolené poskytovat starší data.

Ale prd, na to abyste otestoval dopad pouzivani Java hoven na performance nejakeho enterprise enviromentu nemusite testovat tisice ruznych kombinaci.

Kdezto kdyz bude nekdo vyrabet jakousik webovku, tak to stejne bude stat za houby a nebude to k nicemu, akorat to skonci na skladisti bakalarek tak jako u miliony jeho predchudcu.
Webovou aplikaci je možné jako bakalářskou práci udělat pořádně. Vaše měření v žádném případě. Myslíte, že mu někdo pro účely bakalářské práce půjčí Exadatu, stovky gigabajtů dat a stovky uživatelů, kteří budou provádět reálnou práci? Když jste to chtěl vztahovat na enterprise informační systémy…
[/quote]

Pokus o vyrobu webove aplikace skonci s pravdepodobnosti 1000:1 jako dalsi bakalarsky shit, kde jedinym vystupem z toho vseho budou nejake nove znalosti a zkusenosti pro toho dotycneho, ale zadny realny uzitecny vysledek pro ostatni.

Re:Nápad na bakalářskou práci se Spring
« Odpověď #18 kdy: 19. 04. 2019, 12:58:53 »
K tomuhle testu se vztahuje vysledek ve smyslu celkhoveho zatizeni pocitace u Postrges vs javovsky Hibernate.
Který je ovšem závislý na způsobu použití PostgreSQL, na způsobu použití Hibernate, a na způsobu použití dané aplikace. Jenom v tomhle jednoduchém příkladu tedy máte tři nezávislé proměnné, takže jeden test vám neřekne vůbec nic.

Navíc vy přece ani nechcete nic testovat, vy už máte o výsledku jasno.

Re:Nápad na bakalářskou práci se Spring
« Odpověď #19 kdy: 20. 04. 2019, 20:14:05 »
REST/AJAX aplikaci zvládne šikovný středoškolák. Pokud chceš proniknout hlouběji do architektury Springu, tak výborné téma je Spring Plugin pro HotswapAgent https://github.com/HotswapProjects/HotswapAgent/tree/master/plugin/hotswap-agent-spring-plugin


Re:Nápad na bakalářskou práci se Spring
« Odpověď #20 kdy: 20. 04. 2019, 21:18:58 »
REST/AJAX aplikaci zvládne šikovný středoškolák. Pokud chceš proniknout hlouběji do architektury Springu, tak výborné téma je Spring Plugin pro HotswapAgent https://github.com/HotswapProjects/HotswapAgent/tree/master/plugin/hotswap-agent-spring-plugin

Hotswap Agent je na kolene ubastleny utter crap a doufam ze ho nikde v zadnem projektu konfigurovany neuvidim, protoze je to typicke polofunkcni DODO ktere akorat zvedne codabase a starosti programatorum.

Jedine DCEVM a na Spring Boot uz Hotswap Agenta stejne nepotrebujes, protoze se to umi vcelku svizne reloadnout.

Jinak kdyz uz jsme tady tak krasne resili Javu, Spring  a dostali jsme se k Hotswap, tak se mi vcelku libi jak ma Hotswap vyreseno golang - nijak. Nez totiz ta plecka Java s pomalym Springem nastartuje, tak aplikace v Go uz by mezitim nabehla 100x.
« Poslední změna: 20. 04. 2019, 21:24:08 od prihlaseny_uzivatel »

Re:Nápad na bakalářskou práci se Spring
« Odpověď #21 kdy: 21. 04. 2019, 08:25:35 »
Prave, kdyby nebylo v HotswapAgentovi co zlepsovat, tak to sem nepisu. Jinak zvedne code base? To myslis vazne nebo nevis o cem pises?
« Poslední změna: 21. 04. 2019, 08:28:13 od skybber »

Re:Nápad na bakalářskou práci se Spring
« Odpověď #22 kdy: 21. 04. 2019, 10:44:07 »
Prave, kdyby nebylo v HotswapAgentovi co zlepsovat, tak to sem nepisu. Jinak zvedne code base? To myslis vazne nebo nevis o cem pises?

Ten Hotswap agent nefunguje ani nahodou out of box, musi se nakonfigurovat, pripadne se mu tam musi rucne pridat a naprogramovat ty jeho handlery, aby hotswap na ruzne pouzite technologie fungoval. Takze ano, zvedne to codebase.

Navic uz existuje JRebel, ktery to dela mnohem lepe.

A navic to ani neni potreba, protoze Spring Boot uz se resfreshnout dokaze.

Re:Nápad na bakalářskou práci se Spring
« Odpověď #23 kdy: 21. 04. 2019, 15:41:22 »
Po HotswapAgentovi nemůžete chtít zázraky, jako je reload Vašeho proprietárního frameworku. Na jednoduchoučké aplikace, ktere bootuji pár sekund to nedává smysl, jak píšete. Určitě víte, že srovnání s  JRebel z různých důvodů je taktéž nesmyslné... Autor původního dotazu hledá téma pro bakalářskou práci ve Spring. Spring plugin v HotswapAgentovi vyžaduje znalost mechanismu konfigurace, dynamické CGLIB proxy a ruzných Spring keší, zkrátka  je to dobrá cesta nezůstat někde na povrchu, ale dostat se hlouběji do mechanismů práce Java frameworků.

Re:Nápad na bakalářskou práci se Spring
« Odpověď #24 kdy: 25. 04. 2019, 09:05:00 »
Po HotswapAgentovi nemůžete chtít zázraky, jako je reload Vašeho proprietárního frameworku. Na jednoduchoučké aplikace, ktere bootuji pár sekund to nedává smysl, jak píšete. Určitě víte, že srovnání s  JRebel z různých důvodů je taktéž nesmyslné... Autor původního dotazu hledá téma pro bakalářskou práci ve Spring. Spring plugin v HotswapAgentovi vyžaduje znalost mechanismu konfigurace, dynamické CGLIB proxy a ruzných Spring keší, zkrátka  je to dobrá cesta nezůstat někde na povrchu, ale dostat se hlouběji do mechanismů práce Java frameworků.

Jo to mate pravdu, ze z hlediska nabytych zkusenosti to bude stat za to. Ja rozporuju spise uzitecnost toho agenta v dnesni dobe. A taky neco jsem si s nim zazil.

Re:Nápad na bakalářskou práci se Spring
« Odpověď #25 kdy: 26. 04. 2019, 19:33:21 »
děkuji za pěknou inspiraci. Mohl byste, prosím, rozvinout tu druhou část? Mohl byste mi vysvětlit, jak si představujete tu část s RESTEM? A to s multitenant - "aby se to na jednom serveru dalo provozovat pro víc spolků" - to znamená, že bude jeden server, jedna databáze, do které se budou ukládat všechny ty spolky, informace a další data...
Tedy prakticky: Byl by napsán server ve springu s REST, a potencionální uživatelé by používali tu klientskou část, která by přes AJAX stahovala data ze serveru, že? S tím, že několik spolků může být spravováno v jeden čas.
Díky
Psal jste, že byste použil REST s AJAXem. To zapadá do mé představy, jakou by taková aplikace měla mít architekturu – na backendu Spring, který bude veškeré služby poskytovat přes RESTové API, a jako frontend klasická SPA, která bude volat to RESTové API. Mně by se pro tu frontend část nejvíce líbilo Vue, ale klidně to může být třeba Angular nebo React.

Má poznámka k RESTu pak směřovala k tomu, aby to RESTové API bylo navržené tak, že může fungovat i samostatně, bez té webové aplikace. Často se totiž stává, že když se navrhuje RESTOvé API pro jednu konkrétní SPA, je to API s tou frontendovou aplikací natolik svázané, že prakticky nejde jinde použít. Tady by ale myslím bylo vhodné, aby cokoli, co půjde udělat přes webový frontend, šlo (bez větší námahy) udělat i voláním API. Například klasický postup přidání nového člena spolku by byl takový, že to nějaký administrátor spolku nakliká přes webové rozhraní. Ale spolek už má třeba jinou evidenci a chtěl by používat jiné funkce té aplikace – tak si udělá propojku, která přes to RESTové API bude vytvářet členy na základě toho druhého systému.

Multitenant znamená, že se aplikace provozuje jenom jednou (typicky jen s jednou databází), ale z hlediska uživatelů se to chová, jako kdyby to bylo víc nezávislých aplikací, pro každý spolek jiná. Např. můžete mít jednu instalaci účetního programu, vede se v ní ale účetnictví několika firem. Z pohledu uživatelů se to chová, jako by účetnictví každé firmy bylo zvlášť – nesmí se tedy stát, že by účetní jedné firmy viděl nějaké údaje z jiné firmy, nebo že by si i navzájem mohli jenom měnit konfiguraci.

Nejsnazší by samozřejmě bylo mít pro každou firmu/spolek jinou databázi, jenže to je zejména ve webovém prostředí obtížně řešitelné – pokud byste měl na jednom serveru třeba 100 databází, těžko může server udržovat třeba 400 spojení do databáze (pro každou databázi 4), která by byla většinu času neaktivní. Druhá možnost je mít vše ve společných tabulkách, prakticky v každé tabulce pak tedy musí být i sloupec určující, do které firmy daný záznam patří. Pak je samozřejmě potřeba ve všech dotazech přidávat i podmínku na aktuální firmu, aby se právě nestalo, že se někde zobrazí i údaje někoho jiného. To je jedna nevýhoda, druhá nevýhoda je, že se pak jednotlivé firmy ovlivňují více, než je zdrávo – když budete mít devět firem, každá bude mít deset faktur, a desátá firma bude mít deset tisíc faktur, penalizované za to, že pracují s tabulkou o desetitisíci záznamech (což je tedy pořád málo, ale v jiných tabulkách může být těch záznamů řádově víc), budou všechny firmy. Většina relačních databází pak umožňuje ještě něco mezi, že se připojujete k jedné databázi, ale uvnitř ní je víc prostorů, které jsou do jisté míry oddělené. Třeba v PostgreSQL by se pro tohle dala použít schémata.

Ale zároveň to není věc, která by tam musela být za každou cenu hned od začátku, asi to není věc, která by se řešila na úrovni bakalářské práce. Ale dá se s tím počítat třeba na úrovni API – třeba účetnictví Flexibee to má dělané tak, že první položka cesty v URL je vždy identifikátor firmy. Takže třeba pro seznam faktur Firmy1 voláte https://www.example.com/firma1/faktury a pro seznam faktur Firmy dva voláte https://www.example.com/firma2/faktury. Mimochodem zrovna Flexibee má docela pěkné API, ve kterém jde udělat skoro všechno, co umí ta aplikace samotná.

Pokud byste měl nějaké další dotazy, klidně se ptejte. Já budu rád, když taková aplikace konečně vznikne a nebudu jí muset příště psát znova sám :-)

Zdravím,
potřeboval bych k tomu ještě vymyslet pořádné zabezpečení té aplikace. Napadlo by Vás něco, co by se dalo (z toho balíčku security) implementovat? Respektive co by ta aplikace měla mít, aby byla opravdu bezpečná?
Samozřejmostí by mělo být https a šifrovaná hesla - nicméně:
Pokud bych používal REST api, tak https na straně springu těžko nastavím, že?
Co jiného, kromě https a šifrování hesla by se k tomu dalo přidat?

Děkuji

Re:Nápad na bakalářskou práci se Spring
« Odpověď #26 kdy: 26. 04. 2019, 20:39:51 »
Zdravím,
potřeboval bych k tomu ještě vymyslet pořádné zabezpečení té aplikace. Napadlo by Vás něco, co by se dalo (z toho balíčku security) implementovat? Respektive co by ta aplikace měla mít, aby byla opravdu bezpečná?
Samozřejmostí by mělo být https a šifrovaná hesla - nicméně:
Pokud bych používal REST api, tak https na straně springu těžko nastavím, že?
Co jiného, kromě https a šifrování hesla by se k tomu dalo přidat?

Bezpečné na jaké vrstvě? Můžete použít třeba klientské certifikáty. Https je sice spíše věc aplikačního serveru, ale IMHO lze propojit s aplikační logikou i ve Spring REST. Vzal bych nicméně v úvahu taky jednoduchost nasazení apod. - abyste nešel s kanónem na vrabce. Inspirujte se u jiných služeb. Řada bankovnictví má jen https a heslo, pak je to OpenID a alternativy.

Re:Nápad na bakalářskou práci se Spring
« Odpověď #27 kdy: 26. 04. 2019, 22:18:50 »
Zdravím,
potřeboval bych k tomu ještě vymyslet pořádné zabezpečení té aplikace. Napadlo by Vás něco, co by se dalo (z toho balíčku security) implementovat? Respektive co by ta aplikace měla mít, aby byla opravdu bezpečná?
Samozřejmostí by mělo být https a šifrovaná hesla - nicméně:
Pokud bych používal REST api, tak https na straně springu těžko nastavím, že?
Co jiného, kromě https a šifrování hesla by se k tomu dalo přidat?

Děkuji
Průmyslový standard pro takovéhle aplikace je dnes OAuth2. Uživatel se přihlásí a na straně té webové aplikace (v prohlížeči) pak má zapamatovaný JSON token (JWT), který se následně přibaluje ke každému RESTovému požadavku. Frameworky pro SPA pro to už obvykle mají nějakou podporu, jenom JWT tomu frameworku předáte a on už ho pak automaticky přidává do hlaviček každého požadavku.
Přihlášení se pak dá udělat přes „sociální“ sítě (Google, Facebook, Twitter, GitHub) nebo přes OpenID, aby si uživatel nemusel vytvářet další účet. Pořád ale bude potřeba fallback, aby si uživatel mohl vytvořit i klasický účet se jménem a heslem, protože někteří uživatelé tohle přihlašování přes třetí stranu nemají rádi.

Spring na to má dvě příručky – Spring Security and Angular popisuje právě tu SPA, kde je každý REST požadavek autentizován JWT. Spring Boot and OAuth2 pak popisuje tu implementaci přihlášní pomocí Facebooku a GitHubu.

Re:Nápad na bakalářskou práci se Spring
« Odpověď #28 kdy: 27. 04. 2019, 13:40:37 »
A jakým způsobem bych řešil komunikaci té aplikace pomocí jenom https? Potřebuji to řešit jako celou aplikaci, ne jenom na straně springu.
Každopádně jsme zapomněl zmínit, že neumím react ani angular, takže bych to dělal v core javascriptu + jquery. Ale to by mělo jít také v pohodě, ne?
Takže tedy navrhujete implementovat ze zabezpečení aplikace:
- Ouath2
- JWT
- šifrování hesel
- nějaké obecné zabezpečení REST api
- asi by to chtělo nějakou ochranu proti těm běžným útokům ne? SQLinjection například? Nevím, zda spring to nějak defaultně nekryje, ale pokud ne, tak takové věci by tam asi měly také být.
- role. Pracoval jsem s nimi v celé springové aplikaci, přes rest nevím, jak to funguje a jestli to vůbec nějak jde...

Co jsem koukal, tak kdyby to nebylo přes rest, ale všechno ve springu psané, tak by se to https dalo přímo nastavit na straně springu...

Co si o tom všem myslíte? :)

Děkuji

Re:Nápad na bakalářskou práci se Spring
« Odpověď #29 kdy: 27. 04. 2019, 14:03:51 »
Našel jsem k https tohle
https://www.baeldung.com/spring-boot-https-self-signed-certificate

To by šlo použít s rest api dohromady?