architektura systemów webowychfc.put.poznan.pl/materials/139-architektura-wikii.pdf ·...

26

Upload: others

Post on 22-May-2020

5 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Architektura systemów webowychfc.put.poznan.pl/materials/139-architektura-wikii.pdf · Architektura systemów webowych wysokiej przepustowości. Agenda ... Android + iOS Users API:
Page 2: Architektura systemów webowychfc.put.poznan.pl/materials/139-architektura-wikii.pdf · Architektura systemów webowych wysokiej przepustowości. Agenda ... Android + iOS Users API:

na przykładzie Wikia

Architektura systemów webowych wysokiej przepustowości

Page 3: Architektura systemów webowychfc.put.poznan.pl/materials/139-architektura-wikii.pdf · Architektura systemów webowych wysokiej przepustowości. Agenda ... Android + iOS Users API:

Agenda● Czym jest Fandom powered by Wikia● Ogólny zarys architektury - warstwy systemu● Ścieżka obsługi przykładowego żądania● Monolit vs Mikroserwisy● Omówienie wybranych komponentów

○ Mesos oraz Consul○ Stos ELK○ Monitorowanie wydajności○ Alerting

● Proces zmiany kodu i wydania wersji○ Continuous Integration & Deployment

Page 4: Architektura systemów webowychfc.put.poznan.pl/materials/139-architektura-wikii.pdf · Architektura systemów webowych wysokiej przepustowości. Agenda ... Android + iOS Users API:
Page 5: Architektura systemów webowychfc.put.poznan.pl/materials/139-architektura-wikii.pdf · Architektura systemów webowych wysokiej przepustowości. Agenda ... Android + iOS Users API:
Page 6: Architektura systemów webowychfc.put.poznan.pl/materials/139-architektura-wikii.pdf · Architektura systemów webowych wysokiej przepustowości. Agenda ... Android + iOS Users API:

17

1Jesteśmy największą na świecie bazą artykułów o grach video

4Czwarci pod względem odwiedzin z urządzeń mobilnych

jesteśmy 17-stą najczęściej odwiedzaną stroną w USA

Page 7: Architektura systemów webowychfc.put.poznan.pl/materials/139-architektura-wikii.pdf · Architektura systemów webowych wysokiej przepustowości. Agenda ... Android + iOS Users API:

Ogólny zarys architektury

San JoseMain Data Center

RestonBackup Data Center

FastlyContent Delivery Network

Desktop Web UsersStatic HTML+JS

Mobile Web UsersSPA - JS

Android + iOS UsersAPI: HTML+JS

Page 8: Architektura systemów webowychfc.put.poznan.pl/materials/139-architektura-wikii.pdf · Architektura systemów webowych wysokiej przepustowości. Agenda ... Android + iOS Users API:

San Jose Data Center

BorderVarnish - Load Balancer

API GatewayNginx

HeliosOAuthGolang

New Microservice Stack (głównie Java)Np. services.wikia.com/discussions

API

MediaWiki Stack (głównie PHP)Np. fallout.wikia.com

HTML + API

MediaWikiApache + PHP

80 Servers

MySQLMaster + Slave

10 Clusters, 4 Servers per cluster

ConsulService

DiscoveryMesos + Marathon

Container Orchestration4 Servers

... ...

Service X

Page 9: Architektura systemów webowychfc.put.poznan.pl/materials/139-architektura-wikii.pdf · Architektura systemów webowych wysokiej przepustowości. Agenda ... Android + iOS Users API:

Ścieżka obsługi przykładowego żądaniahttp://www.fallout.wikia.com

● Fastly CDN Edge - zwróć z pamięci podręcznej, jeśli istnieje● Fastly CDN Shield - zwróć z pamięci podręcznej, jeśli istnieje● Wikia Border (load balancer) - wybierz jeden z serwerów apache z puli● Apache+PHP - generuj HTML

○ Pobierz zawartość artykułu z bazy■ Sprawdź czy wynik zapytania jest w memcached, jeśli tak zwróć■ Znajdź cluster z bazą danych i wyszuk hosta “slave” z bazą■ Pobierz dane z bazy i zaktualizuj pamięć podręczną w memcached

○ Pobierz inne dane konieczne do generowania artykułu z mikroserwisów○ Zapisz logi oraz dane o wydajności w Elasticsearch’u oraz InfluxDB

● Zapisz wynik w pamięci podręczne Fastly (Shield + Edge) oraz zwróć wynik użytkownikowi

● Przez JavaScript pobierz reklamy od zewnętrznych partnerów● Pobierz obrazki (optymalizacja formatów np. WebP)

Page 10: Architektura systemów webowychfc.put.poznan.pl/materials/139-architektura-wikii.pdf · Architektura systemów webowych wysokiej przepustowości. Agenda ... Android + iOS Users API:

Monolit vs Mikroserwisy● Monolit

○ Nasz ma 4 miliony linii kodu○ Problemy

■ Trudność w zarządzaniu i rozwijaniu■ Liczba powiązań wewnętrznych modułów

● Mikroserwisy○ Domain Driven Design○ Zoptymalizowane pod zastąpienie a nie pod ponowne użycie (replace v. reuse)

- można napisać od zera w tydzień○ Autonomiczne zespoły odpowiedzialne za cały cykl życia serwisu○ Skalowalność○ Chmura, większa elastyczność w użyciu sprzętu

