Serverless คืออะไร? อธิบายการประมวลผลแบบไร้เซิร์ฟเวอร์

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

นวัตกรรมด้านไอทีจำนวนมากในช่วงสองทศวรรษที่ผ่านมาไม่ว่าจะเป็นเครื่องเสมือน, การประมวลผลแบบคลาวด์, คอนเทนเนอร์ - มุ่งเน้นไปที่การทำให้แน่ใจว่าคุณไม่ต้องคิดมากเกี่ยวกับเครื่องจริงที่รหัสของคุณทำงานอยู่ การประมวลผลแบบไร้เซิร์ฟเวอร์เป็นกระบวนทัศน์ที่ได้รับความนิยมมากขึ้นเรื่อย ๆ ซึ่งนำความปรารถนานี้ไปสู่ข้อสรุปเชิงตรรกะ: ด้วยการประมวลผลแบบไร้เซิร์ฟเวอร์คุณไม่จำเป็นต้องรู้อะไรเกี่ยวกับฮาร์ดแวร์หรือระบบปฏิบัติการที่รหัสของคุณทำงานอยู่เนื่องจากผู้ให้บริการดูแลคุณทั้งหมด .

คอมพิวเตอร์ไร้เซิร์ฟเวอร์คืออะไร?

การประมวลผลแบบไร้เซิร์ฟเวอร์เป็นรูปแบบการดำเนินการสำหรับระบบคลาวด์ที่ผู้ให้บริการระบบคลาวด์จัดสรรแบบไดนามิกจากนั้นจะเรียกเก็บเงินจากผู้ใช้เฉพาะทรัพยากรการประมวลผลและพื้นที่เก็บข้อมูลที่จำเป็นในการเรียกใช้โค้ดบางส่วน ตามปกติแล้วยังคงมีเซิร์ฟเวอร์ที่เกี่ยวข้องอยู่ แต่การจัดเตรียมและการบำรุงรักษาจะได้รับการดูแลทั้งหมดโดยผู้ให้บริการ Chris Munns ผู้สนับสนุนระบบไร้เซิร์ฟเวอร์ของ Amazon กล่าวในการประชุมปี 2017 ว่าจากมุมมองของทีมที่เขียนและปรับใช้โค้ด“ ไม่มีเซิร์ฟเวอร์ให้จัดการหรือจัดเตรียมเลย ซึ่งรวมถึงสิ่งที่จะเป็นโลหะเปลือยไม่มีอะไรที่เสมือนจริงไม่มีอะไรที่เป็นคอนเทนเนอร์ - สิ่งใดก็ตามที่เกี่ยวข้องกับคุณในการจัดการโฮสต์การแก้ไขโฮสต์หรือจัดการกับอะไรก็ตามในระดับระบบปฏิบัติการไม่ใช่สิ่งที่คุณควรต้องทำใน โลกไร้เซิร์ฟเวอร์” 

ดังที่นักพัฒนา Mike Roberts อธิบายคำนี้เคยใช้สำหรับสถานการณ์ที่เรียกว่าback-end-as-a-serviceซึ่งแอปบนอุปกรณ์เคลื่อนที่จะเชื่อมต่อกับเซิร์ฟเวอร์ส่วนหลังที่โฮสต์ทั้งหมดในระบบคลาวด์ แต่วันนี้เมื่อมีคนพูดคุยเกี่ยวกับคอมพิวเตอร์ serverless หรือสถาปัตยกรรม serverless,พวกเขาหมายถึงฟังก์ชั่น-as-a-Serviceเสนอที่ลูกค้าเขียนรหัสที่เพียงตรรกะทางธุรกิจโหม่งและการอัปโหลดไปยังผู้ให้บริการ ผู้ให้บริการรายนั้นดูแลการจัดเตรียมฮาร์ดแวร์เครื่องเสมือนและการจัดการคอนเทนเนอร์ทั้งหมดและแม้กระทั่งงานต่างๆเช่นมัลติเธรดที่มักสร้างไว้ในโค้ดแอปพลิเคชัน

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

ประโยชน์และข้อเสียของการประมวลผลแบบไร้เซิร์ฟเวอร์

จากคำอธิบายนั้นประโยชน์ที่ใหญ่ที่สุดสองประการของการประมวลผลแบบไร้เซิร์ฟเวอร์ควรมีความชัดเจน: นักพัฒนาสามารถมุ่งเน้นไปที่เป้าหมายทางธุรกิจของโค้ดที่พวกเขาเขียนแทนที่จะเป็นคำถามเกี่ยวกับโครงสร้างพื้นฐาน และองค์กรจะจ่ายเฉพาะทรัพยากรการประมวลผลที่พวกเขาใช้จริงในลักษณะที่ละเอียดมากแทนที่จะซื้อฮาร์ดแวร์จริงหรือเช่าอินสแตนซ์ระบบคลาวด์ที่ส่วนใหญ่ไม่ได้ใช้งาน

