One Million Checkboxes: เรื่องราวของเว็บไซต์ที่ประสบความสำเร็จเกินคาด


จุดเริ่มต้นที่เรียบง่าย

ในวันที่ 26 มิถุนายน 2024 นักพัฒนาคนหนึ่งได้เปิดตัวเว็บไซต์ชื่อ “One Million Checkboxes” หรือ OMCB ด้วยแนวคิดที่เรียบง่าย: สร้างเว็บที่มีเช็คบ็อกซ์ 1 ล้านช่อง เมื่อใครก็ตามติ๊กช่องใดช่องหนึ่ง ทุกคนที่เข้าชมเว็บไซต์จะเห็นการเปลี่ยนแปลงนั้นทันที เขาใช้เวลาเพียง 2 วันในการพัฒนาเว็บไซต์นี้ โดยคาดหวังว่าจะมีผู้ใช้งานเพียงไม่กี่ร้อยคนเท่านั้น

เขาไม่เคยคาดคิดว่าสิ่งที่เกิดขึ้นจะเกินความคาดหมายไปมากขนาดนี้

ชั่วโมงแรก

หลังจากเปิดตัวไม่กี่ชั่วโมง มีผู้ใช้งานหลายหมื่นคนเข้ามาติ๊กเช็คบ็อกซ์กว่าหลายล้านครั้ง พวกเขาหลั่งไหลมาจากเว็บไซต์ต่างๆ ทั้ง Hacker News, Reddit, Mastodon และ Twitter เว็บไซต์ล่มบ่อยครั้งเนื่องจากระบบดั้งเดิมไม่ได้ถูกออกแบบมาให้รองรับผู้ใช้จำนวนมากขนาดนี้

เว็บไซต์ของเขาใช้ Flask (Python) เป็น backend กับ Redis เก็บข้อมูล และ WebSocket สำหรับส่งการอัพเดตแบบเรียลไทม์ ซึ่งทำงานได้ดีกับจำนวนผู้ใช้น้อย แต่เมื่อมีผู้ใช้พุ่งเข้ามาพร้อมกันเป็นหมื่น ระบบเริ่มส่งสัญญาณว่ารับไม่ไหว

บ่ายวันแรก: ความวุ่นวาย

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

เขาจึงพกพา iPad ไปด้วยและเปิด OMCB ไว้ตลอด พยายามเพิ่มเซิร์ฟเวอร์ระหว่างที่เพื่อนและแฟนช่วยอธิบายโปรเจกต์ให้กับผู้เยี่ยมชมบูธ เขาตั้งชื่อเซิร์ฟเวอร์ที่เพิ่มขึ้นแบบขำๆ ตามอารมณ์ตอนนั้น: “omcb-web-lol”, “omcb-web-lmao”, “omcb-web-pls” ซึ่งสะท้อนถึงสถานการณ์อันวุ่นวายที่กำลังเผชิญอยู่

ดึกคืนแรก: วิกฤตเรื่องแบนด์วิดท์

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

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

เช้าวันที่ 2: ปัญหาใหม่และการเติบโตอย่างต่อเนื่อง

เช้าวันถัดมา เขาตื่นขึ้นมาพบว่าเว็บไซต์ล่ม! สาเหตุมาจากการที่เขาไม่ได้ตรวจสอบข้อมูลที่ผู้ใช้ส่งเข้ามา มีผู้ใช้บางคนฉลาดพอที่จะลองติ๊กช่องเกินกว่า 1 ล้าน (ในช่วงหลักร้อยล้าน) ทำให้ระบบเก็บข้อมูลเสียหาย

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

จำนวนผู้ใช้ยังคงเพิ่มขึ้นอย่างต่อเนื่อง เขาจึงเพิ่ม Redis replica เพื่อแบ่งโหลดการอ่านข้อมูล ซึ่งมีความท้าทายในทางเทคนิค เช่น การหา private IP ของ replica ที่เขาแก้ไขด้วยวิธีลองผิดลองถูกจนกว่าจะพบ IP ที่ใช้งานได้

คืนวันที่ 2: การสร้างเสถียรภาพและการแก้ไขบั๊ก

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

ในช่วงเวลาเกือบเที่ยงคืน มีผู้ใช้รายงานปัญหาสำคัญ: “ช่องที่เพิ่งติ๊กกลับมาเป็นไม่ติ๊กอีกแล้ว!” เขาค้นพบว่าเป็นบั๊กในระบบการซิงค์ข้อมูล เนื่องจากไม่ได้เพิ่ม timestamp ให้กับอัพเดต ทำให้บางครั้งข้อมูลเก่ามาทับข้อมูลใหม่ แม้จะเป็นเวลาดึกแล้ว เขาก็ยังต้องแก้ไขปัญหานี้ก่อนที่จะเข้านอน

วันที่ 3: การเขียนใหม่ด้วย Go

หลังจากพักสักวัน เขาตัดสินใจชวนเพื่อนที่เชี่ยวชาญด้าน performance engineering มาช่วย ทั้งคู่ใช้เวลาตั้งแต่บ่าย 2 ถึงตี 2 ของวันอาทิตย์ในการเขียน backend ใหม่ทั้งหมดด้วยภาษา Go

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

น่าแปลกที่เว็บไซต์โดน DDOS ในคืนเดียวกันนั้นเอง แต่เขาแก้ไขได้ไม่ยากด้วยการใช้ CloudFlare ปกป้องเว็บไซต์

สัปดาห์ต่อมา: ความโด่งดังและการวางแผนปิดเว็บ

หลังจาก rewrite ด้วย Go แล้ว เว็บไซต์ทำงานได้อย่างเสถียร เขาใช้เวลาสัปดาห์ถัดมาให้สัมภาษณ์กับสื่อต่างๆ รวมถึง Washington Post และ New York Times! เป็นประสบการณ์ที่เหนือความคาดหมายโดยสิ้นเชิง

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

การปิดเว็บอย่างสง่างาม

เขาเปิดใช้ระบบ “freezing” หลังจากเว็บไซต์เปิดได้ 2 สัปดาห์ 1 วัน โดยระบบจะบันทึกเวลาที่แต่ละช่องถูกติ๊กล่าสุด และไม่อนุญาตให้ยกเลิกการติ๊กหากเวลาผ่านไปนานเกินกำหนด

ในวันที่ 11 กรกฎาคม ช่อง 491915 ถูกติ๊กเมื่อเวลา 16:35 น ตะวันออก และกลายเป็นช่องสุดท้ายที่สามารถติ๊กได้ ปิดตำนาน One Million Checkboxes อย่างสมบูรณ์ หลังจากมีผู้ใช้ติ๊กเช็คบ็อกซ์รวมกันกว่า 650 ล้านครั้ง

บทเรียนที่ได้รับ

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

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

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

ปิดท้าย

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