Page 11: Architektura systemów webowychfc.put.poznan.pl/materials/139-architektura-wikii.pdf · Architektura systemów webowych wysokiej przepustowości. Agenda ... Android + iOS Users API:

https://mesosphere.com/

Zalety dynamicznego zarządzania usługami i użycia kontenerów● Łatwiejsze i szybsze skalowanie - brak konieczności fizycznego konfigurowania serwerów pod

konkretne usługi. Łatwiejsze uruchomienie nowych usług przez programistów, bez interakcji z administratorami systemu.

● Możliwość automatycznego skalowania usług w zależności od ruchu w danym momencie● Kontrola zdrowia usług, możliwość automatycznego zrestartowania (fault recovery)● Bardziej efektywne wykorzystanie fizycznych zasobów i tym samym obniżenie kosztów● Możliwość użycia dostępnych w internecie kontenerów z komponentami np. Bazami danych

Page 12: Architektura systemów webowychfc.put.poznan.pl/materials/139-architektura-wikii.pdf · Architektura systemów webowych wysokiej przepustowości. Agenda ... Android + iOS Users API:
Page 13: Architektura systemów webowychfc.put.poznan.pl/materials/139-architektura-wikii.pdf · Architektura systemów webowych wysokiej przepustowości. Agenda ... Android + iOS Users API:

https://www.consul.io/

● Service Discovery○ API○ DNS

● Zarządzanie konfiguracją

Page 14: Architektura systemów webowychfc.put.poznan.pl/materials/139-architektura-wikii.pdf · Architektura systemów webowych wysokiej przepustowości. Agenda ... Android + iOS Users API:

Zarządzanie Logami● ElasticSearch - Document Storage

○ Zoptymalizowane pod wyszukiwanie tekstu○ Brak sztywnej struktury○ Shardowanie i sterowanie retencją danych

● Logstash○ Zbiera Logi i zapisuje do ElasticSearch

● Kibana - UI Napisany w JavaScript

Logi - Stos ELK

Page 15: Architektura systemów webowychfc.put.poznan.pl/materials/139-architektura-wikii.pdf · Architektura systemów webowych wysokiej przepustowości. Agenda ... Android + iOS Users API:
Page 16: Architektura systemów webowychfc.put.poznan.pl/materials/139-architektura-wikii.pdf · Architektura systemów webowych wysokiej przepustowości. Agenda ... Android + iOS Users API:

Monitorowanie wydajnościDlaczego wydajność jest ważna?

Różne obszary pomiaru● Frontend● Backend

○ Poziom aplikacji○ Baza danych

● A/B Testy

Page 17: Architektura systemów webowychfc.put.poznan.pl/materials/139-architektura-wikii.pdf · Architektura systemów webowych wysokiej przepustowości. Agenda ... Android + iOS Users API:
Page 18: Architektura systemów webowychfc.put.poznan.pl/materials/139-architektura-wikii.pdf · Architektura systemów webowych wysokiej przepustowości. Agenda ... Android + iOS Users API:
Page 19: Architektura systemów webowychfc.put.poznan.pl/materials/139-architektura-wikii.pdf · Architektura systemów webowych wysokiej przepustowości. Agenda ... Android + iOS Users API:

Alerting● Kapacitor● PagerDuty

Page 20: Architektura systemów webowychfc.put.poznan.pl/materials/139-architektura-wikii.pdf · Architektura systemów webowych wysokiej przepustowości. Agenda ... Android + iOS Users API:

27 unikalnych serwisów, większość w więcej niż jednej instancji

Page 21: Architektura systemów webowychfc.put.poznan.pl/materials/139-architektura-wikii.pdf · Architektura systemów webowych wysokiej przepustowości. Agenda ... Android + iOS Users API:

50 percentyl czasu odpowiedzi

Page 22: Architektura systemów webowychfc.put.poznan.pl/materials/139-architektura-wikii.pdf · Architektura systemów webowych wysokiej przepustowości. Agenda ... Android + iOS Users API:

Proces zmiany kodu i wydania wersji● Jira - Tickety● Github - kontrola wersji kodu

○ Pull Request - code review● TDD - testy jednostkowe, integracyjne oraz Selenium● Jenkins

○ SonarQube - statyczna analiza kodu○ Ponowne uruchomienie testów

● Deployment○ Manualny○ Cykliczny○ Continuous Deployment

Page 23: Architektura systemów webowychfc.put.poznan.pl/materials/139-architektura-wikii.pdf · Architektura systemów webowych wysokiej przepustowości. Agenda ... Android + iOS Users API:
Page 24: Architektura systemów webowychfc.put.poznan.pl/materials/139-architektura-wikii.pdf · Architektura systemów webowych wysokiej przepustowości. Agenda ... Android + iOS Users API:
Page 25: Architektura systemów webowychfc.put.poznan.pl/materials/139-architektura-wikii.pdf · Architektura systemów webowych wysokiej przepustowości. Agenda ... Android + iOS Users API:

Pytania?

Page 26: Architektura systemów webowychfc.put.poznan.pl/materials/139-architektura-wikii.pdf · Architektura systemów webowych wysokiej przepustowości. Agenda ... Android + iOS Users API:

Thank you!