ดังที่เบอร์นาร์ดโกลเด้นชี้ให้เห็นประเด็นหลังนั้นเป็นประโยชน์อย่างยิ่งสำหรับแอปพลิเคชันที่ขับเคลื่อนด้วยเหตุการณ์ ตัวอย่างเช่นคุณอาจมีแอปพลิเคชันที่ไม่ได้ใช้งานเป็นเวลานาน แต่ภายใต้เงื่อนไขบางประการจะต้องจัดการกับคำขอเหตุการณ์จำนวนมากพร้อมกัน หรือคุณอาจมีแอปพลิเคชันที่ประมวลผลข้อมูลที่ส่งจากอุปกรณ์ IoT ที่มีการเชื่อมต่ออินเทอร์เน็ตแบบ จำกัด หรือไม่ต่อเนื่อง ในทั้งสองกรณีวิธีการดั้งเดิมจะต้องมีการจัดเตรียมเซิร์ฟเวอร์ที่มีน้ำหนักมากซึ่งสามารถรองรับความสามารถในการทำงานสูงสุดได้ แต่เซิร์ฟเวอร์นั้นจะถูกใช้งานน้อยที่สุด ด้วยสถาปัตยกรรมแบบไร้เซิร์ฟเวอร์คุณจะจ่ายเฉพาะทรัพยากรเซิร์ฟเวอร์ที่คุณใช้จริงเท่านั้น การประมวลผลแบบไม่ใช้เซิร์ฟเวอร์ก็จะดีสำหรับการประมวลผลแบบแบตช์บางประเภทหนึ่งในตัวอย่างที่ยอมรับได้ของกรณีการใช้งานสถาปัตยกรรมแบบไร้เซิร์ฟเวอร์คือบริการที่อัปโหลดและประมวลผลชุดไฟล์ภาพแต่ละไฟล์และส่งไปยังส่วนอื่นของแอปพลิเคชัน

บางทีข้อเสียที่ชัดเจนที่สุดของฟังก์ชั่นไร้เซิร์ฟเวอร์ก็คือการทำงานชั่วคราวโดยเจตนาและอย่างที่ AlexSoft กล่าวไว้ว่า“ ไม่เหมาะสำหรับงานระยะยาว” ผู้ให้บริการแบบไร้เซิร์ฟเวอร์ส่วนใหญ่จะไม่ปล่อยให้โค้ดของคุณทำงานเกินสองสามนาทีและเมื่อคุณหมุนฟังก์ชันจะไม่เก็บข้อมูลสถานะใด ๆ จากอินสแตนซ์ที่รันก่อนหน้านี้ ปัญหาที่เกี่ยวข้องคือโค้ดแบบไร้เซิร์ฟเวอร์อาจใช้เวลาหลายวินาทีในการหมุน - ไม่ใช่ปัญหาสำหรับกรณีการใช้งานจำนวนมาก แต่หากแอปพลิเคชันของคุณต้องการเวลาแฝงต่ำขอเตือน

ข้อเสียอื่น ๆ อีกมากมายตามที่ Rohit Akiwatkar และ Gary Arora ชี้ให้เห็นเกี่ยวข้องกับการล็อคอินผู้ขาย แม้ว่าจะมีตัวเลือกโอเพ่นซอร์สให้ใช้งาน แต่ตลาดแบบไร้เซิร์ฟเวอร์ก็ถูกครอบงำโดยผู้ให้บริการคลาวด์เชิงพาณิชย์รายใหญ่ดังที่เราจะพูดถึงในอีกสักครู่ นั่นหมายความว่านักพัฒนามักจะใช้เครื่องมือจากผู้ขายซึ่งทำให้ยากที่จะเปลี่ยนหากพวกเขาไม่พอใจ และเนื่องจากการประมวลผลแบบไร้เซิร์ฟเวอร์จำนวนมากเกิดขึ้นตามความหมายบนโครงสร้างพื้นฐานของผู้ขายจึงอาจเป็นเรื่องยากที่จะรวมโค้ดแบบไร้เซิร์ฟเวอร์เข้ากับการพัฒนาภายในและการทดสอบไปป์ไลน์

