Programowanie i wdrażanie aplikacji sieciowych w języku Python Politechnika Lubelska Wydział Elektrotechniki i Informatyki czerwiec 2010
Plan prezentacji 1 O pracy Cel pracy Plan pracy 2 Wykorzystane technologie Język Python Framework Django Baza CouchDB 3 Aplikacje sieciowe Rozwój Aplikacja internetowa Sieć powiązań Web API 4 Przykładowa aplikacja: MMDA Architektura i działanie Wdrożenie 5 Podsumowanie
Cel pracy 1 Przedstawienie języka Python oraz wybranych, pokrewnych technologii jako wydajnego, darmowego i otwartego środowiska do tworzenia aplikacji sieciowych. 2 Zapoznanie czytelnika ze środowiskiem programistycznym przy pomocy konkretnych przykładów. 3 Utworzenie i wdrożenie aplikacji demonstrującej omawiane zagadnienia.
Plan pracy Rozdział 1. Wstęp Rozdział 2. Aplikacje sieciowe Rozdział 3. Elementy Django oraz CouchDB Rozdział 4. Wybrane API oraz biblioteki Rozdział 5. Przykładowa aplikacja: MMDA Rozdział 6. Wdrożenie aplikacji Rozdział 7. Podsumowanie
Język Python Wieloparadygmatowy język ogólnego użytku stawiający na oszczędną składnię i czytelny kod. Cechy dojrzały i sprawdzony, prosta, przejrzysta i czytelna składnia, wspiera programowanie obiektowe, strukturalne i funkcyjne, interpretowany (+tryb interaktywny), dynamiczny system typów, automatyczne zarządzanie pamięcią, bogaty wybór otwartych bibliotek.
Framework Django Napisany w Pythonie szkielet wysokiego poziomu, służący do tworzenia aplikacji internetowych. Cechy projekt jest zwykłym pakietem języka Python, budowa aplikacji w oparciu o zasoby URI, własny język szablonów, elastyczny system cache, modularność, batteries included.
Baza CouchDB Baza danych zorientowana na dokumenty. Alternatywa dla baz relacyjnych. Cechy wykorzystanie istniejących standardów (HTTP, JSON), wysoka współbieżność (brak blokad), dynamiczna struktura dokumentów (brak schematu), odporność na awarie, B-drzewa jako wewnętrzna struktura danych, dwukierunkowa replikacja.
Przejrzyste środowisko programistyczne Praca na dokumentach bazy danych w sposób naturalny dla podstawowych struktur języka. Czytelny kod, elastyczne struktury danych a r t i s t = C a c h e d A r t i s t. g e t o r c r e a t e ( i d ) i f name not i n a r t i s t : a r t i s t. name = Tool a r t i s t [ type ] = group a r t i s t. d a t e s = { from : 1999 } a r t i s t. save ( )
Dwie ważne zmiany ostatniej dekady 1. treść statyczna dynamiczna 2. aplikacja natywna internetowa
Internet jako otwarta baza danych MySpace Wrapper Musicbrainz Surge LIBRIS Radio Audio- Scrobbler QDOS ECS Southampton Doapspace Sem- Web- Central Flickr exporter Wikicompany Semantic Web.org RDF ohloh Budapest SW BME Conference Corpus Resex IRIT Toulouse Eurécom ReSIST Project Wiki BBC Playcount Jamendo Data Pub Guide BBC Programm es riese Gov- Track US Census Data Open Cyc BBC BBC Later + John TOTP Peel Geonames World Factbook Magnatune W3C WordNet UMBEL Yago Daily Med Pub Homolo Chem Gene RAE National Crunch FOAF 2001 Science SIOC Revyu ACM Base Foundation profiles Sites Open- Guides DBLP Project flickr RKB Eurostat Virtuoso Gutenberg Pisa CORDIS wrappr Explorer Sponger eprints Open Calais RKB Linked ECS MDB IEEE Newcastle Southampton RDF Book DBpedia Mashup lingvoj Freebase CiteSeer LAAS- CNRS DBLP IBM Hannover UniRef GEO Species DBLP Berlin Reactome LinkedCT UniParc Taxonomy Drug PROSITE Bank GeneID KEGG UniProt Symbol Diseasome CAS OMIM ChEBI Gene Ontology Pfam ProDom UniSTS HGNC MGI PubMed Inter Pro PDB As of March 2009 Źródło: http://richard.cyganiak.de/2007/10/lod/
Czym jest Web API? Interfejs komunikacji gwarantujący: stabilność oraz niezmienność, semantyczną reprezentację danych, przejrzystość (dokumentacja), interoperacyjność. Najczęściej spotykane metodyki SOAP komunikacja przy użyciu zapytań XML-SOAP REST wywoływanie zasobów identyfikowanych przez URI
MMDA: agregacja i buforowanie treści aplikacja MMDA odpowiedź zewnętrznego API moduł engine.* cache (CouchDB) moduł *.views wygenerowana odpowiedź Źródło: opracowanie własne
Przykład: profil artysty MusicBrainz (artist, release groups) 1 DBpedia (abstract) BBC (abstract) 2 3 4 moduł engine.artist aplikacja MMDA cache (CouchDB) moduł artists.views wygenerowana odpowiedź Last.fm (tags, abstract, pictures, similar) Źródło: opracowanie własne
Prezentacja treści: profil artysty Źródło: http://music.local/artist/chuan-jing-xian-ci/c50e52e1-01f4-494d-b1ef-376fe3581d90/
Wdrożenie: Nginx + Gunicorn + Memcached zapytanie o dany URI serwer WWW memcached django aplikacja MMDA gunicorn (worker #2) nginx odpowiedź HTML gunicorn (worker #1) Źródło: opracowanie własne
Wdrożenie: wzrost wydajności Test: obciążenie danego zasobu Pula 1000 żądań przy zachowaniu 100 równoczesnych połączeń. Średnia ilość obsłużonych żądań na sekundę: 3x Gunicorn: 2,55 3,33 3x Gunicorn + Memcached: 3,33 29,17 Memcached: 3,33 709,11
Podsumowanie i wnioski 1 Praca realizuje postawione cele. 2 Umożliwia zapoznanie się z wiedzą teoretyczną popartą praktycznymi przykładami. 3 Opisane rozwiązania i narzędzia stanowią łatwe, szybkie, spójne i czytelne środowisko programistyczne. 4 Architektura wdrożenia ma istotny wpływ na wybrane aspekty wydajności aplikacji.
Koniec Dziękuję za uwagę.