เมื่อเลือกแพลตฟอร์มการปรับใช้งาน มักจะเป็นเรื่องยากมากที่จะเปรียบเทียบประสิทธิภาพในโลกแห่งความเป็นจริงระหว่างแพลตฟอร์มเหล่านั้น นี่เป็นเรื่องจริงโดยเฉพาะอย่างยิ่งสำหรับแพลตฟอร์มแบบไร้เซิร์ฟเวอร์ที่โฆษณาว่ามีความหน่วงต่ำมากเนื่องจากการปรับใช้ Edge ทั่วโลก แต่เวลาแฝงที่ต่ำจะมีประโยชน์อะไรหากการดึงข้อมูลของคุณยังช้าอยู่ หาก API ของคุณทำงานติดกับผู้ใช้แต่จำเป็นต้องทำเครือข่ายไปกลับครึ่งทางทั่วโลกเพื่อดึงข้อมูล คุณจะไม่มีวันมีช่วงเวลาที่ดี
โดยปกติแล้ว การประมวลผลและพื้นที่เก็บข้อมูลของคุณจะถูกจัดวางในเซิร์ฟเวอร์เดียวหรืออย่างน้อยก็ศูนย์ข้อมูลเดียวกัน แต่ด้วยฟังก์ชัน Serverless และ Edge ที่เพิ่มขึ้น เราได้เห็นการแยกส่วนการประมวลผลและพื้นที่เก็บข้อมูลออกจากกัน นี่เป็นวิธีที่ยอดเยี่ยมสำหรับการปรับขนาดและความพร้อมใช้งาน แต่กลับนำมาซึ่งปัญหาใหม่ นั่นคือ เวลาแฝง ทุกวันนี้ การปรับใช้ API ของคุณกับเครือข่าย Edge ทั่วโลกนั้นเป็นเรื่องง่ายเล็กน้อย แต่แล้วข้อมูลของคุณล่ะ ข้อมูลยังคงตามหลังอยู่ แต่ก็ตามทันอย่างแน่นอน
ในบทความนี้ เราจะเปรียบเทียบประสิทธิภาพของพื้นที่เก็บข้อมูลแบบไร้เซิร์ฟเวอร์สองแห่ง:Cloudflare KV และ Upstash Redis ทั้งสองแบบไม่มีเซิร์ฟเวอร์ ทั้งสองแบบกระจายทั่วโลก แต่มีแนวทางที่แตกต่างกันมาก Cloudflare KV เป็นที่จัดเก็บคีย์-ค่าแบบดึงข้อมูล ในขณะที่ Upstash เป็นบริการที่เข้ากันได้กับ Redis พร้อมการจำลองแบบที่ใช้งานอยู่
แบบดึง :โดยทั่วไปข้อมูลจะถูกจัดเก็บไว้ในตำแหน่งศูนย์กลางและจะถูกย้ายไปยังโหนดขอบเมื่อผู้ใช้ร้องขอเท่านั้น นี่คือแนวทางที่ Cloudflare KV นำมาใช้
การจำลองแบบที่ใช้งานอยู่ :ข้อมูลจะถูกจัดเก็บไว้ในทุกตำแหน่ง Edge และจะซิงค์โดยตัวจัดเก็บข้อมูลเอง การอัปเดตข้อมูลจะถูกจำลองแบบทันทีไปยังทุกภูมิภาค นี่คือแนวทางที่ Upstash และ Vercel นำมาใช้
การแคชเป็นเพียงการจัดเก็บคีย์และค่าต่างๆ มากมาย เป็นแนวคิดที่เรียบง่าย แต่ก็เป็นเรื่องธรรมดาเช่นกัน นอกจากนี้ยังเป็นวิธีที่ยอดเยี่ยมในการเปรียบเทียบประสิทธิภาพของพื้นที่เก็บข้อมูลสองแห่ง เราจะใช้สถานการณ์แคชง่ายๆ เพื่อเปรียบเทียบประสิทธิภาพของ Cloudflare KV และ Upstash Redis
เกณฑ์มาตรฐาน
จริงๆ แล้วเรากำลังทดสอบอะไรอยู่
เราจะวัดเวลาในการตอบสนองที่ผู้ปฏิบัติงาน Cloudflare พบเมื่ออ่านค่าเดียวจาก Cloudflare KV และ Upstash Redis
- ผู้ปฏิบัติงาน cloudflare 1 คน
- 1,000 คีย์
- 4KB - ขนาดข้อมูล 64KB (สุ่ม)
- 60s TTL บนทุกปุ่ม
- 20 ภูมิภาคเรียกคนงาน
- ~10 คำขอต่อวินาที
ฉันเลือกคีย์สเปซที่ค่อนข้างเล็ก เพื่อให้แน่ใจว่าเราได้รับแคชบางส่วนโดยไม่ต้องเพิ่ม RPS มากเกินไป
รหัสพนักงาน
ตัวผู้ปฏิบัติงานนั้นเรียบง่ายมาก เพียงอ่านจาก Redis อ่านจาก KV แล้วส่งคืนเวลาแฝงเหล่านั้นเพื่อประเมินในภายหลัง
worker.tsapp.get("/test", async (c) => {
const redis = Redis.fromEnv(c.env);
const key = Math.floor(Math.random() * 1_000).toString();
const minValueSize = 4 * 1024;
const maxValueSize = 64 * 1024;
const ttlSeconds = 60;
const randomValue = new TextDecoder().decode(
crypto.getRandomValues(
new Uint8Array(
Math.floor(Math.random() * (maxValueSize - minValueSize)) +
minValueSize,
),
),
);
const beforeRedis = performance.now();
const redisResponse = await redis.get(key);
const redisLatency = performance.now() - beforeRedis;
if (!redisResponse) {
await redis.set(key, randomValue, {
ex: ttlSeconds,
});
}
const beforeKV = performance.now();
const kvResponse = await c.env.ANDREAS_KV_BENCHMARK.get(key);
const kvLatency = performance.now() - beforeKV;
if (!kvResponse) {
await c.env.ANDREAS_KV_BENCHMARK.put(key, randomValue, {
expirationTtl: ttlSeconds,
});
}
return c.json({
kvLatency,
redisLatency,
});
}); ผลลัพธ์ - เวลาแฝงทั่วโลก
หลังจากรันการวัดประสิทธิภาพประมาณ 30 นาที เราก็สามารถสังเกตเห็นความแตกต่างที่สำคัญระหว่างพื้นที่เก็บข้อมูลทั้งสองแห่งได้แล้ว
คลิกที่ภาพเพื่อดูขนาดเต็ม
อย่างที่คุณเห็น Cloudflare KV นั้นช้ากว่า Upstash Redis อย่างสม่ำเสมอ ฉันไม่ได้คาดหวังสิ่งนี้ เนื่องจาก Cloudflare โฆษณา KV ว่ามีเวลาแฝงต่ำและทำงานบนแพลตฟอร์มเดียวกันกับผู้ปฏิบัติงานเอง ใช่ พวกเขาไม่ได้เก็บข้อมูลในทุกภูมิภาคตามค่าเริ่มต้น แต่หลังจากผ่านไปไม่กี่นาที ฉันคาดว่าข้อมูลจะถูกแคชไว้ในภูมิภาคที่พนักงานทำงานอยู่
บางทีโหลดอาจไม่สูงพอสำหรับระบบในการจัดเรียงข้อมูล มาแยกภูมิภาคและเพิ่มโหลดอย่างมากเพื่อดูว่าจะสร้างความแตกต่างหรือไม่
ภูมิภาคเดียว
มาดูผลลัพธ์ของภูมิภาคเดียวที่มี RPS ที่สูงกว่ามากกัน ตามทฤษฎีแล้ว cloudflare ควรอุ่นแคชทั้งหมดในภูมิภาคนี้และให้เวลาในการตอบสนองต่ำมากตามที่โฆษณาไว้
การทดสอบนี้เหมือนกับการทดสอบครั้งแรก ยกเว้นว่าเราจะเรียกคนงานจากภูมิภาคเดียวและด้วย ~400 RPS
คลิกที่ภาพเพื่อดูขนาดเต็ม
เวลาแฝงของ KV ได้รับการปรับปรุงอย่างมาก:
- P90: 742ms -> 115ms
- P99: 1,336ms ->560ms
เห็นได้ชัดว่าคุณต้องการโหลดที่ค่อนข้างสูงก่อนที่ Cloudflare จะจำลองข้อมูลของคุณใกล้กับผู้ปฏิบัติงานที่ทำงานอยู่มากขึ้น อย่างไรก็ตาม ยังคงสูงกว่าเวลาแฝงของ Upstash Redis มาก แม้ว่าเวลาแฝง P90 ของ Cloudflare ที่ 115ms จะไม่แย่นัก แต่เวลาแฝง P99 ที่มากกว่าครึ่งวินาทีนั้นเห็นได้ชัดเจนอย่างชัดเจน โปรดทราบว่าเรากำลังดำเนินการประมาณ 400 คำขอต่อวินาทีเพื่อให้แน่ใจว่าข้อมูลได้รับการจำลองแบบจริง ซึ่งมีการโหลดมากกว่าที่ API ขนาดเล็กถึงขนาดกลางส่วนใหญ่มักจะเห็น
สิ่งที่น่าสนใจคือคุณจะเห็นได้ว่าเมื่อใดที่ Cloudflare ย้ายข้อมูลเข้ามาใกล้หรือไกลจากผู้ปฏิบัติงานตามคำอธิบายประกอบในภาพต่อไปนี้:
คลิกที่ภาพเพื่อดูขนาดเต็ม
ราคา
นี่คงไม่ใช่การเปรียบเทียบที่ยุติธรรมหากไม่พูดถึงต้นทุนของสิ่งต่างๆ
ปัจจัยขับเคลื่อนหลักที่นี่คือต้นทุนต่อคำขอในการเข้าถึงพื้นที่เก็บข้อมูลแห่งใดแห่งหนึ่ง
Cloudflare เรียกเก็บเงิน 0.50 เหรียญสหรัฐฯ ต่อการอ่าน KV หนึ่งล้าน ในขณะที่ Upstash จะเรียกเก็บเงิน 1 เหรียญสหรัฐฯ ต่อคำสั่ง Redis หนึ่งล้านคำสั่ง มีข้อแตกต่างอื่นๆ บางประการ โดยที่ Cloudflare มีราคาแพงกว่าในด้านพื้นที่จัดเก็บ ในขณะที่ Upstash มีราคาแพงกว่าในด้านแบนด์วิธ อย่างไรก็ตาม สิ่งเหล่านี้ไม่ใช่ตัวขับเคลื่อนต้นทุนหลักในสถานการณ์นี้
- ราคา Cloudflare
- การกำหนดราคาขั้นสูง
Upstash เหมาะกับคุณหรือไม่?
นี่เป็นคำถามที่คุณเท่านั้นที่จะตอบได้ ป>
แน่นอนว่าเรามีอคติในที่นี้และเชื่อในผลิตภัณฑ์ของเราและคุณค่าของผลิตภัณฑ์ของเรา ดังนั้นลองพิจารณาดูสักนิด
หากคุณใช้ API ขนาดเล็กถึงขนาดกลาง คุณจะต้องคำนึงถึงเวลาแฝงเนื่องจากต้นทุนจะน้อยมาก เมื่อ API มีการรับส่งข้อมูลจำนวนมาก Upstash จะเสนอราคาคงที่ซึ่งมีราคาถูกกว่า Cloudflare KV
หากสิ่งที่คุณต้องการนั้นเรียบง่ายเพียง 04 , 18รหัส> หรือ 27รหัส> คุณจะอยู่บนแพลตฟอร์มผู้ปฏิบัติงานอยู่เสมอและแอปพลิเคชันของคุณมีเวลาแฝงสูง ซึ่งเป็นที่ยอมรับได้ ดังนั้น Cloudflare KV อาจเป็นตัวเลือกที่เหมาะสม ทุกอย่างได้รับการจัดการในที่เดียวกันและคุณไม่ต้องกังวลอะไรเลย
หากคุณตอบคำถามเหล่านั้นด้วย 'no' ฉันขอแนะนำให้คุณลองใช้ Upstash Redis มีคุณสมบัติมากมายที่ Cloudflare KV ไม่มี เช่น pub/sub ชุดที่เรียงลำดับ แฮช ฯลฯ และ Upstash ก็รองรับฟีเจอร์เหล่านี้ทั้งหมด หากคุณใช้ Redis อยู่แล้ว คุณสามารถชี้แอปพลิเคชันของคุณไปที่ Upstash แล้วมันจะใช้งานได้ ไม่จำเป็นต้องเปลี่ยนแปลงอะไร
บทสรุป
Cloudflare KV เป็นผลิตภัณฑ์ที่ยอดเยี่ยม แต่ก็ไม่สามารถทดแทนฐานข้อมูลเต็มรูปแบบอย่าง Redis ได้ เหมาะอย่างยิ่งสำหรับกรณีการใช้งานทั่วไป โดยที่ไม่ต้องกังวลเรื่องเวลาในการตอบสนอง
มาทักทายและถามคำถามเกี่ยวกับเรื่องนี้ใน Discord ของเราหรือทาง X