Pensieri sull'architettura di sviluppo web attraverso l'integrazione di C ++ in futuro in un'applicazione web

3

Sto cercando di costruire un sito web (sarà in realtà una startup commerciale) ho visto questa domanda e veramente fa luce su alcune cose che speravo di capire (complimenti per l'op) . Dopo aver visto ciò, sarebbe logico che, a meno che al sito non fosse richiesto di avere milioni di visite al giorno, non sarebbe una soluzione praticabile scrivere un backend C ++ sul lato server.

Ma questo mi ha fatto pensare.

Cosa succede se negli (improbabili) eventi del futuro, fa quella via? Il problema è che, mentre sto pensando di iniziare tutto questo usando .Net (all'inizio) solo per ottenere qualcosa di semplice e veloce senza problemi (in termini di apprendimento), e poi spostandomi verso qualcosa di più Open Source (come Python / Django o RoR) in seguito per risparmiare denaro e per supportare l'OSS, mi chiedo se IFF il sito diventi effettivamente grande, sarà una buona idea integrare un backend C ++ e usare Python ontop di C ++ per un strong fondazione, e quindi mitigare HTML / CSS / AJAX / etc ontop delle fondamenta del backend? Immagino, quello che mi piacerebbe sapere è che, date le circostanze, se questo fosse dovesse accadere, sarebbe un approccio corretto in termini di architettura? Sicuramente sosterrò MVC visto che sembra essere un ottimo modo per implementare un sito web.

Tutto sommato, si considererebbe questo razionale o ci sono altre alternative? Mi piace .Net, e mi piacerebbe usarlo all'inizio, perché ho molto più esperienza con questo rispetto, per esempio, a Python o PHP, e lo preferisco in generale, ma io davvero voglio sostenere l'OSS in futuro. Suppongo che la frase che sto cercando sia "è così pragmatica?"

    
posta about blank 23.03.2012 - 22:51
fonte

5 risposte

3

No, perché è più efficace scalare orizzontalmente che verticalmente

Significa, è meglio progettare un'architettura in cui è possibile diffondere le richieste su un numero di macchine meno potenti; al contrario, costruendo un codice in esecuzione di una macchina super potente che è stato ottimizzato ad un livello inferiore.

L'unità dietro il ridimensionamento orizzontale è dovuta alla "natura" del web. I siti web sono molto pesanti e non pesanti. Ci sono eccezioni, come YouTube, dove codificano enormi quantità di dati, ma che possono essere affrontate impostando nodi di calcolo e un sistema di gestione delle attività efficace.

Ad esempio, è possibile implementare un server proxy inverso che non fa altro che distribuire le richieste in arrivo ad altri server per recuperare il contenuto. Non importa da dove vengono restituiti i dati finché esiste un'origine comune per le richieste (e anche quella può essere estesa utilizzando il DNS avanzato).

Al minimo, è comune dividere il 'livello dati' (ex database) dal 'livello web' (server http). Anche StackOverflow ha una netta separazione tra i due implementando C # sul "livello web" e un'API REST separata (anche C #?) Per accedere al database.

Anche quando è necessario sfruttare la potenza di calcolo di C, molti "linguaggi di incollaggio" come python hanno la in grado di implementare estensioni C / C ++ .

Nel settore della scalabilità ci sono molte innovazioni e fortunatamente, le persone che stanno aprendo una strada nuova condividono gli specifici del loro approccio.

Fondamentalmente, si tratta di:

Architecture trumps raw computing power when it comes to the web

HighScalibility.com è il mio sito preferito da leggere sullo sviluppo di architetture scalabili ma ce ne sono molte altre sul web.

A parte:

Uno dei maggiori colli di bottiglia nella gestione delle richieste web è l'architettura del server HTTP. I server tradizionali come Apache forzano un sotto processo per ogni richiesta. Funziona, ma ogni sottoprocesso che viene aggiunto allo stack necessita del proprio pool di memoria e inevitabilmente aumenterà l'overhead di commutazione delle attività sul server.

Un attacco DDOS è diretto a sfruttare questa debolezza sovraccaricando il server HTTP fino al punto in cui non può più gestire fisicamente il carico e si blocca.

La multi-threading è stata introdotta come misura temporanea, ma scrivere software "buono" multi-thread è difficile da scrivere e gli errori multi-thread sono notoriamente difficili da individuare.

Un'altra "scuola di pensiero" che è diventata di recente popolare è basata sugli eventi dei web server come Node.js e nginx . Si basano su un modello single-threaded più semplice e uno stile di programmazione che mitiga l'attesa di un ritorno di funzione implementando un modello fire-and-forget. È più difficile programmare in questo modo, ma finché le pesanti attività di calcolo vengono passate ai server specializzati per questo, i numeri (ad es. Hit / sec) che possono gestire (anche su hardware di base) sono impressionanti.

    
risposta data 27.04.2012 - 08:54
fonte
2

Potresti anche chiedere a Facebook di avere lo stesso problema che hai - iniziarono con PHP pensando di poter fare un sito in modo rapido e semplice, ma quando diventava grande dovevano fare qualcosa per gestire i problemi di scalabilità.

Se impari dal loro esempio, dovresti passare direttamente alla versione C ++ dal primo giorno e risparmiarti la seccatura di riscrivere tutto. Tuttavia, presumendo che sia necessario, molti siti funzionano in modo accettabile con codice perl o PHP.

Scrivere il codice web è abbastanza semplice, è sufficiente prendere la richiesta, elaborarla e generare del codice HTML da restituire. I framework forniti da altri linguaggi semplificano la manipolazione dell'XML standard (ma non dimenticano JSON) e i bit del protocollo HTTP, e ci sono diversi framework o librerie C ++ che forniscono queste funzionalità, quindi il problema diventa semplicemente di integrarle in il tuo codice.

La cosa migliore che puoi fare è dividere il tuo codice dal server web, quando lavoravo per un'azienda che aveva un sistema molto grande basato sul sito web, abbiamo scritto tutto il nostro codice di logica aziendale nei servizi che giravano sui server delle applicazioni, il server web e il codice associato erano praticamente lì per i dati statici del server (immagini e css) e per passare le richieste ai servizi. Questo ci ha permesso di scalare enormemente. I web server IMHO dovrebbero essere considerati parte del livello di presentazione, non da qualche parte per mantenere la logica aziendale. Questo si applica in particolare se hai bisogno di una sicurezza più strong dato che i server Web sono notoriamente pessimi per non essere attaccabili.

    
risposta data 26.04.2012 - 23:18
fonte
1

Stackoverflow stesso è un puro sito C # /. net e non sembra fare troppo male.

Mentre Facebook potrebbe aver deciso di riscrivere alcune parti critiche in C ++ dopo aver fatto il suo primo miliardo. Se avessero iniziato a scrivere in C ++, penso che non pensassero che avrebbero avuto quel primo miliardo.

Lo stack LAMP (e .NET) ti consente di sviluppare velocemente le cose, il che ti dà la libertà di provare nuove idee e, di abbandonare tranquillamente vecchie idee che non hanno funzionato.

L'intero punto di Facebook è stata l'esperienza dell'utente. Mentre ti preoccupi delle allocazioni di memoria per le classi di stringhe, non penserai all'apparenza e all'usabilità.

    
risposta data 27.04.2012 - 03:48
fonte
1

Aggiornamento: controlla anche questa domanda: Sono C e / o C ++ opzioni praticabili / pratiche per lo sviluppo web?

Penso che sia pragmatico usare il C ++ per progetti che avranno un impatto sull'energia e sull'infrastruttura necessaria, poiché potrebbe ridurli entrambi (controlla per Hip Hop da Faccebook: link hanno ridotto della metà il loro uso del server semplicemente convertendo PHP in C ++).

Penso che dipenda dal collo di bottiglia principale del progetto: è la produttività degli sviluppatori o l'efficienza delle applicazioni? Se è il secondo, puoi usare C ++, come suggerito da CPPCMS :

When CppCMS Should Be Used.

C++ language is far from being popular for Web development for many reasons: lack of appropriate tools, skills of developers and many more.

However, there are areas where C++ web programming with CppCMS becomes very useful and efficient, and some where it is just a waste of time.

When CppCMS should or can be used?

High load web sites and application with hundreds and thousands hits per second, where high performance, efficiency and scalability is required. Application that require scalable Comet/Server Push(1) technologies --- CppCMS can efficiently handle hundreds and thousands simultaneous HTTP connection with minimal resources usage. Embedding web interface(2) into existing C++ applications/services with a small cost of additional library. Embedded underpowered devices -- CppCMS allows creation of rich applications with relatively low cost of hardware that would perform reasonably fast. When Not To Use?

If you create small web applications that do not require high loads and require very short time-to-market period -- probably tools like Django or RoR would be more appropriate for such tasks.

(1) Available in upcoming CppCMS 1.x. (2) Current version of CppCMS (0.0.x) can be used for embedding web interface to existing applications, but the next version 1.x would support it much better.

Se venisse usata la lingua C ++ (o simile) per tutti i siti web, internet sarebbe più veloce, più reattivo, meno costoso su energia e memoria. Ma realisticamente, non tutti i progetti web hanno l'efficienza come principale collo di bottiglia per dare priorità al lavoro. Detto questo, potrebbe aiutare il nostro pianeta a scaldare di meno se provassimo ad andare in questo modo ...

    
risposta data 27.04.2012 - 03:31
fonte
0

Io non la penso così

C ++ avrà sempre spazio nel sistema operativo e nello sviluppo dei driver, ma per quanto riguarda le applicazioni web, il collo di bottiglia è raramente il server che lo esegue; è tutto nella larghezza di banda della rete e il tempo necessario a un computer client per visualizzare le informazioni aggiornate.

I server hanno fatto molta strada e sono in grado di eseguire le lingue spazzatura [non punterò alcun dito; sai chi sei] senza che un cliente si accorga del colpo di rendimento.

PHP sembra essere il punto in cui si trova per molte applicazioni web e con alcune delle nuove funzionalità del moderno web e dei computer moderni, sta diventando sempre più comune spingere più dell'elaborazione sul computer client (come contrario a lasciare che il server gestisca tutto).

Molto bene potresti trovare un uso per C ++ sul server, anche se potrebbe essere più semplice creare uno script CGI in un linguaggio più moderno e più facile da usare.

    
risposta data 23.03.2012 - 23:01
fonte

Leggi altre domande sui tag