Serverless ทางเลือกในยุคใหม่ของการใช้ Cloud Computing

สวัสดีครับเพื่อน ๆ ชาว IT สำหรับ Blog ที่ 2 ของเดือนมกราคม 2021 วันนี้เรามาแนะนำกันเรื่อง Serverless เนื่องจากสมัยนี้คนส่วนใหญ่ใน IT ก็ใช้ Cloud Server กันเยอะมากแล้ว แต่การจะใช้ Cloud Server ก็ยังคงต้องมีการเตรียม Resource ให้รองรับกับการที่ทีมงานจะเอาไปใช้งานด้านอื่น ๆ ต่อ แต่ในบางครั้ง ผู้ใช้งานก็ไม่ได้อยากจะต้องมาเตรียมอะไรแบบนี้ ทำให้ Cloud Provider ได้คิดค้น Serverless มาเพื่อตอบโจทย์ให้กับผู้ที่ใช้งานจริง ๆ โดยไม่ต้องสนเรื่องของ Resource ครับ โอเคเรามาเข้าเรื่องของ Serverless กันเลยนะครับ

Serverless คืออะไร?

Serverless เป็น Cloud Computing รูปแบบหนึ่งที่ Cloud Provider เป็นผู้ที่แบ่งทรัพยากรให้ลูกค้าใช้ตามความต้องการ โดยลูกค้าไม่ต้องดูแลในส่วนของ Server เอง หลาย ๆ คนอ่านมาถึงตรงนี้แล้วก็อาจจะสงสัยว่า แล้วมันต่างยังไงกับที่ Cloud Provider ให้ VM มาใช้ แน่นอนว่าต่างครับ เพราะว่า VM ลูกค้ายังต้องแจ้งให้ Cloud Provider ติดตั้ง Operating System ให้ กำหนดขนาดของ CPU, RAM และ Hard disk ที่ต้องการจะใช้งาน แต่สำหรับ Serverless แล้ว ผู้ใช้งาน ใช้เพียงแค่เอา Code ของตัวเองมา Execute บน Serverless โดย Cloud Provider จะคิดเงินจากจำนวนของ Resource ที่ Application ของคุณใช้งาน ซึ่งทำให้ Developer ไม่ต้องมากังวลเรื่องการเผื่อ Spec, การติดตั้ง, การจัดการ และการ Scale VM หรือ Server

ใช้งาน Serverless ได้ผ่านช่องทางใด?

บริการ Serverless ของ Cloud Provider จะเรียกว่า Function as a service (FaaS) ซึ่งเป็นการ Execute App โดยไม่เก็บข้อมูลไว้ รายแรกที่เป็นผู้เริ่มต้น คือ Zimki ในปี 2006 แต่ก็ทำได้ไม่นานสำหรับ


Kubeless และ Fission – เป็น Open Source FaaS ที่ Run ด้วย Kubernetes
Google App Engine – เปิดตัวในปี 2008 โดยมีหนึ่งในลูกค้าชื่อดังใช้งานคือ Snapchat ภาษาที่รองรับมีแค่ Python ณ เวลานั้น แต่ปัจจบุันสามารถใช้งานได้หลากหลายภาษาแล้ว เช่น Node.js, Java, Ruby, C#, Go, Python, หรือ PHP
AWS Lambda – เป็นของ Amazon ทำขึ้นในปี 2014 เป็นบริการที่เป็นที่นิยมในปัจจุบัน
Google Cloud Functions – เปิดตัวในปี 2016 เป็น Serverless อีกรูปแบบหนึ่งที่ให้บริการด้วย Google Cloud Platform
IBM Cloud Functions – เปิดตัวปี 2016 จากค่าย IBM
Azure Functions – จากค่าย Microsoft สามารถใช้งานได้จาก Azure Public Cloud หรือ On-premises ก็ได้ผ่านทาง Azure Stack
Cloudflare Workers – เปิดตัวปี 2017 จาก Cloudflareซึ่งถ้าท่านผู้อ่านสนใจสามารถเลือกใช้งาน Severless ของแต่ละเจ้าตามความต้องการได้เลยนะครับ

Serverless ใช้ Database แบบไหนและเหมาะกับการทำอะไร?

Database ที่ใช้กับ Serverless ได้พัฒนาขึ้นมากในหลาย ๆ ปีมานี้ สามารถรองรับการใช้งานกับ Database แบบ RDBMS ไม่จำเป็นต้องเตรียม Provision หรือ Scale ด้วย Database VM หรือ Database Server แล้ว
Nutanix
มีบริการที่ชื่อว่า Era ซึ่งสามารถแปลง RDBMS ของเดิมที่คุณมีอยู่ไม่ว่าจะเป็น Oracle, MariaDB, PostgreSQL หรือ Microsoft SQL Server ไปเป็น Serverless ได้
Amazon Aurora – ก็รองรับการทำงานแบบ Serverless โดยรองรับ MySQL และ PostgreSQL มีทั้งแบบ On-demand และที่สามารถตั้ง Auto-Scaling ได้
Azure Data Lake – เป็นบริการที่ใช้ในการประมวลผลและ Scale ข้อมูลได้มาก
Firebase – เป็นของ Google ใช้ Database รูปแบบ Hierarchical

ข้อดีของการใช้ Serverless


