Architecture

8 สิ่งที่คนมักเข้าใจผิด เกี่ยวกับ Distributed computing

เรื่องที่ต้องรู้ก่อนออกแบบ distributed computing

ใน ค.ศ. นี้เราคงหนีเรื่อง Distributed Computing กันไม่พ้น หลายคนน่าจะคุ้นเคยกับคำว่า Microservices หรือ Event-Driven Architecture 🧐 ซึ่งทั้งสองอย่างนี้ก็คือส่วนหนึ่งของ Distributed Computing นั่นเอง

วันนี้เราจะพาทุกคนไปรู้จัก “8 ข้อเข้าใจผิดสุดคลาสสิก (8 Fallacies of Distributed Computing)” ที่ทำให้ใครต่อหลายคนตกม้าตายมาแล้วนับไม่ถ้วน

L. Peter DeutschL. Peter Deutsch

แนวคิดนี้ถูกพูดถึงครั้งแรกโดย L. Peter Deutsch และทีมงานที่ Sun Microsystems ในช่วงปี 1994-1997 ซึ่งยังคงเป็นความจริงจนถึงทุกวันนี้ และเป็นสิ่งที่ Software Architect หรือ Developer ทุกคนต้องเจอและหาทางรับมือ

งั้นเดี๋ยวเราจะพาไปดูกันว่า.. อะไรคือสิ่งที่เข้าใจผิด? 🤔 ความจริงคืออะไร? แล้วเราในฐานะคนออกแบบระบบจะรับมืออย่างไร? …ไปดูกัน!

1. The network is reliable

ภาพจาก YouTube Videoภาพจาก YouTube Video

สิ่งที่เข้าใจผิด: เรามักจะเขียนโค้ดโดยคิดว่า การส่งข้อมูลข้ามเครื่องคอมพิวเตอร์จาก A ไปเครื่อง B จะสำเร็จเสมอ

ความจริงคือ: การเชื่อมต่อสามารถถูกตัดขาดได้ตลอดเวลา จากหลายสาเหตุ เช่น

  • data center ไฟดับ
  • หนูแทะสาย
  • router พัง
  • ฉลามกัดสายเคเบิล

จะรับมืออย่างไร: เราต้องออกแบบระบบที่อนุญาตให้เกิดข้อผิดพลาด และแก้ไขให้ถูกต้อง เช่น

  • retry ใหม่ได้
  • แจ้งเตือนหากเกิดข้อผิดพลาด
  • มี backup server หรือ backup network อีกเส้นทาง ที่สามารถทำให้งานสำเร็จและถูกต้องได้

2. Latency is zero

ภาพจาก Redditภาพจาก Reddit

สิ่งที่เข้าใจผิด: การส่งข้อมูลข้ามกันบน network เร็วมาก

ความจริงคือ: เวลาที่ใช้ส่งข้อมูลบน network ช้ากว่าส่งข้อมูลระหว่าง process ในคอมเครื่องเดียวกัน (time network > time local)

จะรับมืออย่างไร: ลดการส่งบน network ให้เหลือเท่าที่จำเป็น พยายามทำให้การงานเกิดขึ้นบน local มากที่สุด

  • ทำให้การทำงานที่ต้องส่งข้อมูลสามารถสำเร็จได้โดยใช้ round-trip น้อยที่สุด ละ network hop เท่าที่จะเป็นไปได้
  • caching
  • ประมวลผลโดยพึ่ง network เท่าที่จำเป็น
  • พยายามใช้ server ที่ data center อยู่ใกล้กันที่สุด เช่น แอปให้คนไทยใช้ server ควรจะอยู่ที่ไทย หรือในเอเชียก็ได้

3. Bandwidth is infinite

Bandwidth actually finiteBandwidth actually finite

สิ่งที่เข้าใจผิด: เราจะส่งข้อมูลขนาดใหญ่แค่ไหนก็ได้ โดยไม่มีข้อจำกัด

ความจริงคือ: bandwidth ก็เหมือนถนน ที่ให้ข้อมูลหรือรถวิ่งผ่าน ยิ่งพยายามส่งข้อมูลขนาดใหญ่และปริมาณเยอะทำไร ก็จะทำให้ทุกอย่างช้าลง เสมือนรถวิ่งเข้าถนนพระราม 2 เมื่อไรจะได้กลับบ้าน

จะรับมืออย่างไร: ลดประมาณรถที่ใช้ถนนเส้นนั้นเท่าที่จะทำได้

  • บีบอัดข้อมูลก่อนส่ง เช่น พวก gzip, protobuf
  • ส่งเฉพาะข้อมูลที่จำเป็น
  • หลีกเลี่ยงการส่งข้อมูลขนาดใหญ่ในเวลาเดียวกัน

4. The network is secure

ภาพจาก tenorภาพจาก tenor

สิ่งที่เข้าใจผิด: ข้อมูลที่ส่งผ่านเครือข่ายปลอดภัย เราอยู่ใน firewall แล้ว ไม่มีใครมาดูหรือเปลี่ยนแปลงข้อมูลได้

