- สตาร์ทอัพซิลิคอนแวลลีย์ Xenobroom Inc. ตัดสินใจย้ายโครงสร้างพื้นฐานเซิร์ฟเวอร์เดิมไปใช้ Kubernetes หลังการใช้งานรายวันพุ่งสูงขึ้นในช่วงการระบาดใหญ่เมื่อเดือนพฤษภาคม 2020
- การย้ายระบบขยายจากการปรับปรุงการ deploy แบบง่าย ๆ ไปเป็นงานระยะยาวในการทบทวนและออกแบบโครงสร้างที่อิง bash script และ VPS ใหม่
- ขอบเขตงานขยายตัวต่อเนื่อง โดยมีทั้งการอัปเกรด dependency และไลบรารี การเปลี่ยนบางส่วนของ PostgreSQL ไปเป็น distributed KV storage และการใช้ประโยชน์จากความยืดหยุ่นของ AWS
- staging server เดิมและการ deploy รายวันจาก develop branch ถูกแทนที่ด้วย workflow production-only CI, dynamic routing, A/B testing และการรองรับ dependency ตามภูมิภาค
- เมื่อดูเหมือนว่าการย้ายระบบเสร็จสิ้นแล้ว ไม่มีใครในทีมจำ วัตถุประสงค์ของผลิตภัณฑ์ ได้ และผู้ใช้กับนักลงทุนก็ยอมรับว่าไม่เคยเข้าใจผลิตภัณฑ์เดิมตั้งแต่แรก ทำให้การกู้คืนแทบเป็นไปไม่ได้
ขอบเขตงานที่ขยายใหญ่ขึ้นจากการย้ายไป Kubernetes
- Xenobroom Inc. เริ่มอัปเกรดโครงสร้างพื้นฐานเซิร์ฟเวอร์ในเดือนพฤษภาคม 2020
- ตามเศษบันทึกประจำวันของ CEO และโน้ตวิศวกรรมของ CTO การใช้งานรายวันเพิ่มขึ้นอย่างรวดเร็วในช่วงการระบาดใหญ่
- หลังจากนั้นจึงตัดสินใจย้ายโครงสร้างพื้นฐานเดิมไปใช้ Kubernetes
- งานใช้เวลานานกว่าที่คาด
- ต้องสร้าง ทบทวน และ re-engineer bash script แบบง่าย ๆ กับเครื่อง VPS ขึ้นใหม่
- ภายในบริษัทมองว่าโอกาสนี้ยังสามารถอัปเกรด dependency และไลบรารีของซอฟต์แวร์ได้ด้วย
- การเปลี่ยนแปลงโครงสร้างพื้นฐานนำไปสู่การปรับโครงสร้างที่ใหญ่กว่า
- ประเมินว่าสามารถเปลี่ยนส่วนใหญ่ของฐานข้อมูล PostgreSQL ที่เคยทำงานบนเครื่องเดี่ยวไปเป็น distributed KV storage ได้
- ยังมีเหตุผลเรื่องการใช้ประโยชน์จากความยืดหยุ่นของ AWS เพิ่มเข้ามา
- staging server แบบง่ายที่เคย deploy ทุกวันจาก develop branch หายไป
- แทนที่ด้วย workflow production-only CI ที่มี dynamic routing และกลายเป็นการตั้งค่าที่รองรับ A/B testing กับ dependency ตามภูมิภาคได้อย่างราบรื่น
การสูญเสียวัตถุประสงค์ของผลิตภัณฑ์และความช่วยเหลือจากภายนอก
- เมื่อขั้นตอนการย้ายระบบดูเหมือนจะเสร็จสิ้นแล้ว ไม่มีใครในบริษัทจำ วัตถุประสงค์ของผลิตภัณฑ์ ได้
- ผู้ใช้และนักลงทุนก็แก้สถานการณ์ไม่ได้
- ทั้งสองกลุ่มยอมรับต่อสาธารณะว่าไม่เคยเข้าใจผลิตภัณฑ์อย่างถูกต้องมาตั้งแต่แรก
- หลัง downtime หลายสัปดาห์ การกู้คืนความหมายของผลิตภัณฑ์จึงแทบเป็นไปไม่ได้
- CEO ขอความช่วยเหลือจาก Phutar Afrayughum ผู้เป็นร่างทรงและผู้เชี่ยวชาญด้านการรับรู้พิเศษ
- เขาถูกแนะนำว่าเป็นบุคคลที่ช่วยเพิ่มส่วนแบ่งตลาดของแอป messaging ของ Google และยังมีส่วนเกี่ยวข้องกับการพัฒนาเฟรมเวิร์ก Material Design
- อย่างไรก็ตาม ความช่วยเหลือนี้ถูกระบุด้วยคำว่า “allegedly” จึงไม่ได้ยืนยันว่าเป็นข้อเท็จจริง
1 ความคิดเห็น
ความเห็นจาก Hacker News
อันนี้ตลกยิ่งกว่า: พอไล่ผู้จัดการระดับกลางออก 20% ผลิตภาพของนักพัฒนาก็ดันเพิ่มขึ้น 3 เท่าโดยบังเอิญ
https://www.theolognion.com/p/company-accidentally-increased...
ที่ $dayjob ของเราก็กำลังทำ migration แบบนี้อยู่เหมือนกัน เริ่มมาตั้งแต่ 2 ปีก่อน แต่ตอนนี้ยังไม่ถึง 30% เลย
คนที่เคยตะโกนดังที่สุดว่า “ต้องย้ายไป Kubernetes ต้องฆ่า monolith” ตอนนี้ลืม Kubernetes ไปแล้ว เพราะมัวแต่ไปลองเล่น LLM กัน
บางคนชอบ proof of concept กับของใหม่วิบวับจริง ๆ และบทบาทแบบนั้นก็ดูจะมีประโยชน์ในแบบของมัน
เลยดูเหมือนว่าคนฉลาดจำนวนมากจะทำงานอย่างพอใจได้ แม้อยู่ในบริษัทยักษ์ใหญ่สายเทคโนโลยีที่ไร้จริยธรรม บริษัทโฆษณา หรือบริษัทสอดส่องข้อมูล
เหตุผลที่บริษัทมีอยู่ หรือสิ่งที่มันทำจริง ๆ นอกคอมพิวเตอร์ของตัวเอง แทบไม่สำคัญเท่ากับอิสระในการไล่ตามเทคโนโลยีและของใหม่
บริษัทก็ชอบผลิตภาพและความกระตือรือร้นที่คนกลุ่มนี้สร้างขึ้น และยังจ่ายค่าตอบแทนดีด้วย
ปกตินักพัฒนาแบบนี้ก็มีมโนธรรมอยู่หรอก แต่บ่อยครั้งมโนธรรมนั้นจะถูกดูดซับไปเป็นกิจกรรมเพื่อสังคมแบบที่เป็นมิตรกับองค์กร แล้วนำมาแสดงให้เห็นภายนอก
มีคนกำลังติ๊กกล่องไปทีละข้อเพื่อจะได้พูดว่า “เคยทำ X มาแล้ว”
ในทีมเล็ก วิธีแบบนี้สามารถหยุดผลิตภาพได้เร็วมาก และมักถูกห่อหุ้มว่าเป็นความพยายามจะแก้ทุกปัญหา
แต่ผลลัพธ์คือไม่ได้แก้ปัญหาอะไรเลย แถมสร้างปัญหาใหม่เพิ่มอีก
การเลื่อนตำแหน่งต้องมี promotion packet และ promotion packet ก็ต้องมีโปรเจ็กต์ใหญ่ ๆ หนัก ๆ
สุดท้ายปัญหาหลักที่พยายามจะแก้จึงกลายเป็นเรื่องการเลื่อนตำแหน่ง ไม่ใช่ความต้องการของธุรกิจ และก็เกิดโปรเจ็กต์ขนาดใหญ่ที่ออกตามหาปัญหามารองรับตัวเอง
จากที่อธิบายมา มันดูไม่เข้าข่ายแม้แต่ proof of concept ด้วยซ้ำ เพราะเงื่อนไขพื้นฐานของ proof of concept คืออย่างน้อยมันต้องทำงานได้ แต่นี่ดูใกล้เคียงกับการสร้างอะไรสักอย่างเพื่อวิ่งตามกระแสและทำให้ดูเหมือนงานยุ่งมากกว่า
ในมุมพนักงานเองก็คงไม่ใช่สภาพแวดล้อมที่น่าอยู่นานนัก
ในบล็อกนั้นยังมีบทความที่ตลกกว่านี้อีกหลายชิ้น อันนี้ชอบเป็นพิเศษ:
https://www.theolognion.com/p/dev-builds-perfect-note-taking...
แล้วก็มีอันนี้ด้วย:
https://www.theolognion.com/p/ai-solves-all-political-econom...
คนอื่นจะได้ลดการคลิกไปได้สองครั้ง
ถึงจะรู้ว่าเป็นมุก แต่ถ้าจะทำ postmortem สาเหตุที่ล้มเหลวก็น่าจะเป็นประมาณว่า “คนจำนวนมากในบริษัทคิดว่านี่เป็นโอกาสดีที่จะทำ การอัปเกรด dependency ของซอฟต์แวร์และไลบรารี ไปพร้อมกัน แล้วก็มองว่าส่วนใหญ่ของฐานข้อมูล PostgreSQL ที่เคยรันอยู่บนเครื่องเดียว สามารถเปลี่ยนเป็น distributed key-value store โดยใช้ประโยชน์จากความยืดหยุ่นมหาศาลของ AWS ได้”
ต้องคุม ขอบเขตงาน ให้ดี
บนโลกนี้มีคนมากมายที่สนใจเทคโนโลยีที่ตัวเองใช้ มากกว่าผลิตภัณฑ์ที่ตัวเองกำลังสร้าง
การโฟกัสที่ผลิตภัณฑ์หมายถึงการรู้ขอบเขต และไม่ออกแบบเกินความจำเป็นเร็วเกินไป
มุกนี้โฟกัสที่ Kubernetes ก็จริง แต่จะเปลี่ยนเป็น server-side rendering, AI, $modernFrontendLib หรือ $modernLanguage ก็ใช้ได้เหมือนกัน
ถ้าธุรกิจของคุณไม่ใช่การขายโครงสร้างพื้นฐานคลาวด์ ก็ใช้ ผู้ให้บริการคลาวด์ ที่มีอยู่แล้วก็พอ
โดยเฉพาะถ้าคุณจ่ายเงินให้ผู้ให้บริการคลาวด์อยู่แล้ว การไม่ใช้ Kubernetes มักจะดีกว่า
ในโลกความเป็นจริง การย้ายไป Kubernetes ภายใน 11 สัปดาห์ คงถูกนับว่าเป็นความสำเร็จครั้งใหญ่
แน่นอนว่าการดูแลฐานข้อมูลคงลำบากนิดหน่อย เพราะลืมตั้งค่า storage ของ Kubernetes ให้ถูกต้อง พอ pod ถูกย้ายกะทันหันข้อมูลก็หายไป
ถ้ายังไม่ได้ใช้ Docker ปัญหาใน migration คล้าย ๆ กันก็น่าจะไม่ใช่ Kubernetes เอง
ไม่เคยมีช่วงไหนที่การรันระบบจะง่ายและถูกเท่าตอนนี้อีกแล้ว
แต่พวกวิศวกรกลับชอบแนวทางที่ต้องระดมคณะสำรวจ ปีน Everest ไปถ่ายรูปพิซซ่าบนยอดเขา จากนั้นบินเอากลับบ้าน เช่า Lamborghini ไปวิ่ง Mongol Rally แล้วค่อย ส่งพิซซ่าหลังจาก 18 เดือน
ทั้งที่จริง ๆ แค่ขี่สกู๊ตราคาถูกลงไปตามถนนก็ชนะแล้ว
ถ้าเป็นเทคโนโลยีที่ซับซ้อน ก็ควรเรียนรู้มันก่อน ลองกับบริการเล็ก ๆ ที่ไม่สำคัญก่อน
ทำทีละอย่าง และเริ่มจากความเรียบง่าย
ฉันเคยย้ายบริการของเราไป Kubernetes ได้โดยไม่มีปัญหา แต่ต้องใช้เวลา 2 ปี ในการย้ายบริการเล็ก ๆ เพื่อเรียนรู้และทดลอง
หลังจากลองมาหลายแนวทางก็พบวิธีที่เหมาะที่สุด ซึ่งไม่ใช่วิธีที่หาเจอได้ตรง ๆ จากบนอินเทอร์เน็ต
เราใช้ GitOps แต่ไม่ทำแบบอัตโนมัติ แค่รัน
kubectl apply -kกับสิ่งที่จำเป็น เพราะตอนนั้นมองว่า flux ซับซ้อนเกินจำเป็นสำหรับการเริ่มต้นตอนนี้บริการมีเป็นหลายสิบตัวแล้ว และเราก็มีความเข้าใจมากขึ้น เลยกำลังคิดจะนำ flux มาใช้
ในปี 1977 ฉันทำงานเป็นทนายความว่าความหนุ่มในสำนักงานกฎหมายที่คิดค่าบริการเป็นรายชั่วโมง
เราจะจดงานที่ทำในแต่ละคดีลงบนกระดาษ และเจ้าหน้าที่ธุรการจะตัดแถบที่ฉีกออกได้จากกระดาษที่กรอกเสร็จแล้วไปแปะบนแผ่นบอร์ดด้านในของแฟ้มกระดาษของแต่ละคดี
ในปี 1979 ฉันซื้อ RadioShack Tandy I และไม่นานก็หมกมุ่นกับ Foxbase ซึ่งเป็นโปรแกรมฐานข้อมูลบน DOS ที่บ้าน ต่อมามันกลายเป็น FoxPro และ Microsoft ก็เข้าซื้อในช่วงต้นทศวรรษ 1990
ในปี 1981 ฉันเปิดสำนักงานกฎหมายของตัวเอง และนวัตกรรมล่าสุดด้านงานสำนักงานในตอนนั้นคือแฟกซ์กับเครื่องพิมพ์ดีดไฟฟ้าที่มีหน้าจอหนึ่งบรรทัด หน่วยความจำ และดิสก์ขนาดเล็กไว้เก็บแบบฟอร์ม ตอนนั้นภาคธุรกิจยังไม่ได้ใช้คอมพิวเตอร์ส่วนบุคคล
สำนักงานกฎหมายของฉันขยายเป็นทนายความราว 10 คนและพนักงานสนับสนุน 12 คนอย่างรวดเร็ว และฉันซื้อคอมพิวเตอร์ Compaq ให้เลขานุการทุกคน
ฉันใช้เวลาไปมากกับการเขียนโปรแกรมบันทึกเวลาและออกบิลเพื่อแทนวิธีแปะแถบด้วยมือ และยังเรียนรู้วิธีติดตั้งเครือข่ายแล้วลงมือทำเองด้วย
สำนักงานกฎหมายอื่นที่ฉันรู้จักไม่มีคอมพิวเตอร์เลยสักเครื่อง แต่เรามีมากกว่า 10 เครื่องสำหรับพนักงานสนับสนุน และมี Compaq แบบ “พกพา” อีก 4-5 เครื่องให้ทนายใช้ตรวจบิลก่อนส่งให้ลูกค้า
ในขณะเดียวกัน ฉันก็กำลังทำลายธุรกิจของตัวเองอยู่ ตอนที่คนอื่นยังไม่มีคอมพิวเตอร์สักเครื่อง เรากลับมีเทคโนโลยีระดับแนวหน้าของโลก แต่ฉันไม่โฟกัสกับงานกฎหมายหรือการหาลูกค้าองค์กร กลับปิดประตูแล้วหมกตัวเขียนโปรแกรม
สุดท้ายฉันก็ปิดสำนักงานกฎหมายในปี 1994
ถึงอย่างนั้นก็ยังเป็นช่วงเวลาที่น่าตื่นเต้น ไม่นานทุกสำนักงานกฎหมายก็มีคอมพิวเตอร์ไว้ทำเวิร์ดโปรเซสซิง แต่ซอฟต์แวร์ออกบิลเชิงพาณิชย์ยังไม่มี
ตลอดราว 24 เดือน ทนายจากสำนักงานกฎหมายอื่นที่ร่วมงานกับฉันต่างก็อยากได้โปรแกรมออกบิลของฉัน
แต่ฉันต้องจมอยู่กับงานคดี ขณะเดียวกันก็หมกมุ่นอยู่กับการเขียนโปรแกรมที่สนุก และงานกฎหมายของฉันก็เป็นห้องทดลองที่สมบูรณ์แบบสำหรับโปรแกรมนั้น น่าเสียดายที่การเขียนโปรแกรมนั่นเองที่ทำให้ธุรกิจของฉันพัง
ถ้ายังมีรูปอยู่ก็อยากเห็น
ในสายงานของผม ถ้าเอา “Kubernetes” ไปแทนด้วย GraphQL/React/Next ก็ยังตรงเป๊ะ
แน่นอนว่ามันคือการย้ายแอปที่ทำงานได้สมบูรณ์อยู่แล้ว ซึ่งส่วนใหญ่ก็เป็นแค่ CRUD
ทั้งที่ไม่จำเป็นต้องรับ trade-off ที่มาพร้อมกับ GraphQL หรือฟรอนต์เอนด์แบบโต้ตอบเลยก็ยังทำกัน
ยิ่งอยู่ในวงการนี้นานเท่าไร ก็ยิ่งเห็นว่าคนที่อยู่ในตำแหน่งรับผิดชอบจำนวนมากไม่ค่อยรู้ว่าตัวเองกำลังทำอะไร
คนได้รางวัลจากการเปลี่ยนแปลง และแค่ต้องทำให้ดูได้อย่างน้อยว่าการเปลี่ยนนั้นกำลังสร้างผลลัพธ์หรือสักวันหนึ่งจะสร้างผลลัพธ์
ตอนนี้ผมกำลังสู้ทั้งกลางวันกลางคืนมา 4 เดือนเพื่อย้ายบล็อบ 500,000 ชิ้นจาก MinIO แบบ self-hosted ไปยัง managed blob storage แต่เวลาที่ได้ทำงานที่มีประสิทธิผลจริง ๆ โดยไม่ติดการเมืองและระบบราชการรวมกันยังไม่ถึง 1 สัปดาห์
เพราะงั้นการย้ายไป Kubernetes ที่ใช้เวลา 11 สัปดาห์ฟังดูเหมือนความสำเร็จครั้งใหญ่เลย