En jämförelse av SAN och NAS
En av de största förvirringar som jag har sett under senare år är den mellan NAS och SAN. Att förstå vad var och en är kommer att räcka långt mot att förstå var de är användbara och lämpliga.
Vår första uppgift är att skala bort marknadsföringstermerna och gå vidare till tekniska sådana. NAS står för Network Attached Storage men betyder inte exakt det och SAN står för Storage Area Network men används i allmänhet för att avse en SAN-enhet, inte själva nätverket. I sin allra mest korrekta form är ett SAN vilket nätverk som helst som är dedikerat till lagringstrafik, men i den verkliga världen är det inte så det normalt används. I detta fall är vi här för att tala om NAS- och SAN-enheter och hur de jämför sig och därför kommer vi inte att använda den definition som inkluderar nätverket snarare än enheten. I verkligheten är både NAS och SAN marknadsföringstermer och är lite mjuka i kanterna på grund av det. De är tillräckligt precisa för att användas i ett normalt tekniskt samtal, så länge alla parter vet vad de betyder, men när vi diskuterar deras innebörd bör vi skala bort de häftigt klingande namnen och hålla oss till de mest tekniska beskrivningarna. Båda termerna, när de används i marknadsföring, används för att antyda att de är en viss teknik som har “appliancerats” vilket gör användningen av termerna onödigt komplicerad men inte mer användbar.
Så vår första uppgift är att definiera vad dessa två namn betyder i ett enhetssammanhang. Båda enheterna är lagringsservrar, rätt och slätt, bara två olika sätt att exponera den lagringen mot omvärlden.
Den enklare av de två är SAN som korrekt är en blocklagringsenhet. Vilken enhet som helst som exponerar sin lagring externt som en blockenhet faller in i denna kategori och kan användas omväxlande beroende på hur den används. Blocklagringsenheterna är externa hårddiskar, DAS (Direct Attach Storage) och SAN. Alla dessa är faktiskt samma sak. Vi kallar det en extern hårddisk när vi ansluter den till en stationär dator. Vi kallar det en DAS när vi ansluter den till en server. Vi kallar det ett SAN när vi lägger till någon form av nätverk, i allmänhet en switch, mellan enheten och den slutgiltiga enhet som konsumerar lagringen. Det finns ingen teknisk skillnad mellan dessa enheter. Ett traditionellt SAN kan anslutas direkt till en stationär dator och användas som en extern hårddisk. En extern hårddisk kan kopplas till en switch och användas av flera enheter på ett nätverk. Gränssnittet mellan lagringsenheten och systemet som använder den är blocket. Vanliga protokoll för blocklagring inkluderar iSCSI, Fibre Channel, SAS, eSATA, USB, Thunderbolt, IEEE1394 (alias Firewire), Fibre Channel over Ethernet (FCoE) och ATA over Ethernet (AoE). En enhet som ansluter till en blocklagringsenhet kommer alltid att se lagringen presenterad som en diskenhet, inget mer.
En NAS, även känd som en “filer”, är en fillagringsenhet. Detta innebär att den exponerar sin lagring som ett nätverksfilsystem. Så vilken enhet som helst som ansluter till denna lagring ser inte en diskenhet utan ser i stället ett monterbart filsystem. När en NAS inte är paketerad som en appliance kallar vi den helt enkelt en filserver och nästan alla datorenheter från stationära datorer till servrar har någon grad av denna funktionalitet inbyggd i sig. Vanliga protokoll för fillagringsenheter inkluderar NFS, SMB / CIFS och AFP. Det finns dock många andra och tekniskt sett finns det specialfallsprotokoll för fillagring såsom FTP och HTTP som också borde kvalificera sig. Som ett extremt exempel är en traditionell webbserver en mycket specialiserad form av fillagringsenhet.
Vad som skiljer blocklagrings- och fillagringsenheter åt är den typ av gränssnitt som de presenterar mot omvärlden, eller för att tänka på det på ett annat sätt, var uppdelningen mellan serverenhet och klientenhet sker inom lagringsstacken.
Det har blivit extremt vanligt idag för lagringsenheter att inkludera både blocklagring och fillagring från samma enhet. System som gör detta kallas enhetlig lagring. Med enhetlig lagring, huruvida du kan säga att den beter sig som en blocklagrings- eller fillagringsenhet (SAN eller NAS på vardagsspråk) eller båda, baseras på det beteende som du konfigurerar för enheten, inte baserat på vad du köper. Detta är viktigt eftersom det understryker poängen att detta enbart är en protokoll- eller gränssnittsdistinktion, inte en av storlek, kapacitet, tillförlitlighet, prestanda, funktioner, osv.
Båda typerna av enheter har möjligheten, men inte kravet, att tillhandahålla utökade funktioner under den “demarkationspunkt” vid vilken de överlämnar lagringen till omvärlden. Båda kan, eller kanske inte, tillhandahålla RAID, logisk volymhantering, övervakning, osv. Fillagring (NAS) kan också tillhandahålla filsystemsfunktioner såsom Windows NTFS-ACL:er.
Den främsta fördelen med blocklagring är att de system som ansluter till den ges möjlighet att manipulera lagringssystemet som om det vore en traditionell diskenhet. Detta innebär att RAID och logisk volymhantering, som kanske redan har utförts i lagringsenhetens “svarta låda”, nu kan göras igen, om så önskas, på en högre nivå. Klientenheterna är inte medvetna om vilken typ av enhet de ser, bara att den framstår som en diskenhet. Så du kan välja att lita på den (anta att den har RAID på en adekvat nivå, till exempel) eller du kan kombinera flera blocklagringsenheter tillsammans till RAID precis som om de vore vanliga, lokala diskar. Detta är extremt ovanligt men är ett intressant alternativ och det finns produkter som är designade för att användas på detta sätt.
Vanligare är att logisk volymhantering såsom Linux LVM, Solaris ZFS eller Windows Dynamic Disks tillämpas ovanpå den exponerade blocklagringen från enheten och därefter, ovanpå det, skulle ett filsystem användas. Detta är viktigt att komma ihåg, med blocklagringsenheter skapas och hanteras filsystemet av klientenheten, inte av lagringsenheten. Lagringsenheten är lyckligt ovetande om hur den blocklagring som den presenterar används och låter slutanvändaren använda den hur de finner lämpligt med total kontroll. Detta sträcker sig till och med så långt att du kan kedja samman blocklagringsenheter med en som tillhandahåller lagringen till nästa och kombineras, kanske, till RAID-grupper – blocklagringsenheter kan skiktas, mer eller mindre, i oändlighet.
Alternativt innehåller en fillagringsenhet hela blockdelen av lagringen så all möjlighet till RAID, logisk volymhantering och övervakning måste hanteras av fillagringsenheten. Sedan, ovanpå blocklagringen, tillämpas ett filsystem. Vanligen skulle detta vara Linux EXT4, FreeBSD och Solaris ZFS, Windows NTFS men andra filsystem såsom WAFL, XFS, JFS, BtrFS, UFS och fler är förvisso möjliga. På detta filsystem kommer data att lagras. För att sedan dela denna data med omvärlden används ett nätverksfilsystem (även känt som ett distribuerat filsystem) som tillhandahåller ett filsystemsgränssnitt som är nätverksaktiverat – NFS, SMB och AFP är de vanligaste men, som i vilken protokollfamilj som helst, finns det otaliga specialfall och exotiska möjligheter.
En fjärrenhet som vill använda lagring på fillagringsenheten skulle se den över nätverket på samma sätt som den skulle se ett lokalt filsystem och kan montera det på ett identiskt sätt. Detta gör fillagring särskilt enkel och självklar för slutkonsumenten att använda eftersom det är mycket naturligt i varje aspekt. Vi använder nätverksfilsystem varje dag för normalt skrivbordsdatoranvändande. När vi “ansluter en enhet” i Windows, till exempel, använder vi ett nätverksfilsystem.
En kritisk differentiering mellan blocklagring och fillagring som måste skiljas åt är att, även om båda potentiellt kan sitta på ett nätverk och tillåta flera klientmaskiner att ansluta till dem, har endast fillagringsenheter förmågan att medla den åtkomsten. Detta är mycket viktigt och kan inte förbigås.
Blocklagring framstår som en diskenhet. Om du helt enkelt ansluter en diskenhet till två eller flera datorer samtidigt kan du föreställa dig vad som kommer att hända – var och en kommer att veta ingenting om den andra och kommer att vara ovetande om nya filer som skapas, andra som ändras och systemen kommer snabbt att börja skriva över varandra. Om ditt filsystem är skrivskyddat på alla noder är detta inget problem. Men om något system skriver eller ändrar data kommer de andra att få problem. Detta resulterar i allmänhet i datakorruption mycket snabbt, vanligtvis i storleksordningen minuter. För att se detta i extrem handling, föreställ dig att ha två eller tre klientsystem som alla tror att de har exklusiv åtkomst till en diskenhet och låt dem alla defragmentera den samtidigt. All data på enheten kommer att förvanskas på några sekunder.
En fillagringsenhet, å andra sidan, har naturlig medling eftersom nätverksfilsystemet hanterar kommunikationen för åtkomst till det verkliga filsystemet och filsystem är, till sin natur, naturligt fleranvändare. Så om ett system som är anslutet till en fillagringsenhet gör en ändring är alla system omedelbart medvetna om ändringen och kommer inte att “trampa varandra på tårna.” Även om de försöker göra det medlar fillagringsenhetens filsystem åtkomsten och har sista ordet och låter inte detta ske. Detta gör delning av data enkel och transparent för slutanvändare. (Jag använder termen “slutanvändare” här för att inkludera systemadministratörer.)
Detta innebär inte att det inte finns något sätt att dela lagring från en blockenhet, men medlingen av den kan inte hanteras av blocklagringsenheten själv. Blocklagringsenheter görs “delbara” genom att använda vad som är känt som ett klustrat filsystem. Dessa typer av filsystem hade sitt ursprung förr i tiden när serverkluster delade lagringsresurser genom att ha två servrar anslutna med en SCSI-styrenhet i vardera änden av en enda SCSI-kabel och ha de delade enheterna anslutna i mitten av kabeln. Det enda sättet som servrarna kunde kommunicera var genom själva filsystemet och så utvecklades speciella klustrade filsystem som möjliggjorde att det kunde finnas kommunikation mellan enheterna, vilket varnade var och en om ändringar gjorda av den andra, genom själva filsystemet. Detta fungerar faktiskt förvånansvärt väl men klustrade filsystem är relativt ovanliga med Red Hats GFS och Oracles OCFS som några av de mest välkända i den traditionella servervärlden och VMWares mycket nyare VMFS som har blivit extremt välkänt genom sin användning för virtualiseringslagring. Normala användare, inklusive systemadministratörer, kanske inte har tillgång till klustrade filsystem eller kan ha behov som inte tillåter deras användning. Av viktig notering är också att medlingen hanteras genom förtroende, inte genom upprätthållande, som med en fillagringsenhet. Med en fillagringsenhet hanterar enheten själv åtkomstmedlingen och det finns inget sätt att komma runt det. Med blocklagringsenheter som använder ett klustrat filsystem kan vilken enhet som helst som ansluter till lagringen ignorera det klustrade filsystemet och helt enkelt kringgå den passiva medlingen – detta är så enkelt att det normalt skulle ske av misstag. Det kan ske vid montering av filsystemet och vid angivande av fel filsystemstyp eller genom att en enhet beter sig felaktigt eller någon illvillig handling. Så åtkomstsäkerhet är kritisk på nätverksnivå för att skydda lagring på blocknivå.
Det underliggande koncept som exponeras här är att blocklagringsenheter är dumma enheter (tänk förhärligad diskenhet) och fillagringsenheter är smarta enheter (tänk traditionell server.) Fillagringsenheter måste innehålla en fullt fungerande “dator” med CPU, minne, lagring, filsystem och nätverk. Blocklagringsenheter kan innehålla dessa saker men behöver inte. I sin enklaste form kan blocklagringsenheter vara inget mer än en diskenhet med en USB- eller Ethernet-adapter ansluten till sig. Det är faktiskt inte ovanligt att de är inget mer än en RAID-styrenhet plus Ethernet- eller Fiber Channel-adaptrar anslutna.
I båda fallen, blocklagringsenhet och fillagringsenheter, kan vi skala ner till trivialt enkla enheter eller kan skala upp till massiva “mainframe-klassens” ultrahög-tillgänglighetssystem. Båda kan vara antingen snabba eller långsamma. Den ena är inte bättre eller sämre, den ena är inte högre eller lägre, den ena är inte mer eller mindre företagsmässig – de är olika och tjänar i allmänhet olika syften. Och det finns avancerade funktioner som endera kan eller inte kan innehålla. Utmaningen ligger i att veta vilken som är rätt för vilket jobb.
Jag tycker om att tänka på blocklagringsprotokoll som en “standard out”-ström, ungefär som på en kommandorad. Så basnivån i vilken lagrings-“pipeline” som helst är alltid en blockenhet och otaliga blockenheter eller transformationer kan existera där var och en är piped från den ena till den andra så länge utdatan förblir ett blocklagringsprotokoll. Vi avslutar kedjan endast när vi tillämpar ett filsystem. På detta sätt kan hårdvaru-RAID, nätverks-RAID, logisk volymhantering, osv. tillämpas i flera kombinationer efter behov. Blocklagring är verkligen inte bara datablock utan byggblock för lagringssystem.
En poäng som är mycket intressant är att eftersom blocklagringsenheter kan kedjas och eftersom nätverkslagringsenheter måste acceptera blocklagring som sin “indata” är det faktiskt ganska vanligt att en blocklagringsenhet (SAN) används som den underliggande lagringen för en fillagringsenhet (NAS), särskilt i avancerade system. De kan samexistera inom ett enda chassi eller de kan arbeta kooperativt på nätverket.
