E-book details

Google App Engine. Tworzenie wydajnych aplikacji w Javie

Google App Engine. Tworzenie wydajnych aplikacji w Javie

Adriaan de Jonge

Ebook

Od projektu do wdrożenia!

Google App Engine to idealny przykład usługi PaaS (ang. Platform as a Service). W tym modelu płaci się wyłącznie za wykorzystane zasoby dostawcy. Pozwala to na budowanie niezwykle elastycznych rozwiązań informatycznych. Jednak największą zaletą z perspektywy użytkownika tego rozwiązania jest brak konieczności utrzymywania własnej infrastruktury. Niezależnie od sytuacji, będziesz zawsze przygotowany na obsłużenie dowolnie dużego ruchu, a to naprawdę się opłaca!

Dzięki tej książce błyskawicznie rozpoczniesz przygodę z platformą Google App Engine. Autor pokaże Ci, jak szybko tworzyć złożone i wydajne aplikacje w chmurze Google. Zaprezentuje przełomowe techniki, pozwalające na skonstruowanie aplikacji, które są w stanie odpowiedzieć na żądanie w ciągu dwóch sekund przy tzw. zimnym uruchomieniu i w ciągu co najwyżej setek milisekund podczas normalnego działania w pozostałej części sesji. W trakcie lektury dowiesz się, jak uniknąć najczęstszych błędów, które dramatycznie pogarszają wydajność i skalowalność aplikacji w chmurze, oraz poznasz najświeższe technologie do tworzenia interfejsów użytkownika. Proces powstawania aplikacji omówiony został od podstaw - od projektowania i modelowania danych, przez bezpieczeństwo i testowanie, aż po wdrożenie.

Po lekturze tej książki:

  • swobodnie zainstalujesz aplikację na platformie Google App Engine
  • skorzystasz z dodatkowych możliwości platformy
  • będziesz przechowywać dane w Datastore’ach
  • stworzysz w pełni bezpieczne rozwiązanie
  • zagwarantujesz Twojej aplikacji najlepszą infrastrukturę!

Zagwarantuj najlepszą wydajność Twojej aplikacji w każdych warunkach!

Wprowadzenie (13)

Podziękowania (21)

O autorze (23)

I Wprowadzenie do App Engine (25)

1. Konfiguracja środowiska (27)

  • Praca z Eclipse (27)
    • Instalacja wtyczek Eclipse (28)
    • Utworzenie nowego projektu App Engine (31)
    • Uruchomienie serwera roboczego (33)
    • Wdrożenie aplikacji na serwerach Google (36)
  • Wdrażanie z linii poleceń (39)
    • Uruchamianie serwera roboczego z linii poleceń (40)
    • Wdrażanie aplikacji App Engine z linii poleceń (40)
  • Podsumowanie (40)

2. Wydajność w środowisku App Engine (41)

  • Wydajność w chmurze (41)
    • Porównanie App Engine z tradycyjnymi aplikacjami internetowymi (42)
    • Optymalizacja kosztów zasobów (42)
  • Pomiar kosztów ładowania klas (42)
    • Czas uruchomienia serwletu zawierającego zewnętrzną bibliotekę (43)
    • Czas uruchomienia serwletu niezawierającego zewnętrznej biblioteki (44)
    • Zmniejszenie objętości pliku web.xml (45)
  • Unikanie zimnych uruchomień (47)
    • Rezerwacja stale czynnych instancji (47)
    • Wstępne ładowanie klas przy użyciu żądań rozgrzewających (48)
    • Obsługa współbieżnych żądań w sposób bezpieczny dla wątków (48)
    • Obsługa żądań wymagających dużej ilości pamięci za pomocą instancji typu backend (48)
  • Ogólna poprawa wydajności (49)
    • Optymalizacja modelu danych pod kątem wydajności (49)
    • Unikanie nadmiarowych obliczeń przy użyciu cache (49)
    • Odraczanie długotrwałych zadań za pomocą kolejki zadań (49)
    • Poprawa szybkości ładowania stron w przeglądarce (50)
    • Asynchroniczne API (50)
    • Optymalizacja aplikacji przed jej wdrożeniem (50)
  • Podsumowanie (51)

II Podstawy projektowania aplikacji (53)

