Java >> Java tutorial >  >> Java

Grundlæggende om et distribueret systemdesign

Når du er nybegynder softwareudvikler, er dit fokus på mikroniveauet. Hvad sker der i din kode? Hvad sker der i din ansøgning? Men hvis du begynder at tænke på en systemdesign måde, kan det hjælpe dig enormt i din karriere. Systemdesign er et stort emne, men jeg vil dække de vigtige grundlæggende elementer i distribueret systemdesign. At forstå systemdesign er nøglen til at bygge et godt system. Derfor bør en udvikler bestemt prøve at lære om systemdesign.

Grundlæggende om et distribueret system

I dette indlæg lærer vi følgende grundlæggende principper.

  1. Nøglekarakteristika for et distribueret system
  2. Belastningsbalancering
  3. Caching
  4. Database
  5. Databaseindekser
  6. Fuldmagter
  7. CAP-sætning
  8. Konsekvent hashing

Nøglekarakteristika for et distribueret system

Skalerbarhed

  • Skalerbarhed er systemets evne til at vokse og administrere øget efterspørgsel
  • Horisontal skalering – du skalerer ved at tilføje flere servere til din pulje af ressourcer.
  • Lodret skalering – du skalerer ved at tilføje mere strøm til en eksisterende server.

Plidelighed

  • Det er sandsynligheden for, at et system vil fejle i en given periode. Specifikt er målet at minimere denne sandsynlighed så meget som muligt.
  • For at opnå pålidelighed kræves redundans. Derfor har det en omkostning.

Tilgængelighed

  • Tilgængelighed er den tid, et system forbliver operationelt til at udføre dens nødvendige funktion i en bestemt periode.
  • Hvis et system er pålideligt, er det tilgængeligt. Til sammenligning, hvis den er tilgængelig, er den ikke nødvendigvis pålidelig.

Effektivitet

  • Latens – responstid
  • Throughput – antallet af varer leveret i en given tidsenhed

Belastningsbalancering

Loadbalanceren dirigerer trafikken fra klienter til forskellige servere. Den holder styr på status for alle ressourcer, mens den distribuerer anmodninger. På samme måde reducerer en belastningsbalancer individuel serverbelastning og forhindrer en applikationsserver i at blive et enkelt fejlpunkt. Så belastningsbalanceren kan tilføjes mellem klienter og webservere, mellem webservere og et internt platformslag (applikationsserver) og mellem intern platform og databaseservere.

For at organisere en load balancer til at distribuere anmodninger til servere, kan man bruge forskellige algoritmer som Round Robin, Weighted Round Robin, Least Connection Method, Least Response Time, Least Bandwidth, IP Hash.

Som et resultat kan load balanceren være et enkelt fejlpunkt. For at overvinde dette kan en anden load balancer tilsluttes den første for at danne en klynge.

Caching

Caches udnytter princippet om referencelokalitet. En cache er som en korttidshukommelse. Det vil sige, at den er hurtigere med begrænset plads. Desuden kan caches eksistere på alle niveauer i arkitekturen, men findes ofte på det niveau, der er nærmest frontenden.

Applikationsservercache

Placering af en cache direkte på en anmodningslagsknude muliggør lokal lagring af svardata.

Indholdsdistributionsnetværk

CDN'er er en slags cache, der kommer i spil for websteder, der serverer store mængder statiske data.

Cache-invalidering

  1. Skriv gennem cache – Skriv dataene ind i cachen og den tilsvarende database på samme tid.
  2. Skriv omkring cachen – Skriv dataene til permanent lagring, uden om cachen. Derfor vil nyligt skrevne data skabe en cache-miss.
  3. Cache til tilbageskrivning – Skriv dataene til cache alene og synkroniser med backend-lager efter et angivet interval.

Cache-udsættelsespolitikker

  1. Først ind først ud
  2. Sidst ind først ud
  3. Sidst brugt
  4. Mindst hyppigt brugt
  5. Senest brugt
  6. Tilfældig udskiftning

Database

Du skal bruge et lagersystem til dine data. Databaser er naturligvis den mest almindelige løsning. Derfor er der to typer databaser. Grundlæggende relationelle databaser og ikke-relationelle databaser.

Hvis dine data er strukturerede, kan du bruge en relationsdatabase. Relationsdatabaser tilbyder også struktureret forespørgselssprog (SQL) til at forespørge databaserne.