ความจริงคือ: ข้อมูลที่ไม่ได้ถูกเข้ารหัส มีโอกาสเสี่ยงที่จะถูกดักฟัง (Eavesdropping) หรือเปลี่ยนแปลงข้อมูลระหว่างทาง (Man-in-the-middle attack)

จะรับมืออย่างไร:

  • เข้ารหัสข้อมูลที่สำคัญเสมอ (HTTPS/TLS)
  • ตรวจสอบความถูกต้องของผู้รับและผู้ส่ง
  • ไม่เชื่อข้อมูลจาก network ที่ไม่รู้จัก
  • ศึกษาเพิ่มเติมเรื่อง Zero Trust Architecture

5. Topology doesn’t change

Topology does changeTopology does change

สิ่งที่เข้าใจผิด: โครงสร้างการเชื่อมต่อ server และอุปกรณ์ที่ใช้จะเหมือนเดิมตลอดไป~ (ตลอดไป)

ความจริงคือ: ตลอดไปมันไม่มีจริง~ โครงสร้างการเชื่อมต่อมีโอกาสเปลี่ยนได้ตลอด ยกตัวอย่าง

  • เพิ่ม-ลด server
  • ปรับเปลี่ยนเส้นทาง network เพื่อลดคอขวด

จะรับมืออย่างไร:

  • ไม่เขียน hard code ว่า เราจะคุยกันด้วย IP เดิมตลอดไป
  • ใช้ระบบ service discovery เพื่อให้ยืดหยุ่น หากโครงสร้างของ network มีการเปลี่ยนแปลง

6. There is one administrator

ภาพจาก unsplashภาพจาก unsplash

สิ่งที่เข้าใจผิด: ทั้งระบบตั้งแต่ต้นจนจบใช้คนเดียวหรือทีมเดียวในการดูแล

ความจริงคือ: ผู้ดูแลระบบมีได้หลายคน หรือจะเรียกว่าหลายภาคส่วนก็ได้ เช่น ผู้ให้บริการอินเทอร์เน็ต ISP, Cloud Provider, Third-party service ต่าง ๆ

จะรับมืออย่างไร:

  • ออกแบบระบบให้ทนทานต่อความล้มเหลวที่เราควบคุมไม่ได้
  • monitoring + logging ที่ดี เพื่อบอกได้ว่าปัญหาเกิดที่ไหน “บ้านเรา” หรือ “บ้านคนอื่น”

7. Transport cost is zero

transport cost is not zerotransport cost is not zero

สิ่งที่เข้าใจผิด: ส่งข้อมูลบน network ได้ฟรี ๆ

ความจริงคือ: การส่งข้อมูลจากเครื่องนึงไปยังอีกเครื่อง มันไม่ได้ง่ายและได้มาฟรี ๆ เราต้องมา

  • setup router, network, subnet, vlan รวมไปถึงการดูแลและ monitor
  • ค่าใช้จ่ายที่เพิ่มขึ้น ลองไปดูได้ แต่ละ cloud จะมีราคาบอกอยู่ เช่น https://cloud.google.com/vpc/network-pricing?hl=en

จะรับมืออย่างไร:

  • ตระหนักเรื่องของค่าใช้จ่ายที่จะเกิดขึ้นหากส่งข้อมูลเยอะขึ้น
  • ใช้ caching เพื่อลดการรับ-ส่งข้อมูลซ้ำ ๆ บน network

8. The network is homogeneous

The network is heterogeneousThe network is heterogeneous

สิ่งที่เข้าใจผิด: อุปกรณ์ network ทุกชนิดมีมาตรฐาน, และการทำงานเหมือนกันหมด

ความจริงคือ:

  • network สามารถประกอบมาจากอุปกรณ์จากหลายยี่ห้อ (Cisco, Juniper, etc.)
  • ทำงานบนคนละระบบปฏิบัติการ (Windows, Linux)
  • เชื่อมต่อด้วยวิธีต่างกัน (LAN, Fiber Optic, Wi-Fi, 4G/5G)

จะรับมืออย่างไร:

  • ออกแบบระบบโดยอิงจาก standard protocol ไม่ยึดติดอยู่กับฟีเจอร์ของผู้ผลิตรายใดรายหนึ่ง

อ้างอิง

ทิ้งท้าย

เราก็ได้เห็นกันแล้วว่าการสื่อสารกัน network มีทั้งข้อผิดพลาด, ไม่ปลอดภัย 100%, มีค่าใช้ตามมา, มีปัจจัยต่าง ๆ ที่เราไม่สามารถควบคุมได้

หวังว่าการที่เราเข้าใจข้อจำกัดทั้ง 8 ข้อนี้ จะทำให้การออกแบบระบบของทุกคนราบลื่นกันนะครับ

Enjoyed this post?

Get the latest bite-sized content delivered to your inbox.

We respect your privacy. Unsubscribe at any time.

Contents