Serf เป็นเครื่องมือที่ช่วยให้ การจัดการ กับ ระบบคลัสเตอร์ทำได้ง่ายขึ้น ทำงานโดยผ่าน GOSSIP โปรโตคอล ซึง Serf ถูกออกแบบมาเป็นโครงสร้างที่ ไม่ซับซ้อน, ใช้ทรัพยากรน้อย, ทำงานได้เร็ว และ ยืดหยุ่น อยากให้เปรียบเทียบกับ Hearbeat แม้ฟังก์ชั่นอาจจะไม่ตรงตัวนักแต่จะทำให้เข้าใจได้ง่ายกว่า Serf พัฒนาโดย HarshiCorp ซึ่งเป็นคนพัฒนา Vagrant เขียนด้วย ภาษา Go (Golang)
สาเหตุที่ผมเลือกใช้ Serf ในการนำเอามาใช้งานคือ ต้องการหลีกเลี่ยงการออกแบบระบบให้กลายเป็น (Single point of failure) ขณะเดียวกัน ลดความยุ่งยากของระบบที่ทุกสิ่งทุกอย่างรวมอยู่ด้วยกัน (Centralized) นอกจากนั้นผมต้องการนำเอาระบบนี้มาใช้ใน Docker และ ขณะเดียวกันก็ลดความยุ่งยากของการ deployment ระบบ สรุปภาพรวมของความต้องการผมได้ดังนี้
- หลีกเลี่ยง จุดตาย (Single point Of Failure)
- หลีกเลี่ยง ระบบที่รวมอยู่ที่ศูนย์กลาง (De-centralized)
- อยากได้การทำงานของ ระบบที่ไม่ซับซ้อน เพื่อง่ายต่อการทำความเข้าใจ หรือ การเรียนรู้ และ ง่ายต่อการติดตั้ง ปรับแต่ง
- etcd ต้องการ Server etcd ไม่งั้นจะคอย report ERROR ไม่สามารถเชื่อมต่อกับ Node Datacenter ได้
- Zookeeper ระบบมีความซับซ้อน
- Dooserd ดูจาก repository ไม่ค่อยมีการ update และ issue fix มานานแล้วผมจึงใช้
- Google Kubernates มีขนาดใหญ่ไปและผมต้องการระบบอะไร ที่มันมีความซับซ้อนน้อยที่สุด