sql >> Database >  >> NoSQL >> Redis

Kan deze technologie-stack schalen?

Mijn echte vraag is, kan de bovenstaande technische stapel 1.000.000 berichten per seconde (tekst, afbeeldingen, video's) schalen?

Natuurlijk kan het. Met het juiste ontwerp en voldoende hardware. De vraag die uw klant zich zou moeten stellen, is eigenlijk niet of het zo groot kan worden gemaakt, maar tegen welke kosten en uitvoerbaarheid het kan worden gedaan en zijn dat de beste keuzes.

Laten we eens kijken naar elk stuk dat je hebt genoemd:

node.js - Voor een I/O-centrische app is het een uitstekende keuze voor grote schaal en het kan worden geschaald door veel CPU's in een cluster te implementeren (zowel met meerdere processen per server als met meerdere servers). Hoe praktisch dit type schaal is, hangt sterk af van het soort gedeelde gegevens waartoe al deze serverprocessen toegang moeten hebben. Meestal wordt de gegevensopslag uiteindelijk het moeilijkere knelpunt bij het schalen, omdat het gemakkelijk is om meer servers naar de aanvraagverwerking te gooien. Het is niet zo eenvoudig om meer hardware naar een gecentraliseerde datastore te gooien. Er zijn manieren om dat te doen, maar het hangt sterk af van de eisen van de app hoe je het doet en hoe moeilijk het is.

socket.io - Als je een efficiënte server-push van kleine berichten nodig hebt, dan is socket.io waarschijnlijk de beste manier om te gaan, omdat het de meest efficiënte push naar de client is. Het is echter niet geweldig bij alle soorten vervoer. Ik zou bijvoorbeeld geen grote afbeeldingen of video verplaatsen via socket.io, omdat er meer speciaal gebouwde manieren zijn om dat te doen. Het gebruik van socket.io hangt dus sterk af van waar de app het precies voor wil gebruiken. Als je een video naar een klant wilt pushen, kun je ook alleen een URL pushen en de klant laten omdraaien en de video opvragen via een gewone http-URL met behulp van bekende hoogwaardige technologie.

Opnieuw - Nogmaals, geweldig voor sommige dingen, niet geweldig in alles. Het hangt er dus echt vanaf wat je probeert te doen. Wat ik eerder heb uitgelegd, is dat het ontwerp van uw gegevensopslag en het aantal transacties erdoorheen waarschijnlijk uw echte schaalproblemen zijn. Als ik aan deze baan zou beginnen, zou ik beginnen met inzicht in de gegevensopslagbehoeften voor een server, transacties per seconde van verschillende typen, cachingstrategie, redundantie, failover, gegevenspersistentie, enz. schaal toegang tot gegevens eerst. Ik zou er niet helemaal zeker van zijn dat Redis de voorkeur had. Ik zou waarschijnlijk aanraden dat je vroeg in het project een grootschalige database-man als consultant nodig hebt.

Nginx - Veel grootschalige sites die nginx gebruiken, dus het is zeker een goed hulpmiddel. Of het precies het juiste gereedschap voor u is, hangt af van uw ontwerp. Ik zou waarschijnlijk als laatste aan dit onderdeel werken omdat het minder centraal lijkt te staan ​​in het ontwerp en als de rest van het systeem eenmaal is ingedeeld, kun je hier bekijken wat je nodig hebt.

Amazon EC2 - Een van de vele mogelijke keuzes. Deze keuzes zijn moeilijk direct te vergelijken in een appels met appels vergelijking. Er zijn grootschalige systemen uit EC2 gebouwd, dus er is een proof of concept en de algemene architectuur lijkt een geschikte match. Als je wilde weten waar de echte gremlins zijn, zou je een consultant nodig hebben die grootschalige dingen op EC2 heeft gedaan.

Amazon S3 - Ik ken persoonlijk een aantal sites met een zeer hoge opslag- en bandbreedte die S3 gebruiken voor zowel video als afbeeldingen. Daar werkt het voor.

Dus ... dit zijn over het algemeen waarschijnlijk goede hulpmiddelen om te gebruiken als ze op de juiste manier worden gebruikt. Redis zou een vraagteken zijn, afhankelijk van de opslagbehoeften van de daadwerkelijke toepassing (u hebt nul vereisten opgegeven en een database kan niet worden geselecteerd zonder vereisten). Een meer beredeneerd antwoord zou gebaseerd zijn op het samenstellen van een reeks vereisten op hoog niveau die analyseren wat het systeem moet kunnen doen om 1.000.000 wat dan ook te dienen. Die vereisten kunnen worden vergeleken met de bekende mogelijkheden van sommige van deze stukken om een ​​marge te maken voor het schalen van een systeem. Dan zou je een aantal benchmarkingtests moeten samenstellen om wat tests uit te voeren op bepaalde onderdelen van het systeem. Het succes van een mislukking zou net zoveel afhangen van hoe de app is gebouwd en hoe de tools werden gebruikt als welke tools werden geselecteerd. U kunt waarschijnlijk een succesvolle weegschaal maken met veel verschillende soorten gereedschappen. Heck, Facebook draait op PHP (nou ja, een sterk aangepaste, aangepaste PHP die helemaal niet typisch PHP is tijdens runtime).




  1. Wat zijn HBase-verdichtingen?

  2. Hoe toegang te krijgen tot MongoDB-instantie 4.2?

  3. JavaScript NoSQL-injectiepreventie in MongoDB

  4. MongoDB - Verschil tussen index op tekstveld en tekstindex?