2010-04-15 8 views
15

Obecnie tworzę stronę internetową dla projektu społecznego w Szwajcarii.Jak skalować aplikację PHP (serwery, mysql, memcache)

I zanim nastąpi nadmiar użytkownika, chcę przygotować aplikację do skalowania.

Odpowiedziałem sobie na wiele pytań, ale niektóre zostały.

Wyjaśnię, co chcę zrobić.


Pierwszy

na beginnning, aplikacja będzie mieć tylko jeden serwer (krótki czas) z DNS, PHP, MySQL, dane i memcache.


drugie

Następnie podzielić je na dwie

  1. DNS, MySQL, memcache
  2. danych, PHP

Trzecie

Tutaj jest problem, nie wiem jak to zrobić dokładnie tutaj, aby aplikacja działała poprawnie.

mogłem zrobić:

  1. Przód: równoważenia obciążenia, memcache, DNS
  2. Web 1: PHP, DANYCH
  3. Web 2: PHP, DANYCH
  4. Mysql

Byłby to schemat, wszystkie sesje PHP są przechowywane w DB.

ALE, w jaki sposób mogę zsynchronizować dane? Czy mogę uruchomić Rsync, aby zachować je na bieżąco. czy mogę je umieścić na osobnym dysku (dysku sieciowym), aby mieć pewność? , ale w takim przypadku jak mogę zrobić w przypadku przesyłania plików przez użytkowników?

a jeśli strona osiągnie więcej sukcesów i będziemy musieli przejść na większe struktury, czy nie spowoduje to opóźnień w aktualizacjach?

czy to byłoby dobrze przejść bezpośrednio do serwisów internetowych Amazona?

niektóre informacje Używam codeigniter jako Framework. Używam linux jako webserver (dystrybucja nie została wybrana, ale powinna to być Debian)

Z góry dziękuję za odpowiedzi.

+0

http://stackoverflow.com/questions/189903/scaling-solutions-for-mysql-replication-clustering – zaf

+0

http://highscalability.com/ – David

+0

AWS oferuje wspaniałe narzędzia do dzielenia usług: dostarczanie treści i S3 dla elementów statycznych, RDS i SimpleDB dla rozproszonych baz danych oraz EC2 dla skalowalnych zasobów serwera. –

Odpowiedz

15

Według Szwajcaria ma 4,6 miliona użytkowników języka niemieckiego, 1,5 miliona użytkowników języka francuskiego i 0,5 miliona użytkowników języka włoskiego, języka romańskiego i innych języków. Podejrzewam, że przekonasz się, że pojedynczy serwer będzie pasował do twoich potrzeb. Odgadnij, jaki procent populacji odwiedza Twoją witrynę co miesiąc lub codziennie, aby dowiedzieć się, ile możesz uzyskać, zanim zaczniesz rozwiązywać problemy.

Nie sądzę, abyś musiał się martwić skalowaniem! Bonus: czas, w którym nie martwisz się tym problemem, możesz rozwiązać inne problemy dla swoich użytkowników.

+1

Uzgodnione, należy zawsze mierzyć wydajność, a następnie eliminować wąskie gardła w miarę ich pojawiania się. Mimo to dobrym pomysłem byłoby zaplanowanie wielu serwerów internetowych, jeśli ta strona będzie musiała szybko skalować. Gdy można skalować do dwóch, duża część instalacji będzie na miejscu, aby skalować do większej liczby ... –

+0

Program operacyjny musi korzystać z klastra FS i wydobywać sesje z bazy danych. Ile zapytań zajmuje utworzenie jednej strony dla zalogowanego użytkownika? –

+1

-1 ... odpowiedź nie dowodzi potrzeby/braku potrzeby skalowania, sugeruje hipotezę, którą należy przetestować (tj., Że skalowanie nie jest potrzebne). Mogą istnieć inne powody (inne niż liczba użytkowników) wymagające skalowania. –

0

Pamiętaj, że możesz montować/udostępniać foldery.

Jakie dane będą synchronizowane?

Możesz rozważyć umieszczenie danych na komputerze bazy danych lub na innym komputerze. Maszyna db jest zwykle dobrym pomysłem, ponieważ prawdopodobnie będzie miała większą wartość we-wy niż zwykły serwer WWW.

Jest to prawdopodobnie dobry pomysł, aby skonfigurować SAN lub podobne, aby Twoje dane pozostały w jednym miejscu. Wielokrotne kopie danych to trudny do opanowania problem. Idąc tą trasą, możesz tam również umieścić pliki db.

8

Istnieje kilka typowych ścieżek do skalowania usług internetowych w górę, w kolejności co witryn takich jak Flickr i Facebook wydają się użyć: serwery

  • dzielone na podstawie pojęć (API, login, pliki multimedialne, reklamy, stron statycznych, dynamicznych stron)
  • dzielona baz danych opartych na koncepcjach, które nie muszą być połączone (loginów, raportowanie dłuższą metę danych strony, etc.)
  • kompilacji/optymalizacji PHP i inne zasoby (skrzaty, zestawionych css, zend)
  • Dodaj buforowanie (przód, tył)
  • Dodaj delegację (round robin, etc.)

Ale zanim skalowania zmierzyć. Zestaw testów, oblicz swoją pojemność i nie optymalizuj, zanim zajdzie taka potrzeba.

2

widzę pewne wątpliwe rzeczy:

  • masz jeden serwer SQL, a sesje są przechowywane w bazie danych, w miejscu, gdzie można się spodziewać bardzo wysokiej głośności. Ile zapytań zajmuje utworzenie pojedynczej strony, jeśli ktoś jest zalogowany i oczekiwany jest spowolnienie, gdy ostatecznie zastosujesz replikację MySQL?

  • W przypadku korzystania z FS w klastrze wszystko jest zsynchronizowane. Nie skończysz z kompilacją A na serwerze 1 podczas kompilacji B na serwerze 2. Jeśli naprawdę spodziewasz się dużego ruchu, w czasie, który zajmuje przesłanie zmiany, a następnie zsynchronizuj wszystkie węzły, po prostu wkurzyłeś tysiąc osób.

Mam wdrożone aplikacje uruchomione na klastrów korzystających OCFS2 z ponad 40 węzłów bez problemu, a OCFS2 nie jest dokładnie „najlepsze” FS klaster dostępny. Sprawdź numer Lustre i rozważ trzymanie sesji na dysku.

Powiązane problemy