co open source zawdziecza najwiekszym graczom w internecie

http://royal.pingdom.com/2010/03/04/how-facebook-twitter-and-other-big-sites-give-back-to-open-source

oprocz znanych projektow takich jak, cassandra, memcached czy nginx wymienione takze te z mniejszym buzzem:

  • Qizmt (map reduce w C#)
  • Kestrel (distributed message queue used by Twitter)

wzorce projektowe dla rozproszonych nosql

http://www.slideshare.net/guestdfd1ec/design-patterns-for-distributed-nonrelational-databases#

poruszone algorytmy bloom filter, clock vectors, consistent hashing, gossip

suchar posix io

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

deliberacje o postix io ktore ma juz 22 lata i bylo zaprojektowane nieadekwatnie do dzisiejszych volumenów.

mysql haters

http://www.metabrew.com/article/anti-rdbms-a-list-of-distributed-key-value-stores/

usystematyzowana wiedza na styczen 2009 o rozproszonych key-value storach. brak tokyocabineta, redisa i innych pokazuje dynamiczny rozwoj w tym obszarze w roku 2009.

twitter buduje business intelligence

http://highscalability.com/blog/2010/2/19/twitters-plan-to-analyze-100-billion-tweets.html

omówienie prezentacji lidera analityków twitter’a Kevina Weil’a. slajdy pokazują proces wyboru technologii do przenalizowania 10 bilionów twittów w celu wydobycia wiedzy biznesowej na temat serwisu.

historia ngnix

http://royal.pingdom.com/2010/02/23/nginx-the-little-russian-web-server-taking-on-the-giants/

historia nginx /endżineks/, web serwera rozwijanego przez jednego Rosjanina. napisany asynchronicznie utrzymuje obecnie 16 milionów web serwisów. sukcesywnie zastepuje bedacego w stagnacji lighttpd. w artykule wywiad z autorem Igorem Sysoev’em.

niezbedne pozycje w dossier kazdego inzyniera

http://ss64.com/bash/

http://cb.vu/unixtoolbox.xhtml

usystematyzowane komendy i dla usera i admina.

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.

hurtowe operacje w bashu

zadanie 1: zmienic we wszystkich nazwach plikow w biezacym katalogu spacje na podkreslenia.

zadanie 2: wylistowac pary (kolejny numer, plik) z biezacego katalogu. np.

0 bin
1 boot
2 cdrom
3 dev
4 etc
5 home

rozwiazanie zadania 1:

for x in `ls | tr ” ” “_”`; do echo $x; mv ” `echo $x | tr “_” ” “` ” $x; done

rozwiazanie zadania 2:

i=0; for x in `ls `; do i=$(( i + 1 )); echo $i $x; done

jak przyspieszyc strone www

http://developer.yahoo.com/performance/rules.html

male rzeczy, ktore latwo moga umknac a potrafia zrobic roznice. wielu poczatkujacych developerow nie zdaje sobie sprawy z tych optymalizacji.

szybkie sciaganie z przeklej.pl

za potrzeba chwili napisalem na kolanie skrypt umozliwiajacy szybkie pobranie wszystkich plikow ze strony udostepnionych w serwisie przeklej.pl. [wymaga zrobienia wciec]

import os, sys

if len(sys.argv) < 2:
print “usage: python przeklej.pl url”
sys.exit(0)

url = sys.argv[1]

print ’sciagam html z ‘, url, ‘… ‘

os.system(“wget ” + url + ” -O przeklej.out.html”)

pliki = {}
for x in open(“przeklej.out.html”):
if “plik/” in x:
b = x.find(“plik/”)
y = x[b+5:]
b = y.find(“\””)
if b >= 0:
p = y[0:b]
pliki[p] = 0

i = 0
for x in pliki:
toks = x.split(“-”)
id = toks[-1:][0]
title = x[0:len(x)-len(id)-1]
ext = title.split(“-”)[-1:][0]

download = “download/” + id + “/” + title

os.system(“wget www.przeklej.pl/” + download + ” –referer www.przeklej.pl/plik/” + x + ” -O ” + title + “.” + ext)
i += 1