SlideShare a Scribd company logo
WIELOMILIONOWY RUCH NA
WORDPRESSIE
Lukasz Wilczak - DevLead
Piotr Federowicz - Senior Software Developer
Agenda
/GrandParadePoland
www.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. Varnish
9. Amazon Elasticache
10. Podsumowanie
Statystyki serwisów
/GrandParadePoland
www.grandparade.co.uk
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
/GrandParadePoland
www.grandparade.co.uk
2.1 W czym problem? Wydajność WordPressa
/GrandParadePoland
www.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.
/GrandParadePoland
www.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.ph
p
[141] => wp-content/themes/twentysixteen/sidebar.php
[142] => wp-content/themes/twentysixteen/footer.php
2.2 Baza danych i zapytania
/GrandParadePoland
www.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_date
FROM wp_terms wt
INNER JOIN wp_term_taxonomy wtt ON wt.term_id = wtt.term_id
INNER JOIN wp_term_relationships wtr ON wtt.term_taxonomy_id =
wtr.term_taxonomy_id
INNER JOIN wp_posts p ON wtr.object_id = p.ID
WHERE p.post_type = 'post'
2.3 Baza danych - liczby na przykładzie
/GrandParadePoland
www.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ę
2.3 Wydajność WordPressa - podsumowanie
/GrandParadePoland
www.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
Grand Parade WP Hosting
/GrandParadePoland
www.grandparade.co.uk
3.1 Środowiska WordPress - Amazon EC2
/GrandParadePoland
www.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)
Loadbalancing
/GrandParadePoland
www.grandparade.co.uk
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
/GrandParadePoland
www.grandparade.co.uk
4.2 Środowiska WordPress - Loadbalancer
/GrandParadePoland
www.grandparade.co.uk
Load Balancer
Node 1 Node 2 Node 3 Node n-ty
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.
/GrandParadePoland
www.grandparade.co.uk
4.4 Środowiska WordPress - Loadbalancer a WP
- Współdzielenie baz danych - RDS
- Współdzielenie mediów- S3
/GrandParadePoland
www.grandparade.co.uk
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.
/GrandParadePoland
www.grandparade.co.uk
4.6 Środowiska WordPress - RDS
/GrandParadePoland
www.grandparade.co.uk
RDS (Amazon Relational Database Service)
WordPress i Amazon S3
/GrandParadePoland
www.grandparade.co.uk
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.
/GrandParadePoland
www.grandparade.co.uk
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.
/GrandParadePoland
www.grandparade.co.uk
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.
/GrandParadePoland
www.grandparade.co.uk
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.
/GrandParadePoland
www.grandparade.co.uk
5.5 Środowiska WordPress - Amazon S3
/GrandParadePoland
www.grandparade.co.uk
Amazon S3
5.6 Środowiska WordPress
/GrandParadePoland
www.grandparade.co.uk
Loadbalancer
n-nodów, na każdym jedna
instancja WP
RDS
S3
Ansible i deploy
WordPressa
/GrandParadePoland
www.grandparade.co.uk
6. Środowiska WordPress
- deployment plików za pomocą Ansible
AUTOMATYKA DLA KAŻDEGO
Wdraż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
/GrandParadePoland
www.grandparade.co.uk
WordPress a CloudFront
/GrandParadePoland
www.grandparade.co.uk
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/
/GrandParadePoland
www.grandparade.co.uk
7.1 CloudFront - integracja z WordPress
- idealne rozwiązanie w określonych warunkach
/GrandParadePoland
www.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.
7.1 CloudFront - integracja z WordPress
- idealne rozwiązanie w określonych warunkach
/GrandParadePoland
www.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.
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.
/GrandParadePoland
www.grandparade.co.uk
(LB)
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
/GrandParadePoland
www.grandparade.co.uk
Varnish
/GrandParadePoland
www.grandparade.co.uk
8. Varnish
Varnish 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).
/GrandParadePoland
www.grandparade.co.uk
REDIS
/GrandParadePoland
www.grandparade.co.uk
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.
/GrandParadePoland
www.grandparade.co.uk
8.2 Redis - modułowy cache
Implementacja Redis:
--- functions.php
/GrandParadePoland
www.grandparade.co.uk
include_once ABSPATH . '/Predis/Autoloader.php';
PredisAutoloader::register();
$HAClient = null;
$HAClient = new PredisClient(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);
}
}
Amazon ElastiCache
/GrandParadePoland
www.grandparade.co.uk
9. Amazon ElastiCache
/GrandParadePoland
www.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
10. Podsumowanie
/GrandParadePoland
www.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.
/GrandParadePoland
www.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. Linki
Varnish:
https://varnish-cache.org/
Wtyczki:
https://deliciousbrains.com/wp-offload-s3/
Ansible:
https://www.ansible.com/
Grand Parade:
https://www.grandparade.co.uk/
/GrandParadePoland
www.grandparade.co.uk
Dziękuję za uwagę.
Pytania?
/GrandParadePoland
www.grandparade.co.uk
Łukasz Wilczak
lukasz.wilczak@grandparade.co.uk
/lukaszwilczak
Piotr Federowicz
piotr.federowicz@grandparade.co.uk
/piotr-federowicz

