Saya ingin mengatur statsd / graphite sehingga saya dapat mencatat aplikasi JS yang berjalan pada perangkat HTML (mis. Tidak di lingkungan LAN yang terkandung, dan mungkin dengan volume besar data yang masuk yang tidak saya kontrol langsung).
Kendala saya:
- titik masuk harus berbicara HTTP: ini diselesaikan dengan proxy HTTP-to-UDP-statsd sederhana (mis. httpstatsd di github)
- harus menolak kegagalan satu server (untuk melawan hukum Murphy :)
- harus terukur secara horizontal: webscale, sayang! :)
- arsitektur harus dijaga sesederhana mungkin (dan semurah)
- server saya adalah mesin virtual
- file data akan disimpan pada alat filer (dengan NFS)
- Saya memiliki penyeimbang beban perangkat keras tcp / udp siap membantu
Singkatnya, jalur data: [klien] - (http) -> [http2statsd] - (udp) -> [statsd] - (tcp) -> [graphite] - (nfs) -> [filer]
Temuan saya sejauh ini:
- menskalakan bagian http2statsd itu mudah (daemon stateless)
- penskalaan bagian statsd sepertinya tidak langsung (saya kira saya akan berakhir dengan nilai yang tidak jelas dalam grafit untuk data agregat seperti jumlah, rata-rata, minimum, maks ...). Kecuali jika daemon HTTP melakukan hashing yang konsisten untuk shard kunci. Mungkin sebuah ide ... (tapi kemudian ada pertanyaan HA)
- penskalaan bagian grafit dapat dilakukan melalui sharding (menggunakan carbon-relay) (tapi itu tidak menyelesaikan pertanyaan HA juga). Jelas beberapa contoh bisikan tidak boleh menulis file NFS yang sama.
- scaling bagian filer bukan bagian dari pertanyaan (tetapi semakin sedikit IO, semakin baik :)
- penskalaan webapp tampaknya jelas (walaupun saya belum menguji) karena mereka hanya membaca data NFS yang dibagikan
Jadi saya bertanya-tanya apakah ada yang punya pengalaman dan praktik terbaik untuk berbagi untuk penyebaran statsd / graphite yang solid?