Serverless อนาคตใหม่แห่ง Server ทิพย์

คำว่า Serverless เราได้ยินมานานหลายปีมาก ๆ แล้ว ตั้งแต่มันเป็นคำที่เป็นแค่ Concept ในช่วงแรก จนผ่านไปไม่กี่ปี ก็มี Product ออกมาทำงานจริง ๆ ครั้งแรกที่ได้ยินคิดเลยว่า ห่ะะะ ไม่มี Server เหรอ นี่มัน Server ทิพย์ แต่จริง ๆ แล้ว มันไม่ใช่ และ เราว่ามันเป็นอนาคตของการออกแบบ และ Deploy Software สมัยใหม่เลยก็ว่าได้ วันนี้เรามาหาคำตอบกันว่า Serverless คืออะไร และมันดีอย่างไร

ย้อนกลับไปในอดีต

Photo by Taylor Vick / Unsplash

ก่อนเราจะไปเข้าใจว่า Serverless คืออะไร เราอยากพาทุกคนย้อนกลับไปเมื่อสิบกว่าปีก่อนเลย เวลาเราจะเอาโปรแกรมอะไรขึ้นระบบเพื่อให้สามารถเรียกใช้งานได้ เราก็ต้องมี เครื่อง ที่เป็น Physical Machine ตั้งอยู่ เพื่อให้โปรแกรมทำงานไว้ตลอด ซึ่งแน่นอนว่า มันก็ต้องมาพร้อมกับสกิลในการเข้าใจระบบของเครื่อง การวาง Infrastructure ต่าง ๆ ที่เกี่ยวข้องเช่น ระบบไฟฟ้า การระบายความร้อน ระบบเครื่องสำรอง อะไรมากมาย ใช้ทั้งคน ความเชียวชาญ และ เงินเป็นจำนวนมาก

จนกระทั่งเครื่องคอมพิวเตอร์ มีประสิทธิภาพสูงขึ้น และเทคโนโลยี Virtualisation เกิดขึ้นมา ทำให้เราสามารถหั่นเครื่อง Physical ออกมาได้เป็นหลาย ๆ เครื่อง หรือที่เราเรียกว่า Virtual Machine นั่นเอง ทำให้เวลา Programmer จะเอาโปรแกรมขึ้นก็ไม่ต้องมานั่งปวดหัว เรื่องว่า เราจะหาเครื่องมาจากไหน แต่ก็ยังต้องมากังวลเรื่องของ Configuration ของ Hypervisor และใน Virtual Machine เท่านั้นเอง ไม่ต้องสนใจแล้วว่า เครื่องจริง ๆ จะใช้ Hardware อะไร ใช้ CPU อะไรยังไง เราจะวางระบบไฟฟ้าอะไรยังไง เราก็ไม่ต้องไปสนใจอีกแล้ว ถือว่าเป็น Abstract Layer ไป

พอ Cloud Computing เข้ามา ทำให้ชีวิตของนักพัฒนายิ่งง่ายเข้าไปใหญ่ เพราะมีหลายเจ้าออกมาเป็น Service สำหรับการทำ Virtual Machine กันเพียบเลยทีเดียว มีทั้งแต่บริษัทใหญ่ ๆ อย่าง Amazon, Google และ Microsoft ที่ลงมาเล่นในตลาดนี้ นอกจากนั้นก็ยังมีเจ้าเล็ก ๆ กว่านั้นลงมาเล่น พวก Digital Ocean เป็นต้น ที่ทำ Service ออกมาได้ง่ายมาก ๆ กด ๆ เลือก ๆ ไม่ถึง 5 นาที เราก็ได้เครื่องที่พร้อมใช้งานมาเลย แถมอยู่ใน Data Centre สักที่บนโลกที่การันตีว่า มีการจัดการเรื่อง Infrastructure อย่างมืออาชีพมั่นใจได้เลยว่าโอกาสที่จะล่ม หรือข้อมูลสูญหายได้ยากมาก ที่สำคัญราคาถูกมาก ๆ อย่าง Digital Ocean ถูกสุดตกเดือนละ 5 USD เท่านั้นเอง โคตรถูกกกก (เมื่อก่อนเว็บ Arnondora.in.th ใน Version 2 ก็รันอยู่บน Digital Ocean 5 USD ต่อเดือน)