3. Anatomia aplikacji Google App Engine (55)

  • Przesyłanie plików w celu wykonania dynamicznego wdrożenia (55)
  • Struktura katalogów (56)
    • Ustawianie parametrów wdrożenia (58)
    • Uruchamianie zadań okresowych (61)
    • Określenie indeksów w magazynie danych (61)
    • Blokowanie zakresów IP (62)
    • Konfiguracja poziomów logowania (63)
    • Konfiguracja kolejek zadań (63)
    • Zabezpieczanie URL (63)
  • Konfiguracja panelu administracyjnego (64)
    • Podstawy aplikacji (65)
    • Aktualna wersja (65)
    • Dodawanie użytkowników (66)
    • Naliczanie opłat (67)
  • Podsumowanie (67)

4. Modelowanie danych na potrzeby magazynu Google App Engine Datastore (69)

  • Odwrót od relacyjnych magazynów danych (69)
    • Denormalizacja danych (70)
    • Agregacja danych bez złączeń (70)
    • Projektowanie danych bezschematowych (71)
  • Modelowanie danych (71)
    • Projektowanie na poziomie mikro (71)
    • Wybór właściwości (73)
    • Rozdzielenie encji (73)
    • Tworzenie i utrzymywanie relacji pomiędzy encjami (74)
    • Relacje jeden do wielu i wiele do wielu (75)
  • Praca z danymi (76)
    • Transakcje (76)
    • Zapytania (77)
    • Tworzenie indeksów (78)
    • Aktualizacja wersji aplikacji korzystającej z Datastore (78)
  • Podsumowanie (79)

5. Projektowanie aplikacji (81)

  • Zbieranie wymagań (81)
  • Wybór zestawu narzędzi (82)
    • Wybór frameworku (82)
    • Wybór systemu szablonów (84)
    • Wybór bibliotek (85)
  • Decyzje projektowe (86)
    • Modelowanie danych (86)
    • Modelowanie adresów URL (88)
    • Przechodzenie pomiędzy stronami (89)
  • Podsumowanie (89)

III Podstawy projektowania interfejsu użytkownika (91)

6. Tworzenie interfejsu użytkownika w HTML5 (93)

  • Powitajmy HTML5 (93)
  • Stosowanie nowych znaczników HTML5 (94)
  • Rysowanie po płótnie (96)
  • Przeciąganie i upuszczanie na stronach (97)
  • Ciekawe elementy formularzy (99)
  • Wykrywanie lokalizacji użytkownika (100)
  • Przechowywanie danych po stronie klienta (101)
    • Przechowywanie danych pomiędzy sesjami (102)
    • Przechowywanie danych sesyjnych (103)
    • Odpytywanie ustrukturyzowanych danych z wykorzystaniem lokalnej bazy danych SQL (104)
  • Podsumowanie (106)

7. Modyfikacja układu strony za pomocą CSS (107)

  • Wskazywanie elementów za pomocą CSS3 (107)
    • Obliczanie szczegółowości (108)
    • Identyfikatory (108)
    • Wskazywanie klas (110)
    • Wskazywanie pseudoklas (110)
    • Wskazywanie atrybutów (111)
    • Wskazywanie elementów (112)
    • Wskazywanie pseudoelementów (112)
  • Nowe efekty graficzne CSS3 (113)
    • Zaokrąglone krawędzie (115)
    • Animacje 2D (116)
    • Animacje 3D (118)
  • Podsumowanie (119)

8. Statyczna interakcja z wykorzystaniem kodu JavaScript (121)

  • Uproszczony przykład (121)
  • Uporządkowanie kodu HTML dzięki zastosowaniu dyskretnego JavaScriptu (124)
  • Zmniejszenie zależności od JavaScriptu poprzez stopniowe rozszerzanie HTML-a (128)
  • Optymalizacja wydajności za pomocą delegacji zdarzeń (130)
  • Unikanie zmiennych globalnych (132)
  • Podsumowanie (134)

9. Dynamiczna interakcja z wykorzystaniem technologii AJAX (135)

  • AJAX na sposób klasyczny, bez frameworków (135)
    • Komunikacja z serwerem za pomocą XML-a (136)
    • Komunikacja z serwerem za pomocą formatu JSON (138)
    • Komunikacja z serwerem za pomocą HTML-a (140)
  • Google App Engine Channel API (141)
    • Otwarcie kanału przez serwer (142)
    • Obsługa komunikatów po stronie klienta (144)
  • Podsumowanie (146)

IV Korzystanie z popularnych API App Engine (147)

