2.1 Nowoczesne produkty
Dziś nikt już nie nazywa nowoczesnych produktów programami. Nowoczesny produkt może zawierać dziesiątki programów, setki usług internetowych i wiele API zapewnianych przez chmurowe centrum danych, w którym jest wdrożony.
Wiele nowoczesnych produktów (jeśli nie wszystkie) działa wg paradygmy Klient-Serwer. To wtedy na Twoim urządzeniu (telefon, laptop, komputer) znajduje się program, który odpowiada za komunikację z użytkownikiem (czyli z Tobą), a kluczowe funkcjonalności znajdują się na zdalnym serwerze, gdzie dzieje się wszystko, co ważne.
Czasami Twój klient może komunikować się z kilkoma niezależnymi serwerami, lub serwer jednego produktu może komunikować się z serwerem innego produktu. Powstaje taka globalna sieć klientów i serwerów, które wszystkie współdziałają.
Dlatego być może lepiej będzie opisać nowoczesny model aplikacji jako paradygma Klient-Internet-Serwer. Komunikacji stało się tam zbyt wiele. Pojawiły się nawet tzw. „inteligentne kanały komunikacji”, które same decydują, komu i kiedy wysłać Twoje zapytanie.
2.2 Klienci
Programy-klienci można warunkowo podzielić na 4 kategorie:
- Desktop-klient — program działający na komputerze.
- Mobile-klient — aplikacja na iOS lub Androida.
- Web-klient — strona/aplikacja webowa działająca w przeglądarce.
- Server-klient — aplikacja uruchomiona na innym serwerze.
Każdą z nich można z kolei podzielić na części. Na przykład, web-klient — to strona lub aplikacja webowa, czyli składa się z Przeglądarki i Strony, która jest w niej ładowana. Przeglądarki również nie są takie same i mogą działać różnie.
Ale nawet jeśli weźmiemy najpopularniejszą przeglądarkę, pozostaje jeszcze strona, która jest w niej ładowana. Strona zazwyczaj składa się z trzech rzeczy:
- HTML
- CSS
- JavaScript
"Nic prostszego," powiesz. Jednak dziś nikt już nie pisze stron tylko w HTML i JavaScript. Do tworzenia stron używa się teraz nie tylko bibliotek, ale pełnych frameworków, takich jak React, Angular czy Vue. I nie są to już tylko strony, lecz pełnoprawne aplikacje webowe z własnymi kompilacjami, testami i paradygmatami.
Czystego CSS-a również nikt już nie używa. Istnieją CSS-preprocesory, które pomagają go generować i całe CSS-frameworki. Co więcej, nawet dla emaili są specjalne CSS-frameworki, aby Twoje maile wyglądały dobrze zarówno w przeglądarce, jak i w większości klientów pocztowych.
Czystego JavaScriptu również już się prawie nie używa — wszystkie duże aplikacje webowe są tworzone w TypeScript, który następnie jest kompilowany do JavaScript. No, zrozumiałeś...
2.3 Internet i infrastruktura
Komunikacja klienta i serwera — co może być prostsze? Ale nawet w ich relacjach wszystko już się zmieniło.
Twój produkt najprawdopodobniej będzie umieszczony w jednym z nowoczesnych centrów danych. Wiele firm na całym świecie oferuje różnorodne usługi hostingowe dla Twoich produktów, niezależnie od tego, czy na ich serwerach, czy na Twoich własnych fizycznych serwerach. Każda zachcianka za Twoje pieniądze.

