2009-10-20 22 views
30

Niedawno doświadczył powodzi ruchu na Facebooku aplikacji stworzyłem (głównie ze względu na edukację, nie z każdym zamiarze wprowadzenia do obrotu)architekturę aplikacji PHP na Amazon EC2

Nie trzeba dodawać, że nie pomyśl o skalowalności podczas tworzenia aplikacji. Znajduję się teraz w sytuacji, w której mój skromny serwer wirtualny obsługiwany przez MediaTemple w ogóle go nie tnie i tak naprawdę przechodzi na surowe operacje wejścia/wyjścia maszyny. Ponieważ ten projekt był dla mnie tak ważny, pomyślałem, że wykorzystam to jako okazję do zrozumienia platformy Amazon EC2.

Sama aplikacja jest tworzona w PHP (przy użyciu Zend Framework) z backendem MySQL. Używam buforowania aplikacji, gdzie to możliwe, z memcached. Spędziłem weekend bawiąc się z EC2, kręcąc instancje, instalując potrzebne pakiety i montując wolumin EBS do instancji.

Ale jaki jest następny logiczny krok, który przyniesie dobre wyniki w zakresie skalowalności? Czy uruchamiam instancję AMI dla MySQL i jedną dla usługi Apache? Czy mogę po prostu zreplikować wystąpienia tak często, jak ich potrzebuję, a następnie przeprowadzić równoważenie obciążenia na interfejsie? Idealnie chciałbym mieć scentralizowaną bazę danych, ponieważ agreguję statystyki we wszystkich wierszach baz danych, jednak nie jest to trudne (prawdopodobnie istnieją pewne rozwiązania specyficzne dla aplikacji, które mogłem wymyślić, aby obejść to)

Wiem, że to prawdopodobnie nie jest prosta odpowiedź, więc opinie i sugestie są mile widziane.

Odpowiedz

14

Tak wiele pytań - wszystkie jednak dobre.

Pod względem skalowania masz kilka opcji.

Pierwsza z nich rozpoczyna się od pojedynczego pudełka. Możesz skalować w górę - dzięki mocniejszemu polu. EC2 mają różne wielkości instancji. Wiąże się to z migracją serwera za każdym razem, gdy potrzebujesz większego pola.

Łatwiej dodawać serwery. Możesz rozpocząć od pojedynczej instancji dla Apache'a & MySQL. Następnie, gdy wzrasta ruch, utwórz osobne wystąpienie dla MySQL i skieruj aplikację na tę nową instancję. Tworzy to ładną warstwę między aplikacją a bazą danych. Wygląda na to, że jest to dobry punkt wyjścia w oparciu o Twój ruch.

Następnie prawdopodobnie będziesz potrzebował więcej mocy aplikacji (serwerów WWW) lub więcej mocy bazy danych (klaster MySQL itp.). Możesz mieć rekordy DNS wskazujące na kilka front boxów z oprogramowaniem do równoważenia obciążenia (spróbuj Pound). Te serwery równoważenia obciążenia rozdzielają żądania na swoje serwery internetowe. EC2 ma Elastic Load Balancing, która jest alternatywą dla samodzielnego zarządzania i jest prawdopodobnie łatwiejsza - nie używałem go osobiście.

Coś więcej, o czym należy pamiętać - EC2 nie ma trwałego magazynu. Musisz samodzielnie zarządzać danymi trwałymi, korzystając z Elastic Block Store. This guide to doskonały samouczek, jak to zrobić, z automatycznymi kopiami zapasowymi.

Zalecam zakup niektórych zarezerwowanych instancji, jeśli zdecydujesz, że EC2 jest drogą naprzód. Zaoszczędzisz sobie około 50% w ciągu 3 lat!

Wreszcie, możesz być zainteresowany usługami takimi jak RightScale, które oferują usługi zarządzania kosztem. Są inni dostawcy.

+0

To brzmi jak moje dokładne pierwsze kroki do podjęcia. Pytanie: czy wolumen EBS można podłączyć do kilku instancji? Myślę, że mogę przechowywać katalog/var/www na serwerze apache na EBS i dane mysql na serwerze mysql na EBS. –

