SlideShare una empresa de Scribd logo
1 de 52
Descargar para leer sin conexión
PyCon PL 2015: K. Łagowski, M. Wróbel "Kiedy ostatnio zrobiłeś coś dla 15 milionów ludzi?"
PyCon PL 2015: K. Łagowski, M. Wróbel "Kiedy ostatnio zrobiłeś coś dla 15 milionów ludzi?"
PyCon PL 2015: K. Łagowski, M. Wróbel "Kiedy ostatnio zrobiłeś coś dla 15 milionów ludzi?"
Pierwsza myśl
http://www.warbud.pl/pl/realizacje/d-313-serwerownia-onet-pl
Konkurs Budowa Roku http://www.inzynierbudownictwa.pl/images/magda/galerie/onet/onet5.JPG
Kolejna myśl
Synchroniczność?
Mark Harkin https://www.flickr.com/photos/41153475@N04/19843960018
Asynchroniczność?
Mark Harkin https://www.flickr.com/photos/41153475@N04/20037312081
Asynchroniczna praca?
www.flickr.com/photos/99731349@N07/16522410947
www.flickr.com/photos/99731349@N07/16522410947
Select
Poll
Epoll
http://www.intelliproject.net/articles/showArticle/index/io_multiplexing
Blokujące I/O
Aplikacja Kernel
I/O odczyt Zapytanie systemowe
Inicjalizacja
odczytu I/O
Odpowiedź
Transport danych z kernela do
aplikacji
Asynchroniczne I/O
Aplikacja Kernel
I/O odczyt Zapytanie systemowe
Inicjalizacja
odczytu I/O
Odpowiedź
Przekazanie danych do aplikacji
za pomocą callback
Zapytanie systemowe
Zapytanie systemowe
Zapytanie systemowe
Odpowiedź
Odpowiedź
MattysFlicks https://www.flickr.com/photos/68397968@N07/13555161843
Jak programować
asynchronicznie?
Kod synchroniczny
from urllib import request
def print_page_size(url='http://www.dreamlab.pl/'):
result = request.urlopen(url)
print('bytes=%s' % len(result.read()))
Kod asynchroniczny - callbacki
from tornado.httpclient import AsyncHTTPClient
def print_page_size(url='http://www.dreamlab.pl/'):
client = AsyncHTTPClient()
client.fetch(url, callback=done_callback)
def done_callback(result):
print('bytes=%s' % len(result.body))
Kod asynchroniczny - callbacki
event loop print_page_size
zlecenie I/O
inne
funkcje
done_callback
odpowiedź
I/O
wysłanie
I/O
coroutine
od 1963 roku
Kod asynchroniczny - coroutine
from tornado.gen import coroutine
from tornado.httpclient import AsyncHTTPClient
@coroutine
def print_page_size(url='http://www.dreamlab.pl/'):
client = AsyncHTTPClient()
result = yield client.fetch(url)
print('bytes=%s' % len(result.body))
Kod asynchroniczny - coroutine
event loop print_page_size
zlecenie I/O
inne
funkcje
odpowiedź
I/O
wysłanie
I/O
„I don't like callbacks much”
Guido van Rossum
callbackicoroutine
@tornado.asynchronous
def get(self, slug):
db.posts.find_one({'slug': slug}, callback=self._found_post)
def _found_post(self, post, error):
if error:
raise tornado.web.HTTPError(500, str(error))
elif not post:
raise tornado.web.HTTPError(404)
else:
_id = post['_id']
self.post = post
# Two queries in parallel.
# Find the previously published post.
db.posts.find_one(
{'pub_date': {'$lt': post['pub_date']}}
sort=[('pub_date', -1)],
callback=self._found_prev)
# Find subsequently published post.
db.posts.find_one(
{'pub_date': {'$gt': post['pub_date']}}
sort=[('pub_date', 1)],
callback=self._found_next)
def _found_prev(self, prev_post, error):
if error:
raise tornado.web.HTTPError(500, str(error))
else:
self.prev_post = prev_post
if self.next_post:
# Done
self._render()
def _found_next(self, next_post, error):
if error:
raise tornado.web.HTTPError(500, str(error))
else:
self.next_post = next_post
if self.prev_post:
# Done
self._render()
def _render(self)
self.render(
'post.html',
post=self.post,
prev_post=self.prev_post,
next_post=self.next_post)
@gen.coroutine
def get(self, slug):
post = yield db.posts.find_one({'slug': slug})
if not post:
raise tornado.web.HTTPError(404)
else:
future_0 = db.posts.find_one(
{'pub_date': {'$lt': post['pub_date']}}
sort=[('pub_date', -1)])
future_1 = db.posts.find_one(
{'pub_date': {'$gt': post['pub_date']}}
sort=[('pub_date', 1)])
prev_post, next_post = yield [future_0, future_1]
self.render(
'post.html',
post=post,
prev_post=prev_post,
next_post=next_post)
Źródło: http://emptysqua.re/blog/refactoring-tornado-coroutines/
Jakiego zestawu narzędzi użyć?
PyPy
The U.S. Army, https://www.flickr.com/photos/soldiersmediacenter/1902588273/ Licence at https://creativecommons.org/licenses/by/2.0/
CPython 2.7
Ian Armstrong, https://www.flickr.com/photos/ianz/14762094471/ Licence at https://creativecommons.org/licenses/by-sa/2.0/
CPython 3.x
David van der Mark, https://commons.wikimedia.org/wiki/File:Blue_Tesla_Model_S_Zoutelande_dunes_Holland.jpg Licence at https://creativecommons.org/licenses/by-sa/2.0/deed.en
Framework
asynchroniczny
twisted
dmytrok, https://www.flickr.com/photos/klimenko/4484977640/ Licence at https://creativecommons.org/licenses/by-nd/2.0/
asyncio
Christian Senger, https://www.flickr.com/photos/30928442@N08/5332775890/ License at https://creativecommons.org/licenses/by-sa/2.0/
gevent
http://www.commentsyard.com/gangsta-girl-swag/
tornado
Veronica538, https://commons.wikimedia.org/wiki/File:Truckdriver.jpg License at https://creativecommons.org/licenses/by-sa/3.0/deed.en
CPython 3.x
+
Tornado
ponad 200 aplikacji
ponad 800 instancji
Architektura
Architektura monolityczna
https://www.flickr.com/photos/grant_subaru/14385751972/in/photostream/Grant.C
Architektura mikroserwisów
Gil Abrantes https://commons.wikimedia.org/wiki/File:Catalunya_test_2011_-_36.jpg
Back-end
Front-end
Konfiguracja
profilu
Przetwarzanie
danych online
DB
Wysyłanie
powiadomień
System szablonów
Powiadomienia
HTML5
Uwierzytelnienie
Rejestracja
Przetwarzanie
danych offline
Konfiguracja
profilu
Uwierzytelnienie
Przetwarzanie
danych on-line
Online DB
Offline DB
Przetwarzanie
danych off-line
Wysyłanie
powiadomień
System
szablonów
Wysyłanie e-mail
Powiadomienia
przeglądarkowe
http://martinfowler.com/bliki/MicroservicePremium.htmlMartin Fowler
Mikroserwisy i
asynchroniczność
Jerry https://www.flickr.com/photos/78897321@N00/122866496
Konfiguracja
profilu
Uwierzytelnienie
Przetwarzanie
danych on-line
Online DB
Offline DB
Przetwarzanie
danych off-line
Wysyłanie
powiadomień
System
szablonów
Wysyłanie e-mail
Powiadomienia
przeglądarkowe
Jak to wszystko ogarnąć?
„When you use microservices you have to work on automated
deployment, monitoring, dealing with failure, eventual
consistency…”
Martin Fowler
PyCon PL 2015: K. Łagowski, M. Wróbel "Kiedy ostatnio zrobiłeś coś dla 15 milionów ludzi?"
Pytania?
PyCon PL 2015: K. Łagowski, M. Wróbel "Kiedy ostatnio zrobiłeś coś dla 15 milionów ludzi?"

