Innholdsfortegnelse[Gjemme seg][Forestilling]
Snapchat er velkjent blant tweens og tenåringer. Du er sannsynligvis over 25 hvis du ikke kan finne ut hvordan det fungerer. Snapchat, en av de mest populære sosiale medieapplikasjonene, gir barn og ungdom akkurat det de vil ha: en enkel metode for å dele vanlige hendelser samtidig som de får dem til å virke kule.
I motsetning til Facebook og Twitter, som registrerer og publiserer alt du gjør, bruker Snapchat meldinger som er ment å forsvinne (se hvordan de ikke gjør det).
Det er mye om Snapchat, og hvis du er en utvikler er det enda mer. Så dette innlegget vil gi deg en visning av Snapchat på høyt nivå system design og mye mer innsikt.
Introduksjon
Snapchat er en USA-basert sosiale nettverk app som lar brukere koble til umiddelbart, dele bilder og mer.
- Meldinger og bilder (eller snaps) har en tidsbegrensning på 24 timer. Oppfordrer folk til å dele historiene sine i grupper.
- Snap Map lar brukere se på et kart hvor vennene deres er.
- Minner minner brukere om bilder de har lagret eller delt et år senere.
- Snapchat er ekstremt populær blant yngre generasjoner, spesielt tenåringer. Det er 319 millioner aktive brukere på appen, og 5.4 milliarder snaps sendes hver dag.
Viktige designvilkår
Monolittisk arkitektur – En enkelt-lags applikasjon som opererer uavhengig av andre applikasjoner er kjent som en monolitt (monolittisk arkitektur). En monolitt er designet for å utføre og håndtere alle aktivitetene som kreves for å fullføre en oppgave. Applikasjonen utfører alle funksjoner fra begynnelse til slutt.
Microservices – Det er motsatt av monolitter. Microservices er en arkitektonisk tilnærming som organiserer en applikasjon som en samling tjenester. Disse tjenestene brukes til å kontrollere mange aspekter av en applikasjon. En kunde legger inn en bestilling, en kelner tar den og leverer den, og en kokk tilbereder den. I dette eksemplet fungerer hver komponent uavhengig og separat fra de andre; ingen vet nøyaktig hva de andre gjør, og ingen har tilgang til samme informasjon.
JSON: Det er et tekstbasert format som kan brukes til å vise JavaScript-objekter, bokstaver, matriser og data. Dette tekstbaserte formatet er ment å være enkelt å lese og skrive, i tillegg til å være fordøyelig av programvare. JSON brukes ofte til å overføre data og informasjon mellom servere og nettapplikasjoner.
orkestre: Teknikken for å automatisere mange operasjoner er kjent som orkestrering. Disse jobbene inkluderer datasystem og programvarekonfigurasjon, koordinering og administrasjon.
Proxy: En proxy fungerer som et mellomledd mellom en klient som leter etter en ressurs og serveren som gir den.
mesh: Et tjenestenett er et programvarearkitekturmønster som legger til et lag til et infrastrukturlag for å tillate regulert, observerbar og sikker kommunikasjon mellom tjenester gjennom proxy.
Design på høyt nivå
Monolittiske problemer
Snapchat oppsto som en skybasert monolitt basert på Google App Engine. Men etter hvert som programmet vokste i popularitet og fikk flere brukere og data, ble skalerbarhet et problem.
I tillegg, med en enorm eksplosjonsradius innenfor monolitten, var systemomfattende forstyrrelser mer mulig. Et av Snapchats problemer ble definert som en «tragedie of the commons», der funksjoner konkurrerte om tilgang til ressurser; funksjoner ble lastet inn på tidspunktet for appoppstart, slik at enkelte funksjoner ble lastet raskere, mens de andre ble lastet langsommere.
Ingeniører søkte også tydelig synlighet, separasjon og eierskap til komponentene deres fra et utviklingssynspunkt, slik at tjenesten kunne være fleksibel og effektiv.
Transformation
Etter hvert som Snapchat utvidet, innså firmaet at det måtte bryte ned den monolittiske infrastrukturen i mindre, mer effektive deler. For å gi redusert ventetid, bestemte organisasjonen seg for å utvikle en mikrotjenestebasert design.
For å oppfylle disse målene valgte Snapchat å oppdatere programvaren ved hjelp av Amazon DynamoDB, en skalerbar NoSQL-databasetjeneste. Firmaet var i stand til å redusere median latens med 20 % som et resultat av innsatsen.
Appen ble skrevet om til en rekke mindre applikasjoner av selskapet. Snapchat begynte med en rekke applikasjoner, inkludert et kamera, chat, minner, bilderedigering, innholdsforbruk og et kart. Selv om det var praktisk for forbrukerne å integrere disse programmene i en enkelt monolitt, utgjorde det et alvorlig teknisk problem når det gjaldt å opprettholde god ytelse.
For en omskrivning etablerte selskapet mange grunnregler. Ikke forhåndslast; hver funksjon skal være sin egen app, og den skal være rask. Snapchat stoppet modifikasjoner flere steder for å muliggjøre omskrivingen, noe som gjorde det strengt tatt til en teknisk oppgave.
Ekstra funksjoner integrering
Snapchats kameraapp har blant annet linser, filtre, bitmojis og muligheten til å legge til utvidet virkelighet-animasjoner. Snapchats chat-app lar også brukere lagre bilder, lagre samtaler, legge til uttrykksikoner og mer.
Snapchats kart, blant annet, lar deg overvåke venner hvis de vil at du skal. Minner, bilderedigering og innholdsforbruk er alle separate Snapchat-apper med sine unike egenskaper.
Minner lar deg lagre eller endre bilder eller videoer for senere bruk, samt laste opp eller sende dem. Brukere kan også bruke bilderedigering for å klippe filmer, legge til tekst, legge til klistremerker og mer.
Snapchats eksterne innholdsforbruk refererer til hva det viser brukere basert på en rekke parametere.
Microservices
Programmet var mye avhengig av JSON for å utføre nettverksspørringer på den tiden. Parsing av JSON var imidlertid tidkrevende og ineffektivt. Snapchat brukte et sentralisert nettverksadministrasjons-API for å maskere bruken av JSON som en implementeringsdetalj for å takle dette problemet.
Mikrotjenester introduserer utfordringene med administrasjon av applikasjonstilstand, tjenestekommunikasjon og feilhåndtering. Snapchat brukte åpen kildekode-teknologi som Temporal for å overvinne orkestreringsvansker for å bygge et sterkt og pålitelig system.
Som et resultat bestemte organisasjonen seg for å bruke et servicenettdesignmønster. Snapchat brukte Envoy, et annet åpen kildekodeverktøy som fungerer som en proxy, for å oppnå dette mønsteret. Envoy administrerte flyten av tjenestetrafikk via infrastrukturen, og ga utviklere innsyn i potensielle problemer.
Snapchat opprettet en intern app kalt Sentralbord i tjenestenettverket. Sentralbord fungerte som et kontrollpanel for Snaps tjenester, slik at brukere kunne skifte trafikk, administrere tjenesteavhengigheter (en funksjon som lar en tjeneste administreres avhengig av andres tilstand) og tømme regioner.
For å forenkle kompleksiteten til potensielle konfigurasjoner innen tjenester, ble Switchboard brukt i stedet for å eksponere hele Envoy API. Snap har et felles internt og regionalt nettverk for sine mikrotjenester takket være tjenestenettet.
Tjenester innenfor samme region kunne kobles til hverandre uten å bruke det offentlige Internett, og ingen ekstern nettverkstrafikk kunne kommunisere med interne nettverksdeler.
Bare gatewayene vil være autorisert til å eksponere seg for internett av sikkerhetsgrunner. API-gatewayene kan for eksempel enkelt fungere som inngangsdører, behandle forespørsler fra klienter/brukere og dirigere dem sammen med nettverket.
Nettverks- og API-gateway
Alle forespørsler fra Snapchat-klienten kommer gjennom API Gateway. Den bruker det samme Envoy-bildet og kobles til det samme kontrollplanet som våre interne mikrotjenester. Kontrollplanet vårt lar oss aktivere tilpassede Envoy-filtre.
Snapchats autentiseringssystemer, så vel som våre hastighetsbegrensnings- og belastningsreduksjonsteknologier, håndteres av disse filtrene. Envoy bruker Service Mesh til å rute forespørsler til den aktuelle mikrotjenesten etter at filterkjeden er fullført.
konklusjonen
Snapchats API-gateway ruter ekstern trafikk til appens mange funksjoner. Brukernes forespørsler om å endre konfigurasjonstilstander administreres av servere, som deretter gi data og informasjon tilbake til appens mange tjenester.
Samlet sett kan Snapchats nåværende design sammenlignes med flere programmer som kjører på et enkelt operativsystem, som i dette tilfellet er Snapchat-appen. Jeg prøvde veldig hardt for å gi deg en oversikt på høyt nivå over Snapchat-systemdesignet. Jeg håper du fant det nyttig.
Legg igjen en kommentar