Cyfroteka.pl

klikaj i czytaj online

Cyfro
Czytomierz
00070 007767 10468598 na godz. na dobę w sumie
Skalowalne witryny internetowe. Budowa, skalowanie i optymalizacja aplikacji internetowych nowej generacji - książka
Skalowalne witryny internetowe. Budowa, skalowanie i optymalizacja aplikacji internetowych nowej generacji - książka
Autor: Liczba stron: 400
Wydawca: Helion Język publikacji: polski
ISBN: 978-83-246-0723-5 Data wydania:
Lektor:
Kategoria: ebooki >> komputery i informatyka >> webmasterstwo >> funkcjonalność stron
Porównaj ceny (książka, ebook, audiobook).

Naucz się tworzyć aplikacje internetowe nowej generacji
i dołącz do nurtu Web 2.0

Oblicze internetu podlega nieustannym zmianom. Obecnie coraz częściej obok klasycznych witryn internetowych pojawiają się aplikacje internetowe, które charakteryzują się odseparowaniem warstwy danych od warstwy prezentacji. Zmiana modelu programowania wymaga przygotowania odpowiedniej platformy sprzętowej i programowej oraz zaprojektowania nowego systemu obsługi danych. Zastosowanie przy wykonywaniu tych zadań sprawdzonych strategii wykorzystywanych przez pionierów tworzących aplikacje internetowe nowej generacji pozwoli Ci zaoszczędzić czas i koszty.

Książka 'Skalowalne witryny internetowe...' to zaawansowany i wszechstronny przegląd zagadnień związanych z budowaniem takich właśnie aplikacji internetowych. Pomoże Ci ona w rozwiązaniu problemów i uniknięciu pułapek czyhających na programistów witryn internetowych nowej generacji. Poznasz sprawdzone strategie projektowania architektury oprogramowania, przygotowywania środowiska programistycznego, zapewniania niezawodności aplikacji czy wydajnego zarządzania informacjami. Dowiesz się także, jak tworzyć skalowalne i łatwe w konserwacji witryny, które będą zapewniać komfort pracy niezależnie od upływu czasu i wzrostu liczby użytkowników.

Znajdź podobne książki Ostatnio czytane w tej kategorii

Darmowy fragment publikacji:

