Inhoudsopgave[Zich verstoppen][Laten zien]
Snapchat is een begrip onder tweens en tieners. Je bent waarschijnlijk boven de 25 als je niet weet hoe het werkt. Snapchat, een van de meest populaire sociale media-applicaties, biedt kinderen en adolescenten precies wat ze willen: een gemakkelijke methode om gewone gebeurtenissen te delen en ze er ook cool uit te laten zien.
In tegenstelling tot Facebook en Twitter, die alles wat je doet vastleggen en publiceren, gebruikt Snapchat berichten die zouden moeten verdwijnen (zie hoe ze dat niet doen).
Er is veel over Snapchat, en als je een ontwikkelaar bent, is het nog meer. Dit bericht geeft je dus een beeld op hoog niveau van Snapchat systeem ontwerp en nog veel meer inzichten.
Introductie
Snapchat is een in de VS gevestigd social networking app waarmee gebruikers onmiddellijk verbinding kunnen maken, afbeeldingen kunnen delen en meer.
- Berichten en afbeeldingen (of snaps) hebben een tijdslimiet van 24 uur. Moedigt mensen aan om hun verhalen in groepen te delen.
- Met Snap Map kunnen gebruikers op een kaart zien waar hun vrienden zijn.
- Herinneringen herinneren gebruikers aan foto's die ze een jaar later hebben opgeslagen of gedeeld.
- Snapchat is enorm populair bij jongere generaties, vooral tieners. Er zijn 319 miljoen actieve gebruikers van de app en elke dag worden 5.4 miljard snaps verzonden.
Belangrijke ontwerpvoorwaarden
Monolithische architectuur – Een toepassing met één laag die onafhankelijk van andere toepassingen werkt, staat bekend als een monoliet (monolithische architectuur). Een monoliet is ontworpen om alle activiteiten uit te voeren en af te handelen die nodig zijn om een taak te voltooien. De applicatie voert alle functies van begin tot eind uit.
Microservices – Het is het tegenovergestelde van monolieten. Microservices is een architecturale benadering die een applicatie organiseert als een verzameling services. Deze services worden gebruikt om veel aspecten van een applicatie te beheren. Een klant plaatst een bestelling, een ober neemt het op en bezorgt het, en een chef-kok bereidt het voor. In dit voorbeeld functioneert elke component onafhankelijk en afzonderlijk van de andere; niemand weet precies wat de anderen doen en niemand heeft toegang tot dezelfde informatie.
JSON: Het is een op tekst gebaseerde indeling die kan worden gebruikt om JavaScript-objecten, letterlijke waarden, arrays en gegevens weer te geven. Dit op tekst gebaseerde formaat is bedoeld om eenvoudig te lezen en te schrijven, en ook verteerbaar te zijn door software. JSON wordt vaak gebruikt om gegevens en informatie over te dragen tussen servers en online applicaties.
orkestratie: De techniek om veel bewerkingen te automatiseren, staat bekend als orkestratie. Deze taken omvatten configuratie, coördinatie en administratie van computersystemen en software.
volmacht: Een proxy fungeert als tussenpersoon tussen een client die op zoek is naar een bron en de server die deze levert.
Vergiet: Een servicemesh is een software-architectuurpatroon dat een laag toevoegt aan een infrastructuurlaag om gereguleerde, waarneembare en veilige communicatie tussen services via proxy mogelijk te maken.
Ontwerp op hoog niveau
Monolithische problemen
Snapchat is ontstaan als een cloudgebaseerde monoliet op basis van de Google App Engine. Naarmate het programma echter in populariteit groeide en meer gebruikers en gegevens kreeg, werd schaalbaarheid een probleem.
Bovendien, met een enorme explosieradius binnen de monoliet, waren systeembrede verstoringen meer mogelijk. Een van de problemen van Snapchat werd gedefinieerd als een 'tragedy of the commons', waarin functies streden om toegang tot bronnen; functies werden geladen tijdens het opstarten van de app, waardoor bepaalde functies sneller konden worden geladen, maar de andere langzamer.
Ingenieurs zochten ook duidelijke zichtbaarheid, scheiding en eigendom van hun componenten vanuit een ontwikkelingsstandpunt, zodat de service flexibel en efficiënt kon zijn.
Transformatie
Naarmate Snapchat uitbreidde, realiseerde het bedrijf zich dat het zijn monolithische infrastructuur moest opsplitsen in kleinere, efficiëntere stukken. Om de latentie te verminderen, besloot de organisatie een op microservices gebaseerd ontwerp te ontwikkelen.
Om die doelen te bereiken, koos Snapchat ervoor om zijn software bij te werken met Amazon DynamoDB, een schaalbare NoSQL-databaseservice. Dankzij zijn inspanningen kon het bedrijf de mediane latentie met 20% verminderen.
De app is door het bedrijf herschreven in tal van kleinere applicaties. Snapchat begon met tal van toepassingen, waaronder een camera, chat, herinneringen, fotobewerking, inhoudsconsumptie en een kaart. Hoewel het voor de consument handig was om deze programma's in een enkele monoliet te integreren, vormde het een ernstig technisch probleem in termen van het behouden van goede prestaties.
Voor een herschrijving heeft het bedrijf veel basisregels opgesteld. Niet vooraf laden; elke functie zou zijn eigen app moeten zijn, en het zou snel moeten zijn. Snapchat stopte op verschillende plaatsen wijzigingen om het herschrijven mogelijk te maken, waardoor het een strikt technische taak werd.
Extra functies integratie
De camera-app van Snapchat heeft onder meer lenzen, filters, bitmoji's en de mogelijkheid om augmented reality-animaties toe te voegen. Met de chat-app van Snapchat kunnen gebruikers ook foto's opslaan, gesprekken opslaan, emoticons toevoegen en meer.
Met de kaart van Snapchat kun je onder andere vrienden volgen als ze dat willen. Herinneringen, fotobewerking en inhoudsconsumptie zijn allemaal afzonderlijke Snapchat-apps met hun unieke mogelijkheden.
Met herinneringen kunt u foto's of video's opslaan of wijzigen voor later gebruik, en ze ook uploaden of verzenden. Gebruikers kunnen ook beeldbewerking gebruiken om films te knippen, tekst toe te voegen, stickers toe te voegen en meer.
Het externe inhoudgebruik van Snapchat verwijst naar wat het gebruikers laat zien op basis van een reeks parameters.
Microservices
Het programma was destijds grotendeels afhankelijk van JSON om netwerkquery's uit te voeren. Het ontleden van JSON was echter tijdrovend en inefficiënt. Snapchat gebruikte een gecentraliseerde netwerkbeheer-API om het gebruik van JSON als implementatiedetail te maskeren om dit probleem aan te pakken.
Microservices introduceren de uitdagingen van applicatiestatusbeheer, servicecommunicatie en storingsbeheer. Snapchat gebruikte open-sourcetechnologieën zoals Temporal om orkestratieproblemen te overwinnen om een sterk en betrouwbaar systeem te bouwen.
Als gevolg hiervan besloot de organisatie om een service mesh ontwerppatroon te gebruiken. Snapchat gebruikte Envoy, een andere open-sourcetool die als proxy fungeert, om dit patroon te bereiken. Envoy beheerde de stroom van serviceverkeer via de infrastructuur, waardoor ontwikkelaars inzicht kregen in mogelijke problemen.
Snapchat heeft binnen de service mesh een interne app gemaakt met de naam Switchboard. Schakelbord diende als een controlepaneel voor de services van Snap, waardoor gebruikers het verkeer konden verplaatsen, serviceafhankelijkheden konden beheren (een functie waarmee één service kan worden beheerd afhankelijk van de toestand van andere) en regio's kunnen leegmaken.
Om de complexiteit van mogelijke configuraties binnen services te vereenvoudigen, werd Switchboard gebruikt in plaats van de hele Envoy API bloot te leggen. Snap heeft dankzij de service mesh een gemeenschappelijk intern en regionaal netwerk voor zijn microservices.
Services binnen dezelfde regio zouden met elkaar kunnen verbinden zonder gebruik te maken van het openbare internet, en extern netwerkverkeer zou niet kunnen communiceren met interne netwerkonderdelen.
Alleen de Gateways zouden om veiligheidsredenen toestemming hebben om zichzelf bloot te stellen aan internet. De API-gateways kunnen bijvoorbeeld gemakkelijk als voordeur dienen, verzoeken van klanten/gebruikers verwerken en deze samen met het netwerk routeren.
Netwerk & API-gateway
Alle vragen van de Snapchat-client komen via API Gateway. Het gebruikt hetzelfde Envoy-image en maakt verbinding met hetzelfde Control Plane als onze interne microservices. Met ons controlevlak kunnen we aangepaste Envoy-filters inschakelen.
De authenticatiesystemen van Snapchat, evenals onze snelheidsbeperkende en load-shedding-technologieën, worden afgehandeld door deze filters. Envoy gebruikt de Service Mesh om verzoeken naar de relevante microservice te routeren nadat de filterketen is voltooid.
Conclusie
De API-gateway van Snapchat leidt extern verkeer naar de vele functionaliteiten van de app. Verzoeken van gebruikers om configuratiestatussen te wijzigen, worden beheerd door servers, die vervolgens gegevens verstrekken en informatie terug naar de talrijke diensten van de app.
Over het algemeen kan het huidige ontwerp van Snapchat worden vergeleken met verschillende programma's die op één enkel besturingssysteem draaien, in dit geval de Snapchat-app. Ik heb heel erg mijn best gedaan om je een overzicht op hoog niveau te geven van het Snapchat-systeemontwerp. Ik hoop dat je het nuttig vond.
Laat een reactie achter