skalowalność przy błyskawicznym wzroście

45
POŻEGNANIE Z PANEM GĄBKĄ skalowalność i wydajność przy błyskawicznym wzroście

Upload: marcin-grzybowski

Post on 26-Jun-2015

6.149 views

Category:

Technology


3 download

DESCRIPTION

Pożegnanie z Panem Gąbką - czyli skalowalność przy błyskawicznym wzroście.

TRANSCRIPT

Page 1: Skalowalność przy błyskawicznym wzroście

POŻEGNANIE Z PANEM GĄBKĄskalowalność i wydajność przy

błyskawicznym

wzroście

Page 2: Skalowalność przy błyskawicznym wzroście

Myślisz o biznesie czy tylko o zabawie ?

* Czy aplikacja ma się rozrastać o kolejne funkcjonalności ?

* Czy podczas projektowania uwzględniona została skalowalność ?

* Czy kod i infrastruktura serwerowa są dobrze udokumentowane ?

Page 3: Skalowalność przy błyskawicznym wzroście

Nie trać czasu na problemy,których jeszcze nie masz!

Czy naprawdę potrzebujesz już teraz 12 wypasionych serwerów jeśli przez rok

możesz działać na dwóch?

Czy musisz martwić się o skalowalność wymaganą do obsługi 100 000 użytkowników już dziś, jeśli dotarcie do tego poziomu zajmie dwa lata?

Page 4: Skalowalność przy błyskawicznym wzroście
Page 5: Skalowalność przy błyskawicznym wzroście

NAJPROSTSZE ROZWIĄZANIASĄ NAJLEPSZE

Skoropiszą tak w

TO MUSI TO BYĆ PRAWDA !!!!11

Page 6: Skalowalność przy błyskawicznym wzroście
Page 7: Skalowalność przy błyskawicznym wzroście
Page 8: Skalowalność przy błyskawicznym wzroście
Page 9: Skalowalność przy błyskawicznym wzroście
Page 10: Skalowalność przy błyskawicznym wzroście
Page 11: Skalowalność przy błyskawicznym wzroście

3 miliony UU

Page 12: Skalowalność przy błyskawicznym wzroście
Page 13: Skalowalność przy błyskawicznym wzroście
Page 14: Skalowalność przy błyskawicznym wzroście

Faza 1: Analiza

• KIEDY zamula?

• CO zamula?

• DLACZEGO zamula?

• jak to ODMULIĆ?

Page 15: Skalowalność przy błyskawicznym wzroście

KIEDY zamula

Page 16: Skalowalność przy błyskawicznym wzroście

CO zamula? (i DLACZEGO?)

• Serwer WWW?

• System operacyjny?

• Serwer MySQL?

• Skrypt PHP?

Page 17: Skalowalność przy błyskawicznym wzroście

Serwer WWW ?

• ab - Apache HTTP server benchmarking tool

• httperf

• Selenium + Testing_Selenium z PEAR-a

require_once 'Testing/Selenium.php';

$this->selenium = new Testing_Selenium( "*iexplore", "http://www.nokaut.pl", Settings::get('selenium/ip'));$this->selenium->start();$this->selenium->open($url);$this->selenium->waitForPageToLoad("30000");

Page 18: Skalowalność przy błyskawicznym wzroście

System operacyjny?

• load avg

• NFS

• free mem + swap

• RAID state

• configuration

Page 19: Skalowalność przy błyskawicznym wzroście

Serwer MySQL?

Page 20: Skalowalność przy błyskawicznym wzroście

Serwer MySQL?

Page 21: Skalowalność przy błyskawicznym wzroście

Skrypt PHP?

register_shutdown_function('pageLoadTimeTracker');

function pageLoadTimeTracker() {

$page_load_time = time() - $_SERVER["REQUEST_TIME"];

if ($page_load_time > 10) {$perf_log = array (

'url' => (string)$_SERVER['REQUEST_URI'],'time_added' => date("Y-m-d H:i:s"),'page_load_time' => $page_load_time,'referring_url' => (string)$_SERVER['HTTP_REFERER'],'user_agent' => (string)$_SERVER['HTTP_USER_AGENT'],'user_ip' => (string)$_SERVER['REMOTE_ADDR']

);DB::insert('nokaut_perf_log.perf_log', $perf_log);

}}

