การซื้อบัญชี Tencent Cloud: ประสบการณ์เลือดและน้ำตาที่แท้จริงของปริมาณงานขนาดใหญ่ของเซิร์ฟเวอร์หน่วยความจำ

เมฆ 2026-06-17 阅读 3
cloud

ในแวดวงอินเทอร์เน็ตในปัจจุบันคำที่สถาปนิกและนักพัฒนาส่วนหลังพูดถึงทุกวันคือ:

การทำงานพร้อมกันสูงเวลาแฝงต่ำปริมาณงานขนาดใหญ่

ในการติดตามตัวชี้วัดเหล่านี้เราได้เพิ่มประสิทธิภาพโค้ดอย่างสิ้นหวังเพิ่มแคช Redis ทำการแยกการอ่านและเขียน MySQL และมีส่วนร่วมในฐานข้อมูลย่อยและตารางย่อย... ผมร่วงทั่วพื้นแต่ในหลายๆกรณีเมื่อเผชิญกับช่วงเวลาที่น่ากลัวอย่างแท้จริง (เช่นการเพิ่มขึ้นอย่างรวดเร็วของอีคอมเมิร์ซการจับสลากโปรโมชั่นขนาดใหญ่และอุปกรณ์ IoT ขนาดใหญ่ที่รายงานข้อมูลทุกวินาที) คุณจะพบว่าไม่ว่าคุณจะปรับให้เหมาะสมอย่างไรซีพียูของเซิร์ฟเวอร์ก็ยังคงเต็มทันทีและปริมาณงานของระบบมันไม่สามารถลุกขึ้นได้

ต่อมาเพื่อนของฉันปลุกฉันด้วยประโยคเดียว: "คุณซ่อมที่ชั้นซอฟต์แวร์ทุกวันทำไมคุณไม่ดูฮาร์ดแวร์พื้นฐานล่ะ?

อินสแตนซ์สากลที่คุณซื้อด้วยงบประมาณเพียงเล็กน้อยแบนด์วิดท์หน่วยความจำพื้นฐานและแคช CPU ถูกคุณบีบออกไปนานแล้ว!

ด้วยความสงสัยทีมงานของเราได้ย้ายแคชหลักและโหนดการประมวลผลข้อมูลไปยังเซิร์ฟเวอร์หน่วยความจำของผู้ให้บริการระบบคลาวด์ด้วยค่าใช้จ่ายของตนเองบทช่วยสอนของวันนี้ไม่ได้พูดถึงพารามิเตอร์ PPT อย่างเป็นทางการเสมือนจริงฉันจะพาคุณไปสัมผัสประสบการณ์ที่ครอบคลุมและสมจริงจากมุมมองของสถาปนิกแนวหน้า:

เมื่อเซิร์ฟเวอร์หน่วยความจำเข้าสู่ธุรกิจ "ทรูพุตขนาดใหญ่" ประสบการณ์ที่สดชื่นคืออะไร?

1.เซิร์ฟเวอร์หน่วยความจำคืออะไร? (เวอร์ชั่นพื้นถิ่น)

ก่อนที่จะพูดถึงการวัดจริงเราต้องหา:

อะไรคือความพิเศษของเซิร์ฟเวอร์หน่วยความจำ?

หลายคนคิดว่าเซิร์ฟเวอร์ไม่ใช่แค่ดู CPU กี่คอร์และหน่วยความจำกี่ GB? เซิร์ฟเวอร์ General Purpose มี16คอร์64G และเซิร์ฟเวอร์หน่วยความจำ Optimized ยังมี16คอร์64G ทำไมหน่วยความจำจึงมีราคาแพงกว่า? มันเก็บภาษีไอคิวหรือไม่?

คำตอบคือ:

"คุณภาพ" และ "อัตราส่วน" ของหน่วยความจำแตกต่างกันอย่างสิ้นเชิง

"อัตราส่วน" ที่น่ากลัว: อัตราส่วนของ CPU ต่อหน่วยความจำของเซิร์ฟเวอร์สากลมักจะอยู่ที่1:4 $ (เช่น4คอร์16G) ในขณะที่อัตราส่วนของเซิร์ฟเวอร์หน่วยความจำมักจะอยู่ที่1:8 $หรือ1:16 $ (เช่น4คอร์32G หรือ8คอร์64G)