Ikke-relationelle databaser er ustrukturerede og distribuerede.

SQL

  1. Gem data i rækker og kolonner
  2. Hver række indeholder oplysninger om én enhed
  3. MySQL, MS SQL, Oracle, PostgreSQL, SQLite er nogle eksempler på relationelle databaser.
  4. SQL-databaser bruger SQL til forespørgsler.
  5. Lodret skalerbar, men dyr.
  6. Horisontalt skalerbar, men tidskrævende proces.
  7. SQL-databaser er ACID-kompatible (Atomicitet, Konsistens, Isolation og Holdbarhed).
  8. Hvis du har brug for ACID-overholdelse og strukturerede data, skal du bruge SQL-databaser.

NoSQL

  1. Key-Value Stores  – Redis, Dynamo DB
  2. Dokumentdatabaser – Couch DB og MongoDB
  3. Bred-søjledatabaser – Søjledatabaser er bedst egnede til at analysere store datasæt – Cassandra og HBase
  4. Grafdatabaser – data gemt og relateret til hinanden i grafformat. Efterfølgende lagres data med noder (entiteter), egenskaber (info om entiteter) og linjer (forbindelsen mellem entiteter) – Neo4J og InfiniteGraph
  5. Skemaer er dynamiske. Kolonner kan tilføjes med det samme, og hver række behøver ikke at indeholde data for hver kolonne.
  6. Brug UnQL (Unstructured Query Language).
  7. Let kan skaleres vandret.
  8. Ikke ACID-kompatibel
  9. Tillader hurtig udvikling, gemmer en stor mængde data uden struktur.

Databaseindekser

Hvis databasesøgningens ydeevne har været dårlig, opretter vi indekser for at forbedre denne ydeevne. Fremover er målet med at oprette et indeks på en bestemt tabel i en database at gøre det hurtigere at søge i tabellen.

Indekser forbedrer læseydelsen, men reducerer skriveydelsen. Følgelig øger indekser også hukommelsesforbruget. Hvis din database er læseintensiv, er indekser en god strategi. Tilføj ikke indekser, hvis databasen er skriveintensiv.

Fuldmagter

Proxyserver er et stykke software eller hardware, der fungerer som mellemled for anmodninger fra klienter, der søger ressourcer fra andre servere. Følgelig bruges proxyer til at filtrere anmodninger, logge anmodninger og nogle gange transformere anmodningerne. Endnu mere kan proxyserverens cache tjene mange anmodninger.

Åbn proxy

En åben proxyserver er tilgængelig for enhver internetbruger. Som et resultat er enhver internetbruger i stand til at bruge proxyen til at videresende anmodningerne.

Omvendt proxy

En omvendt proxy henter ressourcer på vegne af klienten fra en eller flere servere. Disse ressourcer returneres derfor til klienten.

CAP-sætning

I et distribueret system kan du ikke opnå alle tre konsistens , tilgængelighed og partitionstolerance .

CAP Theorem siger, at du kun kan få to ud af disse tre muligheder.

Konsistens – Alle noder ser de samme data på samme tid.

Tilgængelighed – Hver anmodning får et svar på succes/fejl.

Partitionstolerance - Et partitionstolerant system kan tolerere enhver mængde netværksfejl, der ikke resulterer i en fejl på hele netværket. Især datareplikering på tværs af noder hjælper med at holde systemet oppe.

Konsekvent hashing

Konsistent hashing er en mekanisme, der gør det muligt at distribuere data på tværs af en klynge på en sådan måde, at det minimerer omorganisering, når noder tilføjes eller fjernes. Som et resultat, når du anvender konsekvent hashing, resulterer ændring af størrelsen af ​​hash-tabellen i gentilknytning af k/n-nøgler.

Konklusion

Afslutningsvis kan det at kende disse grundlæggende principper om et distribueret system i høj grad hjælpe en udvikler, mens han skriver kode eller designer et system. Undersøg med alle midler disse grundlæggende principper, men du bør også lære om domænedrevet design. Ikke desto mindre, hvis du kunne lide dette indlæg, kan du abonnere på min blog her.

Referencer

  1. System Design Primer – System Design Primer
  2. Systemdesign – Systemdesign

Java tag