จนถึงตอนนี้ สิ่งที่หายไปตามกาลเวลาคือเรื่องของ Hardware เมื่อก่อนอาจจะต้องมานั่งประกอบเครื่องเอง จัดซื้อหาเครื่องเองก็หายไปด้วยการใช้ Virtual Machine ที่สามารถหั่นเครื่องออกเป็นหลาย ๆ เครื่องและใช้งานพร้อม ๆ กันได้ ถัดไประบบ Infrastructure เช่น ระบบไฟฟ้า และ การระบายความร้อนก็หายไป ด้วยการมาของ Cloud Computing ไม่สนว่าเครื่องจริง ๆ ของเราจะอยู่ที่ไหนบนโลก แต่เราสามารถเข้าถึงได้จากที่ไหนก็ได้บนโลก และคิดเงินเป็นชั่วโมงในการเปิดใช้งานไป แต่สิ่งที่เหลืออยู่นอกจากการเขียนโปรแกรมก็คือ การติดตั้ง Environment ต่าง ๆ และการ Scale นั่นเอง ซึ่งเป็นเรื่องที่บอกเลยว่า ถ้าได้ลองทำ และไม่ค่อยมีประสบการณ์มาก่อน ก็จะหัวร้อนเป็นเรื่องธรรมดามาก ทำให้ต้องมีอะไรบางอย่างมาช่วยในเรื่องนี้ เพื่อให้เรื่องพวกนี้มันเป็น Abstract Layer ที่ Programmer ไม่ต้องสนใจเลย

Serverless ที่ไม่ทิพย์

มาถึงในยุคนี้ที่มี Concept ในเรื่องของ Serverless เกิดขึ้น ที่ไม่ใช่แปลว่าไม่มี Server แต่มันแปลว่า เราพลักภาระในการจัดหาเครื่อง การติดตั้งโปรแกรม การดูแลเรื่องระบบรักษาความปลอดภัยไปให้กับผู้บริการของเราเลย สิ่งที่เราต้องทำก็คือ เขียนโปรแกรมของเราออกมา แล้วเอาไปรันบนระบบที่เป็น Serverless โดยที่เราไม่ต้อง Install อะไรเองมากเท่าไหร่เลย

ซึ่งโครงสร้างการทำงานแบบ Serverless เราจะแบ่งออกเป็น 2 ส่วนใหญ่ ๆ คือ Function-as-a-Service (FaaS) ส่วนนี้เป็นส่วนที่เรานำ Code ของเราขึ้นไป และทำการ Run ตาม Runtime ที่เราเลือกได้เลยว่า เราอยากจะใช้อะไรรัน อาจจะเป็น Node.js, Go หรือภาษาอื่น ๆ ตามที่ผู้ให้บริการมีได้เลย

จากเดิมที่เมื่อก่อน เราอาจจะเขียนโปรแกรมเป็นก้อนเดียว มทำได้หลาย ๆ อย่างขึ้นไป เราก็ต้องเปลี่ยนวิธีการเขียนเป็นว่า เราอาจจะต้องแยกออกเป็นหลาย ๆ Function และเอาขึ้นแยก ๆ กันไป เรามองว่า เรื่องนี้มันมีข้อดีอยู่นะ คือพวกการ Debug ง่ายขึ้นเยอะมาก จากเดิมที่ Code ของเราเป็นก้อนใหญ่ ๆ โยงกันเต็มไปหมด อันนี้ก็เหลือแค่ Function เดียวเท่านั้น ทำให้เวลาที่มีข้อผิดพลาดเกิดขึ้น เราก็สามารถแก้มันได้ง่ายกว่าเยอะ

ซึ่งการทำงานของมันจะแตกต่างจากการทำงานแบบเก่า ๆ คือ มันจะไม่ได้ทำงานอยู่ตลอดเวลา แบบตลอดจริง ๆ มันจะต้องมีการถูกปลุก หรือเรียกจาก Application ในส่วนอื่น ๆ เพื่อให้ตื่นขึ้นมาทำงาน จากนั้นมันจะทำการเริ่มติดตั้ง และ สร้างสภาพแวดล้อมที่เรากำหนดไว้ ซึ่งเวลาตรงนี้แหละ เราจะเรียกว่า Cold Start ที่จะใช้เวลาสักหน่อย จากนั้น มันก็จะทำการรัน Application ตาม Parameter ที่เราใส่เข้ามา และเมื่อเวลาผ่านไปสักพัก ถ้ามันไม่ได้รับการเรียกอะไรขึ้นมา มันก็จะโดนลบทิ้งจากระบบ และเก็บส่วนของ Code ไว้ในที่นึง พอมีการเรียกมันก็จะตื่นขึ้น มาเป็นแบบนี้เรื่อย ๆ