10. Składowanie danych w magazynach Datastore i Blobstore (149)

  • Synchroniczne przetwarzanie danych (149)
    • Synchroniczne składowanie danych (150)
    • Synchroniczne odpytywanie danych (153)
    • Synchroniczne pobieranie danych (154)
  • Asynchroniczne przetwarzanie danych (156)
    • Asynchroniczne składowanie danych (156)
    • Asynchroniczne odpytywanie danych (158)
    • Asynchroniczne pobieranie danych (159)
  • Ustanawianie transakcji (160)
    • Wieloorganizacyjność i przestrzenie nazw (162)
  • Składowanie i pobieranie dużych plików (164)
    • Składowanie dużych plików w Blobstore (164)
    • Odpytywanie Blobstore (166)
    • Pobieranie plików z Blobstore (168)
  • Wysyłanie dużej ilości danych za pomocą Remote API (169)
  • Podsumowanie (170)

11. Wysyłanie i odbieranie poczty elektronicznej (173)

  • Wysyłanie rozbudowanych wiadomości e-mail ze znacznikami HTML i załącznikami (173)
    • Parametryzacja ciała wiadomości (176)
    • Zabezpieczenie serwletu (176)
    • Logowanie wysłanych wiadomości na serwerze roboczym (177)
    • Alternatywa - JavaMail API (177)
    • Porównanie API niskopoziomowego z JavaMail (178)
  • Odbieranie poczty (179)
    • Konfiguracja serwletu odbierającego pocztę (179)
    • Zapisywanie odebranej poczty przez serwlet (180)
    • Odbieranie poczty elektronicznej bez JavaMail API (182)
    • Błędy (184)
  • Uwzględnienie wydajności oraz quoty (184)
    • Ile trwa wysłanie wiadomości e-mail? (184)
    • Jaki jest koszt zimnego uruchomienia? (185)
    • Czy odbieranie poczty jest wydajne? (186)
  • Podsumowanie (186)

12. Wykonywanie zadań w tle za pomocą Task Queue API oraz cron (187)

  • Kolejkowanie zadań (187)
    • Kolejkowanie wysyłania poczty (188)
    • Konfiguracja kolejek (189)
    • Kontrola limitów (190)
    • Dodatkowe opcje (191)
    • Jak najlepiej wykorzystać kolejki zadań? (194)
  • Planowanie zadań za pomocą cron (195)
    • Konfiguracja zadań za pomocą cron.xml (195)
    • Jak najlepiej wykorzystać zadania cron? (197)
  • Odczyt nagłówków HTTP (197)
  • Podsumowanie (199)

13. Przetwarzanie obrazów z wykorzystaniem usługi App Engine Image Service (201)

  • Oszczędne stosowanie Image API (201)
  • Odczyt i zapis obrazów (202)
    • Odczyt danych wprowadzonych przez użytkownika (202)
    • Zapis w magazynie danych (204)
    • Odczyt z magazynu danych (205)
    • Zwrócenie obrazu użytkownikowi (206)
    • Odczyt z pliku (207)
  • Proste przekształcenia (208)
    • Tworzenie miniatur (208)
    • Przycinanie obrazów (210)
    • Obracanie obrazów (211)
    • Przerzucanie obrazów (211)
  • Zaawansowane przekształcenia (211)
  • Podsumowanie (214)

14. Optymalizacja wydajności za pomocą pamięci podręcznej cache (215)

  • Podstawowe zastosowanie API memcache (215)
    • Na co uważać, stosując pamięć cache? (215)
    • Pamięć cache i wartości typu String (216)
  • Strategia obsługi cache (218)
    • Redukcja obciążenia App Engine przy użyciu nagłówków ETag (218)
  • Drobnoziarnista pamięć cache (220)
    • Implementacja interfejsu Serializable (221)
    • Umieszczanie w cache obiektów w postaci surowej (222)
  • Zarządzanie cache (222)
    • Unieważnianie elementów w pamięci cache (223)
    • Opróżnianie cache (224)
  • Inne metody przydatne podczas korzystania z cache (225)
    • Wkładanie i wyjmowanie wielu wartości (225)
    • Rejestracja metod obsługi błędów (225)
    • Inkrementacja wartości (225)
  • JSR 107 jako alternatywa dla Memcache Service (226)
  • Podsumowanie (226)

15. Pobieranie danych z zewnątrz za pomocą URL Fetch (227)

  • Pobieranie danych z URL za pomocą żądań GET (227)
    • Wykorzystanie standardowego URL Fetch API (228)
    • Wykorzystanie niskopoziomowego URL Fetch API (229)
  • Odczyt wyników (230)
    • Interpretacja wyników (230)
    • Zapis do memcache (230)
    • Zapis do magazynu danych (231)
  • Dodatkowe opcje URL Fetch (231)
    • Kontrola czasu wygaśnięcia (231)
    • Elegancka obsługa wyjątków (233)
  • Wysyłanie danych z formularza (234)
  • Asynchroniczne pobieranie danych (235)
  • Konsumpcja usług sieciowych (237)
    • Usługi REST (237)
    • Komunikacja z SOAP (238)
  • Bezpieczeństwo (238)
    • HTTPS (238)
    • Otwarte porty (238)
  • Podsumowanie (239)

