2009-01-11 11 views
5

Próbowałem zrozumieć, jak radzić sobie z wydajnością i skalowalnością, i chciałbym wiedzieć, co robią programiści/sysadmins, aby wycisnąć z ich systemów. Aby ujednolicić odpowiedź, że to pomoże, jeśli można wziąć swój najlepszy strzał w reagowaniu na którekolwiek z poniższych kryteriów:Jak zmaksymalizować wydajność serwera?

  1. Profil - publikacji Magazine na Joomla; Praca na pokładzie CodeIgniter + OpenId + AJAX
    • Wydajność - maksymalna żądań na sekundę na serwer?
    • Sprzęt - Serwer, router, dysk, LAN?
    • Software - Lighttpd, Memcache, Varnish, Nginx, Squid, funt, LVS, eAccelerator itp
    • Usługi - Amazon S3, Akamai, Google Compute itp
    • konfiguracyjne - Statyczne mieszania, moduł Upstream, Memcache przez x minut po żądań N, Disable zalogowaniu się więcej o zdjęciach, itd
    • Inne - Coś jeszcze? (Przykład znormalizowane tabele złe dla stron z dużą ilością odsłon)

Edycja: Proszę ponownie rozważyć przed zamknięciem to pytanie asitisimportant do twórców stron internetowych do poszukiwania tych rzeczy. Programista może poprawić kod w swoim kodzie, ale nadal przegrywa ze złym koderem, który zapisuje memcached lub zarządza zestawieniem CDN przez Google App Engine.

+0

To nie rozprawa pytanie. – cletus

+0

Wygląda dobrze dla mnie - jestem bardzo zainteresowany tym tematem. – Ross

Odpowiedz

2

nie mam czasu, aby odpowiedzieć kwestionujesz kulę za kulą. =) Ale mogę zalecić ogólną strategię oddzielania problemów, a nie łączenia zasobów serwera, gdy nie ma natychmiastowej potrzeby. mod_proxy (i wszelkie jego odpowiedniki) jest twoim przyjacielem. Ułatwia to przenoszenie sprzętu na pojawiające się problemy z wydajnością. Oczywiście nie musisz od samego początku dokładnie uwzględniać systemu (ponieważ trudno przewidzieć, gdzie pojawią się wąskie gardła). Ale kiedy napotkasz problemy. Pamiętaj o swoim przyjacielu.

3

Nasz system: Nie mogę powiedzieć wiele na ten temat, ale to duża aplikacja SaaS obsługujących wiele płacących klientów.


Każda czynność związana z wydajnością/wydajnością jest wykonywana bardzo ostrożnie - nie możemy po prostu wypróbować rzeczy, aby sprawdzić, czy działają.

Początkowo nie byłoby pewne analiza aktualnej wydajności i pojemności, czy moglibyśmy kontynuować mimo to działać.

Jeśli to możliwe, powielibyśmy problemy z wydajnością w systemie nieprodukcyjnym, gdzie moglibyśmy profilować kod i wprowadzać zmiany eksperymentalne. Nie zawsze możemy używać dokładnie tego samego sprzętu co produkcja (produkcja ma dużą liczbę bardzo wysokich serwerów spec, a dev ma tylko kilka testów wydajności dedykowanych dla produkcji).

Jeśli problemu nie można w istotny sposób przeanalizować w środowisku nieprodukcyjnym, dostarczymy trochę oprzyrządowania do naszego kodu w produkcji (po dokładnych testach, aby upewnić się, że oprzyrządowanie nie ma wpływu na sam system). Ta oprzyrządowanie zostanie wysłane "wyłączone" i włączone selektywnie w celu zebrania wystarczającej ilości danych.

Po dokładnej analizie problemu przyjrzeliśmy się możliwym rozwiązaniom, a może i opracowalibyśmy prototypy - można by je przetestować pod kątem poprawności działania.

Zazwyczaj wybieramy opcję najmniej ryzykowną, jeśli jest ich kilka.

normalnego procesu uwalniania będzie wówczas następuje - wiele badań, opinie kodu itd

stosownych przypadkach, zmiana może być dostarczany z „przełącznik odwracania”, co pozwoliło mu zostać wyłączony w produkcji szybko, jeśli był problem.

Istnieje wiele potencjalnych ulepszeń wydajności, które zidentyfikowaliśmy, z których większość nie będziemy rozwijać dalej, dopóki nie pojawi się problem (chyba że robimy niepowiązane refaktoryzacji tego oprogramowania).

3

Nie ma konkretnego planu zagospodarowania dla optymalizacji wydajności (na przykład najpierw uruchom z oprogramowania "xyz").

podejście ogólne:

  1. Identyfikacja (! Mierzyć) swój najbardziej improveable podmiot za pomocą środków poprawy/zainwestowanego czasu
  2. zoptymalizować go
  3. Powtórz