จะเห็นว่า เมื่อมันทำงานเสร็จ สภาพแวดล้อมที่มันถูกสร้างขึ้นมาก็จะถูกลบออกไป ทำให้เราไม่สามารถเก็บข้อมูลได้บน FaaS อยู่แล้ว เราเรียกการทำงานแบบนี้ว่า Stateless ทำให้นำไปสู่อีกส่วนประกอบนึง

Backend-as-a-Service (BaaS) เข้ามาช่วย FaaS เป็นเหมือนผู้ช่วยในการทำงาน ที่เป็นส่วนของ Database, Authentication และอื่น ๆ ที่ช่วย Support Application ของเรานั่นเอง

จะสังเกตุได้ว่า ตั้งแต่เราคุยเรือง Serverless เรายังไม่ได้พูดถึงเครื่องอะไรเลยนะ ใช่แล้ว เป็นเพราะเราไม่ต้องสนเลยว่า เราจะใช้เครื่องที่ไหน เราจะ Setup Environment อย่างไร และ เราได้ทำการอัพเดท OS ให้ใหม่อย่างสม่ำเสมอเพื่อความปลอดภัยหรือไม่ เพราะทั้งหมด ฝั่งผู้ให้บริการจัดการให้เราหมดแล้ว เราก็แค่รันโปรแกรมของเราไปเท่านั้นเอง ส่วนเรื่องของการ Scale เราก็ไม่ต้องเป็นห่วงเลย ไม่สิ เราไม่ต้องสนใจเลย เพราะผู้ให้บริการจัดการให้เราหมดแต่ละเจ้า เขาก็จะมีวิธีในการ Scale ที่แตกต่างกัน ในเบื้องต้น ถ้างานของเราไม่ได้มี Code แปลก ๆ อยู่ ก็ไม่ต้องไปสนใจเลย ให้เป็น Abstract Layer ไปได้เลย แต่ถ้างานที่มีความ Sensitive กับเรื่องการ Scale หน่อยก็อาจจะต้องลงไปดูในรายละเอียดของแต่ละเจ้าว่าเขาทำยังไง

อย่างที่บอกว่า FaaS มันไม่ได้ทำงานอยู่ตลอด มันจะต้องถูกปลุกขึ้นมา ทำเสร็จก็หลับไป แบบนี้ไปเรื่อย ๆ แปลว่า จริง ๆ แล้ว เวลาคิดค่าบริการ มันก็จะไม่เหมือนกับการใช้งาน Virtual Machine ที่ต้องเปิดตลอด คิดเงินตลอด เช่นอาจจะเดือนละ 5 USD บน Digital Ocean แต่จะเป็นการคิดในลักษณะ Pay-per-trigger ไปอะไรแบบนั้น

ตัวอย่าง

เราเล่ามา อาจจะยังไม่เห็นภาพว่า แต่ละส่วนมันทำงานพร้อม ๆ กันได้ยังไง เราขอยกตัวอย่างเป็นบริการจาก Google ละกันคือ Firebase สมมุติว่า เราต้องการที่จะทำเว็บสำหรับขายของ เป็น E-Commerce แบบหาทำอยากเขียนเอง เราก็จะเริ่มจากตัวเว็บก่อน ซึ่งใน Firebase นางก็จะมี Firebase Hosting ที่เป็น Static Web Hosting ให้เราทำงานได้เลย เราอาจจะเขียนเว็บเป็นลักษณะของ Static Site ขึ้นมา โดยอาจจะใช้พวก Static Site Generator เช่น Gatsby ก็ได้ หรืออาจจะเขียนขึ้นมาเอง ใช้ React หรือ Vue อะไรก็ว่ากันไป

