Wpis z mikrobloga

Czy jakiś mirek pracował na ogromnych(miliardy rekordów, miliony aktywnych użytkowników), dobrej wydajności, wysokiej dostępności, skalowalnych bazach danych, oraz ogółem systemach informatycznych?
Może opowiedzielibyście swoje doświadczenia, a tym samym zaproponowali jakąś bazę, narzędzia, software?
W jakim środowisku działaliście(np. AWS/Azure/..., C++/Java/Python/PHP/..., Ubuntu/CentOS/Debian/..., Nginx/Apache/IIS/...)?
Jestem szczególnie ciekawy jak PHP współpracuje z takimi rozwiązaniami. ( )

Może znajdzie się tu jakiś inżynier Google'a, Facebooka, czy innego Microsoftu za $15k/tydzień. ( ͡° ͜ʖ ͡°)

#php #programowanie #skalowalnosc #bazydanych #bigdata
  • 14
  • Odpowiedz
  • Otrzymuj powiadomienia
    o nowych komentarzach

@MacDada:
1. Jakie dyski? SSD?
2. Jakiś cache?
3. Ile RAM-u zjada MySQL przy takim obciążeniu?
4. Ile zajmują pliki baz?
5. MyISAM czy InnoDB? (
  • Odpowiedz
@5z7k9: Jestem programistą, większość tych szczegółów *enkapsuluje* mi serwerowiec, więc mogę powiedzieć (w ograniczonym stopniu) tylko o mechanizmach, z którymi mam kontakt.

1. nie moja bajka, coś mi się kojarzy, że jak ze dwa lata temu pytałem to były talerzowce 10k rpm w RAIDzie, teraz chyba SSD
2. kesze różnych rodzajów:
* zamiast zliczać ilości – przy dodaniu powiązanego rekordu zwiększam licznik w jego tabeli (być może czasem się to rozsynchronizuje, ale nie jest to aż tak istotne i co jakiś czas indywidualnie podliczam, żeby to fixnąć)
*
  • Odpowiedz
@5z7k9: W różnych firmach m.in. 200 TB Hadoop (kilkaset maszyn), 30 TB Cassandra (kilkanaście maszyn), 3 TB Kafka (3 maszyny), ~2 TB Elasticsearch (kilkanaście maszyn). Ilość aktywnych userów różnie, ale zwykle miliony. Jestem DevOpsem, więc zajmowałem się zarówno programowaniem, jak i "adminowaniem" na poziomie danej usługi (nie serwera), byłem też "zaangażowany" w wybór platformy / maszyn. Najbliżej mi do Cassandry (udzielałem się w społeczności, mam kilka mniejszych patchy w upstreamie
  • Odpowiedz
@Regis86: słodki Jezu... 200 TB?! Tego się nie spodziewałem.

1. Jakiej specyfikacji były te maszyny? Stały w chmurze publicznej(np. AWS), wynajmowanej dedykowanej, czy w siedzibie firmy?

2. Bardzo mnie to interesuje - mniej więcej ile rekordów(czy jakkolwiek to się nazywa w Hadoopie, Cassandrze, itd.) i tabel było w bazach(tzn. infrastrukturach) przy których
  • Odpowiedz
Może opowiedzielibyście swoje doświadczenia, a tym samym zaproponowali jakąś bazę, narzędzia, software?


@5z7k9: Ale tak ogólnie to co masz zamiar zrobić?
  • Odpowiedz
@plushy: można powiedzieć, że zapytałem z czystej ciekawości, jestem głodny wiedzy... :P Co prawda mam zamiar stworzyć pewien serwis z dużą ilością zawartości wrzucanej przez użytkowników, ale nie jestem pewny czy użyć bazy typu Cassandra, MongoDB, itd.
  • Odpowiedz
@5z7k9: 1) Nie szukaj wiedzy u losowych osób na mirko
2) Napisz aplikację tak że gdy zatrudnisz ekspertów do jej przepisania było to możliwe.
  • Odpowiedz
@5z7k9: Dla Hadoopa to raczej niewiele, wszak to raczej "offline storage", a nie baza danych "online". http://www.techrepublic.com/article/why-the-worlds-largest-hadoop-installation-may-soon-become-the-norm/ - "Yahoo! has more than 100,000 CPUs in over 40,000 servers running Hadoop, with its biggest Hadoop cluster running 4,500 nodes. All told, Yahoo! stores *455 petabytes* of data in Hadoop."

Z góry przepraszam za wrzucanie tu i ówdzie angielskiego słownictwa - niestety taki nawyk, bo to język, w którym "pracuję" i niektórych słów nawet nie znam w Polskiej wersji, albo dziwnie mi po Polsku brzmią :P

Co do pytań - po
  • Odpowiedz
@Regis86: gruba sprawa. Zastanawiam się ile trwa stworzenie takiego snapshota z hdfs do cassandry gdy w gre wchodzą TB ? Rozumiem, ze tworzycie go codziennie od nowa ?
  • Odpowiedz
@dagon_666: Nie do końca od nowa. Nie chcę się rozpisywać, ale spróbuję w skrócie opowiedzieć:

Hadoop / Spark (tego teraz używam) generuje dane "przyrostowo" - tzn. cały czas dodaje nowe dane do starych (tworząc nowe "zbiory" danych - słowo klucz to "immutable"), ale nigdy nie nadpisuje starych i na każdym etapie przetwarzania tworzy "snapshoty", od których potem potrafi "wznowić" przetwarzanie kolejnego dnia, a następnie ładuje dane do bazy nadpisując "stary" stan świata nowym (słowo klucz - "idempotent").

Tzn. wyobraź sobie system, który codziennie zbiera dane z czujników w - dajmy na to - fabryce, które raportują swój stan co sekundę i prezentuje je w postaci statystyk. Statystyki mają być godzinowe, dzienne, tygodniowe, miesięczne, kwartalne i roczne (statystyki "real time" też da się z tego zrobić i idealnie nada się tu Kafka, ale to by był jeszcze dłuższy wykład). To, jak taki system może działać to: wszystko bez przerwy trafia na HDFS / Amazon S3 do katalogu, który zawiera datę z dokładnością do godziny, następnie co godzinę odpala się "job" (Spark / Hadoop), który w jakiś sposób agreguje te dane. Najpierw te godzinowe (po zakończeniu godziny), potem (na koniec dnia) te dziennie, potem dzienne do miesięcznych itd. Następnego dnia nie musisz przeliczać od "dnia 0" wszystkich danych co godzinę, bo dla danych miesięcznych masz gdzieś przeliczone wszystkie dni - jeśli masz przeliczone 30 dni i dzisiaj jest 31, ostatni dzień miesiąca, to używasz gotowych danych z 30 dni (być może nawet wstępnie zagregowanych to "niepełnego" miesiąca) i przeliczasz od zera tylko ostatni dzień, a potem wszystko to agregujesz do miesiąca. Dzięki temu każdego dnia dostajesz tylko "deltę" (różnicę), którą ładujesz w ciemno - ma ona np. 10, 20, może 50 GB, a nie 30 TB (cała
  • Odpowiedz
@Regis86: Twoj entuzjazm udziela mi sie na tyle, ze mimo iz jest kompletnym laikiem w tym temacie mam od razu ochote sie tego wszystkiego nauczyc :). Dzieki za bardzo obszerny opis.
  • Odpowiedz