Wysoce dostępne, dostępne w Internecie i skalowalne wdrożenie statystyk i grafitu

17

Chciałbym skonfigurować statsd / grafit, aby móc logować aplikacje JS działające na urządzeniach HTML (tj. Nie w zamkniętym środowisku LAN i być może z dużą ilością przychodzących danych, których nie kontroluję bezpośrednio).

Moje ograniczenia:

  • punkt wejścia musi mówić przez HTTP: rozwiązuje to prosty serwer proxy HTTP-do-UDP-statsd (np. httpstatsd na github)
  • musi się oprzeć awarii pojedynczego serwera (aby zwalczyć prawo Murphy'ego :)
  • musi być skalowalny w poziomie: webscale, kochanie! :)
  • architektura powinna być możliwie najprostsza (i tania)
  • moje serwery to maszyny wirtualne
  • pliki danych będą przechowywane w urządzeniu filtrującym (z NFS)
  • Mam do dyspozycji sprzętowe równoważniki obciążenia tcp / udp

Krótko mówiąc, ścieżka danych: [klient] - (http) -> [http2statsd] - (udp) -> [statsd] - (tcp) -> [grafit] - (nfs) -> [filer]

Moje dotychczasowe ustalenia:

  • skalowanie części http2statsd jest łatwe (demony bezstanowe)
  • skalowanie części statsd nie wydaje się proste (wydaje mi się, że skończyłbym się niespójnymi wartościami w graficie dla danych agregowanych, takich jak suma, śr, min, maks ...). Chyba że demon HTTP nie wykonuje spójnego mieszania w celu odłamania kluczy. Może pomysł ... (ale jest jeszcze pytanie HA)
  • skalowanie części grafitowej można wykonać poprzez dzielenie (za pomocą przekaźnika węglowego) (ale to również nie rozwiązuje pytania HA). Oczywiście kilka wystąpień szeptanych nie powinno zapisywać tego samego pliku NFS.
  • skalowanie części filtrującej nie jest częścią pytania (ale im mniej IO, tym lepiej :)
  • skalowanie aplikacji wydaje się oczywiste (chociaż nie testowałem), ponieważ czytają tylko udostępnione dane NFS

Zastanawiałem się więc, czy ktoś miał jakieś doświadczenia i najlepsze praktyki, aby podzielić się solidnym wdrożeniem statystyki / grafitu?

David142
źródło
Czytając komentarze na blogu Etsy o StatsD, piszą, że co 10 sekund dostarczają statystyki StatsD 10 000-30 000. Sugerowałbym połączenie jednego klienta http2statsd z jednym serwerem statsd i podziel go, jeśli liczba metryk wysłanych do statsd stanie się wąskim gardłem.
pkhamre
Czy w końcu to wdrożyłeś? Jeśli tak, czy mógłbyś podzielić się szczegółami?
gf_

Odpowiedzi:

1

Istnieje serwer proxy statsd o spójnym haszowaniu, który umożliwia rozłożenie ruchu statsd między wiele agregatorów statsd, z których każdy używa własnego zestawu nazw metryk. Jest to kluczowy element skalowalności w Twojej architekturze, umożliwiający skalowanie procesów statsd.

Grafit jest również trudny, ale mam nadzieję, że nie będziesz potrzebować nieskończonej skali i możesz zrobić tylko dokładne dzielenie według usługi lub innego parametru statycznego.

Najtrudniejszą częścią jest skalowanie aplikacji internetowej i zależy to od tego, jakie są najcięższe zapytania dotyczące grafów. Jednak zawsze możesz wstępnie agregować dane dla najtwardszych wykresów i pozbyć się większości obciążeń.

Używam HostedGraphite od dłuższego czasu, aby uniknąć całego tego bólu, ci faceci wdrożyli własne zaplecze Riak dla Carbon i wykonują tam wszystkie skalowania.

DukeLion
źródło