"ช่องโอเวอร์คล็อก" ระดับฮาร์ดแวร์: เซิร์ฟเวอร์หน่วยความจำมักใช้ซีพียูระดับไฮเอนด์ล่าสุด (เช่นโปรเซสเซอร์ AMD EPYC หรือ Intel Xeon Scalable ความถี่สูง) และมีช่องหน่วยความจำมากกว่า (ช่องหน่วยความจำ) ซึ่งหมายความว่าหน่วยความจำเซิร์ฟเวอร์ธรรมดาดูเหมือนจะวิ่งบนถนนในเขตสองเลนในขณะที่หน่วยความจำของเซิร์ฟเวอร์หน่วยความจำวิ่งบนทางหลวงแปดเลนสองทางแบนด์วิดท์หน่วยความจำ (Bandwidth) และความถี่อ้างอิงสูงกว่าประเภทสากลมาก

ความล่าช้าต่ำมาก: เนื่องจากการเพิ่มประสิทธิภาพอย่างมากของการเข้าถึงหน่วยความจำโดยสถาปัตยกรรมพื้นฐานความล่าช้าในการเข้าถึงข้อมูลหน่วยความจำของ CPU (Latency) จึงถูกบีบอัดเป็นระดับนาโน

สอง

, การจำลองฉาก: "ธุรกิจนรก" ที่ทรมานเซิร์ฟเวอร์สากล

เพื่อให้ทุกคนมีความรู้สึกที่เข้าใจง่ายเกี่ยวกับ "ปริมาณงานขนาดใหญ่" ก่อนอื่นให้ฉันอธิบายสิ่งที่เราเผชิญ

ฉากธุรกิจจริง

:

เรามีแอป Internet of Things (IoT) ที่อุปกรณ์อัจฉริยะหลายแสนเครื่องทั่วประเทศจะออนไลน์พร้อมกันในช่วงเวลาสำคัญตั้งแต่8.00-9.00น. ทุกคืนอุปกรณ์แต่ละเครื่องจะรายงานข้อมูล JSON ที่ซับซ้อน (รวมถึงอุณหภูมิพลังงานวิถี GPS บันทึกการทำงานของผู้ใช้ฯลฯ) ไปยังเซิร์ฟเวอร์ทุกๆ0.5วินาที

จุดเจ็บปวดทางธุรกิจ: QPS (จำนวนคำขอต่อวินาที): จุดสูงสุดสามารถพุ่งไปที่100,000ลักษณะข้อมูล: ความถี่สูงปริมาณงานมากแต่แพ็กเก็ตข้อมูลเดียวมีขนาดเล็กสถาปัตยกรรมเก่า: เซิร์ฟเวอร์ที่ใช้งานทั่วไป1เครื่อง (16คอร์64G) สำหรับการส่งต่อ Nginx เซิร์ฟเวอร์ที่ใช้งานทั่วไป2เครื่องเรียกใช้บริการรับการเขียนภาษา Go ข้อมูลจะถูกเขียนลงในคลัสเตอร์แคช Redis ในเครื่องก่อนจากนั้นสคริปต์แบบอะซิงโครนัสจะถูกปัดลงใน MongoDB

ความผิดพลาดของสถาปัตยกรรมเก่าในชีวิตประจำวัน:

การซื้อบัญชีเทนเซ็นต์คลาวด์

ทุกคืนเวลา8:30น. ข้อความของตำรวจเริ่มทิ้งระเบิดอย่างไม่ไยดีเปิดบอร์ดตรวจสอบเพื่อดู:

อัตราการเข้าพักของ CPU มีเสถียรภาพสูงกว่า95%

Nginx เริ่มรายงาน502 Bad Gateway หรือ504 Gateway Timeout อย่างบ้าคลั่ง

ปริมาณงานของระบบ (Throughput) ติดอยู่ที่30,000/วินาทีและไม่สามารถขึ้นได้อีกคำขอที่เหลือทั้งหมดอยู่ในคิวหมดเวลาแล้วลองใหม่โดยอุปกรณ์ทำให้เกิดเอฟเฟกต์หิมะถล่มที่น่ากลัวยิ่งขึ้น

เราสงสัยในตอนนั้น: เห็นได้ชัดว่าหน่วยความจำถูกใช้น้อยกว่า40% ทำไมระบบถึงติด?

ต่อมาฉันใช้เครื่องมือเพื่อดึงข้อมูลพื้นฐาน