Fizyczny serwer już nie jest fizyczny. Wszystkie nowoczesne centra danych oferują wynajem serwerów wirtualnych. Wirtualny serwer to taki wirtualny komputer, i na jednym fizycznym serwerze może ich być dziesiątki. To jest wygodne pod względem aktualizacji serwera. Jeśli potrzebujesz więcej pamięci, możesz ją dodać do swojego wirtualnego serwera w kilka minut.
Ale i to podejście już się starzeje, teraz modne jest przejście do chmury — to wtedy Twój produkt nie tylko jest uruchomiony na wirtualnym serwerze w centrum danych, ale aktywnie korzysta z dużego zestawu infrastruktury i usług tych centrów danych.
Potrzebujesz serwer do przechowywania kopii zapasowych — jest na to gotowa infrastruktura w chmurze. Potrzebujesz bazy danych z niezawodnością 99.9999999%? Taką też mają. Kafka, RabbitMQ, NoSQL? Wszystko już jest i łatwo się konfiguruje. Tylko płacić.
I te centra danych i chmury zaczynają stawać się częścią Twojego produktu. Na przykład Amazon ma mnóstwo centrów danych na całym świecie, dlatego oferują usługę CDN: Twoja publiczna zawartość będzie buforowana we wszystkich centrach danych Amazon, a Twoi użytkownicy na całym świecie będą ją otrzymywać szybciej.
Albo dostęp do API Twojej aplikacji można przepuścić przez usługę Amazon Gateway API, która pozwala bardzo elastycznie ustawić pracę z Twoimi usługami. Możesz rozdzielać obciążenie na różne usługi, odpierać ataki DDoS, zautomatyzować ładowanie plików, skonfigurować inteligentne buforowanie, i wiele więcej.
W ten sposób pomiędzy aplikacją-klientem a Twoimi usługami powstaje wiele „inteligentnych komunikacji”, które można i trzeba konfigurować. Nawet jeśli nigdy nie będziesz tego robić osobiście, powinieneś wiedzieć, że one istnieją i mogą znacznie wpłynąć na działanie Twojego programu.
A to jeszcze nie dotknęliśmy takich tematów jak routery, wieże 5G, satelity i kable internetowe na dnie oceanu. Wysyłasz strumień wideo z Twojego serwera do klienta, a on się zacina, bo klient ma słabe połączenie i połączenie stale się przerywa. Zgadnij, kto będzie musiał rozwiązać ten problem?
2.4 Serwer
Pod pojęciem "serwer" mogą kryć się zupełnie różne znaczenia. Warto wiedzieć o najczęściej spotykanych z nich.
Serwer fizycznySerwer fizyczny to sprzęt, który jest oddzielnym komputerem z zasobami (procesor, pamięć, przechowywanie), wykorzystywanym do przetwarzania danych i zapewniania działania różnych aplikacji software'owych. Te serwery są instalowane w centrach danych, gdzie zapewniają moc do hostowania stron internetowych, aplikacji, baz danych i innych usług.
Serwer wirtualnySerwer wirtualny to programowo emulowany serwer, działający w środowisku serwera fizycznego. Dzięki technologiom wirtualizacji jeden serwer fizyczny może być podzielony na kilka izolowanych serwerów wirtualnych, z których każdy ma własny system operacyjny i może być niezależnie restartowany i konfigurowany.
Program-serwer (na przykład, Nginx)Program-serwer, taki jak Nginx, to oprogramowanie serwerowe używane do obsługi zapytań do zasobów webowych. Nginx jest powszechnie znany jako serwer webowy, który może również pełnić funkcje serwera proxy pocztowego i serwera proxy wstecznego w architekturach z mikrousługami, a także jako load balancer.
Serwer bazy danychSerwer bazy danych to wyspecjalizowany serwer, używany do zarządzania bazami danych i obsługi zapytań do nich. Zapewnia scentralizowane przechowywanie danych i ich przetwarzanie, udostępniając dostęp do danych przez sieć. Serwery baz danych wspierają obsługę transakcji, wyszukiwanie i modyfikację danych, zapewniając przy tym niezawodność i bezpieczeństwo przechowywanej informacji. Przykłady serwerów baz danych to MySQL, PostgreSQL, Oracle Database i Microsoft SQL Server.
I gdzieś w centrum danych na jednym z serwerów wirtualnych będzie działał Twój projekt na Pythonie i Django. Będzie współpracował z bazą danych, otrzymywał zapytania od Nginx, i wysyłał logi swoich działań do Splanka.
Ale to dzięki Twojemu kodowi miliony użytkowników Twojego produktu będą szczęśliwe. Będą korzystać z produktu, płacić za niego, a w takim przypadku także właściciel produktu będzie szczęśliwy. Akcje firmy będą rosły, Ty będziesz otrzymywać bonusy akcjami i też będziesz szczęśliwy. Prosto koło szczęścia w przyrodzie :)
GO TO FULL VERSION