Min riktiga fråga är, kan ovanstående tekniska stack skala 1 000 000 meddelanden per sekund (text, bilder, videor)?
Visst kan det. Med rätt design och tillräckligt med hårdvara. Frågan din klient bör ställa är egentligen inte om det kan göras så stort, utan till vilken kostnad och praktiskt det kan göras och är det de bästa valen.
Låt oss titta på varje del du har nämnt:
node.js - För en I/O-centrerad app är det ett utmärkt val för hög skala och den kan skalas genom att distribuera många processorer i ett kluster (både multiprocess per server och multi-server). Hur praktisk denna typ av skala är beror mycket på vilken typ av delad data alla dessa serverprocesser behöver tillgång till. Vanligtvis hamnar datalagret i slutändan med att bli den svårare flaskhalsen i skalning eftersom det är lätt att kasta fler servrar vid förfrågningsbehandlingen. Det är inte så lätt att kasta mer hårdvara till ett centraliserat datalager. Det finns sätt att göra det på, men det beror mycket på appens krav på hur du gör det och hur svårt det är.
socket.io - Om du behöver effektiv server-push av små meddelanden, så är socket.io förmodligen det bästa sättet att gå eftersom det är det mest effektiva att pusha till klienten. Det är dock inte bra på alla typer av transporter. Till exempel skulle jag inte flytta runt stora bilder eller video genom socket.io eftersom det finns fler specialbyggda sätt att göra det. Så, användningen av socket.io beror mycket på vad exakt appen vill använda den till. Om du vill skicka en video till en klient, kan du också trycka bara en URL och låta klienten vända sig om och begära videon via en vanlig http-URL med hjälp av välkänd teknik i hög skala.
Redis – Återigen, bra för vissa saker, inte bra på allt. Så det beror verkligen på vad du försöker göra. Det jag förklarade tidigare är att utformningen av ditt datalager och antalet transaktioner genom det förmodligen är där dina verkliga skalproblem ligger. Om jag skulle börja det här jobbet skulle jag börja med en förståelse för datalagringsbehoven för en server, transaktioner per sekund av olika typer, cachningsstrategi, redundans, fail-over, databeständighet, etc... och designa den höga skala åtkomst till data först. Jag skulle inte vara helt säker på att redis var det föredragna valet. Jag skulle förmodligen föreslå att du behöver en databaskille i hög skala som konsult tidigt i projektet.
Nginx - Många högskaliga webbplatser som använder nginx så det är verkligen ett bra verktyg. Om det är exakt rätt verktyg för dig beror på din design. Jag skulle förmodligen arbeta med den här delen sist eftersom det verkar mindre centralt för designen och när resten av systemet har lagts ut kan du sedan överväga vad du behöver här.
Amazon EC2 – Ett av flera möjliga val. Dessa val är svåra att jämföra direkt i en jämförelse mellan äpplen och äpplen. Storskaliga system har byggts av EC2 så det finns proof of concept där och den allmänna arkitekturen verkar vara en lämplig match. Om du ville veta var de riktiga gremlinerna finns där skulle du behöva en konsult som hade gjort storskaliga saker på EC2.
Amazon S3 – Jag känner personligen till några webbplatser med mycket hög lagring och bandbredd som använder S3 för både video och bilder. Det fungerar för det.
Så ... dessa är generellt sett bra verktyg att använda om de används på rätt sätt. Redis skulle vara ett frågetecken beroende på lagringsbehovet för den faktiska applikationen (du har angett noll krav och en databas kan inte väljas med noll krav). Ett mer motiverat svar skulle baseras på att sätta ihop en kravuppsättning på hög nivå som analyserar vad systemet behöver kunna göra för att betjäna 1 000 000 vad som helst. Dessa krav kan jämföras med kända möjligheter för vissa av dessa pjäser för att starta ett bollplank med att skala ett system. Sedan måste du sätta ihop några benchmarking-tester för att köra några tester på vissa delar av systemet. Lika mycket av framgången med ett misslyckande skulle bero på hur appen byggdes och hur verktygen användes som vilka verktyg som valdes. Du kan förmodligen göra en framgångsrik skala med många olika typer av verktyg. Heck, Facebook körs på PHP (tja, ett mycket modifierat, anpassat PHP som inte alls är typiskt PHP vid körning).