ไม่มีเซิร์ฟเวอร์ในระบบคลาวด์: AWS เทียบกับ Google Cloud เทียบกับ Microsoft Azure

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

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

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

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

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

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

แน่นอนว่าความสะดวกทั้งหมดนี้มีค่าใช้จ่ายแอบแฝง หากคุณต้องการออกหรือย้ายโค้ดของคุณไปยังไซต์อื่นคุณอาจจะติดขัดในการเขียนสแต็กส่วนใหญ่ API แตกต่างกันและในขณะที่มีการกำหนดมาตรฐานสำหรับภาษายอดนิยมเช่น JavaScript แต่ก็ค่อนข้างใกล้เคียงกับกรรมสิทธิ์ มีโอกาสมากมายสำหรับการล็อคอิน

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

AWS Lambda

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

คุณสามารถเขียนฟังก์ชัน Lambda ใน JavaScript (Node.js), Python, Java, C # และ Go เนื่องจากภาษาเหล่านี้สามารถฝังภาษาอื่น ๆ ได้จึงค่อนข้างเป็นไปได้ที่จะรันโค้ดอื่น ๆ เช่น Haskell, Lisp หรือแม้แต่ C ++ (ดูเรื่องราวเกี่ยวกับการรวบรวม C ++ เดิมไปยังไลบรารีเพื่อใช้กับ AWS Lambda)

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

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

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

Amazon มีตัวเลือกอื่น ๆ อีกมากมายที่เกี่ยวกับ "ไร้เซิร์ฟเวอร์" เช่นเดียวกับ AWS Lambda หากไม่มีเซิร์ฟเวอร์หมายความว่าช่วยให้คุณลดภาระในการจัดการเซิร์ฟเวอร์ได้ มีเครื่องมือที่ยืดหยุ่นเช่น Amazon EC2 Auto Scaling และ AWS Fargate ที่หมุนและปิดเซิร์ฟเวอร์และ AWS Elastic Beanstalk ซึ่งรับโค้ดที่อัปโหลดของคุณนำไปใช้กับเว็บเซิร์ฟเวอร์และจัดการการจัดสรรภาระงานและการปรับขนาด แน่นอนว่าด้วยเครื่องมืออัตโนมัติเหล่านี้คุณยังคงต้องรับผิดชอบในการสร้างอิมเมจเซิร์ฟเวอร์

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

Google Cloud Functions และ Firebase

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

เริ่มต้นด้วย Google App Engine ในปี 2008 Google ได้เพิ่มตัวเลือก "ไร้เซิร์ฟเวอร์" ที่แตกต่างกันอย่างช้าๆด้วยการผสมผสานการส่งข้อความและความโปร่งใสของข้อมูลที่หลากหลาย ที่เรียกว่า Google Cloud Pub / Sub ซ่อนคิวการส่งข้อความจากคุณดังนั้นสิ่งที่คุณต้องทำคือเขียนโค้ดสำหรับผู้ผลิตข้อมูลและผู้บริโภค Google Cloud Functions นำเสนอการคำนวณตามเหตุการณ์สำหรับผลิตภัณฑ์หลักจำนวนมากรวมถึงเครื่องมือ marquee และ API บางส่วน จากนั้นก็มี Google Firebase ซึ่งเป็นฐานข้อมูลเกี่ยวกับสเตียรอยด์ที่ให้คุณผสมโค้ด JavaScript ลงในชั้นจัดเก็บข้อมูลที่ส่งข้อมูลไปยังไคลเอนต์ของคุณ

ในจำนวนนี้ Firebase เป็นสิ่งที่น่าสนใจที่สุดสำหรับฉัน บางคนแนะนำว่าฐานข้อมูลเป็นแอปแบบไร้เซิร์ฟเวอร์ดั้งเดิมโดยแยกโครงสร้างข้อมูลและงานจัดเก็บข้อมูลบนดิสก์เพื่อส่งข้อมูลทั้งหมดผ่านพอร์ต TCP / IP Firebase นำสิ่งที่เป็นนามธรรมนี้ไปสู่จุดสูงสุดด้วยการเพิ่มโค้ด JavaScript และการส่งข้อความเพื่อทำเกือบทุกอย่างที่คุณอาจต้องการทำกับโครงสร้างพื้นฐานฝั่งเซิร์ฟเวอร์รวมถึงการตรวจสอบสิทธิ์ ในทางเทคนิคเป็นเพียงฐานข้อมูล แต่เป็นฐานข้อมูลที่สามารถจัดการตรรกะทางธุรกิจและการส่งข้อความสำหรับสแต็ก คุณสามารถใช้งานไคลเอนต์ HTML, CSS, JavaScript และ Firebase ได้เล็กน้อย