เนื่องจากการแลกเปลี่ยนข้อมูลบ่อยเกินไปซีพียูจึงใช้พลังงานไปมากในการสลับบริบทและคิวบัสของ "รอให้หน่วยความจำส่งข้อมูล" (นั่นคือคอขวดแบนด์วิดท์หน่วยความจำ)

3.การปรับแต่งขั้นสูงสุด: การวัดจริง24ชั่วโมงของการเปลี่ยนเซิร์ฟเวอร์หน่วยความจำ

เพื่อแก้ปัญหานี้เราโหดร้ายและเปลี่ยนเซิร์ฟเวอร์สากลสองเครื่องที่รับบริการเป็นสองเครื่องโดยตรง

เซิร์ฟเวอร์หน่วยความจำ (16คอร์128G โดยใช้สถาปัตยกรรมหน่วยความจำ DDR5รุ่นล่าสุด)

หลังจากเปิดตัวอีกครั้งเราใช้เครื่องมือทดสอบความเครียดเพื่อจำลองการทดสอบความเครียดพร้อมกัน100,000ครั้งประสบการณ์จริงสามารถอธิบายได้เพียงสองคำ:

สะเทือนใจ

ต่อไปนี้เป็นตารางเปรียบเทียบข้อมูลหลักที่เราบันทึกระหว่างการทดสอบความเครียด:

ตัวบ่งชี้การตรวจสอบ

สถาปัตยกรรมเก่า: ตัวอย่างทั่วไป (16แกน64G × 2)

สถาปัตยกรรมใหม่: อินสแตนซ์ประเภทหน่วยความจำ (16แกน128G × 2)

การปรับปรุงประสิทธิภาพและการเปลี่ยนแปลงประสบการณ์

ปริมาณงานมาก (Throughput)

~ 35,000คำขอ/วินาที (พบคอขวด)

112,000คำขอ/วินาที

ทะยานขึ้น3.2เท่ากลืนการจราจรทั้งหมดได้อย่างง่ายดาย

ความล่าช้าในการตอบสนองเฉลี่ย (Latency)

240ms (คิวจำนวนมาก

หมดเวลา)

4.2ms

การตอบสนองเกือบทันทีไม่มีการหมดเวลาที่ด้านอุปกรณ์

การใช้งาน CPU สูงสุด

95% - 100% (ติดขอบ)

32% - 40%

ซีพียูเป็นแบบสบายๆและมีระยะขอบมาก

การใช้แบนด์วิดท์หน่วยความจำ

ใกล้100% (บัสอุดตัน)

28%

พลังของ DDR5 8ช่องความกว้างของถนนรถน้อย

ปรับแต่งความรู้สึกของร่างกายที่แท้จริง:

เมื่อเครื่องมือวัดความดันดันจำนวนพร้อมกันเป็น100,000ฝ่ามือของฉันเหงื่อออกจริงๆแต่สิ่งที่น่าทึ่งก็คือเส้นโค้งการเฝ้าระวังไม่ได้ทะยานขึ้นถึง100% เหมือนเมื่อก่อน

เส้นโค้ง CPU ของเซิร์ฟเวอร์หน่วยความจำจะยกขึ้นเบาๆและอยู่ที่ประมาณ35% อย่างสง่างามภายใต้ปริมาณงานจำนวนมากบริการรับสัญญาณทั้งหมดทำได้ง่ายเหมือนการเดินเล่นในสายลมการหยุดชะงักของระบบ (Stop-the-World) ที่เกิดจากการแยกส่วนของหน่วยความจำและการรีไซเคิลขยะ (GC) ที่มักปรากฏบนเซิร์ฟเวอร์ที่ใช้งานทั่วไปจะถูกกำจัดอย่างไร้ร่องรอยเนื่องจากแบนด์วิดท์บัฟเฟอร์หน่วยความจำขนาดใหญ่ในอินสแตนซ์หน่วยความจำ

ประการที่สี่ความลึกเริ่มต้น: 3ความลับเบื้องหลังปริมาณงานขนาดใหญ่

เมื่อเห็นสิ่งนี้คุณอาจถามว่า: "พี่ชายฉันเปลี่ยนประเภทเซิร์ฟเวอร์ทำไมประสิทธิภาพจึงแย่ลงมาก? ตรรกะพื้นฐานเบื้องหลังนี้คืออะไร?"