ผู้จำหน่ายแบบไร้เซิร์ฟเวอร์: AWS Lambda, Azure Functions และ Google Cloud Functions

ยุคใหม่ของการประมวลผลแบบไร้เซิร์ฟเวอร์เริ่มต้นด้วยการเปิดตัว AWS Lambda ซึ่งเป็นแพลตฟอร์มที่ใช้บริการคลาวด์ของ Amazon ในปี 2014 Microsoft ดำเนินการตาม Azure Functions ในปี 2559 Google Cloud Functions ซึ่งเป็นรุ่นเบต้ามาตั้งแต่ปี 2560 ในที่สุดก็มาถึงสถานะการใช้งานจริง ในเดือนกรกฎาคม 2018 บริการทั้งสามมีข้อ จำกัด ข้อดีภาษาที่รองรับและวิธีดำเนินการที่แตกต่างกันเล็กน้อย Rohit Akiwatkar มีบทสรุปที่ดีและละเอียดเกี่ยวกับความแตกต่างของทั้งสาม นอกจากนี้ในการรันยังมี IBM Cloud Functions ซึ่งใช้แพลตฟอร์มโอเพนซอร์ส Apache OpenWhisk

ในบรรดาแพลตฟอร์มคอมพิวเตอร์แบบไร้เซิร์ฟเวอร์ AWS Lambda เป็นแพลตฟอร์มที่โดดเด่นที่สุดและเห็นได้ชัดว่ามีเวลามากที่สุดในการพัฒนาและเติบโตเต็มที่ ครอบคลุมการอัปเดตและคุณลักษณะใหม่ ๆ ที่เพิ่มเข้ามาใน AWS Lambda ในช่วงปีที่ผ่านมา

กองซ้อนไร้เซิร์ฟเวอร์

เป็นกรณีในอาณาจักรซอฟต์แวร์จำนวนมากในโลก serverless ได้เห็นวิวัฒนาการของสแต็คของซอฟต์แวร์ซึ่งนำมารวมกันส่วนประกอบต่างๆที่จำเป็นในการสร้างโปรแกรมประยุกต์ serverless แต่ละสแต็กประกอบด้วยภาษาโปรแกรมที่คุณกำลังจะเขียนโค้ดกรอบแอปพลิเคชันที่จัดเตรียมโครงสร้างสำหรับโค้ดของคุณและชุดของทริกเกอร์ที่แพลตฟอร์มจะเข้าใจและใช้เพื่อเริ่มการเรียกใช้โค้ด

แม้ว่าคุณจะสามารถผสมและจับคู่ข้อเสนอพิเศษที่แตกต่างกันในแต่ละหมวดหมู่เหล่านี้ได้ แต่ก็มีข้อ จำกัด ขึ้นอยู่กับผู้ให้บริการที่คุณใช้โดยมีการทับซ้อนกัน ตัวอย่างเช่นสำหรับภาษาคุณสามารถใช้ Node.js, Java, Go, C # และ Python บน AWS Lambda ได้ แต่มีเพียง JavaScript, C # และ F # เท่านั้นที่ทำงานบนฟังก์ชัน Azure ได้ เมื่อพูดถึงทริกเกอร์ AWS Lambda มีรายชื่อที่ยาวที่สุด แต่หลายรายการนั้นเฉพาะสำหรับแพลตฟอร์ม AWS เช่น Amazon Simple Email Service และ AWS CodeCommit ในขณะเดียวกัน Google Cloud Functions สามารถเรียกใช้โดยคำขอ HTTP ทั่วไป Paul Jaworski มีข้อมูลเชิงลึกเกี่ยวกับสแต็คสำหรับแต่ละข้อเสนอสามรายการใหญ่

เฟรมเวิร์กแบบไร้เซิร์ฟเวอร์

เป็นเรื่องที่ควรค่าแก่การพิจารณาในส่วนกรอบของสมการเนื่องจากจะให้คำจำกัดความเกี่ยวกับวิธีการสร้างแอปพลิเคชันของคุณ Amazon มีข้อเสนอดั้งเดิมของตัวเองซึ่งก็คือ Serverless Application Model (SAM) แบบโอเพ่นซอร์ส แต่ก็มีอื่น ๆ เช่นกันซึ่งส่วนใหญ่เป็นแบบข้ามแพลตฟอร์มและโอเพ่นซอร์ส หนึ่งในสิ่งที่ได้รับความนิยมมากที่สุดเรียกว่าโดยทั่วไปคือ Serverless และเน้นว่ามันให้ประสบการณ์เดียวกันแพลตฟอร์มที่รองรับเช่น AWS Lambda, Azure Functions, Google Cloud Functions และ IBM OpenWhisk ข้อเสนอยอดนิยมอีกอย่างหนึ่งคือ Apex ซึ่งสามารถช่วยให้บางภาษาไม่สามารถใช้งานได้กับผู้ให้บริการบางรายเข้าสู่การต่อสู้

