ใน ค.ศ. นี้เราคงหนีเรื่อง Distributed Computing กันไม่พ้น หลายคนน่าจะคุ้นเคยกับคำว่า Microservices หรือ Event-Driven Architecture 🧐 ซึ่งทั้งสองอย่างนี้ก็คือส่วนหนึ่งของ Distributed Computing นั่นเอง
วันนี้เราจะพาทุกคนไปรู้จัก “8 ข้อเข้าใจผิดสุดคลาสสิก (8 Fallacies of Distributed Computing)” ที่ทำให้ใครต่อหลายคนตกม้าตายมาแล้วนับไม่ถ้วน
L. Peter Deutsch
แนวคิดนี้ถูกพูดถึงครั้งแรกโดย L. Peter Deutsch และทีมงานที่ Sun Microsystems ในช่วงปี 1994-1997 ซึ่งยังคงเป็นความจริงจนถึงทุกวันนี้ และเป็นสิ่งที่ Software Architect หรือ Developer ทุกคนต้องเจอและหาทางรับมือ
งั้นเดี๋ยวเราจะพาไปดูกันว่า.. อะไรคือสิ่งที่เข้าใจผิด? 🤔 ความจริงคืออะไร? แล้วเราในฐานะคนออกแบบระบบจะรับมืออย่างไร? …ไปดูกัน!
1. The network is reliable
ภาพจาก YouTube Video
สิ่งที่เข้าใจผิด: เรามักจะเขียนโค้ดโดยคิดว่า การส่งข้อมูลข้ามเครื่องคอมพิวเตอร์จาก A ไปเครื่อง B จะสำเร็จเสมอ
ความจริงคือ: การเชื่อมต่อสามารถถูกตัดขาดได้ตลอดเวลา จากหลายสาเหตุ เช่น
- data center ไฟดับ
- หนูแทะสาย
- router พัง
- ฉลามกัดสายเคเบิล
จะรับมืออย่างไร: เราต้องออกแบบระบบที่อนุญาตให้เกิดข้อผิดพลาด และแก้ไขให้ถูกต้อง เช่น
- retry ใหม่ได้
- แจ้งเตือนหากเกิดข้อผิดพลาด
- มี backup server หรือ backup network อีกเส้นทาง ที่สามารถทำให้งานสำเร็จและถูกต้องได้
2. Latency is zero
ภาพจาก 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 finite
สิ่งที่เข้าใจผิด: เราจะส่งข้อมูลขนาดใหญ่แค่ไหนก็ได้ โดยไม่มีข้อจำกัด
ความจริงคือ: bandwidth ก็เหมือนถนน ที่ให้ข้อมูลหรือรถวิ่งผ่าน ยิ่งพยายามส่งข้อมูลขนาดใหญ่และปริมาณเยอะทำไร ก็จะทำให้ทุกอย่างช้าลง เสมือนรถวิ่งเข้าถนนพระราม 2 เมื่อไรจะได้กลับบ้าน
จะรับมืออย่างไร: ลดประมาณรถที่ใช้ถนนเส้นนั้นเท่าที่จะทำได้
- บีบอัดข้อมูลก่อนส่ง เช่น พวก gzip, protobuf
- ส่งเฉพาะข้อมูลที่จำเป็น
- หลีกเลี่ยงการส่งข้อมูลขนาดใหญ่ในเวลาเดียวกัน
4. The network is secure
ภาพจาก tenor
สิ่งที่เข้าใจผิด: ข้อมูลที่ส่งผ่านเครือข่ายปลอดภัย เราอยู่ใน firewall แล้ว ไม่มีใครมาดูหรือเปลี่ยนแปลงข้อมูลได้
ความจริงคือ: ข้อมูลที่ไม่ได้ถูกเข้ารหัส มีโอกาสเสี่ยงที่จะถูกดักฟัง (Eavesdropping) หรือเปลี่ยนแปลงข้อมูลระหว่างทาง (Man-in-the-middle attack)
จะรับมืออย่างไร:
- เข้ารหัสข้อมูลที่สำคัญเสมอ (HTTPS/TLS)
- ตรวจสอบความถูกต้องของผู้รับและผู้ส่ง
- ไม่เชื่อข้อมูลจาก network ที่ไม่รู้จัก
- ศึกษาเพิ่มเติมเรื่อง Zero Trust Architecture
5. Topology doesn’t change
Topology does change
สิ่งที่เข้าใจผิด: โครงสร้างการเชื่อมต่อ server และอุปกรณ์ที่ใช้จะเหมือนเดิมตลอดไป~ (ตลอดไป)
ความจริงคือ: ตลอดไปมันไม่มีจริง~ โครงสร้างการเชื่อมต่อมีโอกาสเปลี่ยนได้ตลอด ยกตัวอย่าง
- เพิ่ม-ลด server
- ปรับเปลี่ยนเส้นทาง network เพื่อลดคอขวด
จะรับมืออย่างไร:
- ไม่เขียน hard code ว่า เราจะคุยกันด้วย IP เดิมตลอดไป
- ใช้ระบบ service discovery เพื่อให้ยืดหยุ่น หากโครงสร้างของ network มีการเปลี่ยนแปลง
6. There is one administrator
ภาพจาก unsplash
สิ่งที่เข้าใจผิด: ทั้งระบบตั้งแต่ต้นจนจบใช้คนเดียวหรือทีมเดียวในการดูแล
ความจริงคือ: ผู้ดูแลระบบมีได้หลายคน หรือจะเรียกว่าหลายภาคส่วนก็ได้ เช่น ผู้ให้บริการอินเทอร์เน็ต ISP, Cloud Provider, Third-party service ต่าง ๆ
จะรับมืออย่างไร:
- ออกแบบระบบให้ทนทานต่อความล้มเหลวที่เราควบคุมไม่ได้
- monitoring + logging ที่ดี เพื่อบอกได้ว่าปัญหาเกิดที่ไหน “บ้านเรา” หรือ “บ้านคนอื่น”
7. Transport cost is zero
transport 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 heterogeneous
สิ่งที่เข้าใจผิด: อุปกรณ์ network ทุกชนิดมีมาตรฐาน, และการทำงานเหมือนกันหมด
ความจริงคือ:
- network สามารถประกอบมาจากอุปกรณ์จากหลายยี่ห้อ (Cisco, Juniper, etc.)
- ทำงานบนคนละระบบปฏิบัติการ (Windows, Linux)
- เชื่อมต่อด้วยวิธีต่างกัน (LAN, Fiber Optic, Wi-Fi, 4G/5G)
จะรับมืออย่างไร:
- ออกแบบระบบโดยอิงจาก standard protocol ไม่ยึดติดอยู่กับฟีเจอร์ของผู้ผลิตรายใดรายหนึ่ง
อ้างอิง
ทิ้งท้าย
เราก็ได้เห็นกันแล้วว่าการสื่อสารกัน network มีทั้งข้อผิดพลาด, ไม่ปลอดภัย 100%, มีค่าใช้ตามมา, มีปัจจัยต่าง ๆ ที่เราไม่สามารถควบคุมได้
หวังว่าการที่เราเข้าใจข้อจำกัดทั้ง 8 ข้อนี้ จะทำให้การออกแบบระบบของทุกคนราบลื่นกันนะครับ