เมื่อรวมกับการวัดจริงนี้ฉันจะแยกชิ้นส่วนเรื่องราวภายในสำหรับคุณ:

ความลับที่1: กำจัด "การรอที่ไม่ถูกต้อง" ของ CPU (Memory Bound)

ที่ด้านล่างของคอมพิวเตอร์ความเร็วในการประมวลผลของ CPU เร็วกว่าความเร็วในการอ่านและเขียนของหน่วยความจำหลายร้อยหรือหลายพันเท่าหากธุรกิจของคุณเป็น "ปริมาณงานจำนวนมาก" (เช่นการทำงานพร้อมกันสูงการอ่านและเขียนแคชบ่อยๆ) ซีพียูมักจะต้องหยุดทำงานและรอให้หน่วยความจำถ่ายโอนข้อมูล

เซิร์ฟเวอร์ที่ใช้งานทั่วไปมีแบนด์วิดท์หน่วยความจำต่ำและ CPU มักมีเวลา60% ในการ "พายเรือและข้อมูลอื่นๆ" แบนด์วิดท์สูงและการออกแบบช่องสัญญาณสูงของเซิร์ฟเวอร์หน่วยความจำ

ให้หน่วยความจำป้อนข้อมูลไปยัง CPU ด้วยความเร็วที่เร็วที่สุด

บีบประสิทธิภาพแบบมัลติคอร์ของ CPU จริงๆ

ความลับที่2: เป็นแหล่งเพาะทางกายภาพที่สมบูรณ์แบบสำหรับ Redis / Memcached

Redis ถูกใช้อย่างกว้างขวางในสถาปัตยกรรมของเรา Redis เป็นฐานข้อมูลหน่วยความจำบริสุทธิ์และเป็น

โมเดลเธรดเดี่ยว

บนเซิร์ฟเวอร์ที่ใช้งานทั่วไปเมื่อ Redis พบการอ่านและการเขียนหลายหมื่นครั้งต่อวินาทีบรรทัดเดียวจะติดขัดเนื่องจากการตอบสนองของหน่วยความจำช้าหลังจากเปลี่ยนเซิร์ฟเวอร์หน่วยความจำความล่าช้าของหน่วยความจำพื้นฐานนั้นต่ำมากและข้อดีของเรดิสแบบเธรดเดียวของ Redis ถูกนำมาใช้อย่างเต็มที่เครื่องสแตนด์อะโลนสามารถทะลุ100,000 QPS ได้อย่างง่ายดายและปริมาณงานจะเพิ่มขึ้นเป็นสองเท่าโดยตรง

ความลับที่3: "Space for Time" นำมาจากความจุหน่วยความจำขนาดใหญ่

เนื่องจากหน่วยความจำเซิร์ฟเวอร์หน่วยความจำมีความใจกว้างเพียงพอ (128G, 256G ทุกครั้ง) เราจึงเปิดรหัสภาษา Go ขนาดใหญ่โดยตรง

บัฟเฟอร์หน่วยความจำ (In-Memory Buffer Ring)

หลังจากข้อมูลเข้ามาคุณไม่จำเป็นต้องอ่านและเขียนดิสก์หรือซับซ้อนในทันที

การตรวจสอบเครือข่ายทั้งหมดถูกกองไว้ในหน่วยความจำโดยไม่ต้องใช้สมองแบทช์ (Batch) ถูกปัดลงในฐานข้อมูลโดยเซิร์ฟเวอร์ในพื้นหลังเกมเพลย์ "Space for Time" แบบนี้กล้าเล่นบนเซิร์ฟเวอร์ที่มีหน่วยความจำเต็มเท่านั้น

5.คำแนะนำในการหลีกเลี่ยงหลุม: ธุรกิจใดที่ควรปิดตา? อันไหนไม่ควรซื้อ?

แม้ว่าเซิร์ฟเวอร์หน่วยความจำจะเจ๋งแต่ราคาของมันก็แพงกว่าเซิร์ฟเวอร์ทั่วไปเพื่อช่วยให้ทุกคนประหยัดเงินฉันได้สรุปชุด

คู่มือการเลือกและหลีกเลี่ยงหลุม

💡อย่าลังเลสถานการณ์เหล่านี้ต้องอยู่ใน [เซิร์ฟเวอร์หน่วยความจำ]:

