พื้นที่เก็บข้อมูลถาวร: หน่วยความจำระยะยาวในยุคของคอนเทนเนอร์
เผยแพร่แล้ว: 2023-04-17ที่เก็บข้อมูลแบบถาวรหมายถึงการเก็บรักษาข้อมูลในลักษณะที่ไม่ลบเลือน เพื่อให้ข้อมูลยังคงใช้งานได้แม้ว่าอุปกรณ์หรือแอปพลิเคชันจะปิดหรือรีสตาร์ท การจัดเก็บและการดึงข้อมูลช่วยให้เว็บแอปพลิเคชันสามารถบันทึกข้อมูลผู้ใช้และสถานะและดำเนินการได้อย่างน่าเชื่อถือ
ในแอปพลิเคชันแบบ monolithic การเข้าถึงที่เก็บข้อมูลนั้นตรงไปตรงมาเพราะเซิร์ฟเวอร์และพื้นที่เก็บข้อมูลอยู่ด้วยกัน อย่างไรก็ตาม ระบบที่กระจายตามพื้นที่ทางภูมิศาสตร์ทำให้การเข้าถึงมีความซับซ้อนมากขึ้น เนื่องจากระบบจัดเก็บข้อมูลจะต้องยังคงใช้งานได้กับส่วนประกอบทั้งหมดทั่วโลก
การบรรจุในคอนเทนเนอร์ทำให้ปัญหาซับซ้อนยิ่งขึ้น เนื่องจากคอนเทนเนอร์มีน้ำหนักเบา ไร้สถานะ และมีลักษณะชั่วคราว ซึ่งไม่เหมาะสมสำหรับการจัดเก็บข้อมูล ดังนั้น โซลูชันการจัดเก็บข้อมูลถาวรใด ๆ จะต้องสามารถทำงานร่วมกับคอนเทนเนอร์ได้อย่างราบรื่น ซึ่งเป็นการเพิ่มความซับซ้อนอีกชั้นหนึ่ง
บทความนี้จะเจาะลึกถึงพื้นที่จัดเก็บข้อมูลถาวรโดยการสำรวจประเภท สถาปัตยกรรม และกรณีการใช้งาน นอกจากนี้ยังมีการสาธิตเชิงปฏิบัติที่แสดงความแตกต่างระหว่างที่เก็บข้อมูลโวลุ่มและที่เก็บข้อมูลโวลุ่มถาวรใน Docker
ประเภทของที่เก็บข้อมูลถาวร
ที่เก็บข้อมูลแบบไม่ลบเลือนมีหลายประเภท ได้แก่ ดิสก์หมุนแบบดั้งเดิม (ฮาร์ดดิสก์ไดรฟ์หรือ HDD) ไดรฟ์โซลิดสเทต (SSD) ที่เก็บข้อมูลที่เชื่อมต่อกับเครือข่าย (NAS) และเครือข่ายพื้นที่เก็บข้อมูล (SAN)
- HDD เป็นอุปกรณ์จัดเก็บข้อมูลเชิงกลไฟฟ้าที่จัดเก็บและดึงข้อมูลดิจิทัลโดยใช้ดิสก์หมุนของสื่อแม่เหล็ก ดิสก์ใช้หัวแม่เหล็กบนแขนแอคชูเอเตอร์ที่เคลื่อนที่ได้ซึ่งอ่านและเขียนข้อมูล
- SSD ซึ่งบางครั้งเรียกว่าอุปกรณ์เก็บข้อมูลเซมิคอนดักเตอร์ อุปกรณ์โซลิดสเตต หรือดิสก์โซลิดสเตต ใช้ชุดวงจรรวมเพื่อจัดเก็บข้อมูลอย่างต่อเนื่อง โดยปกติจะใช้อุปกรณ์แฟลชที่เชื่อมต่อระหว่างกันซึ่งไม่มีชิ้นส่วนที่เคลื่อนไหว ธรรมชาติที่อยู่กับที่ทำให้เร็วกว่าและเชื่อถือได้มากกว่า HDD
- ที่เก็บข้อมูลที่เชื่อมต่อกับเครือข่าย คือกลุ่มของ HDD, SSD หรือทั้งสองอย่าง ซึ่งเชื่อมต่อผ่านเครือข่ายท้องถิ่นโดยใช้ระบบไฟล์ เช่น New Technology File System (NTFS) หรือระบบไฟล์เสริมที่สี่ (EXT4)
- SAN เป็นอุปกรณ์เก็บข้อมูลระดับบล็อกความเร็วสูงบนเครือข่าย เช่น ไลบรารีเทปหรือดิสก์อาร์เรย์ การเชื่อมต่อจะปรากฏกับระบบปฏิบัติการเป็นที่เก็บข้อมูลในเครื่อง และไม่สามารถเข้าถึงได้ผ่านเครือข่ายท้องถิ่น (LAN)
สถาปัตยกรรมสตอเรจถาวร
มีสามวิธีในการจัดเก็บถาวร ซึ่งแต่ละวิธีมีกรณีการใช้งานและข้อจำกัดที่แตกต่างกัน
สถาปัตยกรรมถาวรของวัตถุ
แนวทางสถาปัตยกรรมถาวรของวัตถุใช้การแมปเชิงสัมพันธ์เชิงวัตถุ (ORM) เพื่อเก็บข้อมูลเป็นวัตถุในฐานข้อมูลเชิงสัมพันธ์หรือคีย์-ค่า วิธีการนี้มีประโยชน์เมื่อข้อมูลไม่มีสคีมาที่กำหนดไว้ เนื่องจาก ORM จะจัดการกับการจัดเก็บและการดึงข้อมูล
บล็อกสถาปัตยกรรมถาวร
สถาปัตยกรรมถาวรแบบบล็อกใช้อุปกรณ์จัดเก็บข้อมูลระดับบล็อก ซึ่งมีประโยชน์เมื่อจัดเก็บไฟล์ขนาดใหญ่ วิธีการนี้มีประโยชน์เมื่อจัดเก็บข้อมูลจำนวนมาก เนื่องจากคุณสามารถใช้หลายบล็อกเพื่อเพิ่มความจุในการจัดเก็บ
Filestore สถาปัตยกรรมถาวร
ตามชื่อที่แนะนำ วิธีสถาปัตยกรรมแบบคงอยู่ของที่เก็บไฟล์ใช้ระบบไฟล์เพื่อจัดเก็บข้อมูล วิธีหนึ่งเกี่ยวข้องกับการใช้เซิร์ฟเวอร์ฐานข้อมูล ซึ่งให้วิธีการจัดเก็บข้อมูลแบบรวมศูนย์ โซลูชันการโฮสต์บนคลาวด์เช่นเซิร์ฟเวอร์ฐานข้อมูลการใช้งานของ Kinsta ที่เชื่อมต่อกับแอปพลิเคชันได้อย่างง่ายดายและมีความคงอยู่
สถาปัตยกรรมถาวรของ Filestore มีประโยชน์ในแอปพลิเคชันที่ต้องการการเรียกค้นไฟล์บ่อยครั้ง และเมื่อคุณต้องการอินเทอร์เฟซเพื่อจัดการไฟล์เหล่านั้น
กรณีการใช้งานที่เก็บข้อมูลถาวร
ส่วนนี้จะกล่าวถึงกรณีการใช้งานของที่เก็บข้อมูลแต่ละประเภท
พื้นที่เก็บข้อมูลถาวรของวัตถุ
- ที่เก็บข้อมูลบนคลาวด์: ที่เก็บข้อมูลถาวรแบบวัตถุมักใช้ในโซลูชันที่เก็บข้อมูลบนคลาวด์เพื่อจัดเก็บและดึงข้อมูลที่ไม่มีโครงสร้างจำนวนมาก เช่น รูปภาพ วิดีโอ และเอกสาร ผู้ให้บริการระบบคลาวด์ใช้พื้นที่จัดเก็บแบบออบเจกต์เพื่อให้บริการพื้นที่เก็บข้อมูลที่ปรับขนาดได้ พร้อมใช้งานสูง และทนทานแก่ลูกค้า
- การวิเคราะห์ข้อมูลขนาดใหญ่: พื้นที่จัดเก็บแบบถาวรของออบเจกต์ถูกนำมาใช้ในการวิเคราะห์ข้อมูลขนาดใหญ่เพื่อจัดเก็บและจัดการชุดข้อมูลขนาดใหญ่ที่มักใช้สำหรับการวิเคราะห์ข้อมูล การเรียนรู้ของเครื่อง และ AI ที่เก็บข้อมูลแบบอ็อบเจกต์ช่วยให้สามารถเข้าถึงข้อมูลได้อย่างรวดเร็วและมีประสิทธิภาพ ทำให้เป็นองค์ประกอบหลักของสถาปัตยกรรมข้อมูลขนาดใหญ่
- เครือข่ายการจัดส่งเนื้อหา: พื้นที่จัดเก็บถาวรแบบออบเจกต์ใช้ในเครือข่ายการจัดส่งเนื้อหา (CDN) เพื่อจัดเก็บและแจกจ่ายเนื้อหา เช่น รูปภาพ วิดีโอ และไฟล์แบบสแตติก ผ่านเครือข่ายเซิร์ฟเวอร์ทั่วโลก ที่เก็บข้อมูลวัตถุช่วยให้ CDN สามารถส่งเนื้อหาความเร็วสูงไปยังผู้ใช้ทั่วโลก โดยไม่คำนึงถึงสถานที่
บล็อกที่เก็บข้อมูลถาวร
- การประมวลผลประสิทธิภาพสูง (HPC) : สภาพแวดล้อม HPC ประมวลผลข้อมูลจำนวนมากอย่างรวดเร็วและมีประสิทธิภาพ พื้นที่เก็บข้อมูลถาวรแบบบล็อกช่วยให้คลัสเตอร์ HPC สามารถจัดเก็บและดึงชุดข้อมูลขนาดใหญ่ เช่น การจำลองทางวิทยาศาสตร์ การสร้างแบบจำลองสภาพอากาศ และการวิเคราะห์ทางการเงิน ที่เก็บข้อมูลแบบบล็อกมักเป็นที่นิยมสำหรับ HPC เนื่องจากให้การเข้าถึงข้อมูลที่มีประสิทธิภาพสูง เวลาแฝงต่ำ และช่วยให้สามารถดำเนินการอินพุต/เอาต์พุต (I/O) แบบขนานได้ ซึ่งสามารถปรับปรุงเวลาในการประมวลผลได้อย่างมาก
- การตัดต่อวิดีโอ: แอปพลิเคชันตัดต่อวิดีโอต้องการการเข้าถึงไฟล์วิดีโอขนาดใหญ่ที่มีประสิทธิภาพสูงและมีเวลาแฝงต่ำ นอกจากนี้ยังต้องรองรับการดำเนินการ I/O จำนวนมากต่อวินาทีและเวลาแฝงต่ำเพื่อเรนเดอร์และแก้ไขไฟล์วิดีโอแบบเรียลไทม์ ที่เก็บข้อมูลแบบบล็อกมีความสามารถเหล่านี้ ทำให้เป็นโซลูชันที่เหมาะสำหรับเวิร์กโฟลว์การตัดต่อวิดีโอ
- การเล่นเกม: แอปพลิเคชันเกมยังต้องการประสิทธิภาพสูงและเวลาแฝงต่ำเพื่อเข้าถึงเนื้อหาเกมและข้อมูลผู้เล่น ที่เก็บข้อมูลแบบบล็อกจะจัดเก็บและดึงข้อมูลจำนวนมากได้อย่างรวดเร็ว ทำให้มั่นใจได้ว่าสภาพแวดล้อมของเกมจะโหลดได้ทันท่วงทีและยังคงตอบสนองระหว่างการเล่นเกม
Filestore ที่เก็บข้อมูลถาวร
- สื่อและความบันเทิง: แอปพลิเคชันตัดต่อวิดีโอ แอนิเมชัน และเรนเดอร์มักใช้ที่เก็บข้อมูลถาวร แอปพลิเคชันเหล่านี้ต้องการการเข้าถึงไฟล์มีเดียขนาดใหญ่ที่มีประสิทธิภาพสูงและมีเวลาแฝงต่ำ เช่น วิดีโอ เสียง และรูปภาพ Filestore มีระบบไฟล์ที่ใช้ร่วมกันซึ่งสามารถเข้าถึงได้โดยไคลเอ็นต์หลายเครื่อง ทำให้เป็นโซลูชันการจัดเก็บข้อมูลที่เหมาะสำหรับแอปพลิเคชันเหล่านี้
- การจัดการเนื้อหาเว็บ: ระบบจัดการเนื้อหาเว็บ (CMS) ใช้ที่จัดเก็บไฟล์ถาวรในระบบไฟล์ที่ใช้ร่วมกันเพื่อจัดเก็บและจัดการเนื้อหาเว็บไซต์ เช่น ข้อความ รูปภาพ และไฟล์มัลติมีเดีย Filestore เป็นตำแหน่งศูนย์กลางสำหรับเนื้อหาเว็บไซต์ ทำให้การจัดการและอัปเดตง่ายขึ้น นอกจากนี้ยังช่วยให้ผู้ใช้หลายคนสามารถทำงานในเนื้อหาเดียวกันได้พร้อมกัน ปรับปรุงการทำงานร่วมกันและประสิทธิภาพการทำงาน
การจัดเก็บถาวรในคอนเทนเนอร์
คอนเทนเนอร์มีน้ำหนักเบา พกพาสะดวก ปลอดภัย และตรงไปตรงมา นำเสนอการผสมผสานระหว่างการใช้งานต่างๆ ต้องมีกลไกในการคงข้อมูลระหว่างการรีสตาร์ทคอนเทนเนอร์และการลบ คอนเทนเนอร์มีที่เก็บไฟล์หรือระบบไฟล์เหมือนแอปพลิเคชันทั่วไป แต่เมื่อใดก็ตามที่คุณสร้างใหม่ด้วยการเปลี่ยนแปลงใหม่ คุณจะสูญเสียข้อมูลที่ไม่คงอยู่ทั้งหมด
นั่นเป็นเหตุผลที่คอนเทนเนอร์เสนอตัวเลือกในการรวมที่เก็บข้อมูลโวลุ่มหรือเมานต์โวลุ่มที่เก็บข้อมูล คอนเทนเนอร์ถือว่าปริมาณพื้นที่จัดเก็บเป็นไดเร็กทอรี ข้อมูลใดๆ ที่เขียนลงในไดรฟ์ข้อมูลจะเข้าสู่ระบบไฟล์โฮสต์
ที่เก็บข้อมูลถาวรสำหรับคอนเทนเนอร์ต้องทำงานในลักษณะนี้ เนื่องจากการรีสตาร์ทคอนเทนเนอร์จะสร้างอินสแตนซ์ใหม่และละทิ้งอินสแตนซ์เก่า หากคอนเทนเนอร์ไม่มีมุมมองข้อมูลที่สอดคล้องกัน ข้อมูลจะหายไปเมื่อรีสตาร์ทคอนเทนเนอร์ วอลุ่มพื้นที่จัดเก็บจะรักษาข้อมูลระหว่างเซสชันและการรีสตาร์ทคอนเทนเนอร์ ทำให้คอนเทนเนอร์สามารถคงสถานะไว้ได้ แม้ว่าจะถูกย้ายหรือรีสตาร์ท
ปริมาณเทียบกับปริมาณถาวร
คอนเทนเนอร์จัดให้มี 2 วิธีในการจัดเก็บข้อมูลถาวร: การใช้วอลุ่มและวอลุ่มถาวร มีความแตกต่างอย่างมีนัยสำคัญระหว่างพวกเขา คอนเทนเนอร์จัดการข้อมูลในที่เก็บข้อมูลปริมาณ เมื่อคุณหยุดคอนเทนเนอร์ ข้อมูลจะยังคงอยู่และพร้อมใช้งานเมื่อคุณรีสตาร์ทคอนเทนเนอร์ อย่างไรก็ตาม เมื่อคุณลบหรือลบคอนเทนเนอร์ ข้อมูลจะสูญหายเมื่อคุณลบที่เก็บข้อมูลโวลุ่มพื้นฐานด้วย
ที่เก็บข้อมูลวอลุ่มถาวรหรือการเมานต์ผูกเป็นวิธีการจัดเก็บข้อมูลนอกระบบไฟล์ของคอนเทนเนอร์ ด้วยวิธีนี้ ข้อมูลจะไม่สูญหายแม้ในขณะที่คุณลบคอนเทนเนอร์ จะคงอยู่จนกว่าจะลบด้วยตนเอง
ส่วนต่อไปนี้จะสาธิตไดรฟ์ข้อมูลทั้งสองประเภทพร้อมตัวอย่าง
การสาธิตพื้นที่เก็บข้อมูลถาวรของคอนเทนเนอร์
เราได้สร้างเว็บแอปพลิเคชันขนาดเล็กเพื่อสาธิตพื้นที่เก็บข้อมูลถาวรด้วยคอนเทนเนอร์ Docker คุณสามารถติดตามด้วยการติดตั้ง Docker และคว้าโค้ดจากที่เก็บ GitHub นี้
แอปพลิเคชันเป็นรูปแบบพื้นฐานที่มี 2 ฟิลด์สำหรับการป้อนข้อมูลของผู้ใช้:
- ชื่อ
- ข้อความเอกสาร
เมื่อคุณบันทึกอินพุตของผู้ใช้แล้ว คุณจะสามารถเข้าถึงได้โดยเปิดไฟล์ในไดเร็กทอรี คำติชม ด้วยชื่อที่ระบุในช่อง ชื่อเรื่อง อินพุตจากฟิลด์ Document Text คือเนื้อหาของไฟล์
วิธีใช้ที่เก็บข้อมูลโวลุ่ม
เมื่อคุณติดตั้งแอปพลิเคชันบนเครื่องของคุณเองแล้ว จะสามารถใช้ที่เก็บข้อมูลโวลุ่มตามที่แสดงใน Dockerfile
ตอนนี้ คุณสร้างอิมเมจและเรียกใช้คอนเทนเนอร์ โดยดำเนินการคำสั่งต่อไปนี้
docker build -t feedback-node:volumes . docker run -d -p 3000:80 --name feedback-app feedback-node:volumes
เมื่อแอปพลิเคชันทำงาน ให้ไปที่ localhost:3000 เพื่อส่งความคิดเห็น
คลิก บันทึก และไปที่ localhost:3000/feedback/test.txt เพื่อดูว่าจัดเก็บอินพุตสำเร็จหรือไม่
ลบและรีสตาร์ทคอนเทนเนอร์เพื่อดูว่าอินพุตยังคงอยู่หรือไม่
docker stop feedback-app docker start feedback-app
หากตอนนี้คุณไปที่ URL เดิม คุณจะเห็นว่าข้อเสนอแนะยังคงอยู่ แต่จะเกิดอะไรขึ้นถ้าคุณเอาคอนเทนเนอร์ออกแล้วรีสตาร์ท
docker stop feedback-app docker rm feedback-app docker run -d -p 3000:80 --name feedback-app feedback-node:volumes
เมื่อรีสตาร์ทแล้ว หากคุณกลับไปที่ URL นั้น จะไม่มีอยู่อีกต่อไปเนื่องจากข้อมูลสูญหายเมื่อคุณลบคอนเทนเนอร์ ข้อมูลวอลุ่มจะคงอยู่เมื่อหยุดคอนเทนเนอร์เท่านั้น ไม่ใช่เมื่อนำคอนเทนเนอร์ออก
เพื่อลดปัญหานี้และคงข้อมูลไว้แม้ในขณะที่คุณลบคอนเทนเนอร์ คุณต้องใช้ที่เก็บข้อมูลโวลุ่มแบบถาวรหรือที่เก็บข้อมูลที่มีชื่อ ก่อนอื่น คุณควรทำความสะอาดคอนเทนเนอร์และรูปภาพ
docker stop feedback-app docker rm feedback-app docker rmi feedback-node:volumes
วิธีใช้ที่เก็บข้อมูลวอลุ่มแบบถาวร
ก่อนทำการทดสอบ คุณต้องลบแอตทริบิวต์ VOLUME ออกจาก Dockerfile และสร้างอิมเมจใหม่
docker build -t feedback-node:volumes . docker run -d -p 3000:80 --name feedback-app -v feedback:/app/feedback feedback-node:volumes
อย่างที่คุณเห็น ในคำสั่งที่สอง คุณใช้แฟล็ก -v
เพื่อกำหนดวอลุ่มถาวรภายนอกคอนเทนเนอร์ ซึ่งจะคงอยู่แม้ในขณะที่คุณลบคอนเทนเนอร์ออก
เช่นเดียวกับขั้นตอนก่อนหน้า ให้ลองเพิ่มความคิดเห็นและเข้าถึงความคิดเห็นเมื่อคุณหยุด นำออก และรีสตาร์ทคอนเทนเนอร์
docker stop feedback-app docker rm feedback-app docker run -d -p 3000:80 --name feedback-app -v feedback:/app/feedback feedback-node:volumes
อย่างที่คุณเห็น แม้จะหยุดและนำคอนเทนเนอร์ออกแล้ว ข้อมูลก็ยังสามารถเข้าถึงได้และยังคงอยู่
สรุป
พื้นที่เก็บข้อมูลถาวรมีความสำคัญต่อแอปพลิเคชันที่มีคอนเทนเนอร์ เนื่องจากช่วยให้ข้อมูลคงอยู่นอกวงจรชีวิตของคอนเทนเนอร์ ที่เก็บข้อมูลถาวร 2 ประเภทหลักสำหรับแอปพลิเคชันที่มีคอนเทนเนอร์คือไดรฟ์ข้อมูลและตัวยึดแบบรวม ซึ่งแต่ละประเภทมีประโยชน์และกรณีการใช้งาน
วอลุ่มถูกจัดเก็บไว้ในระบบไฟล์ของคอนเทนเนอร์ ในขณะที่การผูกการเมานต์สามารถเข้าถึงได้โดยตรงจากเครื่องโฮสต์
ที่เก็บข้อมูลถาวรช่วยให้สามารถแชร์ข้อมูลระหว่างคอนเทนเนอร์ได้ ทำให้สามารถสร้างแอปพลิเคชันหลายชั้นที่ซับซ้อนได้ พื้นที่จัดเก็บข้อมูลแบบถาวรเป็นสิ่งจำเป็นสำหรับการรับรองความเสถียรและความต่อเนื่องของแอปพลิเคชันคอนเทนเนอร์ ซึ่งมอบวิธีที่เชื่อถือได้และยืดหยุ่นในการจัดเก็บข้อมูลสำคัญ
และหากคุณใช้ Docker เพื่อพัฒนาเว็บแอปพลิเคชัน คุณจะพบว่าการกำหนดค่าการปรับใช้ Dockerfile ด้วยบริการ Application Hosting ของ Kinsta นั้นเป็นเรื่องง่าย