More Related Content

Viewers also liked

Ntick tecnología
Ntick tecnologíaNtick tecnología
Ntick tecnología
Martina Ibarra
 
Клиентская аналитика pros & cons
Клиентская аналитика pros & consКлиентская аналитика pros & cons
Клиентская аналитика pros & cons
Tania Akinina
 
Bab iii bamss
Bab iii bamssBab iii bamss
Bab iii bamss
putra_angga
 
E montoya aprendizaje_autonomo
E montoya aprendizaje_autonomoE montoya aprendizaje_autonomo
E montoya aprendizaje_autonomo
Eulalia Montoya
 
Bab ii bamss
Bab ii bamssBab ii bamss
Bab ii bamss
putra_angga
 
jo exley cv
jo exley cvjo exley cv
jo exley cv
Joanne Exley
 
Bab i bamss
Bab i bamssBab i bamss
Bab i bamss
putra_angga
 
The Integra « Gold Rush Challenge »: Impacts from hard data management throug...
The Integra « Gold Rush Challenge »: Impacts from hard data management throug...The Integra « Gold Rush Challenge »: Impacts from hard data management throug...
The Integra « Gold Rush Challenge »: Impacts from hard data management throug...
FF Explore 3D
 
Your Space. Presentation
Your Space. PresentationYour Space. Presentation
Your Space. Presentation
citylab
 
Callcenter HPE IDOL overview
Callcenter HPE IDOL overviewCallcenter HPE IDOL overview
Callcenter HPE IDOL overview
Tania Akinina
 
