สวัสดีครับเพื่อน ๆ ชาว IT กลับมาพบกันอีกครั้งกับ Cloud HM Blog บทความให้ความรู้เกี่ยวกับวงการ IT นะครับ วันนี้เรามาคุยกันถึงเรื่องของ IT Infrastructure กันนะครับ ส่วนประกอบอย่างนึงที่สำคัญที่ขาดเลยไม่ได้ก็คือ Storage นั่นเองครับ วันนี้เราจะมาดูกันว่าปัญหาเรื่องประสิทธิภาพในการใช้งานเจ้า Storage ส่วนใหญ่เกิดมาจากอะไรบ้างนะครับ มาดูกันครับ
ในทางทฤษฎีแล้ว Hard disk ในยุคใหม่ ๆ จะมีความสามารถในด้านการอ่าน และการเขียน (I/O) มากกว่า 100 MB/s อยู่แล้ว ยิ่งถ้าเป็นพวก SSD (Solid-state disk) ยิ่งทำได้ไว หรืออาจจะใช้การทำ RAID จาก Disk หลาย ๆ ลูกก็ได้เช่นกันแต่ในความเป็นจริงแล้วประสิทธิภาพของ I/O ที่มาจาก HDD หรือ SSD ของคุณอาจจะมีค่าที่ต่ำกว่าในทางทฤษฎี และถ้าคุณมีการตั้งค่า Disk ให้มีการใช้งานที่ซับซ้อน หรือใช้งานร่วมกับ Hardware ที่มีประสิทธิภาพการทำงานทีดีก็อาจจะเป็นหนึ่งในองค์ประกอบที่ทำให้เกิดคอขวดจากการใช้งานซึ่งทำให้ I/O Latency สูงเกินไปสำหรับ Storage ครับ
เรามาดูกันอะไรบ้างเป็นสาเหตุโดยส่วนใหญ่ที่ให้เกิดปัญหา I/O Latency สูง และวิธีแก้ปัญหาดังกล่าวครับ
- ปัญหาคอขวดจาก Software
ตัว Disk ไม่ได้อ่าน และเขียนได้ด้วยตัวของมันเอง การที่จะอ่าน และเขียนได้เกิดจากการที่ต้องใช้ Software มาสั่ง หรือในอีกความหมายนึงก็คือ Application หรือ OS เป็นคนสั่งให้ Disk ทำ ส่วนจะเร็วหรือช้าก็ต้องขึ้นอยู่กับว่า Software ส่งคำสั่งไปให้เร็วแค่ไหนนะครับ ถ้า Application หรือ OS ทำงานช้าลง I/O rate ของ Disk ก็จะประสิทธิภาพตกลงด้วยครับ
ปัญหาเรื่อง Software ทำงานได้ช้าก็มาจากหลายสาเหตุครับ เช่น
1.1 บางทีอาจเกิดจาก Application พยายามไปเรียกข้อมูลจาก Database ที่จัดโครงสร้างไว้ไม่ได้ ทำให้ใช้เวลาในนานในการดึงข้อมูลจาก Database ซึ่งการดึงข้อมูลก็จะต้องใช้ค่า Read จาก Disk ในการดำเนินการ
1.2 อาจเกิดจากการที่มี Application Run อยู่หลายตัวภายใน Server เพียงตัวเดียว ทำให้เกิดปัญหาเรื่อง CPU มีให้ใช้งานไม่เพียง ทำให้ทำงานได้ช้าลง
วิธีการแก้ไขปัญหา
จะต้อง Monitor Application ในการใช้งาน รวมถึงไป Operating Systems ด้วยว่าถ้าเห็นว่า I/O มีการทำงานช้าลง สิ่งที่ต้องตรวจสอบเป็นอันดับแรกคือ Software ที่คุณใช้งานครับ
- ปัญหาคอขวดจาก Network
Application สมัยใหม่ส่วนใหญ่จะ Deploy โดยการทำเป็น Microservices แยกเป็นชุด ๆ ทำให้มีการเชื่อมต่อกันระหว่าง Cluster ภายใน Server และก็ต้องพึ่ง Network ในการสื่อสารระหว่างกันในทางทฤษฎี เราจะต้องจูนให้การทำงานของ Application ย่อย ๆ เหล่านั้นรวมกันแล้วให้ใช้งาน Storage I/O ไม่เกินไปกว่าค่าที่อุปกรณ์รับไหว เนื่องจาก Network Throughput ในสมัยนี้ ส่วนใหญ่จะเป็น 1,000 GB/s หรือ 125 MB/sแต่ในทางปฏิบัติก็มีปัญหาหลาย ๆ อย่างที่ทำให้เกิดคอขวดในส่วนของ Network ซึ่งทำให้กระทบกับ Disk I/O เนื่องจาก Application จะอ่าน และเขียนได้ไม่เร็วพอบน Network ทำให้มี Traffic มากเกินกว่าที่ Switch และ Interface จะรับไหว หรือปัญหาอาจเกิดจาก Network Service Discovery ของแต่ละ Environment Map ค่าระหว่าง IP กับ Endpoint ไม่ตรงกัน ก็จะทำให้ Traffic ส่งไปผิดที่ ปัญหานี้จะเกิดได้จาก Service มีการ Run ใช้งานอยู่ในหลาย ๆ Subnet ทำให้ Network Throughput Drop ลงได้
วิธีการแก้ปัญหา
จะมีการ Monitor Network ในระหว่างการใช้งาน Software ว่า Performance ที่ได้เพียงพอต่อการเรียกใช้งานของ Disk I/O หรือไม่
- ปัญหาที่มีที่มาจาก Virtual Storage
นอกจากเรื่องในของ Network ที่มีการใช้งานสูงแล้ว Application สมัยใหม่ส่วนใหญ่จะมีการใช้ Virtual Storage (เป็น Software ที่ทำจำลอง Storage แบ่งมาจาก Physical Storage) ข้อดีของ Virtual Storage คือมีความยืดหยุ่นกว่า Storage ปกติที่ใช้งานโดยตรงจาก Physical Service เนื่องจากสามารถนำมาจับมัดรวมกันได้ ตั้งค่าให้ทำ Automated Failover ระหว่าง Disk ได้ และสามารถเพิ่ม/ลบ Physical Disk จาก Storage Pool ได้อย่างไรก็ตาม Virtual Storage ก็ยังเพิ่มความซับซ้อนและเพิ่มโอกาสของจุดที่จะเกิดความเสียหายมากขึ้นภายใน Storage ถ้าตัว Software ที่จัดการเรื่องของ Storage มี Bug หรือ CPU หรือ Memory ไม่พอในการใช้งาน ปัญหาเรื่อง Storage I/O จะเกิดแน่ ๆ การที่เราเพิ่ม Virtual Storage จะมาพร้อมกับการใช้งาน I/O ที่มากขึ้น ซึ่งตามปกติแล้ว Virtual Disk ก็ไม่ควรที่จะอ่าน และเขียนได้เร็วเท่ากับตัว Physical Server อยู่แล้ว
วิธีการแก้ปัญหา
จะต้องมีการ Monitor Software ที่ดูแลเรื่องของ Storage Pools และเครื่องมือต่าง ๆ ที่ใช้จัดการเรื่องของ Storage จุดนี้สำคัญมากพอ ๆ กับข้อ 1 และ 2
- ปัญหาจากการการตั้งค่า RAID
การทำ RAID คือการนำเอา Disk หลาย ๆ ลูกมาจัดรวมกันเป็นกลุ่มให้มองเป็น Disk ก้อนเดียว (ฟังดูเหมือน RAID จะคล้ายกับ Virtual Storage ใช่ไหมครับ แต่จริง ๆ แล้วความต่างก็คือ RAID สามารถ Manage ได้ที่ Hardware หรือ Software ที่มีการทำมาเฉพาะกับการทำ RAID แต่ Virtual Storage จะต้องใช้ Software-defined ที่ทำมาเฉพาะ On-top Hardware อีกทีนึง)ประโยชน์ของ RAID มีอยู่ 2 อย่างที่สำคัญ คือ สามารถช่วยเพิ่มทั้ง Storage I/O โดยการกระจาย I/O ไปหลาย ๆ Physical Disk และความพร้อมใช้ของข้อมูลให้ปลอดภัยมากขึ้น โดยการ Copy ข้อมูลไปใส่ Physical Disk หลาย ๆ ลูก แต่ก็ขึ้นอยู่กับผู้ใช้งานว่าจะจัดทำ RAID ในลักษณะไหนให้ได้ตามจุดประสงค์ในการใช้งาน ซึ่ง RAID ก็มีหลากหลายรูปแบบในการตั้งค่า บางวิธีก็ช่วยเพิ่ม I/O ได้มากกว่าแบบอื่น (ส่วนนี้ผมขอไม่ลงรายละเอียดนะครับ ใน Internet มีคนเขียน บทความไว้ค่อนข้างเยอะแล้ว)ทีนี้เรามาดูปัญหากัน ตัว RAID controller ซึ่งอาจจะเป็น Hardware หรือ Software ก็ได้ที่ใช้บริหารจัดการการทำ RAID สามารถทำให้ Storage I/O ช้าลงได้ ถ้าคุณทำ RAID โดยไม่ได้วางแผนเรื่องของ I/O ที่จะใช้ดี ๆ
วิธีการแก้ปัญหา
ควรตรวจสอบ Health Check ของ RAID controller โดยดูให้แน่ใจว่ามีการตั้งค่าให้ใช้งานประสิทธิภาพของ I/O กับการกระจายความพร้อมใช้ของข้อมูลได้เหมาะสมหรือไม่ ถ้าคุณมีการทำ Backup ข้อมูลโดยที่คุณไม่ได้สนเรื่องความพร้อมใช้ของข้อมูลอยู่แล้ว ก็ควรเปลี่ยนไปใช้ RAID 0 แทน จะช่วยเพิ่มประสิทธิภาพของ I/O ได้ดีที่สุดแต่ก็ต้องแลกมากับการที่อาจจะไม่มีข้อมูลสำรองใน Disk ที่ใช้งานหลัก
- ปัญหาจาก Storage hardware เสียหาย
ปัญหาสุดท้ายที่ทำให้ Storage I/O ช้าลง ก็คือ ปัญหาเรื่องของอุปกรณ์ Storage บางอย่างเสียหาย เช่น Hard Drive เมื่อใช้งานไปนาน ๆ ค่า I/O Rate สูงสุดที่ทำได้จะลดลงเรื่อย ๆ แม้ว่าจะไม่ได้มีปัญหาเรื่องของ I/O Error อุณหภูมิของ Disk ที่สูงเกินไปก็มีผลกระทบต่อ I/O Latency เมื่อใช้งานแบบนี้ไปเรื่อย ๆ ก็จะเจอปัญหาเรื่อง I/O Error หรือไม่ก็ I/O Latency สูง เนื่องจากมาหากส่ง Request ไปแล้ว Failed ก็จะส่งซ้ำเรื่อย ๆ จนกกว่าจะทำสำเร็จนั่นเอง
วิธีการแก้ปัญหา
ต้อง Monitor โดยการ Health Check Physical Storage โดยการบันทึกและติดตามอายุการใช้งานของ Disk และอุณหภูมิขณะใช้งาน หากเจอปัญหาจะได้แจ้งเปลี่ยนอุปกรณ์ได้ก่อนที่ I/O จะ Drop ลงมาก ๆ ได้
สรุปแล้วการที่จะได้ I/O rate ตามที่คุณต้องการแล้วจะต้องดูองค์ประกอบหลาย ๆ อย่างนอกจากการซื้ออุปกรณ์ Storage ต่าง ๆ ที่ได้ Spec ตรงตาม I/O ที่ต้องการ สิ่งที่สำคัญคือคุณจะต้อง Monitor และบริหารจัดการ Software และ Network ที่ทำงานร่วมกับ Disk อย่างระมัดระวัง และต้องตรวจสอบด้วย Virtual Storage กับ RAID มีการตั้งค่าที่เหมาะสม การดูแลรักษา Physical Device ก็เป็นเรื่องที่สำคัญเช่นกัน เพื่อช่วยยืดอายุการใช้งานให้ยาวนานขึ้นให้คุ้มกับที่ลงทุนเงินไป
เป็นอย่างไรกันบ้างสำหรับ 5 สาเหตุหลักของปัญหาเกี่ยวกับประสิทธิภาพการทำงานของ Storage หวังว่าทุกคนจะนำเอาไปปรับใช้ให้เกิดประโยชน์นะครับ แต่ถ้าไม่อยากมีปัญหาเรื่องการจัดการ Storage ท่านสามารถใช้บริหารของ Cloud HM ได้ โดยสามารถติดเราได้ผ่านช่องทางนี้นะครับ
ขอบคุณครับ
— Cloud HM