Redis on Flash (RoF) เป็นหนึ่งในฟังก์ชันระดับองค์กรที่ได้รับความนิยมมากที่สุดของเรา ทำให้การประมวลผลในหน่วยความจำคุ้มค่าโดยการจัดเก็บชุดข้อมูลได้ถึง 80% ใน SSD แทนที่จะเป็น DRAM ที่มีราคาแพง และในขณะที่ยังคงรักษาเวลาแฝงต่ำกว่ามิลลิวินาทีและ Redis ปริมาณงานสูง ในการปรับใช้ทั่วไป RoF มอบส่วนลด TCO สูงสุด 70%
ด้วยความร่วมมือใหม่ที่น่าตื่นเต้น 2 ครั้ง เราภูมิใจที่จะประกาศว่า RoF สามารถให้ประสิทธิภาพเพิ่มขึ้นถึง 3.7 เท่า ในขณะเดียวกันก็รักษาต้นทุนรวมในการเป็นเจ้าของที่น่าดึงดูดใจสำหรับการเรียกใช้ชุดข้อมูลขนาดใหญ่บน Redis ประการแรก AWS ได้ประกาศความพร้อมใช้งานทั่วไปของอินสแตนซ์รุ่นใหม่ นั่นคือ Amazon EC2 I4i ซึ่งขับเคลื่อนโดยโปรเซสเซอร์ Intel Xeon Scalable เจนเนอเรชั่นที่ 3 (ชื่อรหัส Ice Lake) และพื้นที่จัดเก็บบน AWS Nitro SSD NVMe รุ่นใหม่นี้สัญญาว่าจะให้ประสิทธิภาพที่เพิ่มขึ้นอย่างน่าทึ่งสำหรับลูกค้า Redis ที่เน้นข้อมูลมาก นอกจากนี้ เรายินดีที่จะแบ่งปันแผนการของเราในการเปิดโปรแกรมข้อมูลสำหรับ RoF ไปยังฐานข้อมูลที่เข้ากันได้กับ RocksDB ด้วยเทคโนโลยีที่เพิ่งประกาศใหม่จาก Speedb เป็นตัวเลือกแรก
เราเชื่อว่าการผสมผสานของอินสแตนซ์ I4i ใหม่และการให้ลูกค้ามีตัวเลือกสำหรับเอ็นจิ้นข้อมูลจะทำให้ RoF น่าสนใจยิ่งขึ้นสำหรับชุดข้อมูลขนาดใหญ่ เนื่องจากความต้องการประสบการณ์แบบเรียลไทม์เพิ่มขึ้นสำหรับบริษัทที่สร้างแอปพลิเคชันสมัยใหม่หรือสถาปัตยกรรมไมโครเซอร์วิสที่มีเวลาแฝงต่ำ
Amazon EC2 I4i และ Speedb นำอะไรมาสู่ Redis บน Flash
มาดูกันว่ามีอะไรใหม่ใน RoF AWS ขอเสนออินสแตนซ์ Amazon EC2 I4i ใหม่ ("i" สำหรับ Intel) ใน 4 ภูมิภาค อินสแตนซ์ I4i ใช้เทคโนโลยีล่าสุด โปรเซสเซอร์ Intel Ice Lake และ AWS Nitro SSD ซึ่งปรับปรุง IOPS และลดเวลาแฝงเมื่อเทียบกับอินสแตนซ์ I3 รุ่นก่อนหน้า
นอกเหนือจากฮาร์ดแวร์แล้ว เรามองหาวิธีที่ RoF สามารถส่งมอบประสิทธิภาพที่ดียิ่งขึ้นไปอีก และระบุโอกาสในการเปิดกลไกข้อมูลสู่นวัตกรรมโดยลูกค้าและผู้ประกอบการ เรายินดีที่จะแจ้งให้ทราบว่าขณะนี้ RoF เปิดให้ใช้เครื่องมือข้อมูลที่เข้ากันได้กับ RocksDB และ Speedb เป็นทางเลือกแรกที่นำเสนอโดย Redis ทีมงานที่ Speedb ร่วมงานกับเราได้ออกแบบโครงสร้างข้อมูลภายในของ RocksDB ใหม่ ซึ่งเพิ่มประสิทธิภาพและขนาดได้อย่างน่าประทับใจ พร้อมทั้งลดทรัพยากรของ CPU
ในบล็อกโพสต์นี้ เราแชร์วิธีที่ Speedb ให้ประสิทธิภาพที่เพิ่มขึ้นเกือบ 50% ในการทดสอบระดับย่อยของมิลลิวินาทีเมื่อเทียบกับ RocksDB ไม่ว่าเราจะใช้อินสแตนซ์ AWS EC2 แบบใด I4i หรือ I3
ขณะนี้ RoF พร้อม Speedb พร้อมใช้งานในการแสดงตัวอย่างส่วนตัว ลูกค้า Redis สามารถติดต่อทีมบัญชีของตนเพื่อขอข้อมูลเพิ่มเติมหรือทดลองใช้บริการใหม่ได้
การเปรียบเทียบ Redis ใหม่บน Flash
วิศวกรด้านประสิทธิภาพของเราแทบรอไม่ไหวที่จะได้รับมือกับอินสแตนซ์ I4i ของ AWS และทดสอบด้วยกลไกข้อมูล Speedb ใหม่ของ RoF เรายินดีที่ได้เป็นคู่ค้า AWS รายแรกในการทดสอบอินสแตนซ์ Amazon EC2 I4i อย่างละเอียด เพื่อเป็นการเตือนความจำ RoF จะจัดระดับชุดข้อมูลขนาดใหญ่อย่างชาญฉลาดและได้รับการออกแบบเพื่อใช้ประโยชน์จากราคาต่อ GiB ของ NVMe SSD ที่ถูกกว่าเมื่อเทียบกับ DRAM ซึ่งช่วยให้เราส่งมอบประสิทธิภาพระดับ Redis ได้เร็วขึ้นด้วยอินสแตนซ์ I4i ที่ต้นทุนการเป็นเจ้าของทั้งหมด 30% ของอินสแตนซ์ที่ใช้ DRAM
ก่อนที่จะเปรียบเทียบผลลัพธ์และตัวเลข เรามาทบทวนว่าเมื่อใดที่ลูกค้าควรพิจารณา RoF เราพัฒนา RoF สำหรับกรณีการใช้งานโดยที่ชุดข้อมูลการทำงานมีขนาดเล็กกว่าชุดข้อมูลทั้งหมด และการย้ายไปยัง DRAM เพิ่มเติมนั้นเป็นสิ่งที่ต้องห้ามด้านต้นทุน กรณีการใช้งาน RoF ทั่วไปอีกกรณีหนึ่งคือการประมวลผลข้อมูลแบบกลุ่ม ซึ่งข้อมูลจำนวนมากต้องได้รับการประมวลผลสำหรับแอปพลิเคชันที่มีความสำคัญต่อธุรกิจ ซึ่งต้องการเวลาแฝงที่ต่ำอย่างสม่ำเสมอและปริมาณงานสูงเมื่อเวลาผ่านไป
มาถึงส่วนที่สนุกแล้ว ผลการเปรียบเทียบ
สิ่งที่เราเปรียบเทียบ
เราเปรียบเทียบประสิทธิภาพของ Redis บน Flash กับอินสแตนซ์ AWS สี่รายการ:
i3.8xlarge – 244GB RAM, ไดรฟ์ 4xNVMe SSD รวม 7.6TB
I4i.4xlarge – 128GB RAM, 1xNVMe SSD ไดรฟ์ รวม 3.75TB
I4i.8xlarge – 256GB RAM, 2xNVMe SSD ไดรฟ์ รวม 7.5TB
I4i.16xlarge – 512GB RAM, ไดรฟ์ SSD 4xNVMe รวม 15TB
เราเปรียบเทียบประสิทธิภาพของเครื่องมือข้อมูล 2 รายการ
- RocksDB
- Speedb
ทดสอบพารามิเตอร์
เราใช้ขนาดค่า 1KiB ซึ่งครอบคลุมกรณีการใช้งาน Redis มาตรฐานส่วนใหญ่
เราทดสอบอัตราส่วนการเข้าถึง RAM 50% และ 85% (เช่น คำขอจำนวนมากส่งตรงจาก RAM)
เราทดสอบ RAM 20:80:อัตราแฟลช
เราเปรียบเทียบอัตราส่วนการอ่าน:เขียนต่างๆ:1:1, 4:1 และ 1:4
การทดสอบทั้งหมดทำโดยใช้สองเซิร์ฟเวอร์
ต่อไปนี้คือขนาดฐานข้อมูลที่เราเรียกใช้ตามประเภทอินสแตนซ์:
- I4i.4xlarge:500GB + การจำลองแบบ 5 ชาร์ดหลัก + 5 ชาร์ดจำลอง
- i3.8xlarge:1TB + การจำลองแบบ 10 ชาร์ดหลัก + 10 ชาร์ดจำลอง
- I4i.8xlarge:1TB + การจำลองแบบ 10 ชาร์ดหลัก + 10 ชาร์ดจำลอง
- I4i.16xlarge:2TB + การจำลองแบบ 20 ชาร์ดหลัก + 20 ชาร์ดจำลอง
ในการกำหนดค่าแต่ละรายการ เราได้ทดสอบจำนวน ops/sec ที่สามารถทำได้โดยรักษาเวลาแฝงของไคลเอ็นต์ที่ต่ำกว่ามิลลิวินาที (ไม่รวมเครือข่าย)
สิ่งที่เราพบ
กราฟด้านล่างแสดง i3 เทียบกับ I4i และ RocksDB เทียบกับ Speedb:
เราเห็นการปรับปรุงดังต่อไปนี้:
จาก | ถึง | ปัจจัยเร่งความเร็ว |
i3.8xlarge rocksdb | i3.8xlarge speedb | 1.3x |
I4i.8xlarge rocksdb | I4i.8xlarge speedb | 1.46x |
i3.8xlarge rocksdb | I4i.8xlarge rocksdb | 1.94x |
i3.8xlarge speedb | I4i.8xlarge speedb | 2.16x |
i3.8xlarge rocksdb | I4i.8xlarge speedb | 2.83x |
กราฟด้านล่างแสดงการปรับขนาดด้วย I4i บน Speedb และอัตราส่วนการอ่าน:เขียนที่แตกต่างกัน:
เราเห็นผลลัพธ์และการปรับปรุงดังต่อไปนี้:
ในแง่สเกล เราจะเห็นว่า RoF บน I4i ที่มี Speedb นั้นปรับขนาดได้เกือบเป็นเส้นตรง
4xlarge → 8xlarge มีแฟคเตอร์ ~1.55x-1.8x
8xlarge → 16xlarge มีตัวคูณสเกลอยู่ที่ ~1.85x-1.95x
ผลลัพธ์ที่น่าสังเกตประการที่สองคือ RoF บน I4i ที่มี Speedb ไม่เชื่อเรื่องรูปแบบการเข้าถึงแอปพลิเคชันมาก (อัตราส่วนการอ่าน:เขียน) นั่นหมายถึงประสิทธิภาพจะคงที่และสามารถคาดการณ์ได้ ซึ่งจะมีประโยชน์เมื่อทำงานกับแอปพลิเคชันต่างๆ หลายตัว หรือเมื่อรูปแบบการเข้าถึงแตกต่างกันไปตามช่วงเวลา
กราฟด้านล่างแสดงการปรับปรุงประสิทธิภาพโดยรวม 3.7 เท่า:
ภาคผนวก:
การตั้งค่าเกณฑ์มาตรฐาน
เวอร์ชัน Redis Enterprise:v. 6.2.8-39 บน Ubuntu 18.04
Redis บนฐานข้อมูล Flash:ดูรายละเอียดต่ออินสแตนซ์ด้านบน
เครื่องไคลเอ็นต์:EC2 m5.8xlarge (32 VCPU, 128 GB RAM)
เครื่องมือสร้างโหลด:เกณฑ์มาตรฐาน memtier
คำสั่งตัวอย่าง Memtier สำหรับอัตราการเข้าชม ram 85%:
memtier_benchmark -s
–hide-histogram –pipeline=1 -c 4 -t 256 -d 1000
–key-maximum=771141855 –key-pattern=G:G –key-stddev=50358491
–ratio=1:1 –distinct-client-seed –randomize –test-time=1200
ภาพประกอบการติดตั้ง: