PDA

View Full Version : Aiuto scelta tecnologia per sviluppo portale web


HRBF
21-04-2018, 15:29
Buongiorno a tutti,

ho la necessità di sviluppare un portale web le cui funzionalità principali saranno un forum non di tipo classico in cui gli utenti aprono discussioni ma sarà un listone di messaggi visualizzati tutti nella stessa pagina in ordine cronologico e caricati man mano che l'utente scrolla verso il basso. L'utente può postare un nuovo messaggio o commentare un messaggio esistente.

Ci saranno alcune sezioni in cui verranno visualizzati dei dati in tempo reale ottenuti tramite REST API, tali dati dovranno essere aggiornati a intervalli di tempo molto breve tipo 2-3 secondi, alcuni saranno solo numerici altri sotto forma di grafico.

Non sarà quindi un sito web statico ma avrà una forte componente real time.

Sono molto combattuto sulla scelta della tecnologia, ho molta esperienza in ambito .net ma poca per quanto riguarda il mondo web, ho un pò di esperienza nello sviluppo di siti web aziendali in Asp.net quindi programmazione lato server ma non sono sicuro possa essere la scelta giusta per questo tipo di portale. Ho dato uno sguardo ai vari framework tipo Angular e React, possono essere una valida soluzione? Potrei tranquillamente sviluppare tutte le API necessarie in .net e studiarmi uno di questi framework per il front-end.
Per quanto concerne lo sviluppo lato client del front-end in che modo viene garantita la sicurezza con questi framework?

pabloski
21-04-2018, 17:38
ho un pò di esperienza nello sviluppo di siti web aziendali in Asp.net quindi programmazione lato server ma non sono sicuro possa essere la scelta giusta per questo tipo di portale.


Per fare si può fare, ma bisogna vedere le prestazioni. Una soluzione leggere basata su web services è quello che ti serve. E personalmente propenderei per Java o Kotlin, Scala, Clojure ( comunque roba che gira su JVM ) se vuoi sfruttare le librerie di terze parti ( e sono tantissime ) esistenti per JVM. L'altra possibilità è Google Go, soprattutto per l'eccezionale modello di concorrenza che implementa ( e anche perchè il codice sarà compilato in codice nativo e volendo come eseguibile statico ) e che ti permette di creare una componente server-side molto adatta a soddisfare carichi concorrenti pesanti ( forum con tanta gente che ci gironzola sopra ).



Ho dato uno sguardo ai vari framework tipo Angular e React, possono essere una valida soluzione?


Client-side si e supportano tutte le nuove trovate tipo scrolling infinito ( che hai specificato ).


Potrei tranquillamente sviluppare tutte le API necessarie in .net e studiarmi uno di questi framework per il front-end.


Possibilissimo. Se hai competenze in ambito .Net, allora dai uno sguardo a .Net core.



Per quanto concerne lo sviluppo lato client del front-end in che modo viene garantita la sicurezza con questi framework?

Dipende cosa intendi per sicurezza. Login? Quello è gestito server-side con i soliti cookie.

HRBF
21-04-2018, 21:38
Ciao pabloski innanzitutto grazie per la risposta. Valuterò sicuramente le soluzioni che hai proposto, il requisito fondamentale è tenere elevato il grado di prestazioni, deve essere veloce e non inchiodarsi subito con 200 utenti collegati in contemporanea. Per il backend pensavo inizialmente a API in .net con Entity framework per gestire il layer di accesso ai dati ma dubito riesca a soddisfare questo requisito.

Per sicurezza intendo per esempio la gestione dei ruoli utenti, un amministratore avrà accesso a funzioni che l'utente non può vedere, dato che la logica di mostrare o meno queste funzioni sarà lato client, in che modo si può evitare che un malintenzionato riesca a vedere gli strumenti di un amministratore? Ok che poi ci sarà un controllo lato server e l'utente non riuscirà comunque ad utilizzarli ma questa cosa non mi piace molto :)

pabloski
22-04-2018, 11:25
il requisito fondamentale è tenere elevato il grado di prestazioni, deve essere veloce e non inchiodarsi subito con 200 utenti collegati in contemporanea.


Qualcuno potrà dire che si risolve comprando server più potenti o creando un cluster. Ma non io...