Más contenido relacionado

Destacado

5 Public speaking tips from TED - Visualized summary
5 Public speaking tips from TED - Visualized summary5 Public speaking tips from TED - Visualized summary
5 Public speaking tips from TED - Visualized summarySpeakerHub
 
ChatGPT and the Future of Work - Clark Boyd
ChatGPT and the Future of Work - Clark Boyd ChatGPT and the Future of Work - Clark Boyd
ChatGPT and the Future of Work - Clark Boyd Clark Boyd
 
Getting into the tech field. what next
Getting into the tech field. what next Getting into the tech field. what next
Getting into the tech field. what next Tessa Mero
 
Google's Just Not That Into You: Understanding Core Updates & Search Intent
Google's Just Not That Into You: Understanding Core Updates & Search IntentGoogle's Just Not That Into You: Understanding Core Updates & Search Intent
Google's Just Not That Into You: Understanding Core Updates & Search IntentLily Ray
 
Time Management & Productivity - Best Practices
Time Management & Productivity -  Best PracticesTime Management & Productivity -  Best Practices
Time Management & Productivity - Best PracticesVit Horky
 
The six step guide to practical project management
The six step guide to practical project managementThe six step guide to practical project management
The six step guide to practical project managementMindGenius
 
Beginners Guide to TikTok for Search - Rachel Pearson - We are Tilt __ Bright...
Beginners Guide to TikTok for Search - Rachel Pearson - We are Tilt __ Bright...Beginners Guide to TikTok for Search - Rachel Pearson - We are Tilt __ Bright...
Beginners Guide to TikTok for Search - Rachel Pearson - We are Tilt __ Bright...RachelPearson36
 
