Sammenligning af SAN og NAS
En af de største forvirringer, jeg har set i de seneste år, er den mellem NAS og SAN. At forstå, hvad hver af dem er, vil i høj grad hjælpe med at forstå, hvor de er nyttige og passende.
Vores første opgave er at skrælle marketingbetegnelserne af og gå videre til de tekniske. NAS står for Network Attached Storage, men betyder ikke nøjagtigt det, og SAN står for Storage Area Network, men bruges generelt til at henvise til en SAN-enhed, ikke selve netværket. I sin mest korrekte form er et SAN ethvert netværk dedikeret til storage-trafik, men i den virkelige verden er det ikke sådan, det normalt bruges. I dette tilfælde er vi her for at tale om NAS- og SAN-enheder og hvordan de sammenlignes, så vi vil ikke bruge den definition, der inkluderer netværket frem for enheden. I virkeligheden er både NAS og SAN marketingbetegnelser og er lidt bløde om kanterne på grund af det. De er præcise nok til at bruge i en normal teknisk samtale, så længe alle parter ved, hvad de mener, men når vi diskuterer deres betydning bør vi skrælle de cool-klingende navne af og holde os til de mest tekniske beskrivelser. Begge begreber, når de bruges via marketing, bruges til at antyde, at de er en bestemt teknologi, der er blevet “appliancificeret”, hvilket gør brugen af betegnelserne unødvendigt kompliceret, men ikke mere nyttig.
Så vores første opgave er at definere, hvad disse to navne betyder i en enhedskontekst. Begge enheder er storage-servere, ganske enkelt, blot to forskellige måder at eksponere denne storage for omverdenen.
Den simpleste af de to er SAN, som korrekt er en blok-storage-enhed. Enhver enhed, der eksponerer sin storage eksternt som en blokenhed, falder ind i denne kategori og kan bruges om hinanden baseret på, hvordan den bruges. Blok-storage-enhederne er eksterne harddiske, DAS (Direct Attach Storage) og SAN. Alle disse er faktisk det samme. Vi kalder det en ekstern harddisk, når vi tilslutter den til en desktop. Vi kalder det en DAS, når vi tilslutter den til en server. Vi kalder det et SAN, når vi tilføjer en form for netværk, generelt en switch, mellem enheden og den endelige enhed, der forbruger storage. Der er ingen teknologisk forskel mellem disse enheder. Et traditionelt SAN kan tilsluttes direkte til en desktop og bruges som en ekstern harddisk. En ekstern harddisk kan tilsluttes en switch og bruges af flere enheder på et netværk. Grænsefladen mellem storage-enheden og det system, der bruger den, er blokken. Almindelige protokoller for blok-storage inkluderer iSCSI, Fibre Channel, SAS, eSATA, USB, Thunderbolt, IEEE1394 (også kaldet Firewire), Fibre Channel over Ethernet (FCoE) og ATA over Ethernet (AoE). En enhed, der tilsluttes en blok-storage-enhed, vil altid se storage præsenteret som et diskdrev, intet mere.
En NAS, også kendt som en “filer”, er en fil-storage-enhed. Dette betyder, at den eksponerer sin storage som et netværksfilsystem. Så enhver enhed, der tilsluttes denne storage, ser ikke et diskdrev, men ser i stedet et monterbart filsystem. Når en NAS ikke er pakket som en appliance, kalder vi det simpelthen en filserver, og næsten alle computerenheder fra desktops til servere har et vist omfang af denne funktionalitet inkluderet i dem. Almindelige protokoller for fil-storage-enheder inkluderer NFS, SMB / CIFS og AFP. Der er mange andre dog, og teknisk set er der specielle tilfælde af fil-storage-protokoller såsom FTP og HTTP, der også bør kvalificeres. Som et ekstremt eksempel er en traditionel webserver en meget specialiseret form for fil-storage-enhed.
Det, der adskiller blok-storage- og fil-storage-enheder, er den type grænseflade, de præsenterer for omverdenen, eller for at tænke på det på en anden måde, hvor delingen mellem serverenhed og klientenhed sker inden for storage-stakken.
Det er i dag blevet ekstremt almindeligt for storage-enheder at inkludere både blok-storage og fil-storage fra samme enhed. Systemer, der gør dette, kaldes unified storage. Med unified storage er, om du kan sige, at det opfører sig som en blok-storage- eller fil-storage-enhed (SAN eller NAS i det almindelige sprogbrug) eller begge, baseret på den adfærd, du konfigurerer for enheden, og ikke baseret på, hvad du køber. Dette er vigtigt, da det understreger pointen om, at dette udelukkende er en protokol- eller grænsefladeforskelle, ikke en forskel i størrelse, kapacitet, pålidelighed, ydeevne, funktioner osv.
Begge typer enheder har mulighed for, men ikke kravet om, at give udvidede funktioner under det “demarkationspunkt”, hvor de overleverer storage til omverdenen. Begge kan, eller måske ikke, give RAID, logisk volumenstyring, overvågning osv. Fil-storage (NAS) kan også give filsystemfunktioner såsom Windows NTFS ACL’er.
Den vigtigste fordel ved blok-storage er, at de systemer, der tilsluttes den, får mulighed for at manipulere storage-systemet, som om det var et traditionelt diskdrev. Dette betyder, at RAID og logisk volumenstyring, som muligvis allerede er sket i storage-enhedens “sorte boks”, nu kan gøres igen, om ønsket, på et højere niveau. Klientenhederne er ikke klar over, hvilken slags enhed de ser, kun at den fremstår som et diskdrev. Så du kan vælge at stole på den (antage, at den har RAID på et tilstrækkeligt niveau, for eksempel) eller du kan kombinere flere blok-storage-enheder til RAID, akkurat som om de var almindelige, lokale diske. Dette er ekstremt ualmindeligt, men er en interessant mulighed, og der er produkter, der er designet til at blive brugt på denne måde.
Mere almindeligt anvendes logisk volumenstyring såsom Linux LVM, Solaris ZFS eller Windows Dynamic Disks oven på den eksponerede blok-storage fra enheden, og derefter ville et filsystem blive anvendt oven på det. Dette er vigtigt at huske: med blok-storage-enheder oprettes og administreres filsystemet af klientenheden, ikke af storage-enheden. Storage-enheden er lykkeligt uvidende om, hvordan den blok-storage, den præsenterer, bruges og lader slutbrugeren bruge den efter forgodtbefindende med fuld kontrol. Dette strækker sig endda til det punkt, at du kan kæde blok-storage-enheder sammen, hvor en giver storage til den næste, der kombineres, måske, i RAID-grupper – blok-storage-enheder kan lagres, mere eller mindre, på ubestemt tid.
Alternativt indeholder en fil-storage-enhed al blokdelen af storage, så enhver mulighed for RAID, logisk volumenstyring og overvågning skal håndteres af fil-storage-enheden. Derefter anvendes et filsystem oven på blok-storage. Normalt ville dette være Linux EXT4, FreeBSD og Solaris ZFS, Windows NTFS, men andre filsystemer såsom WAFL, XFS, JFS, BtrFS, UFS og flere er bestemt mulige. På dette filsystem vil data blive gemt. For derefter at dele disse data med omverdenen bruges et netværksfilsystem (også kaldet et distribueret filsystem), som giver en filsystemgrænseflade, der er netværksaktiveret – NFS, SMB og AFP er de mest almindelige, men ligesom i enhver protokolfamilie er der adskillige specialtilfælde og eksotiske muligheder.
En fjernhed, der ønsker at bruge storage på fil-storage-enheden, ville se den over netværket på samme måde som den ville se et lokalt filsystem og er i stand til at montere det på identisk måde. Dette gør fil-storage særligt let og indlysende for slutbrugere at bruge, da det er meget naturligt i alle aspekter. Vi bruger netværksfilsystemer hver dag til normal desktop-computing. Når vi “mapper et drev” i Windows, for eksempel, bruger vi et netværksfilsystem.
En kritisk differentiering mellem blok-storage og fil-storage, der må skelnes imellem, er, at mens begge potentielt kan sidde på et netværk og tillade flere klientmaskiner at tilslutte sig dem, er det kun fil-storage-enheder, der har evnen til at arbitrere denne adgang. Dette er meget vigtigt og kan ikke overses.
Blok-storage fremstår som et diskdrev. Hvis du blot tilslutter et diskdrev til to eller flere computere på én gang, kan du forestille dig, hvad der vil ske – hver vil intet vide om den anden og vil ikke være klar over nye filer, der oprettes, andre ændres, og systemerne vil hurtigt begynde at overskrive hinanden. Hvis dit filsystem er skrivebeskyttet på alle noder, er dette ikke et problem. Men hvis et system skriver eller ændrer data, vil de andre have problemer. Dette resulterer generelt meget hurtigt i datakorruption, typisk inden for få minutter. For at se dette i ekstrem handling, forestil dig at have to eller tre klientsystemer, der alle tror, at de har eksklusiv adgang til et diskdrev, og få dem alle til at defragmentere det på samme tid. Alle data på drevet vil blive rodet til på sekunder.
En fil-storage-enhed har derimod naturlig arbitrering, da netværksfilsystemet håndterer kommunikationen for adgang til det rigtige filsystem, og filsystemer er af natur multi-bruger naturligt. Så hvis et system tilsluttet en fil-storage-enhed foretager en ændring, er alle systemer øjeblikkeligt klar over ændringen og vil ikke “træde hinanden på tæerne.” Selv hvis de forsøger at gøre det, arbitrerer fil-storage-enhedens filsystem adgang og har det sidste ord og lader dette ikke ske. Dette gør deling af data nemt og gennemsigtigt for slutbrugere. (Jeg bruger begrebet “slutbrugere” her til at inkludere systemadministratorer.)
Dette betyder ikke, at der ikke er nogen midler til at dele storage fra en blokenhed, men arbitreringen af den kan ikke håndteres af blok-storage-enheden selv. Blok-storage-enheder kan gøres “delbare” ved at bruge det, der er kendt som et clustered filsystem. Disse typer filsystemer opstod dengang, da serverclusters delte storage-ressourcer ved at have to servere tilsluttet med en SCSI-controller i begge ender af et enkelt SCSI-kabel og med de delte drev tilsluttet i midten af kablet. Det eneste middel, hvorved serverne kunne kommunikere, var via filsystemet selv, og derfor blev specielle clustered filsystemer udviklet, der tillod kommunikation mellem enhederne, der alertede hver om ændringer foretaget af den anden, via filsystemet selv. Dette fungerer faktisk overraskende godt, men clustered filsystemer er relativt ualmindelige, med Red Hats GFS og Oracles OCFS som nogle af de bedst kendte i den traditionelle serververden, og VMwares meget nyere VMFS er blevet ekstremt velkendt via sin brug til virtualiseringsstorage. Normale brugere, herunder systemadministratorer, har muligvis ikke adgang til clustered filsystemer eller kan have behov, der ikke tillader deres brug. Det er også vigtigt at bemærke, at arbitrering håndteres via tillid, ikke via håndhævelse, som med en fil-storage-enhed. Med en fil-storage-enhed håndterer selve enheden adgangsarbitrering, og der er ingen vej udenom den. Med blok-storage-enheder, der bruger et clustered filsystem, kan enhver enhed, der tilsluttes storage, ignorere det clustered filsystem og simpelthen omgå den passive arbitrering – dette er så simpelt, at det normalt ville ske ved et uheld. Det kan ske ved montering af filsystemet og angivelse af den forkerte filsystemtype eller via et drev, der opfører sig forkert, eller enhver ondsindet handling. Så adgangssikkerhed er kritisk på netværksniveauet for at beskytte blok-niveau storage.
Det underliggende koncept, der afsløres her, er, at blok-storage-enheder er dumme enheder (tænk glorificeret diskdrev), og fil-storage-enheder er smarte enheder (tænk traditionel server). Fil-storage-enheder skal indeholde en fuldt fungerende “computer” med CPU, hukommelse, storage, filsystem og netværk. Blok-storage-enheder kan indeholde disse ting, men behøver det ikke. I sin simpleste form kan blok-storage-enheder være intet mere end et diskdrev med en USB- eller Ethernet-adapter tilsluttet. Det er faktisk ikke ualmindeligt for dem at være intet mere end en RAID-controller plus Ethernet- eller Fibre Channel-adaptere at blive tilsluttet.
I begge tilfælde, blok-storage-enheder og fil-storage-enheder, kan vi skalere ned til trivielt simple enheder eller kan skalere op til massive “mainframe-klasse” ultra-høj-tilgængeligheds systemer. Begge kan enten være hurtige eller langsomme. Den ene er ikke bedre eller værre, den ene er ikke højere eller lavere, den ene er ikke mere eller mindre enterprise – de er forskellige og tjener generelt forskellige formål. Og der er avancerede funktioner, som en af dem måske eller måske ikke indeholder. Udfordringen ligger i at vide, hvilken der er den rette til hvilken opgave.
Jeg kan godt lide at tænke på blok-storage-protokoller som en “standard out”-strøm, meget som på en kommandolinje. Så det grundlæggende niveau i enhver storage-“pipeline” er altid en blokenhed, og adskillige blokenheder eller transformationer kan eksistere, hvor hver er ført over til den næste, så længe outputtet forbliver en blok-storage-protokol. Vi afslutter kun kæden, når vi anvender et filsystem. På denne måde kan hardware-RAID, netværks-RAID, logisk volumenstyring osv. anvendes i flere kombinationer efter behov. Blok-storage er virkelig ikke bare blokke af data, men byggeklodser i storage-systemer.
Et punkt, der er meget interessant, er, at siden blok-storage-enheder kan kædes sammen, og siden netværks-storage-enheder skal acceptere blok-storage som deres “input”, er det faktisk meget almindeligt for en blok-storage-enhed (SAN) at bruges som backing storage for en fil-storage-enhed (NAS), især i high-end systemer. De kan samleksistere inden for et enkelt chassis, eller de kan arbejde kooperativt på netværket.