16. Zabezpieczanie aplikacji internetowych za pomocą kont Google, OpenID i OAuth (241)

  • Uwierzytelnianie użytkowników w oparciu o konta Google (241)
  • Uwierzytelnianie użytkowników za pomocą OpenID (244)
  • Dostęp z zewnątrz za pomocą OAuth (246)
  • Zabezpieczanie adresów URL w web.xml (248)
    • Wymuszenie uwierzytelnienia (248)
    • Wymuszenie bezpiecznych protokołów (249)
  • Zagadnienia związane z bezpieczeństwem (249)
    • Walidacja danych wejściowych (250)
    • Konfiguracja wieloorganizacyjności (250)
    • Przechowywanie danych osobowych (250)
  • Podsumowanie (251)

17. Wysyłanie i odbieranie wiadomości za pomocą XMPP (253)

  • Wysyłanie komunikatów XMPP (253)
  • Odbieranie komunikatów XMPP (255)
  • Odbieranie powiadomień o subskrypcji (257)
  • Odbieranie powiadomień o obecności (260)
  • Podsumowanie (262)

V Wdrażanie aplikacji (263)

18. Usprawnienie procesu wytwarzania aplikacji (265)

  • Optymalizacja procesu wytwarzania aplikacji internetowych (265)
  • Wejście w skórę kierownika projektu (266)
  • Mniej prac pobocznych (266)
    • Wyznaczenie ostatecznego celu (266)
    • Rezygnacja ze zbędnych czynności (267)
  • Rozszerzanie funkcjonalności (269)
    • Określenie priorytetów (269)
    • Planowanie iteracji (269)
    • Programowanie sterowane eksperymentem (270)
    • Stopniowe wprowadzanie zmian (271)
  • Mierzenie jakości (271)
  • Optymalizacja produktywności programistów (271)
    • Rytuały (272)
    • Nowe języki programowania (272)
    • Zarządzanie czasem i otoczeniem (272)
  • Podsumowanie (273)

19. Zapewnienie jakości za pomocą narzędzi pomiarowych (275)

  • Testowanie w środowisku produkcyjnym (275)
    • Racjonalna ocena wartości dodanej testów (276)
    • Testowanie zdroworozsądkowe (276)
    • Minimalizacja kosztów awarii (276)
  • Inne podejście do użyteczności (277)
    • Funkcjonalność przed wyglądem (277)
    • Optymalizacja użyteczności w oparciu o wyniki profilowania i analizy statystyk (278)
  • Sprawdzanie dostępności za pomocą Capabilities API (278)
  • Logowanie nieoczekiwanych zachowań (280)
  • Ciągłe profilowanie w środowisku produkcyjnym (282)
  • Badanie reakcji użytkownika na Twój interfejs (285)
  • Podsumowanie (287)

20. Sprzedaż aplikacji (289)

  • Jak podejść do kwestii sprzedaży? (289)
  • Znajomość odbiorcy (290)
  • Dotarcie do odbiorcy (290)
    • Wiadomość w serwisie informacyjnym (290)
    • Pisanie artykułów (291)
    • Blogowanie (291)
    • Twitter (291)
    • Strony na Facebooku (293)
    • Aplikacje na Facebooku (294)
    • Reklamy w Google Apps Marketplace (295)
    • AdWords (296)
    • Optymalizacja aplikacji na potrzeby wyszukiwarek (297)
    • Zakładki społecznościowe (298)
    • Inne sklepy z aplikacjami mobilnymi (298)
  • Zamiana klientów potencjalnych w aktualnych (299)
  • Obsługa procesu płatności (299)
  • Podsumowanie (300)

Skorowidz (301)

  • Title: Google App Engine. Tworzenie wydajnych aplikacji w Javie
  • Author: Adriaan de Jonge
  • Original title: Essential App Engine: Building High-Performance Java Apps with Google App Engine
  • Translation: Justyna Walkowska
  • ISBN: 978-83-246-6459-7, 9788324664597
  • Date of issue: 2012-12-21
  • Format: Ebook
  • Item ID: gooaej
  • Publisher: Helion