โหนดแคชประสิทธิภาพสูง: หากเซิร์ฟเวอร์ของคุณส่วนใหญ่ใช้เพื่อเรียกใช้ Redis, Memcached หรือ Nginx cache พร้อมกันสูง

การวิเคราะห์ข้อมูลขนาดใหญ่แบบเรียลไทม์/คิวข้อความ: เช่นเรียกใช้ Kafka, Spark Streaming, Flink เป็นต้นมิดเดิลแวร์เหล่านี้มีความต้องการแบนด์วิดท์หน่วยความจำสูงมาก

เซิร์ฟเวอร์เกมที่ทำงานพร้อมกันสูง: พิกัดปริมาณเลือดและสถานะของผู้เล่นในเกมทั้งหมดมีการโต้ตอบบ่อยครั้งในหน่วยความจำและเซิร์ฟเวอร์ที่ใช้งานทั่วไปไม่สามารถพกพาได้

ฐานข้อมูลที่สร้างขึ้นเองที่มีภาระงานสูงเช่น ClickHouse ที่ต้องการหน่วยความจำถาวรและอินสแตนซ์ MySQL ที่มีหน่วยความจำขนาดใหญ่

❌ฟังคำแนะนำของฉันการเลือก [ประเภทสากล/ประเภทการคำนวณ] สำหรับฉากเหล่านี้ก็เพียงพอแล้ว:

เว็บไซต์อย่างเป็นทางการขององค์กรทั่วไปบล็อกและพื้นหลังโปรแกรมขนาดเล็ก: การเกิดขึ้นพร้อมกันหลายร้อยครั้งและการใช้ประเภทหน่วยความจำเป็นการสิ้นเปลืองเงิน

ธุรกิจที่ต้องพึ่งพาการประมวลผลของ CPU เป็นอย่างมากเช่นการแปลงรหัสวิดีโอการแสดงภาพและการคำนวณทางวิทยาศาสตร์บริการเหล่านี้ต้องการ CPU ที่มีความถี่สูงประสิทธิภาพสูง (ควรเลือกอินสแตนซ์ C ที่ใช้คอมพิวเตอร์) ซึ่งไม่ไวต่อแบนด์วิดท์หน่วยความจำมากนัก

สถานีดาวน์โหลดไฟล์แบบคงที่บริสุทธิ์/ดิสก์สำรอง: คอขวดอยู่ที่แบนด์วิดท์เครือข่ายและปริมาณการทำงานของฮาร์ดดิสก์ (ควรเลือกแบนด์วิดท์ขนาดใหญ่และดิสก์คลาวด์มาตรฐาน) ซึ่งไม่เกี่ยวข้องกับหน่วยความจำ

หก. สรุป

"การวัดปริมาณงานที่แท้จริงของเซิร์ฟเวอร์หน่วยความจำขนาดใหญ่" ในครั้งนี้ได้ทำลายอคติ "CPU เท่านั้น" ของทีมเราในอดีตโดยสิ้นเชิง

การซื้อบัญชีเทนเซ็นต์คลาวด์

ในยุคของการประมวลผลแบบคลาวด์การกำจัดคอขวดของระบบมักไม่ได้ขึ้นอยู่กับว่าคุณได้สร้างโค้ดใหม่อย่างละเอียดเพียงใดแต่ขึ้นอยู่กับว่าคุณได้

ธุรกิจที่เหมาะสมวางไว้บนฮาร์ดแวร์ที่ตรงกับการแบ่งงานมากที่สุด

。เซิร์ฟเวอร์หน่วยความจำใช้แบนด์วิดท์ที่น่ากลัวและเวลาแฝงต่ำเพื่อแสดงให้เราเห็นว่า "การบินด้วยอิฐที่ทรงพลัง" ที่แท้จริงคืออะไร

หากธุรกิจของคุณกำลังทุกข์ทรมานจาก "การทำงานพร้อมกันสูงปริมาณงานมากและ CPU ที่สูงอย่างอธิบายไม่ได้" คุณอาจเปิดตัวอย่างหน่วยความจำเพื่อทดสอบความเครียดในคืนนี้-เชื่อฉันเถอะว่ามันเนียนนุ่มประสบการณ์ทรูพุตขนาดใหญ่จะทำให้คุณรู้สึกว่าเงินทุกบาทถูกใช้ไปกับใบมีด!

1
← 返回新闻中心