To naprawdę zależy od obciążenia pracą.
dla części L.
- mieć dużo pamięci,
- jeśli możesz przekroczyć 4 GB, wybierz 64bit.
- dla partycji, na których twoja zawartość, logi i dane MySQL są używane opcje montowania: noatime, nodiratime.
- używaj oddzielnych fizycznych dysków / zestawów rajdowych, najlepiej przechowuj dane SQL, logi, treści, które podajesz - każdy na osobnym wrzecionie.
dla części A stosu - może chcesz całkowicie zastąpić ją nginx lub lighthttpd , a może po prostu zostaw Apache dla dynamicznej zawartości i mieć oddzielny serwer (taki jak te dwa lub mathopd ) dla statycznej zawartości. Zajrzyj tutaj, aby uzyskać więcej opcji. Jeśli zamierzasz uruchomić zarówno Apache, jak i inny serwer w tym samym urządzeniu, przydatny będzie drugi adres IP. Aby zmniejszyć opóźnienie dla użytkownika końcowego, użyj http / 1.1 z Keep-Alive. Rozważ użycie CDN dla zawartości statycznej.
dla części M lampy - spójrz na mysqlperformanceblog . ze szczytu mojej głowy:
- rejestruj wolne zapytania,
- dać wystarczającą pamięć,
- rozważ użycie innodb.
- jeśli masz dużo tekstu do przeszukania - użyj sfinksa i masz zadanie wsadowe, które odbudowuje indeks.
- rozważ zabijanie zapytań trwających dłużej niż XYZ sekund. Lepiej zdenerwować 1% użytkowników niż sprowadzić całą witrynę w godzinach szczytu. Ale to naprawdę zależy od tego, czy przetwarzasz transakcje gotówkowe lub wyświetlasz ładne zdjęcia.
- jeśli to możliwe, używaj memcached, aby buforować wynik „droższych” zapytań SQL. Pamiętaj, aby unieważnić pamięć podręczną podczas zmiany zawartości SQL. Z drugiej strony mam dość niewiele stron, w których wszystkie dane wygodnie mieszczą się w pamięci, a do tego MySQL płonie szybko i nie potrzeba dodatkowej pamięci podręcznej.
dla P.
- ustaw limit czasu wykonywania skryptów.
- rozważ użycie pamięci podręcznej akceleratora PHP / opcodu. Byłem całkiem zadowolony z xcache , ale nie używam go teraz.
- jeśli masz intensywne przetwarzanie procesora - buforuj wyniki i przechowuj je w SQL lub memcached
Nie jest to naprawdę wskazówka dotycząca wydajności, ale rób kopie zapasowe poza siedzibą. Naprawdę.
Naprawdę sugeruję rozdzielenie MySQL i Apache / PHP na dwóch różnych maszynach.
Na przykład miałem jedną maszynę (C2D E6600), która zawsze zwiększała się do 2,0 i powyżej średniej obciążenia. Umieściłem MySQL na drugiej maszynie (P4C 3Ghz), a następnie obie średnie obciążenia nie przekraczały 0,2-0,3. Więc przeszedłem z bardzo powolnej witryny na szybką, z dwoma serwerami o dużym marginesie wydajności.
źródło
W przypadku części P można rozważyć buforowanie opcode za pomocą np . APC . Można również rozważyć mod_fastcgi z php zamiast domyślnego mod_php.
źródło