ความเสี่ยงกับผลตอบแทน: คำแนะนำในการทำความเข้าใจคอนเทนเนอร์ซอฟต์แวร์
เผยแพร่แล้ว: 2022-03-11พวกเราที่อายุมากพอจะจำวันที่ซอฟต์แวร์ถูกส่งมาจากสื่อจริงเป็นหลัก การแพร่กระจายของอินเทอร์เน็ตบรอดแบนด์และสมาร์ทโฟนทำให้เราเข้าสู่ยุคของบริการเว็บ—ซอฟต์แวร์ที่โฮสต์บนคลาวด์ที่เข้าถึงโดยไคลเอนต์ของผู้ใช้ เช่น เบราว์เซอร์และแอพ
ไม่นานมานี้ เว็บแอปพลิเคชันถูกเรียกใช้โดยตรงบนเครื่องจริงในศูนย์ข้อมูลส่วนตัว เพื่อความสะดวกในการจัดการ แอปพลิเคชันเหล่านี้มักจะเป็นแบบเสาหิน—เซิร์ฟเวอร์ขนาดใหญ่เพียงเครื่องเดียวจะมีรหัสส่วนหลังและฐานข้อมูลทั้งหมด ขณะนี้ บริการเว็บโฮสติ้งเช่น Amazon และการแพร่กระจายของเทคโนโลยีไฮเปอร์ไวเซอร์ได้เปลี่ยนแปลงสิ่งเหล่านั้นทั้งหมด ด้วย Amazon Web Services (AWS) และเครื่องมือต่างๆ เช่น VirtualBox ทำให้ง่ายต่อการจัดแพคเกจระบบปฏิบัติการทั้งหมดในไฟล์เดียว
การใช้บริการต่างๆ เช่น EC2 ทำให้ง่ายต่อการจัดแพคเกจอิมเมจเครื่องและสตริงชุดเซิร์ฟเวอร์เสมือนเข้าด้วยกัน กระบวนทัศน์ของ microservices ตามมาด้วย ซึ่งเป็นแนวทางสำหรับสถาปัตยกรรมซอฟต์แวร์ โดยที่แอปแบบเสาหินขนาดใหญ่จะแบ่งออกเป็นบริการเล็กๆ น้อยๆ ที่มุ่งเน้นซึ่งทำสิ่งหนึ่งได้ดี โดยทั่วไป แนวทางนี้ช่วยให้สามารถปรับขนาดและการพัฒนาคุณลักษณะได้ง่ายขึ้น เนื่องจากสามารถค้นหาคอขวดได้เร็วกว่า และแยกการเปลี่ยนแปลงระบบได้ง่ายขึ้น
สัตว์เลี้ยงสู่ปศุสัตว์
ฉันกลายเป็นวิศวกรโครงสร้างพื้นฐานในช่วงเวลาที่เทรนด์นี้กำลังได้รับความนิยมสูงสุด ฉันจำได้ว่าสร้างสภาพแวดล้อมการผลิตครั้งแรกใน Amazon โดยใช้ชุดสคริปต์ทุบตี เซิร์ฟเวอร์เป็นเหมือนสัตว์เลี้ยงสำหรับฉัน ฉันให้ชื่อที่น่ารักแก่พวกเขาแต่ละคน ฉันติดตามพวกเขาอย่างระมัดระวัง ฉันตอบสนองต่อการแจ้งเตือนอย่างรวดเร็วและรักษาสุขภาพให้แข็งแรง ฉันปฏิบัติต่อกรณีเหล่านั้นด้วยความรักและความเสน่หาเพราะมันเจ็บปวดที่จะพยายามแทนที่มัน—เหมือนกับสัตว์เลี้ยงอันเป็นที่รัก
เชฟผู้เป็นเครื่องมือจัดการการกำหนดค่ามาพร้อมกัน และเกือบจะในทันทีชีวิตของฉันก็ง่ายขึ้น ด้วยเครื่องมืออย่าง Chef และ Puppet คุณสามารถขจัดความเจ็บปวดที่เกิดจากมือส่วนใหญ่ที่เกี่ยวข้องกับการจัดการระบบคลาวด์ได้ คุณสามารถใช้โครงสร้าง "สภาพแวดล้อม" เพื่อแยกเซิร์ฟเวอร์การพัฒนา การจัดเตรียม และการใช้งานจริง คุณสามารถใช้ "ถุงข้อมูล" และ "บทบาท" เพื่อกำหนดพารามิเตอร์การกำหนดค่าและผลักดันชุดการเปลี่ยนแปลง ตอนนี้เซิร์ฟเวอร์ "สัตว์เลี้ยง" ทั้งหมดของฉันจบการศึกษาจากโรงเรียนการเชื่อฟัง
จากนั้นในปี 2013 Docker ก็มาถึง และยุคใหม่ก็เริ่มขึ้น: ยุคของซอฟต์แวร์ในฐานะปศุสัตว์ กระบวนทัศน์คอนเทนเนอร์เป็นหนึ่งในการประสานกัน ไม่ใช่การจัดการการกำหนดค่า เครื่องมือต่างๆ เช่น Kubernetes, Docker Compose และ Marathon มุ่งเน้นที่การย้ายไปยังรูปภาพที่กำหนดไว้ล่วงหน้า แทนที่จะปรับค่าการกำหนดค่าบนอินสแตนซ์ที่ทำงานอยู่ โครงสร้างพื้นฐานไม่เปลี่ยนรูป เมื่อคอนเทนเนอร์เสีย เราไม่พยายามแก้ไข—เรายิงที่หัวแล้วเปลี่ยนใหม่ เราใส่ใจในสุขภาพของฝูงสัตว์มากกว่าสัตว์แต่ละตัว เราไม่ตั้งชื่อเซิร์ฟเวอร์ให้น่ารักอีกต่อไป
รางวัล
คอนเทนเนอร์ทำให้หลายๆ อย่างง่ายขึ้น พวกเขาให้ธุรกิจมุ่งเน้นไปที่ซอสพิเศษของตนเองมากขึ้น ทีมงานด้านเทคนิคสามารถกังวลน้อยลงเกี่ยวกับโครงสร้างพื้นฐานและการจัดการการกำหนดค่า และมักจะกังวลเกี่ยวกับโค้ดของแอปแทน บริษัทต่างๆ สามารถก้าวไปอีกขั้นและใช้บริการที่มีการจัดการสำหรับสิ่งต่างๆ เช่น MySQL, Cassandra, Kafka หรือ Redis เพื่อไม่ต้องจัดการกับชั้นข้อมูลเลย มีบริษัทสตาร์ทอัพหลายแห่งที่เสนอบริการแมชชีนเลิร์นนิงแบบ "เสียบแล้วใช้งานได้จริง" และช่วยให้บริษัทต่างๆ วิเคราะห์ที่ซับซ้อนได้โดยไม่ต้องกังวลเกี่ยวกับโครงสร้างพื้นฐาน แนวโน้มเหล่านี้มาถึงจุดสูงสุดในโมเดลแบบไร้เซิร์ฟเวอร์ ซึ่งเป็นแนวทางสถาปัตยกรรมซอฟต์แวร์ที่ช่วยให้ทีมสามารถเผยแพร่ซอฟต์แวร์โดยไม่ต้องจัดการ VM หรือคอนเทนเนอร์เดียว บริการของ AWS เช่น S3, Lambda, Kinesis และ Dynamo ทำให้สิ่งนี้เป็นไปได้ ดังนั้น เพื่อขยายความคล้ายคลึง เราได้เปลี่ยนจากสัตว์เลี้ยงไปสู่การเลี้ยงปศุสัตว์ไปจนถึงการบริการสัตว์ตามความต้องการ

