Serverless คืออะไร?
What is Serverless?
— — — — — — — — — — — — — — —
สารบัญเนื้อหาทั้งหมด (My Contents)
— — — — — — — — — — — — — — —
ถามเพื่อให้คิด
ให้ลองนึกถึงการพัฒนา application ที่ผ่านมาดูครับว่า…
- เรา run application กันที่ไหน?
→ Server บน cloud หรือ on-premise - ใช้ OS อะไรบน server?
→ Ubuntu, CentOS, RedHat หรือ Windows - จะรู้ได้ไงว่า load กำลังเพิ่มขึ้นหรือลดลง?
→ ต้อง monitor ระบบทั้งหมด - แล้วจะ monitor ตรงไหนดี?
→ CPU, memory หรือ network in และ out - เมื่อมี load มากขึ้น/น้อยลงจะ scale server ยังไง?
→ เพิ่ม/ลด CPU หรือ memory (vertical scaling)
→ เพิ่ม/ลด server (horizontal scaling)
→ เพิ่ม/ลด network bandwidth (vertical/horizontal scaling) - ถ้าหาก server เกิด down ไปเราจะรู้ได้ไง?
→ ต้องทำ health check เอาไว้ - และถ้ามัน down ไปแล้วเราจะแก้ไขอย่างไร?
→ ก็ reboot หรือ provision server ขึ้นใหม่
ทั้งหมดนี้คือพื้นฐานที่เราต้องทำเมื่อ run application บน infrastructure แบบเดิม ๆ แต่เราจะไม่ต้องสนใจมันอีกถ้าหากใช้ serverless ครับ
Serverless != ไม่มี Server
แม้ชื่อจะดูเป็นแบบนั้นแต่แท้จริงแล้ว application ของเรายังคงถูก run อยู่บน server สักตัวหนึ่งในกลุ่ม server จำนวนมากอยู่ เพียงแต่เราไม่ต้องกังวลเกี่ยวกับ infrastructure ข้างล่างอีก ทุกคำถามด้านบนจะหายไปจากความรับผิดชอบของเรา
สนใจแค่ Code ก็พอ
ทั้งหมดที่ต้องทำคือโฟกัสที่ code หรือ business logic ก็พอ เช่น ถ้าเป็น app สำหรับจองวัคซีนก็สนใจแค่การเขียน code ว่า user จองเข้ามายังไง กรอกข้อมูลอะไรบ้าง ได้ข้อมูลมาแล้วเอาไปเก็บที่ไหนหรือทำอะไรต่อ จ่ายเงินยังไงได้บ้าง เป็นต้น
ส่วนที่เหลือ(infrastructure) ปล่อยให้เป็นหน้าที่ของ(เงิน) cloud provider ได้เลย
ค่าใช้จ่าย
เราไม่ได้จ่ายเงินไปกับ capacity ของ server แต่เราจ่ายให้กับ…
- จำนวน request ที่วิ่งเข้ามายัง application บน serverless
- ระยะเวลาที่ใช้ในการ run ฟังก์ชั่น(request) นั้นจนเสร็จ (มีผลกับ memory)
ตัวอย่าง Serverless Application ง่าย ๆ
เพื่อให้เห็นภาพมากขึ้น ข้างบนนี้คือ Todo app ที่ user สามารถบันทึกได้ว่าจะต้องทำอะไรบ้างเพื่อกันลืม 555
สังเกตว่าใน app จะประกอบด้วย Lambda function (Icon สีส้ม) หลายตัวซึ่งทำหน้าที่แตกต่างกัน ฟังก์ชั่นเหล่านั้นจะไม่ถูก execute จนกว่าจะมี request เข้ามา (จะเห็นว่าเราไม่ต้องยุ่งกับ infrastructure เลย)
เมื่อ user ทำอะไรก็ตามจะเป็นการส่ง request ไปหา API gateway (ToDo API) ก่อน หลังจากนั้นจึงส่งต่อไป trigger ฟังก์ชั่นต่าง ๆ เพื่อ execute ตามหน้าที่ของมัน
เช่น addTodo คือ Lambda function ที่เป็นฟังก์ชั่นในการเพิ่มรายการสิ่งที่ต้องทำเข้ามา อาจจะเป็น “โทรหาลูกค้าตอน 11 โมง” โดยภายในฟังก์ชั่น addToDo ก็จะเป็น code เพียงไม่กี่บรรทัดที่ทำหน้าที่ในการเขียนข้อความลงใน database (Items Table) แบบนี้
Programming Language ที่ใช้ได้
Lambda function สามารถ execute code ภาษาอะไรก็ได้ ดังนี้
- Java
- Go
- PowerShell
- Node.js
- C#
- Python
- Ruby
- Custom runtime API
Serverless ไม่ได้มีแค่ Compute
ที่จริงแล้วโลกของ serverless ไม่ได้มีแค่ Lambda ที่เป็นส่วนในการ compute แต่ยังมีส่วนอื่น ๆ อีก เช่น (ยึดตาม AWS) SNS ใช้ส่งข้อความหรือ email, SQS ใช้ในการทำ queue, S3 ใช้เก็บ object file หรือ DynamoDB ที่เป็น database (NoSQL)
หวังว่าท่านจะพอเห็นภาพของ serverless architecture ไม่มากก็น้อย และถ้าหากคิดว่าบทความนี้มีประโยชน์ ฝากกด clap, follow และ share บทความนี้ให้ผมด้วยนะครับ ขอบคุณมากครับ