มาทำความรู้จักและข้อเปรียบเทียบ Firebase Functions vs AWS Lambda
มาทำความรู้จักทั้งคู่กันก่อนว่าคืออะไร
Firebase Functions เป็นบริการของทาง Google ส่วน Lambda เป็นบริการของ Amazon Web Service ทั้งคู่มีหน้าที่ Run Code ของเรา ส่วนใหญ่จะเอาไว้ทำพวก Microservices ต่างๆที่เราเขียนแล้ว Deploy ขึ้นไป โดยที่เราไม่ต้องมาตั้งค่า Server ต่างๆให้มันยุ่งยาก และ ไม่ต้องมา Scale Up Server เอง ตัดปัญหา Server ล่ม ส่วนการเสียเงินจะเสียเงินตามที่ใช้ ใช้มากเสียมาก ใช้น้อยก็ฟรี ส่วนใหญ่ที่ล่มคือลืมจ่ายตังค์ ความคิดส่วนตัวผมมองว่ามันเกิดมาเพื่อ ฆ่า Server เพราะเราไม่จำเป็นต้องมาตั้ง Server GCE,EC2 เป็นต้น แต่บางงานลูกค้าอยากตั้ง Server ไว้ที่ตัวเองหรืออยากสร้าง Server ไว้บน Account บน Aws หรือ Google ก็ต้องทำตามหน้างานอีกที
มาดูข้อดีหลักๆของทั้งคู่กันหน่อย
Firebase Functions
- Auto Scaling
- รองรับหลายภาษา (Node10+,Go,Java,.Net,Ruby)
- Up Code ขนาดใหญ่ได้
- ปรับ memory and timeout ได้
- Docs ดีทำให้ใช้งานง่ายมาก
- ไม่ต้อง Setting เปิดแล้วสร้างโปรเจค Deploy ได้เลย
- ลดค่าใช้จ่ายเพราะเราไม่ต้องมาตั้ง Server ทิ้งไว้
AWS Lambda
- Auto Scaling (ปรับเองได้)
- เหมาะกับทำ microservices มากๆๆๆๆๆๆๆๆๆๆๆ
- เชื่อมต่อ services ต่างๆกับ AWS ไหลลื่น
- ปรับ memory and timeout ได้
- รองรับหลายภาษา (Java, Go, PowerShell, Node, C#, Python, Ruby)
- รองรับ Docker Container ทำให้เขียนได้หลายภาษากว่าที่กล่าวมา และอีกหลายอย่างมากมายที่ทำตรงๆผ่าน Code เราใน Lambda ไม่ได้
- ประมวลผล Data ขนาดใหญ่ได้
- ทำ Stage และ Version Control Code เราได้ง่ายมาก
- ลดค่าใช้จ่ายเพราะเราไม่ต้องมาตั้ง Server ทิ้งไว้
- เร็วมาก
มาดูข้อเสียสำหรับผม
Firebase Functions
- Cold Start (เราไม่ได้ใช้มันจะต้องปลุกมันก่อนถึงจะทำงานแก้ด้วยการทำ Cron Job ทุกๆ กี่นาทีก็ว่าไป)
- ถ้าจะทำ Stage เช่น พวก Uat, Dev, Prod ต้องสร้าง Firebase โปรเจคใหม่ๆเสมอ เพราะไม่ควรมาแยก Uat, Dev, Prod ด้วยชื่อ Functions
- ประมวลผล Data ขนาดกลางจนไปถึงขนาดใหญ่ไม่ได้ (เพราะผมจะทำ Cron Job เพื่อไปประมวลผล Data ของแต่ละวัน แล้วชอบตายกลาง อากาศ ไม่มี Error)
- Cron Job ชอบ Run Function พังกลางอากาศ เพราะ ผมชอบส่ง Report ทาง Mail แล้วชอบไม่ส่ง เดือนนึงเป็นหลายทีอยู่เหมือนกัน
AWS Lambda
- Cold Start ก็ต้องมีการตั้งเวลาเพื่อปลุกเพื่อให้ใช้ได้ต่อเนื่องเหมือนกัน
- ไม่สามารถใส่ Code ขนาดใหญ่ได้ (จริงๆมันก็ไม่ใช่ข้อเสียเพราะเราก็แยก Code บางส่วนออกจากกันได้)
- สำหรับคนเริ่มต้นจะ Setting หลายอย่างงงๆนิดหน่อย เช่น จะอัพรูปผ่าน Lambda เข้า S3 ก็ต้องทำหลายอย่างเพื่อที่จะเปิดใช้งาน หรือติดตั้ง Serverless เพื่อทำการ Deploy
คำแนะนำ
ในมุม Dev ถ้าทำงานเป็นทีมใหญ่หรือโปรเจคที่มีการ Process Data จำนวนมากผมแนะนำให้ใช้ Lambda เพราะทำ Stage และ Version Control ได้ดีและง่ายกว่า รวมไปถึงการสร้าง User Group และ Policy ในการใช้งานและการเข้าถึงต่างๆ แล้ว Firebase ล่ะ? ผมว่ามันไม่ค่อยเหมาะกับการทำงานเป็นทีมใหญ่ๆ และ Project ที่ต้อง Process Data จำนวนมากๆ เหมาะกับงานที่เป็น Campaign เล็กๆที่ไม่ต้องใช้ความเร็วและการประมวลผลมาก ถ้าใครยังไม่เคยลองเล่น ลองไปเล่น Firebase ดูได้เพราะติดตั้งง่าย ถ้าใครยังไม่เคยลองต้องลองแล้วครับ แล้วจะลืมไปเลยว่าต้องตั้ง Server ไม่พอประหยัดค่าใช้จ่ายให้บริษัทได้เป็นจำนวนมาก ไม่พอหยุดยาวก็ไม่ต้องมากังวลเรื่อง Server ล่ม Win Win ทั้ง 2 ฝ่ายครับ ถ้ามีโปรเจคเล็กๆของตัวเองก็แทบจะไม่เสียเงินหรือฟรีเลย
*หลายคนอาจคงสงสัยแล้ว Front-end ก็ต้องตั้ง Server อยู่ดี หายห่วงครับ 2 ตัวนี้มี Service สำหรับทำ Front-end ง่ายๆเลย ซื้อ Domain แล้วจัดการ DNS ยิงเข้ามาได้เลยไว้จะพูดถึงตอน EP อื่นๆนะครับ
สุดท้าย บริการของ AWS และ Google ก็มีอีกมากมายนะครับ แต่ผมยกตัวอย่างมา 2 หัวข้อเพราะตอนนี้ที่ผมใช้ 2 ตัวนี้เป็นหลัก มีข้อดีข้อเสียปนกันไป และ ฝากติดตามผลงานของผมได้นะครับ
EP หน้าผมแสดงตัวอย่างโค้ด และการ Deploy นะครับ
ตัวอย่างการ deploy firebase functions
ตัวอย่างการ deploy Lambda โดยใช้ Serverless Framework
( CR. ธำรงค์ ไชยวงค์ )