ราคา – Serverless  ราคาถูกกว่าการที่จะต้องไปเช่า Server หรือ ซื้อ Server เป็นเครื่อง ๆ ซึ่งอาจจะทำให้ใช้งานได้ไม่คุ้มค่าตาม Utilize ที่มี ไม่ต้องมาเสียค่าใช้จ่ายแฝงเพิ่มเติม เช่น ค่าของ Operating Systems ไม่ว่าจะเป็นค่า License ค่าติดตั้ง ค่าดูแลการจัดการ และการ Patch
ความยืดหยุ่นในการใช้งาน เทียบกับ การ Scaling – ด้วยรูปแบบโครงสร้างของ Serverless ทำให้ทีม Developer และทีม Operation ไม่ต้องทำงานร่วมกันในการปรับจูนระบบในเรื่องของการ Scale Up/Down เนื่องจาก Cloud Provider เป็นผู้ดำเนินการให้ในส่วนนี้ ซึ่งเหมาะกับทีม Developer เล็ก ๆ ที่ต้องการจะ Test code ตัวเองโดยไม่ต้องพึ่งพาทีม Infrastructure หรือทีม Support ให้ดำเนินการให้ ทำให้ทุกวันนี้ Developer เริ่มมีสกิล DevOps กันมากขึ้นแล้ว
การทำงานมีประสิทธิภาพมากขึ้น – ด้วย Function as a service สิ่งที่ Developer ต้องทำคือแค่ Focus กับการเขียน Code เนื่องจากโดยปกติแล้วจะต้องออกแบบ Code มาให้เหมาะกับ Multithread และการโดนเรียกด้วย HTTP เป็นจำนวนมาก แต่ระบบเป็นผู้ดำเนินการให้แล้ว

ข้อเสียของการใช้ Serverless

ประสิทธิภาพ – Serverless ที่ไม่ได้ใช้งานบ่อยอาจจะเกิดปัญหาในเรื่องของ Latency มากกว่า Code ที่ใช้งานอย่างต่อเนื่องบน Server, VM หรือบน Container เพราะว่า Cloud Provider จะ Spins Down (ลดการอ่านและเขียน) Serverless ที่ไม่มีการใช้งานลง ทำให้เวลากลับมาสั่ง Execute อีกครั้ง จะต้องใช้เวลาในการ Start ทำให้มี Latency เพิ่มขึ้น
มีการจำกัด Resource – Serverless ไม่เหมาะกับการใช้งานแบบ High-performance computing (HPC) เนื่องจากมีการจำกัด Resource จาก Cloud Providerการ Monitor และการ Debug – การแก้ไขปัญหาเรื่อง Performance และการใช้ Resource เกินความจำเป็นบน Serverless จะตรวจสอบได้ยากกว่าการใช้งานผ่าน Server เนื่องจากจะไม่สามารถเพิ่ม Profilers, Debuggers หรือ APM Tools ได้ นอกจากนี้ Environment ที่ Code run อยู่ก็ไม่ได้เป็น Open Source ซึ่งประสิทธิภาพในการทำงานอาจจะไม่เหมือนกับการ Run บน Local
ความปลอดภัยในการใช้งาน – บางคนอาจจะมองว่า Serverless มีความปลอดภัยในการใช้งานสูงกว่าแบบ Server ดั้งเดิม แต่ความจริงคือถูกบางส่วนครับ จริงอยู่แม้ว่าเรื่องการป้องกันการโจมตีจากช่องทาง Operating System Cloud Provider เป็นคนจัดการให้ แต่การโจมตีสามารถมาได้จากหลากหลายรูปแบบเนื่องจากมีองค์ประกอบแยกย่อยให้โจมตีได้มากมาย ซึ่งผู้ใช้งานไม่สามารถจัดการในส่วนของ Endpoint และ Network ได้ ทำให้ยังคงมีความเสี่ยงในการใช้งานอยู่
ความเป็นส่วนตัว – Serverless ส่วนใหญ่จะใช้งานบน Public Cloud เป็นหลัก ซึ่งอาจจะมีผลกระทบในเรื่องของความเป็นส่วนตัวของข้อมูล แต่อย่างไรก็ตาม Serverless computing สามารถใช้งานบน Private Cloud หรือ On-Premises ได้ ถ้าใช้งานผ่าน  Platform อย่างเช่น Kubernetes ด้วยวิธีนี้จะช่วยให้บริษัทมีความปลอดภัยในเรื่องของความเป็นส่วนตัว ความลับต่าง ๆ
ย้ายไปใช้งานเจ้าอื่น ๆ ยาก ถ้าลงหลักปักฐานแล้ว – Serverless เป็นบริการที่เราต้องใช้กับผู้ให้บริการ ซึ่ง App และ Software ที่ใช้งานใน Serverless ที่เป็นรูปแบบเฉพาะตัวของ Vendor การที่จะย้าย App และ Software ไปใช้งานเจ้าอื่น ๆ ด้วย Source Code เดียวกัน อาจจะพบปัญหาระหว่างทางได้

เป็นอย่างไรกันบ้างครับเพื่อน ๆ กับหัวข้อ Serverless สำหรับ Blog นี้ มีเพียงเท่านี้ ขอบคุณทุกท่านที่ติดตามกันนะครับ

— Cloud HM