Quale linguaggio di programmazione si dovrebbe scegliere per il mio alte prestazioni webservice?

Io sono nel processo di costruzione di un Web Service API per la mia applicazione.
Inoltre, ho intenzione di esporre il Servizio sia tramite REST e SOAP.

Sono interessato a ricevere un feedback da parte della comunità per la quale linguaggio di programmazione mi dovrebbe scegliere di implementare il servizio? (So C#, Java e Ruby – RoR abbastanza bene per creare il servizio).

Il servizio è principalmente un HTTP POST di servizio.
Dovrà gestire circa 2000 connessioni simultanee, così come essere in grado di gestire circa 10.000 HTTP POST al secondo. (per SAPONE avremo un metodo di invio per i clienti di chiamare).

Il servizio non restituiscono alcuna risposta al client per la POSTA richieste.

Tutte le idee su quale linguaggio di programmazione/architettura, che dovrebbe essere utilizzato?

  • Non inviare alcuna risposta a tutti? Nemmeno HTTP 200?
  • si dovrebbe almeno rispondere con: HTTP/1.0 204 Nessuna Risposta
  • Se ti chiedi se questo può effettivamente essere un ragionevole numero di connessioni e di richieste, pensare Reti di sensori o Api per le applicazioni mobili.
InformationsquelleAutor | 2009-02-18

 

10 Replies
  1. 51

    Di 10.000 richieste al secondo 25 miliardi di visite al mese. Che significa una delle due cose:

    1. L’applicazione è più popolare di MySpace; o
    2. Si sta tentando di utilizzare questo per comunicare tra due molto loquace componenti di controllo, ed è un poveri orribile scelta di design.

    Commutazione hardware solo per distribuire il carico su una farm di server web front-end verrebbe a costare molte migliaia di dollari.

    Iniziare la scrittura di un servizio web in grado di gestire 50 richieste al secondo (scelta della lingua non è molto rilevante). Se la tua domanda è così occupato che si attraversa la soglia, regolarmente, si può permettersi di assumere qualcuno per lavorare sul problema di scalabilità a tempo pieno, e non chiedere aiuto su un libero Q&A sito.

    • Jon Skeet potrebbe.
    • Chuck norris non si accettano richieste; egli dà ordini.
    • Chuck Norris non si accettano richieste; fotte a loro volta.
    • “Chuck norris non prendere le richieste; egli dà ordini.” Oh mio che è stato divertente.
    • Mentre sono d’accordo che questa è la risposta giusta, non sono d’accordo con l’analisi che 10.000 reqs al sec = 25 miliardi di visite al mese. Di 10.000 reqs al sec se fosse stato costante significa che molte visite al mese, ma presumibilmente l’OP è la pianificazione per il picco non è stato costante. La risposta è buona.
    • vero, se 10000 è il picco e non la media. Ma 10000r/s di picco sarebbe un valore di un penny grazioso, troppo 🙂
    • Certamente sarebbe. E se non si poteva monetizzare la quantità di traffico sufficiente per il noleggio di sviluppatori in grado di gestire i problemi, allora si meritano di avere il tuo sito giungere a una rettifica halr.
    • Di classe! Leggere kegel.com/c10k.html 🙂 10000 richieste al secondo su una singola materia prima macchina sarebbe stato possibile per almeno 10 anni! Possiamo certamente fare di meglio con l’hardware di oggi!
    • che lavora in un ambiente controllato in cui le richieste non rappresentano un’unità di lavoro che richiederebbe molto più sostanziale hardware per tenere il passo con la semplice ricezione della richiesta. Nel mondo reale, che non è realistico.
    • Penso che il punto di domanda è solo per determinare la lingua potrebbe essere migliore per un alto volume di servizio (la risposta potrebbe essere non importa, e che l’hardware sarà un grande problema). In ogni modo, non c’è bisogno di ottenere un po ‘ bisbetica la tua risposta Rex.
    • Ci sono casi in cui è possibile ottenere 10K richieste di un secondo, ma per un periodo di tempo molto breve, come un live del sistema di voto. 99% c’è poco o nessun traffico.

  2. 27

    In base alla mia esperienza posso darti i seguenti consigli.

    1. Scegliere la lingua (e possibilmente altri membri del team) come la maggior parte. Io preferirei linguaggi di alto livello, perché l’hardware è veloce e a buon mercato, ma i programmatori sono lenti e costosi.
    2. Progettazione di servizi per essere assolutamente stato (nessuna sessioni!). Questo rende più facile aggiungere nuovo hardware, come le diverse istanze del servizio non hanno bisogno di sapere altro.
    3. Gestire la vostra elaborazione asincrona, come è, fortunatamente, non ha bisogno di dare al cliente l’eventuale risposta (eccetto OK). Se lo si fa in modo sincrono il processo di blocco e la tua richiesta-tasso di drop. Una buona lettura è questo articolo di Wikipedia, e soprattutto (classico!) Il C10K problema.
    4. Messo il servizio su molte macchine. (a seconda della velocità del vostro servizi)
    5. Mettere il server di database(s) su altre macchine di web-services. Utilizzare dischi più veloci!
    6. Gestire il carico di bilanciamento con qualcosa come:
      • Linux Virtual Server, il più performante soluzione, poiché viene eseguito nel Kernel. Scale come un matto. Ho usato del 2003 con ~500req/sec su un P3/1GHz con lo 0,1% di carico della CPU. Può essere abbinato a raggiungere HA. Deve gestire i 10000req/sec abbastanza bene su una singola macchina. Fare questo dopo aver provato qualcosa di più semplice. Questo può essere molto impegnativo. Aggiornamento 2018: questo, Oggi, è integrato nel kernel, quindi tutte le distribuzioni dovrebbero avere questo come un pacchetto.
      • Nginx, di facile configurazione, molto performante. Può fare SSL. Può anche agire come Server HTTP e può essere un efficiente soluzione di hosting per i vostri servizi.
      • Vernice, una cache HTTP che può gestire più di backend. Molto configurabile, ma non può fare SSL, così si avrebbe bisogno di un Nginx di fronte a esso, se si desidera cifrare il traffico.
      • Sterlina, molto facile da configurare, ma sopra la testa alta. Buon punto di partenza. Può fare SSL. Progetto morti dal 2011.
      • Perlbal, non l’ho usato ma sentito buone cose. Progetto di morti a partire dal 2013.
      • o altri reverse proxy.
  3. 13

    A 10.000 post di un secondo, la lingua è l’ultima delle tue preoccupazioni. Un altro problema più grande potrebbe essere il progetto della farm di server e di rete. Presumo che non avete in programma in esecuzione su un singolo box?

  4. 11

    Altamente applicazioni scalabili, affidabili, distribuiti, e l’utilizzo di multicore/sistemi multiprocessore? Qui penso subito di Erlang/OTP insieme con la Framboesia come server di applicazioni web. Framboesia corre estrema stabile e veloce anche in condizioni estreme di carico elevato. E distribuzione di Erlang/OTP come la piattaforma è progettata per la concorrenza e la distribuzione, insieme con alcuni meccanismi di contribuire a sviluppare software stabile. I costi: la concorrenza-orientamento con un linguaggio di programmazione funzionale è alcuna programmazione a oggetti con Java o C#, la sintassi sembra strano (ma è molto dritto e potente, una volta adottato), e il numero di librerie di terze parti non è così grande come per i linguaggi mainstream. Ma ne vale la pena.

    Spero che questo aiuta

    mue

  5. 5

    A quel tasso, e dal momento che si sta rompendo HTTP comunque (nessuna risposta) si potrebbe anche sviluppare un proprio server o modificare un server open source.

    Scrivere tutto in C o C++ e sarete sfolgorante veloce come possibile.

    Scalabilità è influenzato da più di una lingua a scelta però.

    -Adam

  6. 4

    Ho potuto vedere di raggiungere un miliardo di messaggi al mese su una singola macchina. Ho un servizio di web scritto in c# che è attualmente il trattamento di circa 3,5 Milioni di messaggi al giorno. Il server web è in esecuzione lungo al 3% di utilizzo della CPU. Il che significa che potrebbe spingerlo almeno 20 volte più difficile…

    Supponendo che ogni macchina aveva 4 Xeon a Sei core, 32GB di RAM, un disco veloce, array, e un’ottimizzazione del database per scrive si potesse fare. Anche se, il costo di ogni server è probabilmente il $35K a $40K gamma.

    A prescindere, il tuo collo di bottiglia non sarebbe con C# o Java. Sarebbe con il server di database a seconda di quanto grande si cresce. Nel mio caso, si tratta di 300GB con 10GB di essere eliminati e 10GB di essere aggiunto al giorno.

  7. 3

    Consente di guardare i problemi:

    IO: questo facilmente essere il più grande collo di bottiglia del sistema. La selezione di una lingua che fornisce la migliore integrazione con il sistema operativo host, e fornisce un livello avanzato di semantica per non blocco e, facoltativamente, il supporto per la concorrenza.

    Dati: SAPONE? XML? Si vuole ridurre al minimo qualsiasi non-necessario cicli di cpu. Cosa c’è di sbagliato, semplicemente utilizzando JSon? (E non c’è divina dettare il che la dice RESTO architettura basata su server non è possibile utilizzare i dati binari nel protocollo …)

    Contenuto: Se la trasformazione dei dati (da-a testo per numero, per esempio) è coinvolto, è necessario anche considerare che il linguaggio fornisce i meccanismi più efficienti. Ad esempio, in Java (che è un candidato forte per voi, btw) la classe String è un grave CPU hog.

    Java e distribuzione di Erlang sono molto buoni candidati. C è sempre un’opzione, ma la programmazione concorrente è molto più difficile.

  8. 2

    Si può davvero utilizzare qualsiasi linguaggio attraverso CGI (Common Gateway Interface), quindi si tratta di prestazioni. Tra le lingue lista, mi aspetto che C# per essere più veloce. Un buon confronto di velocità tra le lingue è La Lingua Di Rigore

    Se si davvero bisogno di prestazioni si potrebbe desiderare di guardare in direzione di una più orientati alla performance linguaggio come il C o D per gestire le richieste.

    Tutto dipende da che tipo di calcolo per ogni richiesta è necessario eseguire realmente.

    • CGI come una scelta molto scarsa come si aggiunge il costo di generazione il processo (che può essere molto alta) per l’elaborazione vera e propria. Ho recentemente lotta alla porta CGI architettura di un sempre nella memoria. I primi prototipi suggeriamo 10-100x aumento di prestazioni!
    • bene, stai sprecando il tuo tempo, date un’occhiata a FastCGI (che è tra quello che ho refor quando si dice semplicemente ‘CGI’). FastCGI è stato progettato con l’intenzione che la vostra applicazione CGI mai respawn ma rimane in memoria indefinetly. Quindi no, non ci sarà nessun overhead sulla generazione di un processo. 😉
  9. 0

    Aggiornamento: il Suo significato di essere un fuoco e dimenticare servizio web. Credo che mi invierà un semplice HTTP 200/risposta OK

    No, questo non è destinato per funzionare su un’unica casella. Suo destinato per funzionare su un paio di scatole (diciamo 3-4).

    Quando le richieste pervenute sono spinti a coda su altre macchine, poi vengono presi e messi in un HBase/Voldemort Store.

    Come ho detto, il suo vuole essere un “fire and forget” servizio web

    • Si dovrebbe modificare la tua domanda per includere questo come un chiarimento o commento direttamente su una risposta. Questo non è un messageboard.
    • Non c’è modo si può gestire molte richieste/secondo con 3-4 macchine. Buona fortuna!
    • “3-4 caselle” è ancora 2500-3300 richieste al secondo su una singola macchina. Che non è realistico.
    • M: 10000 richieste al secondo su una singola macchina è stata possibile nel 1999. Date un’occhiata a: kegel.com/c10k.html
  10. 0

    Avete bisogno di un C llike lingua e di evitare di scrivere un completo server vorrei suggerire CGI (che è quello che php e come tutti corrono in ogni caso)
    Windows server ISAPI plug-in, ma questi, nel contesto del server in modo che le perdite di memoria e GPFs porterà giù il server. Aggiungi a che il disagio di arresto/avvio del server ogni volta che si cambia qualcosa, CGI/FastCGI un aspetto migliore.

Lascia un commento