Page 22: Skalowalność przy błyskawicznym wzroście

Skrypt PHP?

Page 23: Skalowalność przy błyskawicznym wzroście
Page 24: Skalowalność przy błyskawicznym wzroście

Przyspieszamy!

Page 25: Skalowalność przy błyskawicznym wzroście

Zmieniamy serwer WWW

albo

Page 26: Skalowalność przy błyskawicznym wzroście
Page 27: Skalowalność przy błyskawicznym wzroście

(HA)Proxy na przedzie

Page 28: Skalowalność przy błyskawicznym wzroście

Memcache(d)

Page 29: Skalowalność przy błyskawicznym wzroście

Statyczny cache stron

Mod_Magnet+ +

if (is_readable($cacheFilePath) && filesize($cacheFilePath) > 0) {header("X-Sendfile: ".$cacheFilePath);die();

}

if (Cache::isEnabled() && (false == UserAuth::isLogged())) {Cache::savePage(ob_get_contents());

}

Page 30: Skalowalność przy błyskawicznym wzroście

FULL TEXT SEARCH ENGINE

• Nie przeciążaj bazy danychzbędnymi zapytaniami.

• Użyj na przykład Sphinxa, Lucene lub OpenFTS

Page 31: Skalowalność przy błyskawicznym wzroście

Konfiguracja MySQL

• Dostosowanie Cache do własnych potrzeb

• Zwiększenie dostępnej pamięci dla MySQLa

• Dostrojenie kluczowych parametrów dlafunkcjonowaniabazy

Page 32: Skalowalność przy błyskawicznym wzroście
Page 33: Skalowalność przy błyskawicznym wzroście

Replikacja MySQL

• “A to dorzucimy kolejny serwer, włączy się replikację i wszystko będzie śmigać”

• Zamiast jednego zamulającego serwera mamy więcej zamulających serwerów!

Page 34: Skalowalność przy błyskawicznym wzroście

Replikacja MySQL

• Obsługa master/slave po stronie aplikacji

• Synchronizacja on-demand

• Rsync, SELECT INTO OUTFILE, MAATKIT

Page 35: Skalowalność przy błyskawicznym wzroście

Partycjonowanie• 1 duuuża tabela ze statystykami odwiedzin od

początku istnienia serwisu? NO WAI!

• Podzielmy tabelę według dni - każdy dzień to osobna tabela

Page 36: Skalowalność przy błyskawicznym wzroście

Sharding

• rezerwujemy kilka(naście? dziesiąt?) serwerów dla MySQL

• dane zajmujące najwięcej miejsca, dzielimy między serwery na bazie wybranego kryterium (ID usera, czasu rejestracji, itd (lub funkcji)).

• główny serwer DB trzyma informacje, dzięki którym wiadomo, który slave trzyma jakie dane.

Page 37: Skalowalność przy błyskawicznym wzroście

Rozwój infrastruktury

WWWDB

Page 38: Skalowalność przy błyskawicznym wzroście

Rozwój infrastruktury

Przetwarzanie danych do importu

WWW

DB

Page 39: Skalowalność przy błyskawicznym wzroście

Rozwój infrastruktury

Przetwarzanie danych do importu

WWW

DB Master

DB Slave

Page 40: Skalowalność przy błyskawicznym wzroście

Rozwój infrastruktury

Przetwarzanie danych do importu

WWW

WWW

WWW – pliki statyczne

DB Master

DB Slave

Page 41: Skalowalność przy błyskawicznym wzroście

Rozwój infrastruktury

Przetwarzanie danych do importu

WWW

WWW

WWW – pliki statyczne

DB Master

DB Slave

DB Slave

Page 42: Skalowalność przy błyskawicznym wzroście

O czym NIE mówiliśmy?

• optymalizacja po stronie klienta (YSlow)

• HTTP caching

• Amazon S3 i EC2

• Google App Engine

Page 43: Skalowalność przy błyskawicznym wzroście

Komentarze, krytyka i pytania

Page 44: Skalowalność przy błyskawicznym wzroście

Przekonaj się jak to wszystko działa wPrzekonaj się jak to wszystko działa w

Page 45: Skalowalność przy błyskawicznym wzroście

Dziękujemy za uwagę

3camp 22.04.2008