ฐานข้อมูลไร้เซิร์ฟเวอร์

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

ฐานข้อมูลเหล่านี้บางส่วนเรียกตัวเองว่าไร้เซิร์ฟเวอร์ซึ่งหมายความว่ามันทำงานเหมือนกับฟังก์ชันไร้เซิร์ฟเวอร์อื่น ๆ ที่เราได้กล่าวถึงในบทความนี้โดยมีข้อยกเว้นที่ชัดเจนว่าข้อมูลจะถูกจัดเก็บอย่างไม่มีกำหนด แต่ค่าใช้จ่ายในการจัดการส่วนใหญ่ที่เกี่ยวข้องกับการจัดเตรียมและการบำรุงรักษาฐานข้อมูลนั้นถูกทิ้งไป ดังที่นักพัฒนา Jeremy Daly กล่าวว่า“ สิ่งที่คุณต้องทำคือกำหนดค่าคลัสเตอร์จากนั้นการบำรุงรักษาการแก้ไขการสำรองข้อมูลการจำลองแบบและการปรับขนาดทั้งหมดจะได้รับการจัดการโดยอัตโนมัติสำหรับคุณ” เช่นเดียวกับข้อเสนอ function-as-a-service คุณจะจ่ายเฉพาะเวลาประมวลผลที่คุณใช้จริงและทรัพยากรจะหมุนขึ้นและลงตามความจำเป็นเพื่อให้ตรงกับความต้องการ

ผู้ให้บริการไร้เซิร์ฟเวอร์รายใหญ่สามรายแต่ละรายมีฐานข้อมูลแบบไร้เซิร์ฟเวอร์ของตนเอง: Amazon มี Aurora Serverless และ DynamoDB, Microsoft มี Azure Cosmos DB และ Google มี Cloud Firestore สิ่งเหล่านี้ไม่ใช่ฐานข้อมูลเดียวที่มีอยู่ Nemanja Novkovic มีข้อมูลเกี่ยวกับข้อเสนอเพิ่มเติม

การประมวลผลแบบไร้เซิร์ฟเวอร์และ Kubernetes

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

ในความเป็นจริงคอนเทนเนอร์และการประมวลผลแบบไร้เซิร์ฟเวอร์เกือบจะอยู่ร่วมกันอย่างแน่นอนในอีกหลายปีข้างหน้าและในความเป็นจริงฟังก์ชันแบบไร้เซิร์ฟเวอร์สามารถมีอยู่ในแอปพลิเคชันเดียวกับไมโครเซอร์วิสที่มีคอนเทนเนอร์ Kubernetes ซึ่งเป็นแพลตฟอร์มการจัดระเบียบคอนเทนเนอร์ที่ได้รับความนิยมสูงสุดสามารถจัดการโครงสร้างพื้นฐานแบบไร้เซิร์ฟเวอร์ได้เช่นกัน แน่นอนว่าด้วย Kubernetes คุณสามารถรวมบริการประเภทต่างๆไว้ในคลัสเตอร์เดียวได้  

ออฟไลน์แบบไร้เซิร์ฟเวอร์

คุณอาจพบว่าโอกาสในการเริ่มต้นใช้งานคอมพิวเตอร์แบบไร้เซิร์ฟเวอร์นั้นค่อนข้างน่ากลัวเนื่องจากดูเหมือนว่าคุณจะต้องลงทะเบียนกับผู้ขายเพื่อเล่นเกมและดูว่ามันทำงานอย่างไร แต่อย่ากลัว: มีหลายวิธีในการเรียกใช้รหัสเซิร์ฟเวอร์แบบออฟไลน์บนฮาร์ดแวร์ในเครื่องของคุณเอง ตัวอย่างเช่น AWS SAM มีคุณลักษณะเฉพาะที่ช่วยให้คุณทดสอบโค้ดแลมบ์ดาแบบออฟไลน์ และหากคุณกำลังใช้เฟรมเวิร์กแอปพลิเคชันแบบไม่มีเซิร์ฟเวอร์ให้ตรวจสอบเซิร์ฟเวอร์ออฟไลน์ซึ่งเป็นปลั๊กอินที่ช่วยให้คุณสามารถรันโค้ดในเครื่องได้ ขอให้สนุกกับการทดลอง!