ถ้าเราเอาเว็บแค่นั้นขึ้นไปเลย มันก็อาจจะที่จะไม่มีข้อมูลอะไรเลย เพราะมันก็ทำได้แค่ Serve Static Content เท่านั้น เราอาจจะอยากได้ระบบสมาชิกสำหรับการเก็บข้อมูลการซื้อต่าง ๆ เราก็อาจจะใช้การทำ Authenticate ด้วย Firebase Authentication ได้เลย ซึ่งเขาก็รองรับการ Login ในหลาย ๆ วิธีมาให้เราเลย พวกนี้เราไม่ต้องเขียนเองเลย เราแค่ไปเรียก Authentication และรอรับผลได้เลย เราไม่ต้องไปยุ่งกับ Logic ในส่วนของการทำ Authentication การไปเรียกแต่ละ Platform อะไรพวกนั้นเลย รอรับอย่างเดียว

จากนั้น เราอาจจะอยากมีพวกระบบการเก็บข้อมูลประวัติการซื้อ ใน Firebase ก็จะมีเป็นพวก Database สำหรับการเก็บข้อมูลให้เราพร้อม หรืออาจจะมีการเก็บพวกรูปภาพ หรือ File ต่าง ๆ เขาก็จะมีเป็น Cloud Storage Service ให้เราพร้อมใช้ได้เลย

และสุดท้าย เมื่อเราต้องการจะ Process ข้อมูลอะไรบางอย่าง เราก็สามารถเขียนเป็น Function แล้ว Deploy ไว้บน Cloud Function ได้เลย เวลาจะใช้งาน เราก็อาจจะ Trigger จากเหตุการณ์อะไรบางอย่างที่ User เป็นคนทำ มันก็จะรัน ๆ แล้วส่งผลกลับไปที่ User หรือเก็บลงไปใน Database อะไรก็ว่ากันไป

จะเห็นได้ว่า แค่ Service Firebase ของ Google เองก็ทำให้เราสามารถสร้างเว็บที่ใช้โครงสร้างแบบ Serverless ได้แบบเต็มรูปแบบแล้ว เราไม่ต้องมานั่งกังวลเรื่องของ Server, การ Scale และการ Config โปรแกรมแม้แต่น้อย เราทำหน้าที่แค่พัฒนาตัวเว็บออกมา เหมือนกับเราเราจะวาดรูป เราไม่ต้องมานั่งเสียเวลา Craft กระดาษ พู่กัน และสีออกมา ทุกอย่างมีหมดแล้ว เราก็แค่วาดไป สิ่งที่เราเสียก็คือ ค่าใช้กระดาษ พู่กัน และสีเท่านั้นเอง

ข้อดีคืออะไรบ้าง ?

อ่าน ๆ มามันมีข้อดีหลาย ๆ อย่างเลยสินะ จริง ๆ เราสามารถสรุปออกมาได้เป็น 3 เรื่องใหญ่ ๆ

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

เรื่องที่ 2 คือ ความเร็วในการพัฒนา เมื่อเราเป็นเจ้าของธุรกิจเอง เราก็ต้องการให้ Product ของเราสามารถ Launch และทำกำไรได้มากที่สุด ลองคิดภาพว่า ถ้าเราต้องมานั่งเสียเวลาในการเตรียมระบบอะไรอีกหลายเรื่อง ๆ มันก็ทำให้เราเสียเวลามาก ๆ ถ้าเราใช้งานพวก Serverless เราก็ตัดเรื่องพวกนี้ออกไปเลย ทำให้ Programmer Focus ไปที่สิ่งที่สำคัญคือ Product ได้โดยตรง แบบที่ไม่ต้องเป็นห่วงเรื่องอื่นเลยนั่นเอง ลดเวลาในการทำงานลงไปได้เยอะมาก ๆ

และเรื่องสุดท้ายคือ ความเถียร และ ความปลอดภัยสูง เป็นเรื่องที่มีความสำคัญมาก ๆ ในปัจจุบันเลยก็ว่าได้ ไม่มีใครอยากให้รัน ๆ อยู่ลูกค้ากำลังพีคเลย ล่มซะงั้น หรือ วันนึง เจอว่าข้อมูลลูกค้าของเราไปอยู่ใน Dark Web เราก็คงไม่ตลกกับเรื่องแบบนี้แน่ ๆ ทำให้เรื่องของความเสถียร และ ความปลอดภัยเป็นเรื่องที่สำคัญมาก แต่ในความเป็นจริง ถ้าเราอยากให้งานมัน Perfect มาก เราก็ต้องจ้างคนที่โคตรเจ๋งในทุก ๆ ด้าน แต่ในความเป็นจริง มันเป็นไปไม่ได้ไง (เว้นแต่ว่ารวยเหมือนเสี่ยที่ไม่ค่อยอยู่บ้าน อันนั้นก็อีกเรื่องไง) ทำให้การใช้งานพวก Serverless ที่ผู้ให้บริการจัดการเรื่องพวกนี้ให้หมด ทำให้เรามั่นใจได้ว่า Product ของเราจะมีความเสถียร และ ปลอดภัยสูงกว่าเราจ้างคนมาทำซะอีก