Unlocking the Power of ChatGPT and AI in Testing - A Real-World Look, present...
Unlocking the Power of ChatGPT and AI in Testing - A Real-World Look, present...Unlocking the Power of ChatGPT and AI in Testing - A Real-World Look, present...
Unlocking the Power of ChatGPT and AI in Testing - A Real-World Look, present...Applitools
 
12 Ways to Increase Your Influence at Work
12 Ways to Increase Your Influence at Work12 Ways to Increase Your Influence at Work
12 Ways to Increase Your Influence at WorkGetSmarter
 
Ride the Storm: Navigating Through Unstable Periods / Katerina Rudko (Belka G...
Ride the Storm: Navigating Through Unstable Periods / Katerina Rudko (Belka G...Ride the Storm: Navigating Through Unstable Periods / Katerina Rudko (Belka G...
Ride the Storm: Navigating Through Unstable Periods / Katerina Rudko (Belka G...DevGAMM Conference
 
Barbie - Brand Strategy Presentation
Barbie - Brand Strategy PresentationBarbie - Brand Strategy Presentation
Barbie - Brand Strategy PresentationErica Santiago
 
Good Stuff Happens in 1:1 Meetings: Why you need them and how to do them well
Good Stuff Happens in 1:1 Meetings: Why you need them and how to do them wellGood Stuff Happens in 1:1 Meetings: Why you need them and how to do them well
Good Stuff Happens in 1:1 Meetings: Why you need them and how to do them wellSaba Software
 
Introduction to C Programming Language
Introduction to C Programming LanguageIntroduction to C Programming Language
Introduction to C Programming LanguageSimplilearn
 
The Pixar Way: 37 Quotes on Developing and Maintaining a Creative Company (fr...
The Pixar Way: 37 Quotes on Developing and Maintaining a Creative Company (fr...The Pixar Way: 37 Quotes on Developing and Maintaining a Creative Company (fr...
The Pixar Way: 37 Quotes on Developing and Maintaining a Creative Company (fr...Palo Alto Software
 
9 Tips for a Work-free Vacation
9 Tips for a Work-free Vacation9 Tips for a Work-free Vacation
9 Tips for a Work-free VacationWeekdone.com
 
I Rock Therefore I Am. 20 Legendary Quotes from Prince
I Rock Therefore I Am. 20 Legendary Quotes from PrinceI Rock Therefore I Am. 20 Legendary Quotes from Prince
I Rock Therefore I Am. 20 Legendary Quotes from PrinceEmpowered Presentations
 

Destacado (20)

5 Public speaking tips from TED - Visualized summary
5 Public speaking tips from TED - Visualized summary5 Public speaking tips from TED - Visualized summary
5 Public speaking tips from TED - Visualized summary
 
ChatGPT and the Future of Work - Clark Boyd
ChatGPT and the Future of Work - Clark Boyd ChatGPT and the Future of Work - Clark Boyd
ChatGPT and the Future of Work - Clark Boyd
 
Getting into the tech field. what next
Getting into the tech field. what next Getting into the tech field. what next
Getting into the tech field. what next
 
Google's Just Not That Into You: Understanding Core Updates & Search Intent
Google's Just Not That Into You: Understanding Core Updates & Search IntentGoogle's Just Not That Into You: Understanding Core Updates & Search Intent
Google's Just Not That Into You: Understanding Core Updates & Search Intent
 
How to have difficult conversations
How to have difficult conversations How to have difficult conversations
How to have difficult conversations
 
Introduction to Data Science
Introduction to Data ScienceIntroduction to Data Science
Introduction to Data Science
 
Time Management & Productivity - Best Practices
Time Management & Productivity -  Best PracticesTime Management & Productivity -  Best Practices
Time Management & Productivity - Best Practices
 
The six step guide to practical project management
The six step guide to practical project managementThe six step guide to practical project management
The six step guide to practical project management
 
Beginners Guide to TikTok for Search - Rachel Pearson - We are Tilt __ Bright...
Beginners Guide to TikTok for Search - Rachel Pearson - We are Tilt __ Bright...Beginners Guide to TikTok for Search - Rachel Pearson - We are Tilt __ Bright...
Beginners Guide to TikTok for Search - Rachel Pearson - We are Tilt __ Bright...
 
Unlocking the Power of ChatGPT and AI in Testing - A Real-World Look, present...
Unlocking the Power of ChatGPT and AI in Testing - A Real-World Look, present...Unlocking the Power of ChatGPT and AI in Testing - A Real-World Look, present...
Unlocking the Power of ChatGPT and AI in Testing - A Real-World Look, present...
 
12 Ways to Increase Your Influence at Work
12 Ways to Increase Your Influence at Work12 Ways to Increase Your Influence at Work
12 Ways to Increase Your Influence at Work
 
ChatGPT webinar slides
ChatGPT webinar slidesChatGPT webinar slides
ChatGPT webinar slides
 
More than Just Lines on a Map: Best Practices for U.S Bike Routes
More than Just Lines on a Map: Best Practices for U.S Bike RoutesMore than Just Lines on a Map: Best Practices for U.S Bike Routes
More than Just Lines on a Map: Best Practices for U.S Bike Routes
 
Ride the Storm: Navigating Through Unstable Periods / Katerina Rudko (Belka G...
Ride the Storm: Navigating Through Unstable Periods / Katerina Rudko (Belka G...Ride the Storm: Navigating Through Unstable Periods / Katerina Rudko (Belka G...
Ride the Storm: Navigating Through Unstable Periods / Katerina Rudko (Belka G...
 
Barbie - Brand Strategy Presentation
Barbie - Brand Strategy PresentationBarbie - Brand Strategy Presentation
Barbie - Brand Strategy Presentation
 
Good Stuff Happens in 1:1 Meetings: Why you need them and how to do them well
Good Stuff Happens in 1:1 Meetings: Why you need them and how to do them wellGood Stuff Happens in 1:1 Meetings: Why you need them and how to do them well
Good Stuff Happens in 1:1 Meetings: Why you need them and how to do them well
 
Introduction to C Programming Language
Introduction to C Programming LanguageIntroduction to C Programming Language
Introduction to C Programming Language
 
The Pixar Way: 37 Quotes on Developing and Maintaining a Creative Company (fr...
The Pixar Way: 37 Quotes on Developing and Maintaining a Creative Company (fr...The Pixar Way: 37 Quotes on Developing and Maintaining a Creative Company (fr...
The Pixar Way: 37 Quotes on Developing and Maintaining a Creative Company (fr...
 
9 Tips for a Work-free Vacation
9 Tips for a Work-free Vacation9 Tips for a Work-free Vacation
9 Tips for a Work-free Vacation
 
I Rock Therefore I Am. 20 Legendary Quotes from Prince
I Rock Therefore I Am. 20 Legendary Quotes from PrinceI Rock Therefore I Am. 20 Legendary Quotes from Prince
I Rock Therefore I Am. 20 Legendary Quotes from Prince
 

PyCon PL 2015: K. Łagowski, M. Wróbel "Kiedy ostatnio zrobiłeś coś dla 15 milionów ludzi?"

Notas del editor

  1. Przedstawienie się Dzisiaj chcieliśmy Wam powiedzieć kiedy ostatnio zrobiliśmy system dla 15 mln ludzi. Przedstawimy Wam różne pomysły na asynchroniczna budowanie wydajnych systemów obsługujących miliony użytkowników. Pokażemy na czym polega praca systemu, jakich narzędzi użyć, żeby móc wygodnie programować asynchronicznie. Po czym przejdziemy do budowania architektury wysoko wydajnych i stabilnych systemów.
  2. Z czym się nam kojarzy wysokowydajny system:
  3. Nasza serwerownia Duży koszt
  4. Jeżeli nie skalowanie serwerami to może zwiększenie wydajności samej aplikacji, ale jak to zrobić, zanim powiem jak to zrobić wyjaśnijmy sobie pojęcia.
  5. Znaczenie słowa asynchronczność: arytmiczny, nie zbiegający się w czasie, niejednoczesny, niemiarowy, nieregularny, nierównoczesny,niewspółczesny Synchroniczny: jednoczesny, koincydencyjny, paralelny, równoczesny, równoległy, symultaniczny, współrzędny,zsynchronizowany,
  6. Ma przyszłość Koszty na końcu
  7. Ma przyszłość Koszty na końcu
  8. Ma przyszłość Koszty na końcu
  9. Ma przyszłość Koszty na końcu
  10. Asynchroniczność – pierwszy krok do tworzenia systemu dla milionów ludzi. Co nam daje asynchroniczność?
  11. Co przedstawia ten wykres Skąd pochodzi Tabela w bazie danych
  12. Wiemy już na pewno, że asynchroniczność ma moc, że duża liczba zdarzeń wykonywana asynchronicznie ma większą wydajność niż zdarzenia synchroniczne. Wiemy, że mechanik pracujący asynchronicznie jest w stanie wykonać większą liczbę zadań. Czemu widzimy takie memy w internecie?
  13. Często słyszymy, że programowanie asynchroniczne jest chaotyczne. Często programowanie asynchroniczne postrzegane jest jako trudne, bałaganiarskie. Jak wcześniej Mam nadzieję, że wytłumaczyłem na czym polega asynchroniczne praca mechanika jak i systemu operacyjengo. Przedstawiłem same zalety asynchroniczności, ale w życiu zawsze jest trudniej. Programowanie asynchroniczne jest na pewno trudniejsze od tradycyjnego programowania. Jednak są metody jak sobie życie uprościć i pomoże nam w tym kolega Marcin:
  14. chcemy 100req/s gdy usługa zależna ma 0.1 – 1 s. wiemy jak ma działać - jak ma wyglądać kod?
  15. najpierw sync co robi, to co przeglądarka synchronicznie, jak django jaką ma wydajność/przepustowość? gdzie jest blokowanie?
  16. tornado rozdzielamy funkcje na kawałki do klienta HTTP callback co wywoła callback? pętla zdarzeń a co gdy wyjątek
  17. jak wykonuje się callback? mamy event loop, ioloop, pętle zdarzeń funkcja done_callback niezależnie a co gdy print_page_size długo oblicza? jest jakaś alternatywa?
  18. co termin znaczy zatrzymanie i wznowienie w niektórych punktach w literaturze już od 1963, ale na asemblerze twisted (inlineDefer) od lipca 2011 asyncio(tulip) od grudnia 2012 w tornado od marca 2013
  19. coroutine w tornado, podobne do asyncio struktura jak kod synchroniczny dodany dekorator funkcję (coroutine) asynch zwraca future trzeba użyć yield aby poczekać async na zakończenie - właściwość generatorów do wznawiania wykorzystana - wyjątki - przerwanie tylko w miejscach wyznaczonych przez programistę
  20. coroutine wstrzymane yield może zwrócić wyjątek lub wynik co jest lepsze?
  21. - co Guido ma do powiedzenia? jak jeszcze ktoś nie widział prezentacji o asyncio to warto coroutine i callback jak python i perl, te same osiągnięcia
  22. coś bardziej skomplikowanego nie próbujcie przeczytać wady i zalety trochę wolniejsze, narzut CPU, rzędu kilka procent coroutine czytelniejsze, zachowana struktura, prościej przy błędach brak spagetti ktoś nie przekonany, żeby nie używać callbacków, mam argument
  23. Jacka, Stefan to teraz zaprogramuj, ale czego użyć? musimy wybrać framework, wersja pythona też kluczowa firma stanęła przed tym wyborem 2 lata temu, potrzeby: HTTP jak byście podeszli? przegląd zacznijmy od pythona
  24. dragster, szybki na prostej w zakrętach gorzej, opony, serwis jedziesz a czasem wybucha jaka byłaby to implementacja? CPU, IO, biblioteki bindingi C, SegFault 600 conc, nie wiemy
  25. sprawdzony, stabilny, serwis, stacja paliw rozwoj? async? jest coś lepszego?
  26. elektryczny Tesla prostsza konstrukcja, twórca mówi że to przyszłość, wielu nawet się zgadza, ale mało korzysta wyższy koszt wejścia, mniej kompatybilnych stacji ładowania uporządkowanie języka i stdlib, stringi i byte, rozwój wspiera async, yield from, return in generator kompatybilność, już w 2013 ponad 50% lib wspierało
  27. zasadnicza cześć framework odpowiada za komunikację z sys ioloop i styl programowania
  28. solidny Pan Li, lata doświadczeń, tylko nie mówimy w jego języku, mówi po kantońsku a my po mandaryńsku takie wrażenie sprawiał twisted solidny framework, dowolny protokół, raczej niższy poziom, trudniej, choć podobne inlineCalbacks ~ coroutine nie wspierał py3 w 2013 a może jest coś bardziej nowoczesnego?
  29. dziecko Guida od py3.3 jako asyncio, std 3.4 fajny, uproszczony model programowania ale projekt dość młody, biblioteki - a może inny framework w którym łatwo się programuje?
  30. gevent załatwi sprawę szybko i sprawnie, kod bez zmian jak to robi? niezbyt legalnie, monkey patching 2 lata temu wyciek pamięci RAM, niestabilny, bez py3
  31. framework do long polingu sprawdzony przez nas, stabilny, profesjonalny, dowozi Facebook przejął firmę która napisała ciągły rozwój wspiera coroutine i py3 - wady: lib połączeniowe - co byście wybrali?
  32. do HTTP wybraliśmy py3 i tornado dlaczego zalety coroutine, stabilność zaleta/wada biblioteki, dla nas wystarczyło rozwój niedługo wyjdzie py3.5 z nowymi słowami kluczowymi co mogę powiedzieć po 2 latach korzystania?
  33. - sprawdza się mamy aplikacje nie ugrzęźlismy w starej technologii liczba bibliotek do py3 znacznie się powiększyła, zapewniliśmy sobie narzędzia do robienie 50-500req/s z procesu a jak teraz zbudować coś więcej?
  34. Kolejny krok do systemu dla milionów ludzi Dobra architektura Wiemy już jak działają asynchroniczne zapytania na poziomie systemu operacyjnego, wiemy jakich narzędzi użyć, żeby programować asynchronicznie. Czyli asynchroniczne aplikacje są dużym krokiem ku systemowi dla wielu milionów użytkowników. Żeby cały system dobrze działał potrzebna jest przemyślana architektura. Jakiego typu architektury użyć?
  35. Jeden komponent Brak widocznych modułów Problem z udoskonaleniem Problem z wymianą
  36. Łatwa rozbudowa Możliwość szybkiej wymiany Łatwa rozbudowa funkcjonalności
  37. System powiadomień składa się z odrębnych produktów - System podzielony na mikroserwisy każdy produkt ma właściciela każdy produkt może być dowolnie skalowany
  38. System powiadomień składa się z odrębnych produktów - System podzielony na mikroserwisy każdy produkt ma właściciela każdy produkt może być dowolnie skalowany
  39. Jaki wpływ na produktywność systemu ma jego złożoność i jak produktywność zmienia wraz ze złożonością przy Microserwisach i systemach Monolitycznych
  40. Mamy wydajny system ale jak zwiększyć stabilność
  41. Powiedzieliśmy już sobie że asynchroniczność na poziomie aplikacji zwiększa wydajność, że architektura mikroserwisów ułatwia nam systemu. Pokazalismy też że asynchroniczność na poziomie architektury zapewnia nam stabilność działania systemu. Wiemy też jakich narzędzi użyć żeby łatwiej utrzymywać systemy złożone z wielu komponentów. My taką drogą poszliśmy co pozwala nam budować takie portale jak.