Designing large scale system: The fundamentals

เข้าใจพื้นฐานของการออกแบบระบบขนาดใหญ่

สมัครเลย

Summarized

เข้าใจพื้นฐานการออกแบบระบบขนาดใหญ่ ศัพท์ต่างๆ และแนวคิดที่จำเป็น สำหรับการออกแบบระบบขนาดใหญ่ให้ไม่มีข้อผิดพลาด และมีประสิทธิภาพที่ยอมรับได้ มีข้อผิดพลาดน้อย

หลายๆ ครั้งผมพบว่าการออกแบบระบบขนาดใหญ่ที่สอนกันในเมืองไทยมักจะสอนเรื่องการใช้เทคโนโลยีเฉพาะทาง เช่น Cloud, Database, Queue, etc. ทำให้การออกแบบมักจะยึดคิดที่เทคโนโลยี คอร์สนี้ตั้งใจจะสอนเรื่องหลักคิด หลักการพื้นฐาน และ Primitive ต่างๆ ที่สำคัญในการออกแบบ Large scale system เพื่อให้เราสามารถออกแบบได้โดยไม่ยึดติดกับเทคโนโลยีโดยเฉพาะ

คลาสนี้เป็นคลาสที่ปูเบื้องต้นในการออกแบบตั้งแต่ Concurrent programming ให้ไม่มีปัญหา Bug ที่ไม่คาดฝันต่างๆ และเข้าใจพื้นฐานตั้งแต่การควบคุมระดับ Concurrent / Distributed computing ตั้งแต่ระดับ CPU หลาย Core ไปจนถึงระบบหลายเครื่อง แล้วพอเราเห็น Pattern เดียวกัน เราจะเข้าใจถ่องแท้ว่าพื้นฐานแนวคิดการออกแบบมันไม่ต่างกันมากนัก แล้วพอเข้าใจหลักคิดพื้นฐานแล้วเราจะเอาพื้นฐานพวกนั้นมาเลือกออกแบบได้โดยไม่ต้องยึดกับเทคโนโลยีใดๆ

ผู้สอน

Chris Chakrit Riddhagni

  • ปัจจุบันทำงานเป็น Lead Consultant ที่ Thoughtworks
  • หนึ่งใน Technology Advisory Board to CTO ในการคัดกรอง Technology ที่น่าสนใจในโลกนี้สำหรับ Thoughtworks Tech Radar
  • Former Vice President of Engineering at Taskworld
  • Former Engineering Lead at Omise
  • เป็นที่ปรึกษาในการปรับปรุงทีมและระบบต่างๆ ทั้งในเมืองไทยและนอกประเทศ

Learning goals

  • แยกแยะระหว่างระบบเร็ว (Performant) ระบบที่เหมาะสมกับงานขนาดใหญ่ (Scalable) ได้
  • สามารถอ่านคู่มือ Tech Stack, Framework ต่างๆ รู้เรื่อง ไม่ต้องอ่านทีเดียวหมด เลือกประเด็นสำคัญ แล้วเลือกให้เหมาะกับงานที่ทำได้
  • สามารถนำบริบททางธุรกิจมาใช้ในการออกแบบ System design ได้ สกัดประเด็นทางธุรกิจที่สำคัญต่อการออกแบบระบบมาได้พอดี ไม่ถามเยอะเกินหรือน้อยเกินไป
  • ตรวจสอบรีวิวงานออกแบบต่างๆ ได้ โดยเข้าใจประเด็นสำคัญที่ต้องตรวจสอบเพื่อให้ระบบทำงานไม่ผิดพลาด (บางครั้งตั้งแต่ดูแค่ API ก็รู้แล้วว่า Race condition มีแน่นอน)
  • ออกแบบระบบบน Incremental design ได้ รู้ว่าอะไรต้องถูกแต่แรก อะไรที่เป็นประเด็นเติมทีหลัง ทั้ง Read heavy, write heavy
  • ใช้ Message queue เป็น ใช้แก้ปัญหาที่เหมาะสม ไม่ใช้ฟุ่มเฟือยเกินไป