Se questo è il requisito, la scelta obbligata è Go. Sul web si trovano parecchi articoli con benchmark che mostrano come Go asfalta tutti soprattutto nei carichi con elevata concorrenza.



Per il backend pensavo inizialmente a API in .net con Entity framework per gestire il layer di accesso ai dati ma dubito riesca a soddisfare questo requisito.

Purtroppo hai ragione. Articolo a caso https://hackernoon.com/go-vs-net-core-in-terms-of-http-performance-7535a61b67b8

E' questa la situazione generale. Per quanto .Net Core sia un ottimo ambiente, ecc... ecc..., Go li asfalta tutti!!


Per sicurezza intendo per esempio la gestione dei ruoli utenti, un amministratore avrà accesso a funzioni che l'utente non può vedere, dato che la logica di mostrare o meno queste funzioni sarà lato client, in che modo si può evitare che un malintenzionato riesca a vedere gli strumenti di un amministratore? Ok che poi ci sarà un controllo lato server e l'utente non riuscirà comunque ad utilizzarli ma questa cosa non mi piace molto :)

Teoricamente lato client non può limitare nulla. Un hacker che abbia accesso al codice, con reversing engineering o altro, riuscirà a ricostruire il funzionamento del meccanismo di autenticazione. Potrebbe addirittura sniffare tramite Wireshark e simili le comunicazioni di rete e ottenere lo stesso risultato.

In teoria potresti distribuire dei client diversi per i vari ruoli, nel senso che il client per l'amministratore potrebbe fare uso di api particolari. Una sorta di security through obscurity, ma non ci farei tanto affidamento.

La crittografia asimmetrica sarebbe una possibilità, sempre che il nostro hacker non riesca ad impadronirsi della chiave privata dell'amministratore.

Cioè il client usa la chiave privata per cifrare le comunicazioni dell'amministratore. Il server usa la chiave pubblica per decifrarle.

Però è un meccanismo parecchio articolato per un problema che ha una soluzione più semplice, implementando l'autenticazione server-side tramite cookie.

Ovviamente sto supponendo che comunque tutte le comunicazioni avverranno su protocollo https, condizione necessaria visoi i tempi che corrono.

HRBF
23-04-2018, 08:19
Grazie di nuovo risposta molto esauriente. Ho ancora una domanda per quanto riguarda il tipo di hosting cosa mi consiglieresti per Google go? Ho già un account Azure, una macchina virtuale Windows può andare bene o è più adatta una basata su Linux?

Database SQL?

pabloski
23-04-2018, 09:16
Grazie di nuovo risposta molto esauriente. Ho ancora una domanda per quanto riguarda il tipo di hosting cosa mi consiglieresti per Google go? Ho già un account Azure, una macchina virtuale Windows può andare bene o è più adatta una basata su Linux?

Nessuna differenza. Ma Azure non offre anche istanze Linux?


Database SQL?

E non è detto che debba essere sql...Ma andrebbero fatto un pò di conti sui pattern di accesso al db da parte del software del forum.

In quanto a database sql, io preferisco ormai da anni Postgresql. Mysql è in genere il preferito in ambito web, ma ha fin troppe limitazioni ( molte eliminate nel tempo ).

HRBF
23-04-2018, 10:18
Nessuna differenza. Ma Azure non offre anche istanze Linux?

Si ma conosco bene l'ambiente Windows e dato che dovrò anche sviluppare delle routine che gireranno su server come operazioni pianificate se non ci sono differenze sostanziali di prestazioni preferisco un server Windows così da sviluppare in .net. Vorrei evitare di dover installare Mono ecc...

pabloski
23-04-2018, 11:03
Si ma conosco bene l'ambiente Windows e dato che dovrò anche sviluppare delle routine che gireranno su server come operazioni pianificate se non ci sono differenze sostanziali di prestazioni preferisco un server Windows così da sviluppare in .net. Vorrei evitare di dover installare Mono ecc...

Non ci sono problemi. Go è multipiattaforma.

HRBF
23-04-2018, 16:07
Non ci sono problemi. Go è multipiattaforma.

Perfetto per ora hai chiarito tutti i miei dubbi, nel caso tornerò con altre domande :)

Grazie mille