Skalowalność przy błyskawicznym wzroście

Post on 26-Jun-2015

6.150 views 3 download

description

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

Transcript of Skalowalność przy błyskawicznym wzroście

POŻEGNANIE Z PANEM GĄBKĄskalowalność i wydajność 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 ?

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?

NAJPROSTSZE ROZWIĄZANIASĄ NAJLEPSZE

Skoropiszą tak w

TO MUSI TO BYĆ PRAWDA !!!!11

3 miliony UU

Faza 1: Analiza

• KIEDY zamula?

• CO zamula?

• DLACZEGO zamula?

• jak to ODMULIĆ?

KIEDY zamula

CO zamula? (i DLACZEGO?)

• Serwer WWW?

• System operacyjny?

• Serwer MySQL?

• Skrypt PHP?

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");

System operacyjny?

• load avg

• NFS

• free mem + swap

• RAID state

• configuration

Serwer MySQL?

Serwer MySQL?

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);

}}

Skrypt PHP?

Przyspieszamy!

Zmieniamy serwer WWW

albo

(HA)Proxy na przedzie

Memcache(d)

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());

}

FULL TEXT SEARCH ENGINE

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

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

Konfiguracja MySQL

• Dostosowanie Cache do własnych potrzeb

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

• Dostrojenie kluczowych parametrów dlafunkcjonowaniabazy

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!

Replikacja MySQL

• Obsługa master/slave po stronie aplikacji

• Synchronizacja on-demand

• Rsync, SELECT INTO OUTFILE, MAATKIT

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

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.

Rozwój infrastruktury

WWWDB

Rozwój infrastruktury

Przetwarzanie danych do importu

WWW

DB

Rozwój infrastruktury

Przetwarzanie danych do importu

WWW

DB Master

DB Slave

Rozwój infrastruktury

Przetwarzanie danych do importu

WWW

WWW

WWW – pliki statyczne

DB Master

DB Slave

Rozwój infrastruktury

Przetwarzanie danych do importu

WWW

WWW

WWW – pliki statyczne

DB Master

DB Slave

DB Slave

O czym NIE mówiliśmy?

• optymalizacja po stronie klienta (YSlow)

• HTTP caching

• Amazon S3 i EC2

• Google App Engine

Komentarze, krytyka i pytania

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

Dziękujemy za uwagę

3camp 22.04.2008