Rafał Machnik - CQRS as a performance and security booster (Quality Questions...
Rafał Machnik - CQRS as a performance and security booster (Quality Questions...Rafał Machnik - CQRS as a performance and security booster (Quality Questions...
Rafał Machnik - CQRS as a performance and security booster (Quality Questions...
Grand Parade Poland
 

Viewers also liked (11)

Ntick tecnología
Ntick tecnologíaNtick tecnología
Ntick tecnología
 
Клиентская аналитика pros & cons
Клиентская аналитика pros & consКлиентская аналитика pros & cons
Клиентская аналитика pros & cons
 
Bab iii bamss
Bab iii bamssBab iii bamss
Bab iii bamss
 
E montoya aprendizaje_autonomo
E montoya aprendizaje_autonomoE montoya aprendizaje_autonomo
E montoya aprendizaje_autonomo
 
Bab ii bamss
Bab ii bamssBab ii bamss
Bab ii bamss
 
jo exley cv
jo exley cvjo exley cv
jo exley cv
 
Bab i bamss
Bab i bamssBab i bamss
Bab i bamss
 
The Integra « Gold Rush Challenge »: Impacts from hard data management throug...
The Integra « Gold Rush Challenge »: Impacts from hard data management throug...The Integra « Gold Rush Challenge »: Impacts from hard data management throug...
The Integra « Gold Rush Challenge »: Impacts from hard data management throug...
 
Your Space. Presentation
Your Space. PresentationYour Space. Presentation
Your Space. Presentation
 
Callcenter HPE IDOL overview
Callcenter HPE IDOL overviewCallcenter HPE IDOL overview
Callcenter HPE IDOL overview
 
Rafał Machnik - CQRS as a performance and security booster (Quality Questions...
Rafał Machnik - CQRS as a performance and security booster (Quality Questions...Rafał Machnik - CQRS as a performance and security booster (Quality Questions...
Rafał Machnik - CQRS as a performance and security booster (Quality Questions...
 

Similar to Wielomilionowy Ruch na Wordpressie - Łukasz Wilczak & Piotr Federowicz (WordCamp Gdynia 2016)

Word up łódź kwiecień 2015
Word up łódź   kwiecień 2015Word up łódź   kwiecień 2015
Word up łódź kwiecień 2015
Tomasz Dziuda
 
WordUp Kraków - maj 2015
WordUp Kraków - maj 2015WordUp Kraków - maj 2015
WordUp Kraków - maj 2015Tomasz Dziuda
 
WP-API - teoria i praktyka - WordUp Trójmiasto #2
WP-API - teoria i praktyka - WordUp Trójmiasto #2WP-API - teoria i praktyka - WordUp Trójmiasto #2
WP-API - teoria i praktyka - WordUp Trójmiasto #2
Tomasz Dziuda
 
WP-API - teoria i praktyka - WordUp Łódź #4
WP-API - teoria i praktyka - WordUp Łódź #4WP-API - teoria i praktyka - WordUp Łódź #4
WP-API - teoria i praktyka - WordUp Łódź #4
Tomasz Dziuda
 
SphinxSearch
SphinxSearchSphinxSearch
SphinxSearch
Przemyslaw Wroblewski
 
Hartujemy WordPressa. Kilka kroków do bezpieczniejszej instalacji.
Hartujemy WordPressa. Kilka kroków do bezpieczniejszej instalacji.Hartujemy WordPressa. Kilka kroków do bezpieczniejszej instalacji.
Hartujemy WordPressa. Kilka kroków do bezpieczniejszej instalacji.
Marcin Chwedziak
 
Word up warszawa 2015
Word up warszawa 2015Word up warszawa 2015
Word up warszawa 2015
Tomasz Dziuda
 
WordPress dla początkujących
WordPress dla początkującychWordPress dla początkujących
WordPress dla początkujących
Katarzyna Javaheri-Szpak
 
WordUp Trójmiasto - Sage 9 w praktyce
WordUp Trójmiasto - Sage 9 w praktyceWordUp Trójmiasto - Sage 9 w praktyce
WordUp Trójmiasto - Sage 9 w praktyce
Dawid Urbański
 
Motywy Wordpressa Historia Prawdziwa
Motywy Wordpressa Historia PrawdziwaMotywy Wordpressa Historia Prawdziwa
Motywy Wordpressa Historia Prawdziwa
Tomasz Dziuda
 
Błędy userów, niedoróbki koderów
Błędy userów, niedoróbki koderówBłędy userów, niedoróbki koderów
Błędy userów, niedoróbki koderów
Arkadiusz Stęplowski
 
Thymeleaf - szablony, które bez przetworzenia zrozumie twoja przeglądarka
Thymeleaf - szablony, które bez przetworzenia zrozumie twoja przeglądarkaThymeleaf - szablony, które bez przetworzenia zrozumie twoja przeglądarka
Thymeleaf - szablony, które bez przetworzenia zrozumie twoja przeglądarka
Maciej Ziarko
 
WordUp Gdynia - Jak tworzyć motywy przyjazne użytkownikom i programistom
WordUp Gdynia - Jak tworzyć motywy przyjazne użytkownikom i programistomWordUp Gdynia - Jak tworzyć motywy przyjazne użytkownikom i programistom
WordUp Gdynia - Jak tworzyć motywy przyjazne użytkownikom i programistom
Tomasz Dziuda
 
Podstawy SEO w Drupalu 7 - Jarosław Sobiecki
Podstawy SEO w Drupalu 7 - Jarosław SobieckiPodstawy SEO w Drupalu 7 - Jarosław Sobiecki
Podstawy SEO w Drupalu 7 - Jarosław Sobiecki
Grzegorz Bartman
 
Semantyka w tworzeniu stron www prezentacja
Semantyka w tworzeniu stron www   prezentacjaSemantyka w tworzeniu stron www   prezentacja
Semantyka w tworzeniu stron www prezentacjaPiotr Nalepa
 
Wtyczkowe Kompendium - WordUp Łódź #12
Wtyczkowe Kompendium - WordUp Łódź #12Wtyczkowe Kompendium - WordUp Łódź #12
Wtyczkowe Kompendium - WordUp Łódź #12
Tomasz Dziuda
 
Dlaczego Twoja kolejna aplikacja powinna bazować na platformie Drupal?
Dlaczego Twoja kolejna aplikacja powinna bazować na platformie Drupal?Dlaczego Twoja kolejna aplikacja powinna bazować na platformie Drupal?
Dlaczego Twoja kolejna aplikacja powinna bazować na platformie Drupal?
Grzegorz Bartman
 
Potęga pliku .htaccess
Potęga pliku .htaccessPotęga pliku .htaccess
Potęga pliku .htaccess
Wojciech Klocek
 
Motywy dla WordPressa - historia prawdziwa - WordUp Warszawa
Motywy dla WordPressa - historia prawdziwa - WordUp WarszawaMotywy dla WordPressa - historia prawdziwa - WordUp Warszawa
Motywy dla WordPressa - historia prawdziwa - WordUp Warszawa
Tomasz Dziuda
 
Wtyczkowe kompendium - WordUp Warszawa
Wtyczkowe kompendium - WordUp WarszawaWtyczkowe kompendium - WordUp Warszawa
Wtyczkowe kompendium - WordUp Warszawa
Tomasz Dziuda
 

Similar to Wielomilionowy Ruch na Wordpressie - Łukasz Wilczak & Piotr Federowicz (WordCamp Gdynia 2016) (20)

Word up łódź kwiecień 2015
Word up łódź   kwiecień 2015Word up łódź   kwiecień 2015
Word up łódź kwiecień 2015
 
WordUp Kraków - maj 2015
WordUp Kraków - maj 2015WordUp Kraków - maj 2015
WordUp Kraków - maj 2015
 
WP-API - teoria i praktyka - WordUp Trójmiasto #2
WP-API - teoria i praktyka - WordUp Trójmiasto #2WP-API - teoria i praktyka - WordUp Trójmiasto #2
WP-API - teoria i praktyka - WordUp Trójmiasto #2
 
WP-API - teoria i praktyka - WordUp Łódź #4
WP-API - teoria i praktyka - WordUp Łódź #4WP-API - teoria i praktyka - WordUp Łódź #4
WP-API - teoria i praktyka - WordUp Łódź #4
 
SphinxSearch
SphinxSearchSphinxSearch
SphinxSearch
 
Hartujemy WordPressa. Kilka kroków do bezpieczniejszej instalacji.
Hartujemy WordPressa. Kilka kroków do bezpieczniejszej instalacji.Hartujemy WordPressa. Kilka kroków do bezpieczniejszej instalacji.
Hartujemy WordPressa. Kilka kroków do bezpieczniejszej instalacji.
 
Word up warszawa 2015
Word up warszawa 2015Word up warszawa 2015
Word up warszawa 2015
 
WordPress dla początkujących
WordPress dla początkującychWordPress dla początkujących
WordPress dla początkujących
 
WordUp Trójmiasto - Sage 9 w praktyce
WordUp Trójmiasto - Sage 9 w praktyceWordUp Trójmiasto - Sage 9 w praktyce
WordUp Trójmiasto - Sage 9 w praktyce
 
Motywy Wordpressa Historia Prawdziwa
Motywy Wordpressa Historia PrawdziwaMotywy Wordpressa Historia Prawdziwa
Motywy Wordpressa Historia Prawdziwa
 
Błędy userów, niedoróbki koderów
Błędy userów, niedoróbki koderówBłędy userów, niedoróbki koderów
Błędy userów, niedoróbki koderów
 
Thymeleaf - szablony, które bez przetworzenia zrozumie twoja przeglądarka
Thymeleaf - szablony, które bez przetworzenia zrozumie twoja przeglądarkaThymeleaf - szablony, które bez przetworzenia zrozumie twoja przeglądarka
Thymeleaf - szablony, które bez przetworzenia zrozumie twoja przeglądarka
 
WordUp Gdynia - Jak tworzyć motywy przyjazne użytkownikom i programistom
WordUp Gdynia - Jak tworzyć motywy przyjazne użytkownikom i programistomWordUp Gdynia - Jak tworzyć motywy przyjazne użytkownikom i programistom
WordUp Gdynia - Jak tworzyć motywy przyjazne użytkownikom i programistom
 
Podstawy SEO w Drupalu 7 - Jarosław Sobiecki
Podstawy SEO w Drupalu 7 - Jarosław SobieckiPodstawy SEO w Drupalu 7 - Jarosław Sobiecki
Podstawy SEO w Drupalu 7 - Jarosław Sobiecki
 
Semantyka w tworzeniu stron www prezentacja
Semantyka w tworzeniu stron www   prezentacjaSemantyka w tworzeniu stron www   prezentacja
Semantyka w tworzeniu stron www prezentacja
 
Wtyczkowe Kompendium - WordUp Łódź #12
Wtyczkowe Kompendium - WordUp Łódź #12Wtyczkowe Kompendium - WordUp Łódź #12
Wtyczkowe Kompendium - WordUp Łódź #12
 
Dlaczego Twoja kolejna aplikacja powinna bazować na platformie Drupal?
Dlaczego Twoja kolejna aplikacja powinna bazować na platformie Drupal?Dlaczego Twoja kolejna aplikacja powinna bazować na platformie Drupal?
Dlaczego Twoja kolejna aplikacja powinna bazować na platformie Drupal?
 
Potęga pliku .htaccess
Potęga pliku .htaccessPotęga pliku .htaccess
Potęga pliku .htaccess
 
Motywy dla WordPressa - historia prawdziwa - WordUp Warszawa
Motywy dla WordPressa - historia prawdziwa - WordUp WarszawaMotywy dla WordPressa - historia prawdziwa - WordUp Warszawa
Motywy dla WordPressa - historia prawdziwa - WordUp Warszawa
 
Wtyczkowe kompendium - WordUp Warszawa
Wtyczkowe kompendium - WordUp WarszawaWtyczkowe kompendium - WordUp Warszawa
Wtyczkowe kompendium - WordUp Warszawa
 

More from Grand Parade Poland

Making Games in WebGL - Aro Wierzbowski & Tomasz Szepczyński
Making Games in WebGL - Aro Wierzbowski & Tomasz SzepczyńskiMaking Games in WebGL - Aro Wierzbowski & Tomasz Szepczyński
Making Games in WebGL - Aro Wierzbowski & Tomasz Szepczyński
Grand Parade Poland
 
Mobile Team on Daily basis - Kamil Burczyk & Michał Ćwikliński (Mobiconf2017)
Mobile Team on Daily basis - Kamil Burczyk & Michał Ćwikliński (Mobiconf2017)Mobile Team on Daily basis - Kamil Burczyk & Michał Ćwikliński (Mobiconf2017)
Mobile Team on Daily basis - Kamil Burczyk & Michał Ćwikliński (Mobiconf2017)
Grand Parade Poland
 
Css encapsulation strategies | Marcin Mazurek
Css encapsulation strategies | Marcin MazurekCss encapsulation strategies | Marcin Mazurek
Css encapsulation strategies | Marcin Mazurek
Grand Parade Poland
 
Reason - introduction to language and its ecosystem | Łukasz Strączyński
Reason - introduction to language and its ecosystem | Łukasz StrączyńskiReason - introduction to language and its ecosystem | Łukasz Strączyński
Reason - introduction to language and its ecosystem | Łukasz Strączyński
Grand Parade Poland
 
Thinking in Graphs - GraphQL problems and more - Maciej Rybaniec (23.06.2017)
Thinking in Graphs - GraphQL problems and more - Maciej Rybaniec (23.06.2017)Thinking in Graphs - GraphQL problems and more - Maciej Rybaniec (23.06.2017)
Thinking in Graphs - GraphQL problems and more - Maciej Rybaniec (23.06.2017)
Grand Parade Poland
 
Introduction to React Native - Marcin Mazurek (09.06.2017)
Introduction to React Native - Marcin Mazurek (09.06.2017)Introduction to React Native - Marcin Mazurek (09.06.2017)
Introduction to React Native - Marcin Mazurek (09.06.2017)
Grand Parade Poland
 
Reactive Programming with RxJava
Reactive Programming with RxJavaReactive Programming with RxJava
Reactive Programming with RxJava
Grand Parade Poland
 
Pawel Cygal - SQL Injection and XSS - Basics (Quality Questions Conference)
Pawel Cygal - SQL Injection and XSS - Basics (Quality Questions Conference)Pawel Cygal - SQL Injection and XSS - Basics (Quality Questions Conference)
Pawel Cygal - SQL Injection and XSS - Basics (Quality Questions Conference)
Grand Parade Poland
 
Mateusz Gruszczynski - Performance tests in Gatling (Quality Questions Confer...
Mateusz Gruszczynski - Performance tests in Gatling (Quality Questions Confer...Mateusz Gruszczynski - Performance tests in Gatling (Quality Questions Confer...
Mateusz Gruszczynski - Performance tests in Gatling (Quality Questions Confer...
Grand Parade Poland
 
Krzysztof Skarbinski - Automated tests in Python (Quality Questions Conference)
Krzysztof Skarbinski - Automated tests in Python (Quality Questions Conference)Krzysztof Skarbinski - Automated tests in Python (Quality Questions Conference)
Krzysztof Skarbinski - Automated tests in Python (Quality Questions Conference)
Grand Parade Poland
 
Slawomir Kluz - ScalaTest from QA perspective (Quality Questions Conference)
Slawomir Kluz - ScalaTest from QA perspective (Quality Questions Conference)Slawomir Kluz - ScalaTest from QA perspective (Quality Questions Conference)
Slawomir Kluz - ScalaTest from QA perspective (Quality Questions Conference)
Grand Parade Poland
 
Steve Bond - Managing the Threats in Online Gaming (Quality Questions Confere...
Steve Bond - Managing the Threats in Online Gaming (Quality Questions Confere...Steve Bond - Managing the Threats in Online Gaming (Quality Questions Confere...
Steve Bond - Managing the Threats in Online Gaming (Quality Questions Confere...
Grand Parade Poland
 
React-redux server side rendering enchanted with varnish-cache for the fastes...
React-redux server side rendering enchanted with varnish-cache for the fastes...React-redux server side rendering enchanted with varnish-cache for the fastes...
React-redux server side rendering enchanted with varnish-cache for the fastes...
Grand Parade Poland
 

More from Grand Parade Poland (13)

Making Games in WebGL - Aro Wierzbowski & Tomasz Szepczyński
Making Games in WebGL - Aro Wierzbowski & Tomasz SzepczyńskiMaking Games in WebGL - Aro Wierzbowski & Tomasz Szepczyński
Making Games in WebGL - Aro Wierzbowski & Tomasz Szepczyński
 
Mobile Team on Daily basis - Kamil Burczyk & Michał Ćwikliński (Mobiconf2017)
Mobile Team on Daily basis - Kamil Burczyk & Michał Ćwikliński (Mobiconf2017)Mobile Team on Daily basis - Kamil Burczyk & Michał Ćwikliński (Mobiconf2017)
Mobile Team on Daily basis - Kamil Burczyk & Michał Ćwikliński (Mobiconf2017)
 
Css encapsulation strategies | Marcin Mazurek
Css encapsulation strategies | Marcin MazurekCss encapsulation strategies | Marcin Mazurek
Css encapsulation strategies | Marcin Mazurek
 
Reason - introduction to language and its ecosystem | Łukasz Strączyński
Reason - introduction to language and its ecosystem | Łukasz StrączyńskiReason - introduction to language and its ecosystem | Łukasz Strączyński
Reason - introduction to language and its ecosystem | Łukasz Strączyński
 
Thinking in Graphs - GraphQL problems and more - Maciej Rybaniec (23.06.2017)
Thinking in Graphs - GraphQL problems and more - Maciej Rybaniec (23.06.2017)Thinking in Graphs - GraphQL problems and more - Maciej Rybaniec (23.06.2017)
Thinking in Graphs - GraphQL problems and more - Maciej Rybaniec (23.06.2017)
 
Introduction to React Native - Marcin Mazurek (09.06.2017)
Introduction to React Native - Marcin Mazurek (09.06.2017)Introduction to React Native - Marcin Mazurek (09.06.2017)
Introduction to React Native - Marcin Mazurek (09.06.2017)
 
Reactive Programming with RxJava
Reactive Programming with RxJavaReactive Programming with RxJava
Reactive Programming with RxJava
 
Pawel Cygal - SQL Injection and XSS - Basics (Quality Questions Conference)
Pawel Cygal - SQL Injection and XSS - Basics (Quality Questions Conference)Pawel Cygal - SQL Injection and XSS - Basics (Quality Questions Conference)
Pawel Cygal - SQL Injection and XSS - Basics (Quality Questions Conference)
 
Mateusz Gruszczynski - Performance tests in Gatling (Quality Questions Confer...
Mateusz Gruszczynski - Performance tests in Gatling (Quality Questions Confer...Mateusz Gruszczynski - Performance tests in Gatling (Quality Questions Confer...
Mateusz Gruszczynski - Performance tests in Gatling (Quality Questions Confer...
 
Krzysztof Skarbinski - Automated tests in Python (Quality Questions Conference)
Krzysztof Skarbinski - Automated tests in Python (Quality Questions Conference)Krzysztof Skarbinski - Automated tests in Python (Quality Questions Conference)
Krzysztof Skarbinski - Automated tests in Python (Quality Questions Conference)
 
Slawomir Kluz - ScalaTest from QA perspective (Quality Questions Conference)
Slawomir Kluz - ScalaTest from QA perspective (Quality Questions Conference)Slawomir Kluz - ScalaTest from QA perspective (Quality Questions Conference)
Slawomir Kluz - ScalaTest from QA perspective (Quality Questions Conference)
 
Steve Bond - Managing the Threats in Online Gaming (Quality Questions Confere...
Steve Bond - Managing the Threats in Online Gaming (Quality Questions Confere...Steve Bond - Managing the Threats in Online Gaming (Quality Questions Confere...
Steve Bond - Managing the Threats in Online Gaming (Quality Questions Confere...
 
React-redux server side rendering enchanted with varnish-cache for the fastes...
React-redux server side rendering enchanted with varnish-cache for the fastes...React-redux server side rendering enchanted with varnish-cache for the fastes...
React-redux server side rendering enchanted with varnish-cache for the fastes...
 

Wielomilionowy Ruch na Wordpressie - Łukasz Wilczak & Piotr Federowicz (WordCamp Gdynia 2016)

  • 1. WIELOMILIONOWY RUCH NA WORDPRESSIE Lukasz Wilczak - DevLead Piotr Federowicz - Senior Software Developer
  • 2. Agenda /GrandParadePoland www.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. Varnish 9. Amazon Elasticache 10. Podsumowanie
  • 4. 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 /GrandParadePoland www.grandparade.co.uk
  • 5. 2.1 W czym problem? Wydajność WordPressa /GrandParadePoland www.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.
  • 6. /GrandParadePoland www.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.ph p [141] => wp-content/themes/twentysixteen/sidebar.php [142] => wp-content/themes/twentysixteen/footer.php
  • 7. 2.2 Baza danych i zapytania /GrandParadePoland www.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_date FROM wp_terms wt INNER JOIN wp_term_taxonomy wtt ON wt.term_id = wtt.term_id INNER JOIN wp_term_relationships wtr ON wtt.term_taxonomy_id = wtr.term_taxonomy_id INNER JOIN wp_posts p ON wtr.object_id = p.ID WHERE p.post_type = 'post'
  • 8. 2.3 Baza danych - liczby na przykładzie /GrandParadePoland www.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ę
  • 9. 2.3 Wydajność WordPressa - podsumowanie /GrandParadePoland www.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
  • 10. Grand Parade WP Hosting /GrandParadePoland www.grandparade.co.uk
  • 11. 3.1 Środowiska WordPress - Amazon EC2 /GrandParadePoland www.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)
  • 13. 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 /GrandParadePoland www.grandparade.co.uk
  • 14. 4.2 Środowiska WordPress - Loadbalancer /GrandParadePoland www.grandparade.co.uk Load Balancer Node 1 Node 2 Node 3 Node n-ty
  • 15. 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. /GrandParadePoland www.grandparade.co.uk
  • 16. 4.4 Środowiska WordPress - Loadbalancer a WP - Współdzielenie baz danych - RDS - Współdzielenie mediów- S3 /GrandParadePoland www.grandparade.co.uk
  • 17. 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. /GrandParadePoland www.grandparade.co.uk
  • 18. 4.6 Środowiska WordPress - RDS /GrandParadePoland www.grandparade.co.uk RDS (Amazon Relational Database Service)
  • 19. WordPress i Amazon S3 /GrandParadePoland www.grandparade.co.uk
  • 20. 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. /GrandParadePoland www.grandparade.co.uk
  • 21. 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. /GrandParadePoland www.grandparade.co.uk
  • 22. 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. /GrandParadePoland www.grandparade.co.uk
  • 23. 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. /GrandParadePoland www.grandparade.co.uk
  • 24. 5.5 Środowiska WordPress - Amazon S3 /GrandParadePoland www.grandparade.co.uk Amazon S3
  • 27. 6. Środowiska WordPress - deployment plików za pomocą Ansible AUTOMATYKA DLA KAŻDEGO Wdraż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 /GrandParadePoland www.grandparade.co.uk
  • 29. 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/ /GrandParadePoland www.grandparade.co.uk
  • 30. 7.1 CloudFront - integracja z WordPress - idealne rozwiązanie w określonych warunkach /GrandParadePoland www.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.
  • 31. 7.1 CloudFront - integracja z WordPress - idealne rozwiązanie w określonych warunkach /GrandParadePoland www.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.
  • 32. 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. /GrandParadePoland www.grandparade.co.uk (LB)
  • 33. 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 /GrandParadePoland www.grandparade.co.uk
  • 35. 8. Varnish Varnish 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). /GrandParadePoland www.grandparade.co.uk
  • 37. 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. /GrandParadePoland www.grandparade.co.uk
  • 38. 8.2 Redis - modułowy cache Implementacja Redis: --- functions.php /GrandParadePoland www.grandparade.co.uk include_once ABSPATH . '/Predis/Autoloader.php'; PredisAutoloader::register(); $HAClient = null; $HAClient = new PredisClient(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); } }
  • 40. 9. Amazon ElastiCache /GrandParadePoland www.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
  • 41. 10. Podsumowanie /GrandParadePoland www.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.