Cloud
น้องๆ เคยสงสัยมั้ยว่า Serverless Computing มันคืออะไรกันแน่? สมัยผมทำร้านเน็ต SiamCafe เมื่อ 20 กว่าปีก่อนเนี่ย การมี Server เป็นเรื่องใหญ่มาก ต้องมีห้องแอร์ ต้องมี UPS ไฟดับทีวุ่นวายไปหมด แต่ Serverless เนี่ย มันพลิกโฉมวงการไปเลย
พูดง่ายๆ Serverless คือการที่เราไม่ต้องไปยุ่งกับ Server เองเลย! ไม่ต้องดูแล ไม่ต้องอัพเกรด ไม่ต้องกลัวไฟดับ ผู้ให้บริการ Cloud (เช่น AWS, Google Cloud, Azure) จัดการให้หมด เราแค่เขียน Code แล้ว Deploy ไป พวกเขาจัดการเรื่อง Scaling, Security, Maintenance ให้เองทั้งหมด
ทำไมมันถึงสำคัญน่ะเหรอ? ลองคิดดูสิ สมัยผมต้องจ้างคนมาดูแล Server ตลอด 24 ชั่วโมง เสียทั้งเงิน เสียทั้งเวลา Serverless ช่วยให้เราโฟกัสไปที่การพัฒนา Application ได้เต็มที่ ลดค่าใช้จ่าย และเพิ่มความเร็วในการพัฒนาไปอีก
FaaS คือหัวใจหลักของ Serverless Computing เลยครับ มันคือการที่เราเอา Code ของเราไปรันเป็น Function เล็กๆ แต่ละ Function ทำงานเฉพาะอย่าง แล้วระบบจะเรียก Function เหล่านี้เมื่อมี Event เกิดขึ้นเท่านั้น
ยกตัวอย่างเช่น เรามี Function ที่ใช้ Resize รูปภาพ เมื่อมีคน Upload รูปภาพใหม่เข้าระบบ ระบบก็จะเรียก Function Resize นี้ให้ทำงานเองอัตโนมัติ เราไม่ต้องไปนั่งเขียน Code คอยเช็คว่ามีรูปใหม่เข้ามาหรือยัง
# Python example using AWS Lambda
import boto3
from PIL import Image
import io
def lambda_handler(event, context):
s3 = boto3.client('s3')
bucket = event['Records'][0]['s3']['bucket']['name']
key = event['Records'][0]['s3']['object']['key']
image = s3.get_object(Bucket=bucket, Key=key)['Body'].read()
img = Image.open(io.BytesIO(image))
img.thumbnail((128, 128)) # Resize the image
buffer = io.BytesIO()
img.save(buffer, 'JPEG')
buffer.seek(0)
s3.put_object(Bucket=bucket, Key='thumbnail/' + key, Body=buffer)
return {
'statusCode': 200,
'body': 'Thumbnail created!'
}
Serverless มักจะทำงานร่วมกับ Event-Driven Architecture ซึ่งหมายความว่า Application ของเราจะตอบสนองต่อ Event ต่างๆ ที่เกิดขึ้น เช่น การ Upload ไฟล์, การ Login, การกด Like เป็นต้น
เมื่อมี Event เกิดขึ้น ระบบก็จะ Trigger Function ที่เกี่ยวข้องให้ทำงาน ทำให้ Application ของเราทำงานแบบ Asynchronous และ Scalable มากขึ้น
Function ที่เราเขียนใน Serverless ควรจะเป็น Stateless หมายความว่า Function แต่ละครั้งที่ถูกเรียก จะไม่มีการเก็บ State หรือข้อมูลจากครั้งก่อนหน้า ทำให้แต่ละ Function สามารถทำงานได้อย่างอิสระ และ Scalable ได้ง่าย
ถ้าเราต้องการเก็บข้อมูล เราจะต้องใช้ Database หรือ Storage ภายนอก เช่น AWS S3, DynamoDB เป็นต้น
การเริ่มต้นใช้งาน Serverless ไม่ยากอย่างที่คิดครับ เดี๋ยวผมจะเล่าจากประสบการณ์ให้ฟัง สมัยผมทำ SiamCafe Blog ก็ลองเอา Serverless มาใช้เหมือนกัน ปรากฏว่ามันช่วยลดค่าใช้จ่ายไปได้เยอะเลย
ขั้นตอนง่ายๆ คือ เลือก Cloud Provider ที่เราถนัดก่อน (AWS, Google Cloud, Azure) จากนั้นก็ศึกษา Service ที่เกี่ยวข้อง เช่น AWS Lambda, Google Cloud Functions, Azure Functions
อย่างที่บอกไป เลือก Cloud Provider ที่เราถนัดก่อนครับ แต่ละ Provider ก็มีข้อดีข้อเสียต่างกัน ลองศึกษาดูว่า Service ไหนตอบโจทย์เรามากที่สุด
ถ้าเป็น AWS Lambda ก็เหมาะสำหรับคนที่คุ้นเคยกับ AWS ถ้าเป็น Google Cloud Functions ก็เหมาะสำหรับคนที่ใช้ Google Cloud อยู่แล้ว
หลังจากเลือก Service ได้แล้ว ก็เริ่มเขียน Function ของเราได้เลยครับ ภาษาที่ใช้ก็มีหลากหลาย เช่น Python, Node.js, Java, Go
เมื่อเขียน Function เสร็จ ก็ Deploy ขึ้น Cloud Provider ได้เลย ขั้นตอนการ Deploy ก็ขึ้นอยู่กับแต่ละ Service แต่ส่วนใหญ่ก็จะมี CLI หรือ Web Console ให้เราใช้งานได้ง่ายๆ
หลังจาก Deploy Function เสร็จ เราต้องตั้งค่า Trigger เพื่อให้ Function ของเราทำงานเมื่อมี Event เกิดขึ้น เช่น เมื่อมีไฟล์ Upload เข้า S3 ให้ Trigger Lambda Function ที่ใช้ Resize รูปภาพ
นอกจากนี้ เราก็ควรตั้งค่า Monitoring เพื่อติดตามการทำงานของ Function เช่น จำนวน Request, Error Rate, Latency เพื่อให้เราสามารถแก้ไขปัญหาได้ทันท่วงที
Serverless ไม่ได้เหมาะกับทุก Use Case นะครับ เราต้องเปรียบเทียบกับทางเลือกอื่นก่อน เช่น Virtual Machine (VM) หรือ Container เพื่อดูว่าอะไรตอบโจทย์เรามากที่สุด
VM เหมาะสำหรับ Application ที่ต้องการ Control Server อย่างละเอียด และต้องการ Resource ที่แน่นอน ส่วน Container เหมาะสำหรับ Application ที่ต้องการความยืดหยุ่น และ Scalability ในระดับหนึ่ง
Serverless เหมาะสำหรับ Application ที่ต้องการ Scalability สูง, มี Event ที่ไม่แน่นอน และต้องการลดภาระในการดูแล Server
| คุณสมบัติ | Virtual Machine (VM) | Container | Serverless |
|---|---|---|---|
| การจัดการ Server | ต้องจัดการเองทั้งหมด | ต้องจัดการ Container Runtime | ไม่ต้องจัดการเลย |
| Scaling | ต้อง Scale เอง | Scale ได้ง่ายกว่า VM | Scale อัตโนมัติ |
| ค่าใช้จ่าย | จ่ายตาม Resource ที่จองไว้ | จ่ายตาม Resource ที่ใช้จริง | จ่ายตามการใช้งานจริง |
| เหมาะสำหรับ | Application ที่ต้องการ Control สูง | Microservices, Application ที่ต้องการความยืดหยุ่น | Event-Driven Applications, API |
สรุปแล้ว Serverless เป็นทางเลือกที่น่าสนใจสำหรับ Application สมัยใหม่ ที่ต้องการความ Scalable, ลดค่าใช้จ่าย และเพิ่มความเร็วในการพัฒนา ลองศึกษาและนำไปปรับใช้กันดูนะครับ และอย่าลืมแวะไปอ่านบทความอื่นๆ ที่ SiamCafe Blog ด้วยนะ
ถ้าอยากรู้เรื่อง Cloud เพิ่มเติม ลองดูที่ SiamCafe Blog ได้เลย มีบทความดีๆ อีกเยอะ
เอาล่ะ มาถึงช่วงเคล็ดลับที่กลั่นมาจากประสบการณ์โชกโชนของอ.บอมกันบ้าง สมัยผมทำร้านเน็ตฯ SiamCafe บอกเลยว่าเจอมาหมดทุกรูปแบบ ทั้งเรื่อง network, server, client… serverless นี่ถ้ามีตั้งแต่สมัยนั้นนะ ชีวิตคงง่ายขึ้นเยอะ!
Serverless ไม่ใช่ยาวิเศษที่จะแก้ได้ทุกปัญหา เลือกใช้ให้ถูกงาน สำคัญสุดคือ “เข้าใจข้อจำกัด” ของมันก่อน อย่าคิดว่าโยนทุกอย่างขึ้น cloud แล้วจะจบเห่ ต้องวางแผนดีๆ ไม่งั้นบานปลายนะน้อง
Serverless เนี่ยมัน Abstracted ไปเยอะ เราแทบไม่เห็นเลยว่าเบื้องหลังมันเกิดอะไรขึ้นบ้าง ดังนั้น Monitoring สำคัญมาก! ต้องมีเครื่องมือคอยสอดส่อง Log, Metrics ทุกอย่าง ต้อง alert ได้ทันทีที่เริ่มมีปัญหา
สมัยก่อนร้านเน็ตฯ ผมใช้ Nagios คอยเช็คสถานะเครื่อง Server เดี๋ยวนี้มีเครื่องมือ Cloud-Native ให้เลือกใช้เยอะแยะ เลือกที่มัน integrate กับ Serverless Function ของเราได้เลย
จำไว้ว่า Serverless Function คิดเงินตาม execution time และ memory ที่ใช้ ถ้า function เราใหญ่เทอะทะ กิน resource เยอะ ก็จ่ายแพงหูฉี่! ต้อง Optimize code ให้ดี ลด dependency ที่ไม่จำเป็น ใช้เทคนิค lazy loading อะไรก็ว่ากันไป
เคยเจอเคสลูกค้าเขียน script แปลงไฟล์รูปภาพในร้านเน็ตฯ ผม code ไม่ optimize กิน CPU 100% กว่าจะเสร็จแต่ละรูป ทำเอาเครื่อง hang ไปเลย Serverless ก็เหมือนกัน ถ้าเขียนไม่ดี มีหวังโดนค่าบริการฟาดหัวแบะ
เรื่อง security ห้ามละเลย! Serverless Function ก็เหมือน code ทั่วไป ต้องป้องกัน injection, XSS, CSRF อะไรพวกนี้เหมือนเดิม ที่สำคัญคือจัดการเรื่อง permission ให้ดี อย่าให้ Function มีสิทธิ์เข้าถึง resource มากเกินความจำเป็น
สมัยทำร้านเน็ตฯ เคยโดน Hack เว็บไซต์เพราะ permission ไม่รัดกุม จำจนตาย! Serverless ก็เหมือนกัน ถ้าไม่ระวัง โดน Hack ที เสียหายหนักกว่าเดิม
Serverless เหมาะมากกับงานที่ trigger ด้วย event ต่างๆ เช่น มี file upload เข้ามา, มี message ถูกส่งเข้ามาใน queue, มี record ถูกแก้ไขใน database ลองออกแบบระบบให้เป็นแบบ event-driven ดู จะเห็นข้อดีของ Serverless ชัดเจน
คิดง่ายๆ เหมือนระบบเติมเงินเกมส์ออนไลน์ สมัยก่อนต้องมี Server คอย poll database ตลอดเวลา เดี๋ยวนี้ใช้ Serverless Function รับ event จากระบบ payment gateway ได้เลย สะดวกกว่าเยอะ
งานที่ scale ได้ง่าย, งานที่ไม่ต้องการ server ตลอดเวลา, งานที่ trigger ด้วย event ต่างๆ เช่น API endpoint, image processing, data transformation
เรื่อง cold start, debugging ยากกว่าเดิม, vendor lock-in, latency ที่อาจจะสูงกว่า server แบบเดิมๆ
อยู่ที่ความถนัดและความต้องการของแต่ละคน AWS, Azure, Google Cloud ก็มี Serverless Function ให้เลือกใช้หมด ลองศึกษาดูว่าเจ้าไหนตอบโจทย์เรามากที่สุด
ไม่ทั้งหมด! Serverless เหมาะกับบาง workload เท่านั้น Server แบบเดิมๆ ก็ยังมีบทบาทสำคัญอยู่ ต้องเลือกใช้ให้เหมาะสมกับสถานการณ์
Serverless เป็นเทคโนโลยีที่น่าสนใจ มีศักยภาพในการเปลี่ยนแปลงวิธีการพัฒนาและ deployment application แต่ต้องศึกษาให้เข้าใจ เลือกใช้ให้ถูกงาน และอย่าลืมเรื่อง monitoring, optimization, security ที่สำคัญที่สุดคือ อย่าเชื่อทุกอย่างที่อ่านเจอในอินเทอร์เน็ต ลองทำเอง เจอปัญหาเอง จะเข้าใจเอง
หวังว่าบทความนี้จะเป็นประโยชน์สำหรับน้องๆ ที่กำลังสนใจ Serverless นะครับ ถ้ามีคำถามอะไรเพิ่มเติม ถามมาได้เลย! แล้วอย่าลืมแวะไปเยี่ยมชม iCafeForex และ SiamCafe Blog ด้วยนะ