c10k problem

http://www.kegel.com/c10k.html

nadszedł czas, aby serwery webowe obsługiwały 10 tysięcy klientów rownolegle.

bezpiecznie usuwanie z wektora stl

czestą operacją jest usuwanie elementow z wektora stl za pomocą iteratora w pętli. zeby to zrobić bezpiecznie, należy ustawic iterator na element ktory zwrocilo erase().

#define erase_iter_from_loop(iter, vec) \
iter = vec.erase(iter); \
if (iter == vec.end()) break; \
iter–;

przykład:

for (vector<x>::iterator i = y.begin(); i != y.end(); i++) {
erase_iter_from_loop(i, y);
}

jeden inżynier na 1M użytkownikow

http://www.facebook.com/note.php?note_id=280583813919

w facebooku przypada jeden inżynier na ponad milion użytkowników. ciekawe prawda?

od kiedy powstalo, php bylo i jest najpowszechniejszym jezykiem do programowania stron i aplikacji www. prostote nauki, pisania, czytania i debugowania docenil facebook. wrazliwe fragmenty, ktore najbardziej wplywaja na wydajnosc, maja byc szybkie lub konsumuja zbyt duzo CPU przepisuja w C++ na php extension korzystajac z zend api. dobre zbalansowanie szybkosci developowania (php) z wydajnoscia (C++). przy okazji poszukiwania udzialu php w rynku znalazlem web framework w C++ (CppCMS). nietrafniony pomysl. nieznajomosc mechanizmow.

liczby, ktore kazdy inzynier powinien znac

http://www.linux-mag.com/cache/7589/1.html

jak szacowac koszt i wydajnosc projektowanego, lub juz dzialajacego systemu:

przyklad z artykulu: projektujemy system i myslismy czy wybrac baze danych pobierajaca dane z dysku, czy baze ktora trzyma calosc danych w pamieci? jesli przewidujemy ze danych bedzie wiecej niz jestesmy w stanie trzymac w RAM na jednej maszynie, musimy kupic ich wiecej i stworzyc klaster. koszt systemu rosnie, ale taki system bedzie wydajnieszy, bo pobranie z pamieci + przeslanie przez siec lokalna jest kilka razy szybsze niz pobranie z dysku.

przyspieszenie mysql zmianami domyslnej konfiguracji

http://www.linux-mag.com/id/7615

  • slave_net_timeout
  • skip-name-resolve
  • connect_timeout
  • max_connect_error

rzeczy, ktore powinnismy wpisac/przestawic po instalacji

giganty open source

http://royal.pingdom.com/2010/01/15/the-9-most-important-events-in-open-source-history/

jako uzupelnienie polecam pierwsze rozdzialy ksiazki Thomasa Friedmana “Świat jest płaski”, w ktorych autor opisuje powstanie netscape’a i apache.  powstanie i powodzenie tych dwoch projektow mialo ogromne znaczenie w postepujacym procesie globalizacji.

trendy w bazach danych

http://about.digg.com/blog/database-capabilities-high-volume-environment

ladnie usystematyzowana wiedza o nierelacyjnych bazach danych z przykladowymi zamknietymi i otwartymi projektami.

przebuduj przy zmianie (digg) vs. sciagnij na żądanie (facebook)

http://highscalability.com/blog/2009/10/13/why-are-facebook-digg-and-twitter-so-hard-to-scale.html

facebook przygotowujac strone do wyswietlenia stosuje ‘tradycyjny’ sposob, czyli pobiera z roznych czesci systemu dane i sklada z nich dokument (Pull On Demand). z kolei digg serwuje strone, ktora juz czeka przygotowana wczesniej w pamieci lub na dysku, poniewaz przy kazdej zmianie (nowy komentarz, nowy post), przebudowuje wszystkie strony (Push on Change), ktorych update dotyka. podejscie digga wymaga wiecej zasobow sprzetowych ale odplaca sie szybkoscia.

wstep do hadoop

http://wiki.apache.org/hadoop/PoweredB

klastry hadoop’a maja w swoim podorężu najwieksi gracze w internecie: adobe, aol, facebook, ibm, imagehack, last.fm, yahoo (ponad 25,000 w klastrze). google uzywa swojego nie open source’owego map reduce.

aby zrozumiec idee map reduce i hadoop’a w szczegolnosci, polecam pierwsze 2 linki a dopiero potem 3-ci:

w zolnierskich slowach:

  • trzeba dac hadoop’owi przestrzen na dysku, ktora zostanie sformatowana do HDFS, i w ktorej przechowywany bedzie input i output danych przetwarzaych za pomoca aplikacji map reduce napisanej dla naszych potrzeb
  • w hadoop’ie mozemy miec jednego mastera i N slave. master jest SPOF, ale autorzy nie martwia sie tym: http://wiki.apache.org/hadoop/SPOF
  • hadoop jest napisany w javie, ale twoja aplikacja (mapper + reducer) moze byc napisana np. w C++ lub Python

jak zbudowac twittera na key-value store

http://code.google.com/p/redis/wiki/TwitterAlikeExample

ten dokument pozwala ‘zlapac’ idee przejscia z projektowania serwisow na relacyjnej bazie danych na baze klucz-wartosc. pokazana na bazie redis koncepcja nosql.