วันเวลาเรียน

รอบที่ 1: วันที่ 29-30 สิงหาคม 2026 เวลา 9.00-17.30

สถานที่: Abloom Exclusive Serviced Apartments ใกล้บริเวณ BTS สนามเป้า

รับผู้เรียนทั้งหมดจำนวน 24 คน

ราคา: 10,000 บาท

Early bird ที่จองล่วงหน้า 9,000 บาทภายในวันที่ 5 สิงหาคม 2026

เหมาะสำหรับ

  • คนเรียนที่เคยเขียนโปรแกรมมา 3-5 ปีและเริ่มสนใจการออกแบบระบบขนาดใหญ่
  • Architect, Engineering manager ที่จำเป็นต้องมีส่วนร่วมในการออกแบบระบบขนาดใหญ่ และรีวิวงานดีไซน์ จะได้ประโยชน์มาก เพราะผมออกแบบจากมุมคนที่ต้องคอยรีวิวงานโดยอ่านโค้ดทุกบรรทัดไม่ไหว จะมั่นใจได้ยังไงว่าระบบรับโหลดได้นะ แล้วทำงานถูกต้องนะ

เนื้อหาโดยคร่าว

  1. Scalability, Performant, Latency and Throughput
  2. Concurrent primitive ตั้งแต่ CPU (SIMD, CAS), OS (Processes, Thread), Runtime (Green thread, async)
  3. Basic of concurrent programming and Race condition in depth: เขียนยังไงให้ทำงานถูก ไม่เจอบั๊กแปลกๆ เวลาสเกล
  4. CAP Theorem and Scaling model: เข้าใจข้อจำกัดพื้นฐานในการสเกล
  5. Scaling Read and Scaling write จากหลักคิดพื้นฐาน
  6. Message queue and buffering จากหลักคิดพื้นฐาน
  7. Minimal and incremental design principle วิธีการค่อยๆ ออกแบบไปทีละเปราะ ออกแบบเท่าที่จำเป็นแต่ก็ไม่ต้องรื้อใหม่เวลาต้องเพิ่มเติม

หมายเหตุ

คอร์สนี้อาจจะยังไม่ได้ลง Fault-tolerance ลึกมากนัก พวก Consensus, Ordering Guarantee, Monotonicity property ถ้าสนใจลงเรียนต่อได้นะ แค่ตอนออกแบบคอร์สแล้ว ผมคิดว่าปูพื้นฐานเรื่องตามเนื้อหาในคอร์สให้หมดก่อนแล้วค่อยไปตรงนั้นดีกว่า เอา Fault tolerance พื้นฐานก่อนเท่าที่ผมพบว่าใช้ในชีวิตการทำงานบ่อยๆ ก่อน

ถ้าสนใจอยากเรียน Advance ขึ้นพวกทฤษฎ๊ Fault-tolerance อยากให้ลงคอร์สนี้เพื่อปูพื้นฐานก่อน

การเตรียมตัว

ผู้เรียนต้องมี Notebook นำมาใช้

คอร์สนี้จะมีการอ่านโค้ดหลายภาษา ปกติจะใช้ TypeScript เป็นภาษาหลัก 70% ในการสอน แต่บางคอนเซปต์ต้องลงลึกขึ้น จะมี Java, C# และ Rust บ้างประปราย

ก่อนเรียนจะส่ง Github ที่ใช้ในการเรียนและการเตรียมตัวให้

แต่เน้นอ่านโค้ดกับออกแบบมากกว่าเขียนโค้ดครับ แค่บางอย่างการให้อ่านโค้ดมันชัดเจนและรันได้เล่นกับมันได้มากกว่ามานั่งอ่าน Diagram และผมเชื่อว่าการเรียนให้เข้าใจ ต้องสามารถเล่นนกับเนื้อหาได้ ไม่ใช่จำอย่างเดียว