Serverless ไม่เหมาะกับใคร ?

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

ข้อเสียร้ายแรงตัวนึงของ Serverless เลยคือ Cold Start ที่ทำให้ Latency ในการทำงานของ Application สูงกว่าการรัน Application และรอ Connection แบบปกติมาก เพราะมันจะต้องใช้เวลาในการเตรียมสภาพแวดล้อมใหม่เรื่อย ๆ นั่นเอง ซึ่งในบาง Application ที่ต้องการความ Real-time มาก ๆ อาจจะไม่ใช่ตัวเลือกที่ดีเท่าไหร่กับ Serverless

หรือใน Application ที่ต้องทำงานเป็นเวลานาน ๆ เช่นพวก Batch Processing หรือ Server ที่ต้องมีการติดต่อ ทำงานกันตลอด Serverless จะไม่เหมาะกับงานพวกนี้เลย เพราะพวก Service ที่เป็น Serverless มักจะมีการจำกัดเวลาในการทำงานต่อคร้ังไว้ด้วย ถ้าเกิด Batch ของเราใช้เวลาเกิน เวลาที่ผู้ให้บริการกำหนดไว้มันก็จะโดน Kill หลุดหายไปเลย ทำให้พวก Container Service หรือการเปิด Virtual Machine เลย อาจจะเหมาะสมกว่าก็ได้

อีกหนึ่ง Application ที่เราว่าไม่เหมาะอีกเหมือนกันคือ Application ที่ต้องใช้ CPU ในการทำงานสูงมาก ๆ นอกจากเรื่องเวลาที่ได้เล่าไป อีกเรื่องคือ CPU ที่ใช้ เพราะ Serverless เราปล่อยให้เรื่องของ Hardware Specification เป็นเรื่อง Abstract ที่ผู้บริการจัดการให้เราเลย ทำให้เราไม่อาจจะรู้ได้เลยนะว่า ณ ตอนนี้ที่เรากำลังทำงานอยู่ เขา Allocate CPU หรือ Resource ให้เรามากหรือน้อยขนาดไหน เราควบคุมเรื่องนี้ไม่ได้เลย

เผลอ ๆ ในบาง Application ที่มีการเชื่อมต่อ หรือทำงานตลอดเวลา การใช้ Container Service หรือ Virtual Machine อาจจะให้ราคาที่ถูกกว่าก็ได้

สรุป: Serverless ของเทพที่รอการเปลี่ยนแปลง ?

Photo by Caspar Camille Rubin / Unsplash

วันนี้เราก็ได้นำเสนอในเรื่องของ Serverless ตั้งแต่การทำงาน ตัวอย่าง จนไปถึงข้อดี และข้อเสียของมัน ในความเห็นเรา เรามองว่ามันเป็นอนาคตของการทำงานเลยทีเดียว เรามองว่ามันเหมือนกับ Cloud Computing ที่เมื่อก่อน เราอาจจะ ด่ากันว่า จะบ้าเหรอ อยู่ ๆ เราเอาข้อมูลของเราไปไว้ที่ไหนบนโลกก็ไม่รู้ จนเวลาผ่านไป การใช้งาน Cloud Computing ดูจะเป็น Buzzword ที่เอามาใช้กันอย่างจริงจัง (และโง่ ๆ ก็มี) เราก็ว่า Serverless Archtecture ก็จะเป็นแบบนั้นในอนาคตเหมือนกัน เพราะการแข่งขันทางธุรกิจที่เร็วขึ้นเรื่อย ๆ Serverless เข้ามาช่วยเสริมในเรื่องนี้ได้พอดีเลย ทำให้ธุรกิจเดินไปได้เร็วทันตามคู่แข่งมากขึ้น ทำไมมันจะไม่เป็นอนาคตละใช่ม่ะ แล้วคุณละคิดว่ายังไง ลอง Comment มาคุยกันหน่อย