คุณอาจถูกล่อลวงให้เรียกเลเยอร์ JavaScript ของ Firebase ว่า "ขั้นตอนการจัดเก็บ" เช่นเดียวกับที่ Oracle ทำ แต่จะทำให้ภาพใหญ่ขาดหายไป โค้ด Firebase เขียนด้วย JavaScript ดังนั้นจึงทำงานใน Node.js เวอร์ชันท้องถิ่น คุณสามารถฝังตรรกะทางธุรกิจได้มากในเลเยอร์นี้เนื่องจากโลกของ Node เต็มไปด้วยไลบรารีสำหรับจัดการเวิร์กโฟลว์นี้อยู่แล้ว นอกจากนี้คุณจะเพลิดเพลินไปกับความสุขของรหัส isomorphic ที่ทำงานบนไคลเอนต์เซิร์ฟเวอร์และตอนนี้ฐานข้อมูล

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

คุณไม่จำเป็นต้องเน้นเฉพาะ Firebase ฟังก์ชั่นระบบคลาวด์ของ Google ขั้นพื้นฐานเป็นวิธีการที่ง่ายกว่าในการฝังโค้ดที่กำหนดเองในระบบคลาวด์ของ Google ในขณะนี้ Cloud Functions ส่วนใหญ่เป็นเพียงตัวเลือกสำหรับการเขียนโค้ด Node.js ซึ่งจะทำงานในสภาพแวดล้อม Node ที่กำหนดค่าไว้ล่วงหน้า แม้ว่า Google Cloud Platform ที่เหลือจะรองรับภาษาที่หลากหลายตั้งแต่ Java และ C # ไปจนถึง Go, Python และ PHP แต่ Cloud Functions นั้น จำกัด เฉพาะ JavaScript และ Node เท่านั้น มีคำใบ้ว่าตัวเลือกภาษาอื่น ๆ กำลังจะมาและฉันจะไม่แปลกใจถ้ามันจะปรากฏในไม่ช้า

Google Cloud Functions ไม่สามารถเข้าถึง Google Cloud ได้อย่างลึกซึ้งเท่ากับ AWS Lambda ถึง AWS อย่างน้อยก็ ณ จุดนี้ เมื่อฉันมองไปที่การสร้างฟังก์ชันเพื่อโต้ตอบกับ Google เอกสารฉันพบว่าฉันอาจจะต้องใช้ REST API และเขียนโค้ดในสิ่งที่เรียกว่า Apps Script กล่าวอีกนัยหนึ่งโลกของ Google Docs มี REST API ของตัวเองซึ่งไม่มีเซิร์ฟเวอร์มานานก่อนที่คำศัพท์จะได้รับการประกาศเกียรติคุณ

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

ยังคงมีอุปสรรคบางประการที่ต้องคำนึงถึง เช่นเดียวกับ Cloud Functions โค้ดของคุณจะต้องเขียนด้วยวิธีที่ค่อนข้างไร้สถานะและจะต้องดำเนินการตามคำขอแต่ละรายการในระยะเวลาที่ จำกัด แต่ App Engine จะไม่ทิ้งโครงทั้งหมดหรือลืมทุกอย่างระหว่างคำขอ App Engine เป็นส่วนสำคัญของการปฏิวัติแบบไร้เซิร์ฟเวอร์และยังคงเป็นเครื่องมือที่สามารถเข้าถึงได้มากที่สุดสำหรับผู้ที่ใช้วิธีการของโรงเรียนเก่าในการสร้างสแต็กของตนเองใน Python, PHP, Java, C # หรือ Go

ฟังก์ชัน Microsoft Azure

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

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

หนึ่งในตัวอย่างที่ดีที่สุดจากเอกสาร Azure Functions แสดงให้เห็นว่าฟังก์ชันคลาวด์สามารถทริกเกอร์ได้อย่างไรเมื่อมีคนบันทึกสเปรดชีตไปยัง OneDrive ทันใดนั้นเอลฟ์ตัวน้อยในเมฆก็มีชีวิตขึ้นมาและทำสิ่งต่างๆในสเปรดชีต สิ่งนี้ผูกพันกับร้านค้าไอทีที่สนับสนุนทีมที่ชื่นชอบสเปรดชีต Excel (หรือเอกสาร Office อื่น ๆ ) พวกเขาสามารถเขียน Azure Functions เพื่อทำอะไรก็ได้ เรามักคิดว่า HTML และเว็บเป็นอินเทอร์เฟซเดียวสำหรับระบบคลาวด์ แต่ไม่มีเหตุผลว่าทำไมจึงไม่สามารถใช้ผ่านรูปแบบเอกสารเช่น Microsoft Word หรือ Excel