บันทึกทั้งหมด Cloud Optimization

กับดักต้นทุน serverless และวิธีหลบ

Serverless สัญญาว่าคุณจ่ายเท่าที่ใช้ แต่ตัวหนังสือเล็ก ๆ คือ 'เท่าที่ใช้' รวมเซอร์ไพรส์ราคาแพงไว้ด้วย นี่คือกับดักที่เราออกแบบหลีกเลี่ยง เพื่อให้บิลของคุณยังเล็ก

Serverless คือหนึ่งในเครื่องมือที่ดีที่สุดในการทำให้โครงสร้างพื้นฐานพอดีตัว คุณจ่ายค่าการประมวลผล ไม่ใช่ค่าเครื่องที่เปิดทิ้งไว้ และมันสเกลลงเหลือศูนย์เมื่อไม่มีใครใช้ สำหรับผลิตภัณฑ์หลายตัว — โดยเฉพาะที่ทราฟฟิกพุ่ง ๆ คาดเดายาก — มันคือคำตอบที่ใช่

แต่ “จ่ายเท่าที่ใช้” ซ่อนคมไว้: เท่าที่ใช้ อาจรวมสิ่งที่คุณไม่ได้ตั้งใจเงียบ ๆ นี่คือกับดักที่เราออกแบบหลีกเลี่ยง เพื่อให้คำสัญญาเป็นจริง

กับดักที่ 1: หน่วยความจำที่จองเกิน

Lambda คิดเงินตามหน่วยความจำ × ระยะเวลา สัญชาตญาณคือให้หน่วยความจำเยอะ ๆ ไว้ “เผื่อ” แต่ดักคือคุณจ่ายค่าเผื่อนั้นในทุก ๆ การเรียก ตลอดไป

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

กับดักที่ 2: ฟังก์ชันที่คุยมากเกินไป

Serverless ทำให้เรียกเซอร์วิสอื่นง่ายมาก ฟังก์ชันจึงเริ่มเรียกฐานข้อมูลครั้งหนึ่ง แล้วอีกครั้ง แล้ว API ที่สาม แต่ละครั้งคิดค่าระยะเวลาขณะที่ฟังก์ชัน นั่งรอ เครือข่าย

คุณจ่ายค่าประมวลผลราคาแพงเพื่อไม่ทำอะไรนอกจากค้างสายไว้

วิธีหลบ: ยุบ round-trip รวมคำสั่งฐานข้อมูล ดึงข้อมูลแบบขนานแทนแบบเรียงลำดับ และดันการกรองเข้าไปในฐานข้อมูลแทนที่จะดึงแถวออกมากรองในโค้ด ฟังก์ชันที่เสร็จใน 40ms แทน 400ms ราคาถูกลงสิบเท่า และผู้ใช้ก็ได้คำตอบเร็วขึ้นด้วย

กับดักที่ 3: NAT Gateway มิเตอร์เงียบ

อันนี้ดักเกือบทุกคน วาง Lambda ไว้ใน VPC เพื่อเข้าถึงฐานข้อมูลส่วนตัว แล้วให้มันเรียกอินเทอร์เน็ตสาธารณะด้วย ทราฟฟิกก็จะวิ่งผ่าน NAT Gateway ซึ่งคิดเงินทั้งรายชั่วโมง และ ต่อกิกะไบต์ที่ประมวลผล เราเคยเห็นค่า NAT กลายเป็นรายการใหญ่ที่สุดบนบิล serverless ที่เรียบร้อยอยู่แล้วเงียบ ๆ

ต้นทุนคลาวด์ที่แพงที่สุดคือต้นทุนที่ไม่มีใครตัดสินใจจ่าย มันก่อตัวจากค่าตั้งต้น

วิธีหลบ: ใช้ VPC endpoint เพื่อเข้าถึงเซอร์วิส AWS (S3, DynamoDB และเพื่อน ๆ) โดยไม่แตะ NAT เลย และออกแบบให้ฟังก์ชันที่ต้องใช้อินเทอร์เน็ตสาธารณะไม่ถูกขังหลัง gateway โดยไม่จำเป็น นี่คือการตัดสินใจเชิงสถาปัตยกรรม ไม่ใช่สวิตช์ที่พลิกทีหลัง

กับดักที่ 4: ล็อกที่คุณไม่มีวันอ่าน

การล็อกแบบละเอียดบนฟังก์ชันทราฟฟิกสูงสร้างข้อมูล CloudWatch มหาศาล ทั้งการนำเข้าและการเก็บ ถูกคิดเงินทั้งคู่ หลายเดือนต่อมาคุณจ่ายค่าเก็บ console.log("here") หลายกิกะไบต์ที่ไม่มีใครเปิดดู

วิธีหลบ: ล็อกที่ระดับที่เหมาะสม สุ่มเก็บเส้นทางที่เสียงดัง และตั้ง retention policy ให้ล็อกหมดอายุแทนที่จะสะสมเป็นภาษีถาวร

แพตเทิร์นที่อยู่เบื้องหลัง

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

นั่นคือเหตุผลที่เราถือว่าต้นทุนเป็นการตัดสินใจเชิงสถาปัตยกรรมตั้งแต่ตอนออกแบบ ไม่ใช่งานเก็บกวาดไว้ทีหลัง หน่วยความจำพอดีตัว round-trip ที่ยุบแล้ว เครือข่ายที่จงใจ ล็อกที่มีวินัย ไม่มีอะไรพิสดาร มันแค่คือความต่างระหว่างบิล serverless ที่ทำตามสัญญา — กับบิลที่เซอร์ไพรส์คุณแบบแย่ที่สุดตอนสิ้นไตรมาส

พร้อมเมื่อคุณพร้อม

อยากได้วิธีคิดแบบนี้ในงานของคุณไหม?

ดูราคาใน 2 นาที