Skalowalne witryny internetowe. Budowa, skalowanie i optymalizacja aplikacji internetowych nowej generacji Autor: Cal Henderson T‡umaczenie: Miko‡aj Szczepaniak ISBN: 978-83-246-0723-5 Tytu‡ orygina‡u: Building Scalable Web Sites: Building, scaling, and optimizing the next generation of web applications Format: B5, stron: 400 Naucz siŒ tworzy(cid:230) aplikacje internetowe nowej generacji i do‡„cz do nurtu Web 2.0 (cid:149) Chcesz tworzy(cid:230) bardziej wydajne aplikacje internetowe? (cid:149) Chcesz pozna(cid:230) zasady projektowania skalowalnych architektur? (cid:149) Chcesz efektywnie zarz„dza(cid:230) danymi w aplikacjach internetowych? Oblicze internetu podlega nieustannym zmianom. Obecnie coraz czŒ(cid:156)ciej obok klasycznych witryn internetowych pojawiaj„ siŒ aplikacje internetowe, kt(cid:243)re charakteryzuj„ siŒ odseparowaniem warstwy danych od warstwy prezentacji. Zmiana modelu programowania wymaga przygotowania odpowiedniej platformy sprzŒtowej i programowej oraz zaprojektowania nowego systemu obs‡ugi danych. Zastosowanie przy wykonywaniu tych zadaæ sprawdzonych strategii wykorzystywanych przez pionier(cid:243)w tworz„cych aplikacje internetowe nowej generacji pozwoli Ci zaoszczŒdzi(cid:230) czas i koszty. Ksi„¿ka (cid:132)Skalowalne witryny internetowe(cid:133)(cid:148) to zaawansowany i wszechstronny przegl„d zagadnieæ zwi„zanych z budowaniem takich w‡a(cid:156)nie aplikacji internetowych. Pomo¿e Ci ona w rozwi„zaniu problem(cid:243)w i unikniŒciu pu‡apek czyhaj„cych na programist(cid:243)w witryn internetowych nowej generacji. Poznasz sprawdzone strategie projektowania architektury oprogramowania, przygotowywania (cid:156)rodowiska programistycznego, zapewniania niezawodno(cid:156)ci aplikacji czy wydajnego zarz„dzania informacjami. Dowiesz siŒ tak¿e, jak tworzy(cid:230) skalowalne i ‡atwe w konserwacji witryny, kt(cid:243)re bŒd„ zapewnia(cid:230) komfort pracy niezale¿nie od up‡ywu czasu i wzrostu liczby u¿ytkownik(cid:243)w. (cid:149) Projektowanie architektury aplikacji internetowych (cid:149) Przygotowywanie (cid:156)rodowiska programistycznego (cid:149) Tworzenie aplikacji wielojŒzycznych (cid:149) Zarz„dzanie bazami danych (cid:149) Integrowanie poczty elektronicznej z witrynami (cid:149) Stosowanie us‡ug zdalnych (cid:149) Wykrywanie i rozwi„zywanie problem(cid:243)w z wydajno(cid:156)ci„ (cid:149) Skalowanie aplikacji internetowych (cid:149) Monitorowanie funkcjonowania aplikacji (cid:149) Korzystanie z interfejs(cid:243)w API Wydawnictwo Helion ul. Ko(cid:156)ciuszki 1c 44-100 Gliwice tel. 032 230 98 63 e-mail: helion@helion.pl Spis treści Przedmowa ......................................................................................................................7 1. Wprowadzenie .............................................................................................................. 15 15 16 17 18 Czym jest aplikacja internetowa? Jak budujemy aplikacje internetowe? Czym jest architektura? Od czego należy zacząć? 2. Architektura aplikacji internetowej ............................................................................. 21 21 24 27 29 31 31 36 39 40 43 Wielowarstwowa architektura oprogramowania Technologie wielowarstwowe Projektowanie interfejsów programowych Droga od punktu A do punktu B Podział na oprogramowanie i sprzęt Platformy sprzętowe Rozwój platformy sprzętowej Nadmiarowość sprzętu Sieć Języki, technologie i bazy danych 3. Środowiska wytwarzania oprogramowania...............................................................45 45 46 66 77 85 86 89 Trzy naczelne zasady Kontrola kodu źródłowego Kompilacja w jednym kroku Śledzenie błędów Skalowanie modelu wytwarzania aplikacji Standardy kodowania Testowanie 3 4. 5. i18n, L10n i Unicode........................................................................................................93 Umiędzynarodowienie i lokalizacja oprogramowania 94 98 Unicode w pigułce 104 Schemat kodowania UTF-8 Schemat kodowania UTF-8 w aplikacjach internetowych 105 107 Stosowanie schematu kodowania UTF-8 w języku PHP 108 Stosowanie schematu kodowania UTF-8 w pozostałych językach programowania 109 Stosowanie schematu kodowania UTF-8 w bazach danych MySQL Stosowanie schematu kodowania UTF-8 w wiadomościach poczty elektronicznej 111 113 Stosowanie schematu kodowania UTF-8 w skryptach języka JavaScript Stosowanie schematu kodowania UTF-8 w interfejsach API 115 Integralność danych i bezpieczeństwo .......................................................................117 117 Strategie zapewniania integralności danych 119 Dobre, prawidłowe i nieprawidłowe Filtrowanie sekwencji UTF-8 120 126 Filtrowanie znaków sterujących 127 Filtrowanie kodu HTML 131 Ataki XSS Wstrzykiwanie kodu języka SQL 140 6. Poczta elektroniczna ................................................................................................... 147 147 150 152 154 156 157 159 162 164 167 Otrzymywanie wiadomości poczty elektronicznej Ryzyko wstrzykiwania wiadomości poczty elektronicznej do naszej aplikacji Format MIME Analiza składniowa prostych wiadomości MIME Analiza składniowa załączników zakodowanych w trybie UU Załączniki w formacie TNEF Dlaczego technologie bezprzewodowe nie lubią programistów? Zbiory znaków i schematy kodowania Rozpoznawanie użytkowników Testy jednostkowe 7. Usługi zdalne................................................................................................................169 169 170 173 179 182 187 192 Klub usług zdalnych Gniazda Stosowanie protokołu HTTP Nadmiarowość usług zdalnych Systemy asynchroniczne Wymiana danych w formacie XML Lekkie protokoły 4 | Spis treści 8. Wąskie gardła .............................................................................................................. 197 197 212 225 Identyfikowanie wąskich gardeł Operacje wejścia-wyjścia Usługi zewnętrzne i czarne skrzynki 9. Skalowanie aplikacji internetowych ..........................................................................241 241 253 256 272 278 287 292 294 302 305 Mit skalowania Skalowanie sieci Równoważenie obciążeń Skalowanie bazy danych MySQL Replikacja baz danych MySQL Partycjonowanie bazy danych Skalowanie wielkich baz danych Skalowanie pamięci masowej Pamięć podręczna Skalowanie w pigułce 10. Statystyki, monitorowanie i wykrywanie usterek ....................................................307 307 318 336 Śledzenie statystyk aplikacji internetowej Monitorowanie aplikacji Alarmowanie 11. Interfejsy API................................................................................................................339 Kanały danych 339 352 Technologie mobilne 356 Usługi sieciowe 359 Warstwy transportowe interfejsów API Nadużywanie interfejsów API 367 371 Uwierzytelnianie Przyszłość 375 Skorowidz ....................................................................................................................377 Spis treści | 5 ROZDZIAŁ 1. Wprowadzenie Zanim przystąpimy do projektowania i kodowania naszych przykładów, musimy zrobić krok wstecz i zdefiniować najważniejsze terminy. Warto się zastanowić, jaki jest cel naszych rozważań i czym ten cel się różni od tego, co robiliśmy do tej pory. Czytelnicy, którzy budowali już jakieś aplikacje internetowe, mogą pominąć kolejny rozdział, ponieważ prezentowany tam materiał będzie obejmował wiedzę podstawową. Z drugiej strony, czytelnicy zainteresowani ogólnym kontekstem naszych rozważań koniecznie powinni się zapoznać także ze wspomnianym roz- działem 2. Czym jest aplikacja internetowa? Większość czytelników tej książki najprawdopodobniej doskonale zdaje sobie sprawę z tego, czym jest aplikacja internetowa, co wcale nie oznacza, że próba precyzyjnego zdefiniowania tego terminu jest bezcelowa, ponieważ etykieta aplikacji internetowej bardzo często jest przypi- sywana różnym rozwiązaniom w sposób błędy. Aplikacja internetowa nie jest ani witryną internetową, ani aplikacją w rozumieniu typowego użytkownika systemu operacyjnego. Aplikacja internetowa plasuje się gdzieś pomiędzy tymi dwoma rozwiązaniami i me pewne cechy zarówno witryny internetowej, jak i autonomicznej aplikacji. O ile witryna internetowa zawiera strony z danymi, o tyle aplikacja internetowa składa się zarówno z danych, jak i odrębnego mechanizmu ich dostarczania do przeglądarki. Podobnie jak entuzjaści dużej dostępności witryn internetowych zachwycają się możliwością oddzielania znaczników od stylów za pomocą plików CSS, również projektanci aplikacji internetowych szczycą się możliwością faktycznego oddzielania danych od warstwy prezentacji — dane aplikacji internetowej nie mają nic wspólnego ze znacznikami (choć same mogą tego rodzaju elementy zawierać). Komunikaty składające się na komponent aplikacji internetowej są odseparowane od znaczników. Oznacza to, że w razie konieczności wyświetlenia tych danych użytkownikowi należy wyodrębnić odpowiednie komunikaty z miejsca ich składowania (najczęściej z bazy danych), po czym dostarczyć użytkownikowi w określonym formacie i za pośrednictwem jakie- goś medium (najczęściej w formacie HTML i za pośrednictwem protokołu HTTP). Najciekawsze jest jednak to, że nie musimy dostarczać danych w formacie HTML — równie dobrze mogli- byśmy je wysyłać w pliku PDF za pośrednictwem np. poczty elektronicznej. Aplikacje internetowe nie zawierają stron w rozumieniu znanym z witryn internetowych, które z natury rzeczy składają się ze stron internetowych. O ile aplikacja internetowa może prezentować swoje dane np. za pośrednictwem dziesięciu stron internetowych, dodawanie kolejnych danych 15 może zwiększyć tę liczbę bez konieczności tworzenia nowych szablonów języka HTML ani dopisywania kodu źródłowego samej aplikacji. Ponieważ aplikacja internetowa może oferować takie funkcje jak przeszukiwanie (na podstawie słów wpisywanych przez użytkowników), liczba generowanych „stron internetowych” w praktyce może być nieograniczona, co oczywiście nie oznacza, że musimy w nieskończoność dopisywać niezbędny kod HTML-a. Stosunkowo niewielki zbiór szablonów i logika generowania dynamicznej zawartości pozwala nam na tworzenie niezbędnych stron na bieżąco, w odpowiedzi na takie parametry wejściowe jak adresy URL czy dane przekazywane w trybie POST. Z perspektywy przeciętnego użytkownika aplikacja internetowa może się niczym nie różnić od witryny internetowej. Nawet analizując kod wyświetlanych stron internetowych trudno stwierdzić, czy były one generowane w sposób dynamiczny na podstawie danych składowanych np. w bazie danych, czy miały postać statycznych dokumentów HTML-a. Pewną wskazówką może być rozszerzenie pliku, co wcale nie oznacza, że nie można tego rozszerzenia sfałszować (w jedną lub drugą stronę). Aplikacja internetowa ujawnia swój prawdziwy charakter tylko tym użytkownikom, którzy modyfikują jej dane. Z reguły (choć nie zawsze) do takiej edycji wykorzystuje się interfejs HTML, ale równie dobrze można sobie wyobrazić autonomiczną aplikację zaprojektowaną z myślą o bezpośredniej lub zdalnej edycji tych danych. Wraz z wprowadzeniem technologii AJAX (od ang. Asynchronous JavaScript and XML), znanej wcześniej jako zdalne wykonywanie skryptów (ang. remote scripting), znacznie rozbudowano model interakcji z aplikacjami internetowymi. W przeszłości interakcja użytkowników z aplika- cjami internetowymi odbywała się wyłącznie za pośrednictwem stron internetowych. Użyt- kownik żąda od serwera zwrócenia strony internetowej, wprowadza i wysyła zmiany za pośred- nictwem żądania POST protokołu HTTP i otrzymuje w odpowiedzi nową stronę potwierdzającą dokonanie zmian lub prezentującą zmodyfikowane dane. Model AJAX umożliwia nam wysyłanie modyfikacji danych w tle (bez konieczności ponownego wyświetlania strony w przeglądarce użytkownika), co zbliża aplikacje internetowe do modelu interakcji znanego z aplikacji auto- nomicznych. Charakter aplikacji internetowych zmienia się dość powoli. Nie można oczywiście ignorować daleko idących różnic, które dzielą współczesne aplikacje internetowe od aplikacji implemento- wanych jeszcze kilka lat temu, jednak rozwoju tego rodzaju aplikacji w żadnym razie nie sposób uznać za zakończony. Projekty Gmail firmy Google i Office Live firmy Microsoft pokazują, że rynek aplikacji internetowych ewoluuje w kierunku produktów dostarczanych za pośrednictwem internetu, które łączą w sobie najlepsze cechy rozwiązań autonomicznych i internetowych. O ile tradycyjne aplikacje biurowe oferują bogate możliwości w zakresie interakcji i dużą efektywność (w szczególności krótkie czasy odpowiedzi), o tyle aplikacje internetowe mogą zapewniać swoim użytkownikom bezproblemowe i niezauważalne aktualizacje, naprawdę przenośne dane i mniejsze wymagania sprzętowe po stronie klienta. Niezależnie od stosowanego modelu interakcji z użytkownikiem, jeden aspekt pozostaje niezmienny — aplikacje internetowe są systemami, których dostęp do podstawowych danych uzyskujemy za pośrednictwem stron internetowych (z reguły strony internetowe umożliwiają także modyfikowanie tych danych), a pozostałe interfejsy mają raczej charakter uzupełniający. Jak budujemy aplikacje internetowe? Budowa aplikacji internetowej wymaga przygotowania co najmniej dwóch głównych kompo- nentów: platformy sprzętowej i platformy programowej. W przypadku małych, prostych aplikacji platforma sprzętowa może się składać z pojedynczego serwera, na którym działa 16 | Rozdział 1. Wprowadzenie serwer WWW i system zarządzania bazą danych. W tak małej skali platformy sprzętowej nie należy traktować jak istotnego komponentu naszej aplikacji, jednak wraz z rozbudową oprogramowania rola tego elementu w całym projekcie zyskuje coraz większe znaczenie. W tej książce po- święcimy wiele miejsca obu aspektom projektowania i implementowania aplikacji internetowych, wpływowi działań podejmowanych w jednym aspekcie na drugi aspekt oraz technikom wiązania obu rozwiązań (sprzętowych i programowych) celem tworzenia możliwie efektywnych architektur. Programiści, którzy do tej pory mieli do czynienia wyłącznie z aplikacjami internetowymi małej skali, mogą się zastanawiać, po co w ogóle zawracać sobie głowę projektem platformy, skoro można z powodzeniem stosować gotowe rozwiązania. W przypadku niewielkich aplikacji takie podejście rzeczywiście zdaje egzamin. Oszczędzamy czas i pieniądze, by ostatecznie otrzymać działającą aplikację, które całkowicie spełnia nasze oczekiwania. Problem pojawia się dopiero w aplikacjach większej skali — gotowe rozwiązania umożliwiające budowę takich aplikacji jak Amazon.com czy Friendster.com po prostu nie istnieją. Chociaż implementacja zbliżonej funkcjonalności wcale nie musi być trudna, zagwarantowanie właściwego funkcjono- wania tego rodzaju oprogramowania w środowisku obejmującym miliony produktów i miliony użytkowników bez zapewnienia odpowiedniej platformy sprzętowej wymagałoby daleko idącego dostosowania i optymalizacji naszych rozwiązań do konkretnych potrzeb. Okazuje się, że wszystkie największe aplikacje funkcjonujące obecnie w internecie są „szyte na miarę” z jednego istotnego powodu — żadne inne podejście nie gwarantowałoby odpowiedniej skalo- walności w warunkach ograniczonych możliwości budżetowych. Wspominaliśmy już, że rdzeniem każdej aplikacji internetowej jest jakiś zbiór danych, które są udostępniane użytkownikowi i które z reguły mogą być przez tego użytkownika modyfikowane. Projektując część oprogramowania naszej aplikacji musimy zdecydować o sposobie składowania tych danych (o schemacie ich reprezentacji np. w bazie danych), o sposobie uzyskiwania dostępu i modyfikowania danych (implementowanym przez logikę biznesową) oraz o sposobie ich prezentowania użytkownikom (implementowanym przez logikę interakcji). Wszystkie te komponenty omówimy w rozdziale 2., gdzie przeanalizujemy występujące pomiędzy nimi zależności oraz dalsze elementy, które składają się na każdy z tych trzech komponentów. Dobry projekt aplikacji zawsze schodzi w dół od najwyższego, najbardziej ogólnego poziomu do konkretnych definicji architektury oprogramowania i sprzętu, komponentów składających się na naszą platformę oraz funkcjonalności implementowanej w poszczególnych warstwach. Niniejsza książka w założeniu ma być praktycznym przewodnikiem po projektowaniu i konstru- owaniu aplikacji wielkiej skali. Po lekturze tej publikacji Czytelnik powinien wiedzieć, jak należy projektować aplikację i jej architekturę, jak należy skalować gotowe systemy i jak powinny przebiegać procesy implementowania i wdrażania w życie tych projektów. Czym jest architektura? Temat architektur aplikacji jest bardzo modny, co nie znaczy, że wszyscy, którzy posługują się tym terminem, wiedzą, co on oznacza. Kiedy architekt projektuje dom, jego zadanie jest dość precyzyjnie określone: musi zebrać wymagania, przeanalizować różne opcje i sporządzić stosowny szkic. Kiedy ekipa budowlana zapozna się z planami architekta, będzie oczekiwała kilku prostych rzeczy: dom musi przetrwać wichury, zapewniać ochronę przed deszczem i zimnem oraz oferować swoim mieszkańcom właściwe oświetlenie. Na tym powinniśmy zakończyć nasze rozważania poświęcone budowie domów, ponieważ podobieństwa pomiędzy tymi architektu- rami są tylko iluzoryczne. Czym jest architektura? | 17 Po pierwsze, gdyby budynek był jak oprogramowanie, architekt musiałby się angażować w cały proces jego budowy, od wylania fundamentów po założenie instalacji elektrycznych i sanitarnych. Kiedy projektowanie i budowa domu dobiegnie końca, architekt musiałby przystąpić do wykańczania i urządzania kilku pomieszczeń w oczekiwaniu na przybycie części przyszłych mieszkańców, którzy zamieszkaliby w nowym domu przed jego ostatecznym wykończeniem. Bezpośrednio przed zakończeniem budowy do budynku wprowadziłoby się mnóstwo innych osób, które na własnej skórze sprawdzałyby, jak zastosowane rozwiązania sprawdzają się w praktyce. Nowi mieszkańcy stawialiby jednak dodatkowe wymagania — chcieliby mieć do dyspozycji większą liczbę sypialni, basen, piwnicę itd. Architekt musiałby niezwłocznie przystąpić do projektowania nowych pomieszczeń i atrakcji, modyfikując swój oryginalny projekt. W czasie realizacji nowych inwestycji wszyscy dotychczasowi mieszkańcy pozostawaliby jednak w prze- budowywanym domu. Ciągle korzystaliby z istniejących udogodnień, narzekając na hałas i pył powodowane przez prace ekip budowlanych. Co więcej, wbrew wszelkiej logice do wciąż rozbudowywanego budynku wprowadzaliby się kolejni mieszkańcy. Po zakończeniu wprowa- dzania modyfikacji nowo przybyli mieszkańcy natychmiast zaczęliby zgłaszać następne wnioski o rozbudowę domu o kolejne pomieszczenia i dodawanie dalszych atrakcji. Kluczową cechą dobrego architekta aplikacji jest zdolność przewidywania tego rodzaju proble- mów od samego początku. Gdyby architekt naszego hipotetycznego domu rozpoczął od budowy wielkiego gmachu z bardzo skomplikowanymi instalacjami, w żaden sposób nie mógłby sprostać dalszym żądaniom. W chwilę po zakończeniu budowy mieszkańcy wyprowadziliby się w inne miejsce, gdzie mogliby uczestniczyć w przebudowie zamieszkiwanego domu zgodnie ze swoimi potrzebami. Z utratą mieszkańców musielibyśmy się liczyć także wtedy, gdyby rozbudowa naszego domu zajmowała zbyt wiele czasu. Musimy wiedzieć, jak rozpocząć prace we właściwej skali, by w przyszłości można było w miarę bezproblemowo ten dom rozbu- dowywać. Z powyższych rozważań w żadnym razie nie wynika, że architekt musi od samego początku nie popełniać żadnych błędów w przyjmowanych założeniach. Skalowanie typowej aplikacji polega między innymi na analizie i dostosowywaniu wszelkich aspektów pod kątem ich ewentualnego dopasowania do nowych wymagań. Nie ma w tym nic złego — zadaniem archi- tekta aplikacji jest tylko minimalizowanie czasu potrzebnego do modyfikowania poszczególnych komponentów oraz możliwie precyzyjne przygotowywanie projektu początkowego i projektów niezbędnych zmian. Od czego należy zacząć? Aby przystąpić do projektowania i budowy pierwszej aplikacji internetowej wielkiej skali, musimy dysponować czterema niezbędnymi elementami. Po pierwsze, będziemy potrzebowali koncepcji. Z reguły jest to element najtrudniejszy, ponieważ nie ma wiele wspólnego z trady- cyjnymi działaniami, do których przywykła większość inżynierów. Techniki i technologie prezentowane w tej książce można co prawda stosować podczas realizacji małych projektów, jednakże w przypadku większych projektów wymagających zaangażowania wielu programistów ich wykorzystywanie ma charakter opcjonalny. Jeśli dysponujemy aplikacją, która nie została jeszcze wdrożona w docelowym środowisku lub jest stosunkowo mała i wymaga skalowania, możemy przyjąć, że najtrudniejsze za nami — wówczas możemy od razu przystąpić do projek- towania rozwiązań w większej skali. Jeśli dysponujemy aplikacją wielkiej skali, warto przestu- diować tę książkę, by przekonać się, czy do tej pory postępowaliśmy właściwie, i przygotować się do dalszego rozwoju naszego produktu. 18 | Rozdział 1. Wprowadzenie Kiedy już będziemy mieli koncepcję tego, co chcemy zbudować, będziemy musieli znaleźć ludzi, którzy tę koncepcję zrealizują. O ile małe i średnie aplikacje mogą być budowane przez poje- dynczych inżynierów, o tyle konstruowanie wielkich aplikacji zawsze wymaga zaangażowania większych zespołów. W grudniu 2005 roku oprogramowanie Flickr.com obejmowało ponad 100 tys. linii kodu, 50 tys. linii kodu szablonów oraz 10 tys. linii kodu języka JavaScript. Utrzymywanie i właściwa konserwacja tak dużej ilości kodu przekracza możliwości pojedyncze- go inżyniera, zatem odpowiedzialność za poszczególne obszary aplikacji należy rozłożyć pomiędzy różne osoby lub zespoły. Techniki zarządzania procesami wytwarzania i rozwoju oprogramowania, które wymagają zaangażowania wielu programistów, omówimy w rozdziale 3. Budowa aplikacji w zespole dowolnej wielkości jest możliwe tylko w odpowiednim środowisku wytwarzania, które zapewnia mechanizmy oceny postępu prac — dysponowanie tym środowi- skiem jest warunkiem koniecznym do osiągnięcia oczekiwanych rezultatów. Środowiskami wytwarzania oprogramowania i środowiskami zarządzającymi kolejnymi etapami prac, a także odpowiednimi narzędziami programowania zajmiemy się w rozdziale 3. tej książki. Na razie możemy przyjąć, że nasze potrzeby ograniczają się do komputera z działającym serwerem WWW i systemem zarządzania bazą danych. Najważniejszym elementem, którego będziemy potrzebowali, jest właściwa metoda omawiania i rejestrowania procesu wytwarzania oprogramowania. Szczegółowa specyfikacja może być śmiertelnie nudna, ale brak jakiejkolwiek dokumentacji może doprowadzić do prawdziwej katastrofy. W przypadku bardzo niewielkich zespołów wystarczy dosłownie jeden zeszyt lub tablica (warto ją fotografować, aby w przyszłości dysponować trwałą kopią nanoszonych zapisów). Programiści, którzy nie mogą się rozstać z komputerem na tyle długo, by wziąć do ręki długopis lub flamaster, mogą z powodzeniem korzystać z takich narzędzi jak Wiki. W pracach większych zespołów Wiki doskonale sprawdza się w roli narzędzia do zarządzania specyfikacjami wytwarzanego oprogramowania i sporządzanymi notatkami — w ten sposób można umożliwić wszystkim zaangażowanym programistom dodawanie i edycję notatek o realizowanych zadaniach. O ile metodyka kaskadowego wytwarzania oprogramowania może się okazać skuteczna w przy- padku wielkich, ale jednolitych, monolitycznych aplikacji internetowych, wielu programistów tego rodzaju aplikacji preferuje szybkie i bardziej elastyczne podejście iteracyjne. Kiedy opra- cowujemy i rozwijamy projekt aplikacji internetowej, z natury rzeczy nie chcemy podejmować kroków, które w przyszłości ustawią nas w narożniku. Powinniśmy dbać o to, by każdą podejmowaną decyzję można było stosunkowo szybko zmienić, jeśli okaże się, że nie zbliża nas do założonego celu — nowe elementy funkcjonalności można projektować na poziomie bardzo ogólnych rozwiązań, implementować i iteracyjnie udoskonalać jeszcze przed ostatecznym wdrożeniem w ramach większej aplikacji (choć takie doskonalenie wcale nie musi się kończyć wraz z wdrożeniem). Stosowanie takich lekkich narzędzi jak Wiki do zarządzania bieżącą dokumentacją gwarantuje nam niezbędną elastyczność — nie musimy poświęcać sześciu miesięcy na sporządzanie specyfikacji i kolejnego roku na implementowanie przyjętych założeń. Możemy opracować specyfikację w ciągu jednego dnia, po czym zaimplementować odpowiednie rozwiązania w kilka dni. W takim przypadku zyskamy całe miesiące, w ciągu których będziemy mieli mnóstwo czasu na iteracyjne usprawnianie tej wstępnej wersji. Im wcześniej będziemy dysponowali działającym kodem (choćby wstępną, ograniczoną wersją), tym szybciej będziemy mogli przystąpić do odkrywania i rozwiązywania ewentualnych problemów w naszym projekcie i tym mniej czasu stracimy, jeśli zrezygnujemy z dotychczasowej strategii na rzecz zupełnie innego podejścia. Ostatni czynnik jest szczególnie ważny — im mniej czasu poświęcimy na Od czego należy zacząć? | 19 implementację i rozwój pojedynczej jednostki funkcjonalności (które powinny być możliwie niewielkie i proste), tym mniejsze inwestycje taka jednostka pochłonie i tym łatwiej będzie ją odrzucić w razie przyjęcia innej koncepcji. Znacznie więcej informacji na temat metodyk i technik wytwarzania oprogramowania można znaleźć w książce Steve’a McConnella pt. Rapid Development (Microsoft Press). Z długopisem w dłoni i narzędziem Wiki na ekranie komputera możemy przystąpić do projekto- wania architektury naszej aplikacji i rozpocząć implementowanie rozwiązań, które podbiją świat. 20 | Rozdział 1. Wprowadzenie
Pobierz darmowy fragment (pdf)

Gdzie kupić całą publikację:

Skalowalne witryny internetowe. Budowa, skalowanie i optymalizacja aplikacji internetowych nowej generacji
Autor:

Opinie na temat publikacji:


Inne popularne pozycje z tej kategorii:


Czytaj również:


Prowadzisz stronę lub blog? Wstaw link do fragmentu tej książki i współpracuj z Cyfroteką: