wielomilonowy ruch na wordpressie wordpress wordcamp gdynia 2016

44
WIELOMILIONOWY RUCH NA WORDPRESSIE Lukasz Wilczak - DevLead Piotr Federowicz - Senior Software Developer

Upload: lukasz-wilczak

Post on 13-Jan-2017

192 views

Category:

Technology


0 download

TRANSCRIPT

Page 1: Wielomilonowy ruch na wordpressie   wordpress wordcamp gdynia 2016

WIELOMILIONOWY RUCH NA WORDPRESSIE

Lukasz Wilczak - DevLead

Piotr Federowicz - Senior Software Developer

Page 2: Wielomilonowy ruch na wordpressie   wordpress wordcamp gdynia 2016

Agenda

/GrandParadePolandwww.grandparade.co.uk

1. Statystyki serwisów.2. Wydajność WordPressa i dlaczego go wciąż używamy.3. Grand Parade WP Hosting.4. Loadbalancing.5. WordPress i Amazon S3.6. Ansible i deploy WordPressa.7. WordPress a CloudFront.8. Varnish9. Amazon Elasticache10.Podsumowanie

Page 3: Wielomilonowy ruch na wordpressie   wordpress wordcamp gdynia 2016

Statystyki serwisów

/GrandParadePolandwww.grandparade.co.uk

Page 4: Wielomilonowy ruch na wordpressie   wordpress wordcamp gdynia 2016

1. Statystyki serwisów w Grand Parade

https://sports.bwin.com/en/news/

- 3 mln użytkowników miesięcznie

- 3 mln - pik jednodniowy

- 20 mln odsłon miesięcznie

http://news.coral.co.uk/

- 650 tys. użytkowników miesięcznie

- 1,3 mln odsłon miesięcznie

http://news.ladbrokes.com/

- 2,2 mln użytkowników miesięcznie

- 4,2 mln odsłon miesięcznie

- 1,5 mln odsłon - pik jednodniowy

/GrandParadePolandwww.grandparade.co.uk

Page 5: Wielomilonowy ruch na wordpressie   wordpress wordcamp gdynia 2016

2.1 W czym problem? Wydajność WordPressa

/GrandParadePolandwww.grandparade.co.uk

- Kod WP nie jest optymalny, nie był zaprojektowany do obsługiwania dużego ruchu. Jest idealny do pisania blogów.

- Ograniczenia języka PHP - język interpretowany, za każdym requestem “pożera” zasoby CPU i RAM.

- Elastyczność i rozszerzalność WordPressa daje o sobie znać - instalacja wtyczek od różnych autorów, z różną jakością kodu obciąża WordPressa. Wtyczki, filtry, hooki, są jedynie dodatkową warstwą, która obciąża skrypt.

- Struktura plików - do wygenerowania strony głównej na dopiero zainstalowanym WordPressie serwer musi zinterpretować ok. 140 plików PHP.

- Pojawiają się wywołania tego samego kodu oraz wykonywanie identycznych zapytań dla jednego requestu.

Page 6: Wielomilonowy ruch na wordpressie   wordpress wordcamp gdynia 2016

/GrandParadePolandwww.grandparade.co.uk

[0] => index.php[1] => wp-blog-header.php[2] => wp-load.php[3] => wp-config.php[4] => wp-settings.php[5] => wp-includes/load.php[6] => wp-includes/default-constants.php[7] => wp-includes/plugin.php[8] => wp-includes/version.php[9] => wp-includes/compat.php[10] => wp-includes/random_compat/random.php[11] => wp-includes/random_compat/byte_safe_strings.php[12] => wp-includes/random_compat/cast_to_int.php[13] => wp-includes/random_compat/error_polyfill.php[14] => wp-includes/random_compat/random_bytes_dev_urandom.php[15] => wp-includes/random_compat/random_int.php[16] => wp-includes/functions.php[17] => wp-includes/option.php[18] => wp-includes/class-wp.php[19] => wp-includes/class-wp-error.php[20] => wp-includes/pomo/mo.php[21] => wp-includes/pomo/translations.php[22] => wp-includes/pomo/entry.php[23] => wp-includes/pomo/streams.php[24] => wp-includes/wp-db.php[25] => wp-includes/cache.php[26] => wp-includes/default-filters.php[27] => wp-includes/l10n.php[28] => wp-includes/class-wp-walker.php[29] => wp-includes/class-wp-ajax-response.php[30] => wp-includes/formatting.php[31] => wp-includes/capabilities.php[32] => wp-includes/class-wp-roles.php[33] => wp-includes/class-wp-role.php[34] => wp-includes/class-wp-user.php[35] => wp-includes/query.php[36] => wp-includes/date.php[37] => wp-includes/theme.php[38] => wp-includes/class-wp-theme.php[39] => wp-includes/template.php[40] => wp-includes/user.php

[41] => wp-includes/class-wp-user-query.php[42] => wp-includes/session.php[43] => wp-includes/meta.php[44] => wp-includes/class-wp-meta-query.php[45] => wp-includes/class-wp-metadata-lazyloader.php[46] => wp-includes/general-template.php[47] => wp-includes/link-template.php[48] => wp-includes/author-template.php[49] => wp-includes/post.php[50] => wp-includes/class-walker-page.php[51] => wp-includes/class-walker-page-dropdown.php[52] => wp-includes/class-wp-post-type.php[53] => wp-includes/class-wp-post.php[54] => wp-includes/post-template.php[55] => wp-includes/revision.php[56] => wp-includes/post-formats.php[57] => wp-includes/post-thumbnail-template.php[58] => wp-includes/category.php[59] => wp-includes/class-walker-category.php[60] => wp-includes/class-walker-category-dropdown.php[61] => wp-includes/category-template.php[62] => wp-includes/comment.php[63] => wp-includes/class-wp-comment.php[64] => wp-includes/class-wp-comment-query.php[65] => wp-includes/class-walker-comment.php[66] => wp-includes/comment-template.php[67] => wp-includes/rewrite.php[68] => wp-includes/class-wp-rewrite.php[69] => wp-includes/feed.php[70] => wp-includes/bookmark.php[71] => wp-includes/bookmark-template.php[72] => wp-includes/kses.php[73] => wp-includes/cron.php[74] => wp-includes/deprecated.php[75] => wp-includes/script-loader.php[76] => wp-includes/class.wp-dependencies.php[77] => wp-includes/class.wp-scripts.php[78] => wp-includes/functions.wp-scripts.php[79] => wp-includes/class.wp-styles.php[80] => wp-includes/functions.wp-styles.php

[81] => wp-includes/taxonomy.php[82] => wp-includes/class-wp-term.php[83] => wp-includes/class-wp-term-query.php[84] => wp-includes/class-wp-tax-query.php[85] => wp-includes/update.php[86] => wp-includes/canonical.php[87] => wp-includes/shortcodes.php[88] => wp-includes/embed.php[89] => wp-includes/class-wp-embed.php[90] => wp-includes/class-wp-oembed-controller.php[91] => wp-includes/media.php[92] => wp-includes/http.php[93] => wp-includes/class-http.php[94] => wp-includes/class-requests.php[95] => wp-includes/class-wp-http-streams.php[96] => wp-includes/class-wp-http-curl.php[97] => wp-includes/class-wp-http-proxy.php[98] => wp-includes/class-wp-http-cookie.php[99] => wp-includes/class-wp-http-encoding.php[100] => wp-includes/class-wp-http-response.php[101] => wp-includes/class-wp-http-requests-response.php[102] => wp-includes/widgets.php[103] => wp-includes/class-wp-widget.php[104] => wp-includes/class-wp-widget-factory.php[105] => wp-includes/nav-menu.php[106] => wp-includes/nav-menu-template.php[107] => wp-includes/class-walker-nav-menu.php[108] => wp-includes/admin-bar.php[109] => wp-includes/rest-api.php[110] => wp-includes/rest-api/class-wp-rest-server.php[111] => wp-includes/rest-api/class-wp-rest-response.php[112] => wp-includes/rest-api/class-wp-rest-request.php[113] => wp-includes/vars.php[114] => wp-content/plugins/limit-login-attempts/limit-login-attempts.php[115] => wp-includes/pluggable.php[116] => wp-includes/pluggable-deprecated.php[117] => wp-includes/default-widgets.php[118] => wp-includes/widgets/class-wp-widget-pages.php[119] => wp-includes/widgets/class-wp-widget-links.php[120] => wp-includes/widgets/class-wp-widget-search.php

[121] => wp-includes/widgets/class-wp-widget-archives.php[122] => wp-includes/widgets/class-wp-widget-meta.php[123] => wp-includes/widgets/class-wp-widget-calendar.php[124] => wp-includes/widgets/class-wp-widget-text.php[125] => wp-includes/widgets/class-wp-widget-categories.php[126] => wp-includes/widgets/class-wp-widget-recent-posts.php[127] => wp-includes/widgets/class-wp-widget-recent-comments.php[128] => wp-includes/widgets/class-wp-widget-rss.php[129] => wp-includes/widgets/class-wp-widget-tag-cloud.php[130] => wp-includes/widgets/class-wp-nav-menu-widget.php[131] => wp-includes/locale.php[132] => wp-includes/class-wp-locale.php[133] => wp-content/themes/twentysixteen/functions.php[134] => wp-content/themes/twentysixteen/inc/template-tags.php[135] => wp-content/themes/twentysixteen/inc/customizer.php[136] => wp-includes/template-loader.php[137] => wp-includes/class-wp-admin-bar.php[138] => wp-content/themes/twentysixteen/index.php[139] => wp-content/themes/twentysixteen/header.php[140] => wp-content/themes/twentysixteen/template-parts/content.php[141] => wp-content/themes/twentysixteen/sidebar.php[142] => wp-content/themes/twentysixteen/footer.php

Page 7: Wielomilonowy ruch na wordpressie   wordpress wordcamp gdynia 2016

2.2 Baza danych i zapytania

/GrandParadePolandwww.grandparade.co.uk

- WP świeżo po instalacji na stronie startowej wykonuje ok. 30 zapytań do bazy danych i wyciąga ok. 130 rekordów (defaultowe zapytania).

- Tworząc własny szablon, używając custom taxonomies, custom fields i filtrując po nich można szybko dojść do kilkuset zapytań dla jednej odsłony.

- Duża ilość postów, kategorii i tagów powoduje spadek wydajności.

- Pełne dane o taxonomiach trzymane są aż w 4-ech tabelach.

Zapytanie wyciągające wszystkie posty z ich taxonomiami:

SELECT wt.name, p.post_title, p.post_dateFROM wp_terms wtINNER JOIN wp_term_taxonomy wtt ON wt.term_id = wtt.term_idINNER JOIN wp_term_relationships wtr ON wtt.term_taxonomy_id =

wtr.term_taxonomy_idINNER JOIN wp_posts p ON wtr.object_id = p.IDWHERE p.post_type = 'post'

Page 8: Wielomilonowy ruch na wordpressie   wordpress wordcamp gdynia 2016

2.3 Baza danych - liczby na przykładzie

/GrandParadePolandwww.grandparade.co.uk

http://news.ladbrokes.com/

- 31 tys. artykułów (w wielu wersjach), 200 kategorii, 8,5 tys. tagów

Powyższe generuje:

- wp_posts: 175 tys. rekordów,- wp_term_relationships: 240 tys. rekordów,- 70 zapytań do bazy dla każdej strony,

W szczytowych momentach dla tego serwisu jest 1 mln odsłon dziennie.

70 zapytań x (1 mln odsłon na dobę / 3600 minut) daje około 20 tys. zapytań do bazy na minutę

Page 9: Wielomilonowy ruch na wordpressie   wordpress wordcamp gdynia 2016

2.3 Wydajność WordPressa - podsumowanie

/GrandParadePolandwww.grandparade.co.uk

Sama ilość zapytań do bazy nie jest najważniejszym czynnikiem, skalowanie bazy nie przyśpieszy znacząco WordPressa. Cała jego konstrukcja powoduje, że load rośnie. Wpływ na to mają operacje I/O (np. odczyt tych 140+ plików), duplikowanie kodu, wielokrotne nawiązywanie połączeń do bazy.

Dlaczego zatem nie rezygnujemy z WordPressa?

- uzyskujemy potężne narzędzie do budowania stron (dzięki pluginom i możliwościom budowy dedykowanych szablonów)

- w prosty i szybki sposób budujemy dedykowane panele administracyjne dla edytorów (ACF itp.)- WordPress jest powszechnie znany i łatwy w obsłudze - klienci chętnie z niego korzystają

Dlaczego nie przebudujemy core Wordpressa?

- utracimy możliwość update’u oraz kompatybilność z pluginami- budowanie własnego rozwiązania jest czasochłonne i kosztowne

Alternatywa? Jesteśmy w trakcie badania REST API Wordpressowego + React

Page 10: Wielomilonowy ruch na wordpressie   wordpress wordcamp gdynia 2016

Grand Parade WP Hosting

/GrandParadePolandwww.grandparade.co.uk

Page 11: Wielomilonowy ruch na wordpressie   wordpress wordcamp gdynia 2016

3.1 Środowiska WordPress - Amazon EC2

/GrandParadePolandwww.grandparade.co.uk

- Wszystkie środowiska bazują na usługach Amazona EC2- Są to maszyny od T2.small do C4.4xlarge- Serwery oparte :

- Ubuntu 14.04 LTS i planowana migracja na Ubuntu 16.04 LTS, nowe na 16.04 LTS- Nginx- PHP 5.5 lub 7- MYSQL >= 5.5

T2.small (1 vCPU, 2 GB RAM)C4.xlarge (16 vCPU, 32 GB RAM)

Page 12: Wielomilonowy ruch na wordpressie   wordpress wordcamp gdynia 2016

Loadbalancing

/GrandParadePolandwww.grandparade.co.uk

Page 13: Wielomilonowy ruch na wordpressie   wordpress wordcamp gdynia 2016

4.1 Środowiska WordPress - Loadbalancer

Równoważenie obciążenia (ang. load balancing) – technika rozpraszania obciążenia pomiędzy wiele procesorów, komputerów, dysków, połączeń sieciowych lub innych zasobów.

Przykładowy system load balancing mógłby zapewniać bezawaryjną i optymalną pracę na N-aplikacjach znajdujących się na bliźniaczych M-serwerach (zawierających równoważne aplikacje). Podczas gdy wielu użytkowników wysyła wiele żądań, trafiają one najpierw do SLB, który analizuje obciążenie na poszczególnych M-serwerach. Następnie dokonuje optymalnego wyboru – odsyłając użytkownika do jednego z serwerów do konkretnej aplikacji – według żądania.

Optymalny wybór zazwyczaj ma prowadzić do równomiernego obciążenia wszystkich bliźniaczych serwerów. SLB zapewnia że awaria jednego z serwerów nie jest odczuwalna przez użytkowników aplikacji.

Źródło: wikipedia - https://pl.wikipedia.org/wiki/R%C3%B3wnowa%C5%BCenie_obci%C4%85%C5%BCenia

/GrandParadePolandwww.grandparade.co.uk

Page 14: Wielomilonowy ruch na wordpressie   wordpress wordcamp gdynia 2016

4.2 Środowiska WordPress - Loadbalancer

/GrandParadePolandwww.grandparade.co.uk

Load Balancer

Node 1 Node 2 Node 3 Node n-ty

Page 15: Wielomilonowy ruch na wordpressie   wordpress wordcamp gdynia 2016

4.3 Środowiska WordPress - Loadbalancer skalowalność

Loadbalancer umożliwia:

Skalowalność pionową / wertykalną (vertical scaling) - w ramach pojedynczego noda zwiększamy jego zasoby (RAM, ilość procesorów, szybkość procesorów). Odbywa się to bez wyłączania nodów. Odpinamy po kolei każdy z nich z loadbalancera, zwiększamy zasoby i podpinamy z powrotem.

Skalowalność poziomą / horyzontalną (horizontal scaling) - zwiększamy ilość nodów. Dzięki temu loadbalancer rozkłada ruch na większą ich ilość.

Minimalną konfiguracją jest Loadbalancer ze skonfigurowanymi 2-oma nodami.

/GrandParadePolandwww.grandparade.co.uk

Page 16: Wielomilonowy ruch na wordpressie   wordpress wordcamp gdynia 2016

4.4 Środowiska WordPress - Loadbalancer a WP

- Współdzielenie baz danych - RDS- Współdzielenie mediów- S3

/GrandParadePolandwww.grandparade.co.uk

Page 17: Wielomilonowy ruch na wordpressie   wordpress wordcamp gdynia 2016

4.5 Środowiska WordPress - Loadbalancer a WP - baza danych

Bazy danych - MYSQL.

Rozwiązanie, gdzie na każdym nodzie uruchomiona jest baza danych posiada wiele wad, m. in.:

- konieczna jest uciążliwa replikacja baz pomiędzy nodami,

- w razie awarii node zwraca błędy,- bardzo trudne skalowanie.

Wykorzystanie Amazon RDS:

- wspólna baza dla wszystkich nodów,

- Amazon zapewnia dostępność dzięki umieszczeniu bazy w chmurze,

- znika problem z replikacji danych./GrandParadePolandwww.grandparade.co.uk

Page 18: Wielomilonowy ruch na wordpressie   wordpress wordcamp gdynia 2016

4.6 Środowiska WordPress - RDS

/GrandParadePolandwww.grandparade.co.uk

RDS (Amazon Relational Database Service)

Page 19: Wielomilonowy ruch na wordpressie   wordpress wordcamp gdynia 2016

WordPress i Amazon S3

/GrandParadePolandwww.grandparade.co.uk

Page 20: Wielomilonowy ruch na wordpressie   wordpress wordcamp gdynia 2016

5.1 Środowiska WordPress - S3 media

Wykorzystanie Amazon S3 pozwala na:

- Ograniczenie przestrzeni dyskowej na nodach,

- Zmniejszenie ilości requestów do nodów, a co za tym idzie możliwość zmniejszenia ich parametrów,

- Zmniejszenie kosztów.

Konfiguracja Amazon S3:

- Utworzenie bucketu na S3,

- Zdefiniowanie AWS_ACCESS_KEY_ID i AWS_ACCESS_KEY_ID w wp-config.php,

- Instalacja wtyczki Amazon Web Services,

- Instalacja i konfiguracja wtyczki WP Offload S3.

/GrandParadePolandwww.grandparade.co.uk

Page 21: Wielomilonowy ruch na wordpressie   wordpress wordcamp gdynia 2016

5.2 Środowiska WordPress - S3 media - konfiguracja WP Offload S3

Instalacja i konfiguracja wtyczki WP Offload S3:

- Dodanie prawidłowego bucketa,

- Uruchomienie opcji kopiowania plików na S3 oraz nadpisywania adresów w WP,

- Zdefiniowanie (jeżeli potrzeba) odpowiedniej ścieżki do plików na S3,

- Włącznie organizacji plików w katalogach rok/miesiąc,

- Uruchomienie ssl jeżeli potrzeba (zalecane),

- Włączenie opcji usuwania mediów z noda,

- Ewentualne włączenie wersjonowania plików.

/GrandParadePolandwww.grandparade.co.uk

Page 22: Wielomilonowy ruch na wordpressie   wordpress wordcamp gdynia 2016

5.3 Środowiska WordPress - S3 assets WP Offload S3

Minusy WP Offload S3 w wersji lite:

- Nieobsłużone kopiowanie plików przy korzystaniu z ACF wraz z Image crop add-on,

- Nie przenosi assetsów,

- Problemy z WooCommerce, WPML i inne.

/GrandParadePolandwww.grandparade.co.uk

Page 23: Wielomilonowy ruch na wordpressie   wordpress wordcamp gdynia 2016

5.4 Środowiska WordPress - S3 - konfiguracja WP Offload S3 PRO

WP Offload S3 PRO pozwala na:

- Kopiowanie plików przy korzystaniu z ACF wraz z Image crop add-on,

- Przenoszenie assetsów,

- Wsparcie dla WooCommerce, WPML i inne,

- Kilka planów taryfowych,

- Możliwość podpięcia wielu serwisów.

/GrandParadePolandwww.grandparade.co.uk

Page 24: Wielomilonowy ruch na wordpressie   wordpress wordcamp gdynia 2016

5.5 Środowiska WordPress - Amazon S3

/GrandParadePolandwww.grandparade.co.uk

Amazon S3

Page 25: Wielomilonowy ruch na wordpressie   wordpress wordcamp gdynia 2016

5.6 Środowiska WordPress

/GrandParadePolandwww.grandparade.co.uk

Loadbalancer

n-nodów, na każdym jedna instancja WP

RDS

S3

Page 26: Wielomilonowy ruch na wordpressie   wordpress wordcamp gdynia 2016

Ansible i deploy WordPressa

/GrandParadePolandwww.grandparade.co.uk

Page 27: Wielomilonowy ruch na wordpressie   wordpress wordcamp gdynia 2016

6. Środowiska WordPress - deployment plików za pomocą Ansible

AUTOMATYKA DLA KAŻDEGOWdrażanie aplikacji. Zarządzanie systemami. Crush złożoności.

Ansible pomaga zbudować silną podstawę dla DevOps.

Żródło : https://www.ansible.com/

Możliwość ustawienia konfiguracji pod środowiska dev, stg, prod

Identyczna konfiguracja środowisk eliminuje problemy, gdy coś działa na stage, a nie działa na produkcji

Budowa playbooków umożliwiających:

- skonfigurowanie identycznych nodów (instalacja wszystkich narzędzi i bibliotek w tych samych wersjach), dzięki czemu łatwo dostawić kolejny

- deploy na wiele zdefiniowanych nodów, zamiast ręcznego deploy’a na poszczególne nody/GrandParadePolandwww.grandparade.co.uk

Page 28: Wielomilonowy ruch na wordpressie   wordpress wordcamp gdynia 2016

WordPress a CloudFront

/GrandParadePolandwww.grandparade.co.uk

Page 29: Wielomilonowy ruch na wordpressie   wordpress wordcamp gdynia 2016

7.1 CloudFront

Amazon CloudFront is a global content delivery network (CDN) service

that accelerates delivery of your websites, APIs, video content or other web assets.

It integrates with other Amazon Web Services products to give developers and businesses

an easy way to accelerate content to end users with no minimum usage commitments

Źródło: https://aws.amazon.com/cloudfront/

/GrandParadePolandwww.grandparade.co.uk

Page 30: Wielomilonowy ruch na wordpressie   wordpress wordcamp gdynia 2016

7.1 CloudFront - integracja z WordPress - idealne rozwiązanie w określonych warunkach

/GrandParadePolandwww.grandparade.co.uk

Warunki:

- małą ilość updatów (np. jeden artykuł na tydzień) lub mało treści (landing page, strona wizytówkowa),

- nie wymagane funkcjonalności server-side, takie jak logowanie, wyszukiwarka.

Budowa i działanie:

- WordPress na małym serwerze, służy tylko do generowania HTML- i, umieszczony za firewallem lub w sieci wewnętrznej,

- Edytorzy wprowadzają artykuły, mają podgląd na nową wersję strony. Po zakończeniu pracy nad artykułem - publikują go,

- Wtedy statyczne HTML wysyłamy na Amazon S3,

- Assetsy i media również wysyłamy na Amazon S3 (WP Offload S3) ,

- Dzięki powyższym krokom otrzymujemy obraz całej strony na S3,

- Konfigurujemy Cloud Front aby wskazywał na naszą S3, oraz ustawiamy odpowiedni czas czyszczenia cache.

Page 31: Wielomilonowy ruch na wordpressie   wordpress wordcamp gdynia 2016

7.1 CloudFront - integracja z WordPress - idealne rozwiązanie w określonych warunkach

/GrandParadePolandwww.grandparade.co.uk

Zalety:

- szybkość serwowania strony,

- bezpieczeństwo - brak dostępu do serwera WP z zewnątrz,

- niskie koszty utrzymania strony.

Wady:

- brak funkcjonalności server-side,

- przy dużej ilości kontentu generowanie może trwać kilka godzin.

Page 32: Wielomilonowy ruch na wordpressie   wordpress wordcamp gdynia 2016

7.2 CloudFront - integracja z WordPress - metoda pośrednia

Warunki:

- jeżeli mamy już kilka nowych artykułów dziennie potrzebne są funkcjonalności server-side.

Budowa i działanie:

- assetsy i media wysyłamy na Amazon S3 (WP Offload S3),

- konfigurujemy CloudFront, aby wskazywał na Wordpressa,

- ustawiamy odpowiedni czas czyszczenia cache,

- media i assetsy w wordpresie podawane są z S3.

/GrandParadePolandwww.grandparade.co.uk

(LB)

Page 33: Wielomilonowy ruch na wordpressie   wordpress wordcamp gdynia 2016

7.2 CloudFront - integracja z WordPress - metoda pośrednia

Zalety:

- w tej metodzie przechowujemy assetsy i media na S3, dzięki czemu komunikacja z CF jest bardzo szybka,

- zmniejszone obciążenie nodów

- znaczny wzrost szybkości ładowania serwisu oraz zmniejszone obciążenie naszych nodów

- dostępne są funkcjonalności server-side

Wady:

- znacznie wyższy koszt infrastruktury niż wcześniejszego rozwiązania

- wyższy stopień skomplikowania infrastruktury

- niższy poziom bezpieczeństwa

/GrandParadePolandwww.grandparade.co.uk

Page 34: Wielomilonowy ruch na wordpressie   wordpress wordcamp gdynia 2016

Varnish

/GrandParadePolandwww.grandparade.co.uk

Page 35: Wielomilonowy ruch na wordpressie   wordpress wordcamp gdynia 2016

8. VarnishVarnish jest akceleratorem HTTP, pracującym w trybie reverse proxy (czyli przy serwerze www).

- zapisywanie wygenerowanego kodu HTML w pamięci,

- zmniejszenie ilości potrzebnych requestów, a co za tym idzie zmniejszenie obciążenia,

- możliwość konfiguracji za pomocą VCL (Varnish Configuration Language),

- w przypadku dynamicznych elementów (ankiety, fora, gry, sklepy) Varnish nie zadziała, ale można wyłączyć fragment strony za pomocą znaczników ESI:

<esi:remove> <?php include_once('your_file.php'); ?></esi:remove><!--esi <esi:include src="URL_TO_SITE" /> →

- konieczność czyszczenia cache po każdej aktualizacji,

- konieczność zastosowania plug-inu do obsługi Varnisha (Varnish WordPress, W3 Total Cache).

/GrandParadePolandwww.grandparade.co.uk

Page 36: Wielomilonowy ruch na wordpressie   wordpress wordcamp gdynia 2016

REDIS

/GrandParadePolandwww.grandparade.co.uk

Page 37: Wielomilonowy ruch na wordpressie   wordpress wordcamp gdynia 2016

8.1 Redis

Redis (Remote Dictionary Service) jest pamięciową bazą NoSQL przechowującą dane jako pary klucz – wartość.

- instalacja jako PHP extension PECL lub pobranie biblioteki Predis,

- szybka baza przechowywana w pamięci,

- można wykorzystać go jako cache,

- pozwala na replikacje master-slave,

- możliwość ustawienia czasu trzymania cache,

- możliwość ustawienia REDIS na modułach strony niezależnie, z różnymi czasami trzymania cache (header, content, sidebar, footer).

Redis jest ulotny! W przypadku awarii, restartu itp. musi zreplikować dane lub pobrać ponownie. Nie możemy używać go jako bazy danych.

/GrandParadePolandwww.grandparade.co.uk

Page 38: Wielomilonowy ruch na wordpressie   wordpress wordcamp gdynia 2016

8.2 Redis - modułowy cache Implementacja Redis:

--- functions.php

/GrandParadePolandwww.grandparade.co.uk

include_once ABSPATH . '/Predis/Autoloader.php'; Predis\Autoloader::register(); $HAClient = null; $HAClient = new Predis\Client(array( 'tcp://' . constant('REDIS_MASTER') . ':' . constant('REDIS_PORT'), ));

--- header.php, footer.php itp..

global $HAClient;

$data = $HAClient->get('getContent_'.$pageId);if(!$data){ //get page content if($pageContent){ $HAClient->set('getContent_'.$pageId.', $pageContent); $HAClient->expire('getContent_'.$pageId.', $cacheTime); }}

Page 39: Wielomilonowy ruch na wordpressie   wordpress wordcamp gdynia 2016

Amazon ElastiCache

/GrandParadePolandwww.grandparade.co.uk

Page 40: Wielomilonowy ruch na wordpressie   wordpress wordcamp gdynia 2016

9. Amazon ElastiCache

/GrandParadePolandwww.grandparade.co.uk

Amazon ElastiCache is a web service that makes it easy to deploy, operate, and scale an in-memory cache or data store in the cloud. The service improves the performance of web applications by allowing

you to retrieve information from fast, managed, in-memory data stores, instead of relying entirely on slower disk-based databases

Żródło: https://aws.amazon.com/elasticache/

Amazon ElasticCache obsługuje 2 open-sourcowe technologie:

- Redis- Memcached

Page 41: Wielomilonowy ruch na wordpressie   wordpress wordcamp gdynia 2016

10. Podsumowanie

/GrandParadePolandwww.grandparade.co.uk

Mimo, że WodPress nie jest platformą dedykowaną do obsługi dużego ruchu i ma swoje wady, wciąż jest najlepszym rozwiązaniem do budowy blogów bettingowych w Grand Parade.Bazując na usługach Amazon-a wypracowaliśmy skuteczną i stabilną architekturę pozwalającą obsłużyć duży ruch. Na naszym przykładzie widać, że można budować profesjonalne aplikacje bazujące na open source-owych, ogólnie dostępnych narzędziach.

Page 42: Wielomilonowy ruch na wordpressie   wordpress wordcamp gdynia 2016

/GrandParadePolandwww.grandparade.co.uk

Amazon:

https://aws.amazon.com/ec2/

https://aws.amazon.com/s3/

https://aws.amazon.com/rds/

https://aws.amazon.com/cloudfront/

https://aws.amazon.com/elasticache/

https://aws.amazon.com/elasticloadbalancing

Redis:

http://redis.io/

11. LinkiVarnish: https://varnish-cache.org/

Wtyczki:https://deliciousbrains.com/wp-offload-s3/

Ansible:https://www.ansible.com/

Grand Parade:https://www.grandparade.co.uk/

Page 43: Wielomilonowy ruch na wordpressie   wordpress wordcamp gdynia 2016

/GrandParadePolandwww.grandparade.co.uk

Dziękuję za uwagę.

Pytania?

Page 44: Wielomilonowy ruch na wordpressie   wordpress wordcamp gdynia 2016

/GrandParadePolandwww.grandparade.co.uk

Łukasz Wilczak

[email protected]

/lukaszwilczak

Piotr Federowicz

[email protected]

/piotr-federowicz