+0

Niestety nie. Pomyśl o EBS jako dysku twardym, można go dołączyć tylko do jednej instancji na raz. Możesz je sklonować, ale sklonowany EBS nie otrzymuje żadnych zmian ani nowych danych. Twoim zadaniem jest napisanie skryptu, który automatycznie ustawi nowe instancje - sprawdzi kod z subversion, skonfiguruje apache, poinformuje moduł równoważenia obciążenia, że ​​jest gotowy do odbierania żądań. Usługi takie jak RightScale sprawiają, że ta część jest łatwiejsza, jak sądzę. –

10

Pierwszym krokiem jest oddzielenie wątpliwości. Oddzieliłem się z oddzielnym serwerem MySQL i ewentualnie dedykowanym memcached box, w zależności od wysokości twojego ładunku.Potem będę monitorować użycie pamięci i procesora w każdym polu i zobacz, gdzie możesz zoptymalizować, jeśli to możliwe. Można to zrobić poprzez wyrzucenie nowych pól Mediów Świątyni. Proponuję także Slicehost dla tańszej, bardziej przyjaznej dla programistów alternatywy.

Nieco więcej niskobudżetowe optymalizacji rozmieszczenia PHP:

  • Korzystanie bardziej wydajny serwer WWW jak nginx obsłużyć plik statyczny służąc a następnie odwrócić żądań aplikacji proxy do oddzielnej instancji Apache
  • Wdrożenie PHP z FastCGI na górze nginx używając czegoś takiego jak PHP-FPM, całkowicie pozbywając się Apache. To może być świetną alternatywą, jeśli twoje potrzeby Apache nie wykraczają daleko poza mod_rewrite i prostsze moduły Apache.

Jeśli wolisz bardziej wysokiego poziomu, do-it-yourself podejście, może chcesz sprawdzić Scalr (code at Google Code). Warto obejrzeć film na swojej stronie internetowej. Zapewnia skalowalne środowisko hostingu przy użyciu Amazon EC2. Ta technologia jest open source, więc możesz ją pobrać i wdrożyć samodzielnie na swoim własnym serwerze zarządzania. (Może twoje pudełko z Mediami Świątyni?) Scalr ma wbudowane AMI (urządzenia EC2) dostępne w niektórych typowych przypadkach użycia.

  • internetowej: Wykorzystuje nginx i jego licznych możliwości oprogramowania: równoważenie obciążenia, plik statyczny serwującą itd Można by prawdopodobnie tylko jedną z nich, i to prawdopodobnie realizować jakieś połączenia Amazon EBS lub trwałe rozwiązanie do przechowywania danych, o czym wspomina dcaunt.
  • aplikacja: Serwer aplikacji z Apache i PHP. Prawdopodobnie będziesz miał wiele z nich i zostaną utworzone automatycznie, jeśli trzeba będzie obsłużyć więcej obciążenia. Ten typ serwera zawierałby kopie Twojej aplikacji ZF.
  • db: Serwer bazy danych z MySQL. Ponownie, prawdopodobnie będziesz miał wiele z nich, a więcej instancji podrzędnych zostanie utworzonych automatycznie, jeśli trzeba będzie obsłużyć więcej obciążenia.
  • memcached: Serwer dedykowany memcached można użyć, aby mieć scentralizowany buforowanie, zarządzanie sesją, et cetera we wszystkich swoich aplikacji przypadkach.

Opcja Scalr prawdopodobnie spowoduje więcej zmian konfiguracji, ale jeśli uważasz, że twoje skalowanie wymaga przyspieszania, może być warta czasu i wysiłku.

+0

Scalr wygląda bardzo interesująco. Prawdopodobnie jest to krok wyższy niż moje potrzeby. Prawdopodobnie zacznę od pierwszej rekomendacji i odejdę stamtąd –

+0

Fajnie się cieszę, że mogę pomóc – patcoll