ทั้งหมดนี้เจ๋งมาก มันบ้ามากที่เราอยู่ในยุคที่เด็กอายุสิบสองปีสามารถสร้างระบบซอฟต์แวร์ที่ซับซ้อนได้ด้วยการคลิกเพียงไม่กี่ครั้ง เราควรจำไว้ว่าเมื่อไม่นานมานี้สิ่งนี้เป็นไปไม่ได้ ประธานาธิบดีสหรัฐสองสามคนที่ผ่านมา สื่อที่จับต้องได้เป็นมาตรฐาน และมีเพียงบริษัทใหญ่ๆ เท่านั้นที่สามารถผลิตและแจกจ่ายซอฟต์แวร์ได้ การแก้ไขข้อผิดพลาดเป็นเรื่องหรูหรา ตอนนี้เด็กอายุสิบสองปีสามารถสร้างบัญชี AWS และทำให้ซอฟต์แวร์ของเขาใช้งานได้ทั่วโลก หากมีจุดบกพร่อง ใครบางคนจะดักฟังเขาใน Slack และผู้ใช้ทุกคนจะแก้ไขได้ภายในไม่กี่นาที
ความเสี่ยง
เจ๋งมาก แต่ไม่มีราคา—การพึ่งพาผู้ให้บริการคลาวด์อย่าง Amazon หมายถึงการพึ่งพาบริษัทขนาดใหญ่และเทคโนโลยีที่เป็นกรรมสิทธิ์ หาก Richard Stallman และ Edward Snowden ไม่ได้ทำให้คุณกังวลเกี่ยวกับเรื่องดังกล่าว ปัญหาล่าสุดกับ Facebook ก็น่าจะเกิดขึ้นได้อย่างแน่นอน
สิ่งที่เป็นนามธรรมมากขึ้นจากฮาร์ดแวร์ยังทำให้มีความเสี่ยงที่จะเกิดความโปร่งใสและการควบคุมน้อยลง เมื่อมีสิ่งผิดปกติเกิดขึ้นกับระบบที่มีคอนเทนเนอร์หลายร้อยตู้ เราต้องหวังว่าความล้มเหลวจะเกิดขึ้น ณ ที่ใดที่หนึ่งที่เราตรวจพบได้ หากปัญหาอยู่ที่ระบบปฏิบัติการโฮสต์หรือฮาร์ดแวร์พื้นฐาน อาจระบุได้ยาก การหยุดทำงานที่สามารถแก้ไขได้ใน 20 นาทีโดยใช้ VM อาจใช้เวลาหลายชั่วโมงหรือเป็นวันในการแก้ไขปัญหาด้วยคอนเทนเนอร์ หากคุณไม่มีเครื่องมือที่เหมาะสม
ไม่ใช่แค่ความล้มเหลวเท่านั้นที่เราต้องกังวลเมื่อพูดถึงเรื่องต่างๆ เช่น Docker นอกจากนี้ยังมีปัญหาด้านความปลอดภัย ไม่ว่าแพลตฟอร์มคอนเทนเนอร์ใดที่เราใช้ เราต้องเชื่อมั่นว่าไม่มีช่องโหว่ด้านความปลอดภัยที่ไม่เปิดเผยหรือแบ็คดอร์ การใช้แพลตฟอร์มโอเพ่นซอร์สไม่รับประกันความปลอดภัยเช่นกัน หากเราใช้อิมเมจคอนเทนเนอร์ของบริษัทอื่นสำหรับส่วนต่างๆ ของระบบ เราอาจมีความเสี่ยง
สรุป
กระบวนทัศน์ด้านการปศุสัตว์มีความน่าสนใจด้วยเหตุผลหลายประการ แต่ก็ไม่ใช่ว่าไม่มีข้อเสีย ก่อนเร่งรัดจัดคอนเทนเนอร์ทั้งหมด ทีมเทคโนโลยีต้องคิดก่อนว่ามันเป็นทางเลือกที่เหมาะสมหรือไม่ และให้แน่ใจว่าพวกเขาสามารถบรรเทาผลกระทบด้านลบได้
โดยส่วนตัวแล้วฉันชอบทำงานกับคอนเทนเนอร์ ฉันตื่นเต้นที่จะได้เห็นว่าสิ่งต่างๆ จะเป็นอย่างไรในอีก 10 ปีข้างหน้าเมื่อมีแพลตฟอร์มและกระบวนทัศน์ใหม่ๆ เกิดขึ้น อย่างไรก็ตาม ในฐานะที่ปรึกษาด้านความปลอดภัยในอดีต ฉันระมัดระวังพอที่จะรู้ว่าทุกอย่างมีราคา ขึ้นอยู่กับวิศวกรที่จะต้องระมัดระวังเพื่อให้แน่ใจว่าเราจะไม่ละทิ้งความเป็นอิสระของเราในฐานะผู้ใช้และนักพัฒนา แม้แต่เวิร์กโฟลว์ CD/CI ที่ง่ายที่สุดในโลกก็ไม่คุ้มกับราคาที่จ่ายไป