Programowanie Równoległe a Google

W ostatnim poście krótko recenzowałem „The Google Story”, ale nie wspomniałem o bardzo ważnej rzeczy, która świetnie komponuje się z ostatnimi wpisami na moim blogu. Chodzi oczywiście o programowanie równoległe.

Twórcy Google jako pierwszych serwerów użyli ręcznie składanych PC połączonych w jedną sieć. Zdecydowali się na takie rozwiązanie, ponieważ koszty zakupów komercyjnych maszyn znacznie przekraczały założony budżet. To posunięcie było strzałem w 10! Magia jednak tkwiła nie tyle w komputerach, co w specjalnie napisanym oprogramowaniu – i tu przechodzimy do kwestii programowania równoległego.

Założeniem Larry’ego oraz Sergey’a było pobranie całego internetu do siebie i zindeksowanie go na miejscu. Jak wiemy, informacja w sieci waży znacznie więcej niż możliwości pamięciowe pojedynczego blaszaka, tak więc trzeba było całą tę informację rozłożyć na wiele maszyn. Zapytanie o dowolną frazę musiało zatem również trafiać do wielu komputerów w googlowskiej pajęczynie. Aplikacja, którą stworzyli jeszcze wtedy studenci, była kunsztem programowania równoległego. Należało rozłożyć zadanie wyszukiwania danej frazy na wiele podzadań i oddelegować je do innych wolnych zasobów. Należało znaleźć odpowiedź na następujące pytania:

  • Jak podzielić zadanie?
  • Które maszyny mogą wykonać dane podzadanie? (np. polskie zasoby są tylko na niektórych serwerach)
  • Które serwery są bardziej obciążone, a które mniej?

Wszystkie te pytania zadają sobie dziś twórcy aplikacji wielowątkowych/równoległych, myśląc nie o serwerach, ale np. o rdzeniach procesora. Bez programowania równoległego nie było by Google, bez Google nie byłoby… nic?

Nie trzeba było drogich rozwiązań, marnowanie pieniędzy na support i płacenie za markę (jaką niewątpliwe jest np. IBM). Programowanie równoległe odegrało znaczącą rolę w budowaniu giganta z Mountain View, a mogę dać głowę, że w erze informacji, w jakiej dzisiaj się znajdujemy, odegra równie wielką rolę w budowaniu rozwiązań, z których będziemy korzystać za kilka lat.

Promuj