ฉันต้องการตั้งค่า statsd / graphite เพื่อให้ฉันสามารถบันทึกแอปพลิเคชัน JS ที่ทำงานบนอุปกรณ์ HTML (เช่นไม่ได้อยู่ในสภาพแวดล้อม LAN ที่มีอยู่และอาจมีข้อมูลขาเข้าจำนวนมากที่ฉันไม่ได้ควบคุมโดยตรง)
ข้อ จำกัด ของฉัน:
- จุดเข้าใช้งานต้องพูด HTTP: สิ่งนี้ได้รับการแก้ไขโดยพร็อกซี HTTP-to-UDP-statsd อย่างง่าย (เช่น. httpstatsd บน github)
- ต้องต่อต้านความล้มเหลวของเซิร์ฟเวอร์เดียว (เพื่อต่อสู้กับกฎของ Murphy :)
- จะต้องปรับขนาดได้ในแนวนอน: webscale, baby! :)
- สถาปัตยกรรมควรถูกเก็บไว้อย่างเรียบง่าย (และถูก) ที่สุด
- เซิร์ฟเวอร์ของฉันเป็นเครื่องเสมือน
- ไฟล์ข้อมูลจะถูกเก็บไว้ในเครื่อง filer (ด้วย NFS)
- ฉันมีตัวปรับสมดุลโหลดฮาร์ดแวร์ tcp / udp เมื่อทำการกำจัด
ในระยะสั้นเส้นทางข้อมูล: [ลูกค้า] - (http) -> [http2statsd] - (udp) -> [statsd] - (tcp) -> [กราไฟท์] - (nfs) -> [filer]
การค้นพบของฉันจนถึงขณะนี้:
- การปรับส่วน http2statsd เป็นเรื่องง่าย (daemons ไร้สัญชาติ)
- การปรับสเกลส่วน statsd ดูเหมือนจะไม่ตรงไปตรงมา (ฉันเดาว่าฉันจะจบลงด้วยค่าที่ไม่ต่อเนื่องในกราไฟท์สำหรับข้อมูลรวมเช่น sum, avg, min, max ... ) นอกจากว่า HTTP daemon จะทำการแฮชที่สอดคล้องกันเพื่อตัดกุญแจ อาจเป็นความคิด ... (แต่แล้วมีคำถาม HA)
- การปรับสเกลส่วนกราไฟท์สามารถทำได้ผ่านการใช้เศษ (ใช้การส่งผ่านคาร์บอน) (แต่นั่นก็ไม่ได้แก้ปัญหา HA ด้วย) เห็นได้ชัดว่าอินสแตนซ์ของ whisper หลายตัวไม่ควรเขียนไฟล์ NFS เดียวกัน
- การปรับสเกลส่วน filer ไม่ใช่ส่วนหนึ่งของคำถาม (แต่ถ้า IO น้อยกว่าจะดีกว่า :)
- การปรับขนาดของ webapp ดูเหมือนชัดเจน (แม้ว่าฉันยังไม่ได้ทดสอบ) เนื่องจากอ่านเฉพาะข้อมูล NFS ที่ใช้ร่วมกัน
ดังนั้นฉันจึงสงสัยว่าใครมีประสบการณ์และแนวปฏิบัติที่ดีที่สุดในการแบ่งปันการปรับใช้สถิติ / กราไฟท์ที่มั่นคงหรือไม่