Software stack - sprawdzone pakiety rozwiązań

Jakiś czas temu pisaliśmy o full-stack deweloperze. Po publikacji naszego artykułu pojawiały się pytania dot. stosów, a najczęściej poruszanym zagadnieniem był software stack. Dzisiaj postaramy się wyjaśnić czym jest stos oprogramowania (ang. Software Stack).

 

Taka iście encyklopedyczna definicja: software stack to zestaw programów, aplikacji oraz narzędzi, które razem tworzą spójny “pakiet”, działając w określonej i zdefiniowanej kolejności dążąc do określonego (wspólnego) celu. Definiując stos oprogramowania warto też pamiętać, że należą do niego również bazy danych oraz odpowiednie pliki do zainstalowania, definicje oprogramowania produktów oraz poprawki.

 

Przykładem solidnego, a jednocześnie bardzo szybkiego stosu oprogramowania jest aplikacja Facebooka. Na software stack tego giganta wśród portali społecznościowych składają się takie technologie jak: PHP, React, GraphQL, Cassandra, Hadoop, Swift i wiele innych frameworków.

Uogólniając, realizacja stosu oprogramowania polega na dobraniu zintegrowanych warstw, które tworząc spójną całość ułatwiają ich pobieranie i wdrażanie w tym samym czasie. Software stack ułatwia i niejako automatyzuje pracę nad projektem.

 

Podstawą takiego stosu na pewno jest środowisko, takie jak np. system operacyjny:
Mac OS X, Android, Windows, Linux- oraz bardziej szczegółowe rozwiązania
programistyczne, takie jak określona struktura Java, PHP.

 

Nie zawsze wybór najnowszego stosu jest najkorzystniejszy przy wdrażaniu projektu. Po pierwsze najlepiej kierować się wyborem stosu pod konkretne umiejętności zespołu (o ile taki istnieje). Po drugie dotychczasowa “historia” projektu lub jego charakterystyka będzie wymagałą odpowiednich rozwiązań (np. konieczność użycia systemu operacyjnego, który nie działa sprawnie z jakąś technologią).

1. Podział stosu oprogramowania

Stos oprogramowania najczęściej wykorzystywany jest w aplikacjach i składają się na niego cztery warstwy, z których aż 3 znajdują się po stronie serwera.

  • ●Warstwa klienta – to jedyny składnik w przeglądarce;
  • ●Warstwa internetowa – serwer WWW lub serwer HTTP;
  • ●Warstwa biznesowa – serwer aplikacji, w tym platforma programistyczna, struktury i języki programowania po stronie serwera;
  • ●Warstwa bazy danych – wybrany serwer bazy danych, który często uzależniony jest od warstwy biznesowej.

 

Warto nadmienić, że na każdą z warstw składają się takie składniki jak:

  • ●system operacyjny;
  • ●serwer;
  • ●baza danych;
  • ●język skryptowy po stronie serwera.

2. Tworzenie stosu oprogramowania: front-end, back-end i full-stack

Proces tworzenia aplikacji uogólniając można rozdzielić na dwa “obozy”: przedni (widoczny dla klienta front-end) i ‘od zaplecza” (back-end development). Oczywiście istnieją również programiści, którzy zajmują się pełnym stosem (full-stack developerzy) pracująć zarówno na front- i back-endzie.
Front-endem nazywamy zazwyczaj “widoczną” stronę aplikacji lub sotrny internetowej. Można więc uznać, że jest warstwa prezentacyjna / wizualna projektu. Zdarza się, że programiści pracujący na tym stosie oprogramowania nazywani są projektantami stron internetowych lub interfejsu/doświadczenia użytkownika (UI/UX).

 

Zadaniem deweloperów jest stworzenie atrakcyjnych wizualnie interfejsów, które będą przyjazne i intuicyjne dla użytkownika, jednocześnie dbając o poprawne połączenie z systemami zaplecza.

Typowymi technologiami dla front-endu jest JavaScript, CSS czy znaczniki HTML.

 

Z “drugiej”, wspomnianej wcześniej, warstwie stosu znajdują się back-end deweloperzy, którzy odpowiadają za pracę na serwerze aplikacji. Ich głównym celem jest funkcjonalność, prędkość i responsywność dla użytkowników. Odpowiadają za kod, który łączy ze sobą bazę danych zaplecza i warstwę “przednią” widoczną dla klienta, tj. stronę internetową lub aplikację.

Najczęściej deweloperzy zaplecza specjalizują się w takich językach jak: Java, PHP, Ruby on Rails i Python.

Z zasady jest tak, że różni programiści współpracujący przy tym samym projekcie, zajmują się różnymi częściami stosu oprogramowania.

3. Jak dobrać najkorzystniejszy software stack dla aplikacji lub strony internetowej?

Warto wiedzieć, że tak jak w każdej dziedzinie, standardy i trendy w tworzeniu oprogramowania ulegają bardzo dynamicznym zmianom. Istotnym jest więc “bycie na bieżąco” z najpopularniejszymi trendami technologicznymi, które aktualnie królują na rynku. Analizując mocne i słabe strony popularnych zestawów komponentów, można śmielej podchodzić do rozwoju produktu, ograniczając ryzyko związane z aktualnym oprogramowaniem. Nie oznacza to jednak, że zawsze należy korzystać z najnowszych rozwiązań. Proces takiego wyboru stosu oprogramowania zależy od wielu czynników. Należy zastanowić się “z wyprzedzeniem” nad kilkoma istotnymi aspektami. Jakimi?

 

Jeśli aplikacja lub strona internetowa już istnieje, to warto zastanowić się w jaki sposób działa i czy warto zmieniać dotychczasowe technologia. Czy można je “łączyć” z nowymi rozwiązaniami, czy nie ograniczają nas w planach na przyszłość danej aplikacji?

 

Pierwszymi najlepszym krokiem milowym dla nowej aplikacji jest minimalny opłacalny produkt (MVP – minimum viable product) oraz w którym kierunku zmierza jego wzrost?
Minimalny opłacalny produkt do wdrożenia aplikacji lub witryny internetowej – to w skrócie najwyższy zwrot z inwestycji w porównaniu z najniższym poniesionym ryzykiem. Abstrahując od parametrów projektu, MVP jest najlepszym krokiem milowym do rozpoczęcia wyboru software stack, który można dalej rozwijać rozpatrując pozostałe aspekty.

 

4. Skalowalność projektu

Zasadniczo każda witryna lub aplikacją mają na celu wzrost, więc warto zadbać o solidne fundamenty już na samym początku. Istnieją dwa rodzaje wzrostu:
Pionowy – polega na dokładaniu większej ilości programów oraz rozwoju procesów zawartych w aplikacji.
Poziomy – polegający na konieczności działania większej ilości maszyn.
Jeśli aplikacja nastawiona jest na rozwój (a jest tak prawdopodobnie w 99% przypadków) należy zadbać o to, aby stos był gotowy na wzrost przy jak najmniejszym ryzyku.

5. Jeśli posiadasz zespół programistów: rozwijaj ich dotychczasowe umiejętności.

Nie warto programisty PHP przekonywać do porzucenia specjalizacji, na rzecz “juniorskich” zaczątków z Ruby. Frameworki, które są częścią stosu tak samo, jak języki programowania, lubią nadawać im finalny “kształt”. Dla zespołu, który ma doświadczenie z PHP, najlepszym miejscem do rozpoczęcia implementacji stosu są rozwiązania oparte na tymże języku, jak np. software stack LAMP (Linux, Apache, MySQL i PHP) lub jeden z jego wariantów. To zdecydowanie zaoszczędzi czas podczas wdrażania zmian.

6. Czysta karta: to jaką platformę wybrać?

Nie da się jednoznacznie stwierdzić, że jedna platforma jest lepsza od drugiej. Można jednak metodą eliminacji dotrzeć do platfotmy, która będzie najlepsza dla Twojego projektu. Może to być zarówno .NET, Node.js czy też platforma Java. Przy tym wyborze warto odpowiedzieć sobie na kilka innych, równie ważnych pytań:

7. Czy szybkość platformy jest kluczowa?

Jednym z przykładów wyboru “szybszej” platformy jest LinkedIn, który przeniósł się z Ruby na Node.js. My ten wybór rozumiemy i uważamy, że to bardzo dobra decyzja – ze względu na szybkość i skalowalność nowej platformy, która napisana jest w JavaScript.

Z innej perspektywy do rozważenia jest czas dostępny programisty vs. czas
wykonywania. Prościej rzecz ujmując, panuje słuszne przekonanie, że szybkość, którą zyskujemy w programowaniu, zwykle sprawia, że wydłuża się czas wykonywania (można też odwrócić sytuację: większy nakład pracy programisty = skrócony czas wykonywania).

Przykład?
Środowiska .NET i Java zawierają kompilatory, czyli programy które konwertują kod języka na kod maszynowy, tak aby komputer mógł je przetworzyć. Chociaż skraca to zdecydowanie czas wykonywania, na początku projektu wymaga to napisanie dużo większej ilości kodu bazowego.

W odwrotnym przykładzie, Node.js, który zdecydowanie ułatwia tworzenie kodu, jednocześnie skracając nakład pracy przy złożonym projekcie. Brakuje jednak na tej platformie kompilatora, dzięki któremu doświadczony programista nie musiałby sprawdzać czystości kodu. Jeszcze raz (do znudzenia 😉 się powtórzymy: dobrze napisany, czysty kod owocuje w przyszłości prostszym dostosowaniem i sprzyja rozwojowi aplikacji. Nikt nie lubi poprawiać błędów po innych, a już tymbardziej wykonywać dwa razy tej samej pracy, poszukują własnych błędów.

 

8. Budżet

Jeśli masz już doświadczenie z projektowaniem aplikacji, to wiesz, że inwestycja w takie rozwiązania to cały czas otwarty aspekt. Nie straszymy, że to studnia bez dna, jednak trudno przewidzieć dodatkowe koszta, takie jak: licencje, koszt zatrudnienia programistów specjalizujących się w mniej znanych technologiach, godziny dodatkowe spędzone na programowaniu i poprawianio oraz stałe i “nagłe” koszty utrzymania.
Jeśli np. dysponujesz większym budżetem na start, a w przyszłości zamierzasz mniej inwestować, to napisanie kodu w środowisku .NET może zająć więcej czasu na początku, ale w przyszłości rokuje to niższymi kosztami utrzymania (łatwiej będzie go debugować, jeśli wystąpią nagłe problemy).

 

9. Wybór bazy danych

To od formatu bazy danych często zależą pozostałe komponenty stosu oprogramowania.

10. Trzymaj rękę na pulsie

Warto dbać o stałą konserwację i bezpieczeństwo aplikacji. Oczywiście zawsze można zaktualizować części stosu, przeprowadzić rekonfigurację, ale powtórzymy się po raz kolejny: najbardziej wydajna jest solidna podstawa. Tak jak przy budowie domu, można wykonywać remonty wewnątrz, zmieniać elewację – ale bez solidnych fundamentów z biegiem lat dalsze inwestycje nie mają sensu. Mimo iż przetwarzanie dłuższego kodu absorbuje dużo czasu, to pozornie krótszy (zwięzły) kod, może być trudniejszy do debugowania (i odczytania).

 

11. Zalety stosów oprogramowania

  • Korzystanie ze software stack’ów to jak działanie na podstawie precedensu: dostarczają one predefiniowanych (jednocześnie będąc najlepszą drogą) rozwiązań problemów;
  • Gwarantują minimalne oprogramowanie, które owocuje osiągnięciem zamierzonych celów;
  • Software stack można instalować w “paczkach” (szablonach) skracając w ten sposób czas instalacji (automatyzacja ułatwia pracę). Dzięki temu mamy gwarancję spójności przy konfiguracji systemów.
  • Przy większości stosów oprogramowania możemy liczyć na wsparcie forów społecznościowych, które również działają na predefiniowanym “pakiecie”. To znacznie usprawnia rozwiązywanie niektórych problemów.

 

12. Przykłady stosów oprogramowania

Poniżej przedstawiamy listę najpopularniejszych stosów oprogramowania. Mamy nadzieję, że ułatwi to decyzję przy projekcie, o którym będzie głośno jak o portalach typu Instagram czy Facebook. 😉

    1. 1. LAMP: Linux / Apache / MySQL / PHP
      1. a. MAMP (Mac OS X / Apache / MySQL / PHP)
      2. b. XAMPP (Linux, Mac OS X, Windows / Apache / MySQL / PHP, Perl)
      3. c. WAMP (Windows / Apache / MySQL / PHP)
      4. d. LAPP (Linux / Apache / PostgreSQL / PHP)
    2. 2. MEAN: MongoDB / Express.js / AngularJS / Node.js
      1. a. MEEN (MongoDB / Express.js / Ember.js / Node.js)
      2. b. MEVN (MongoDB / Express.js / Vue.js / Node.js)
      3. c. MERN (MongoDB / Express.js / React.js / Node.js)
    3. 3. Ruby Stack: Ruby / Ruby on Rails / RVM (Ruby Virtual Machine) / MySQL / Apache / PHP
      1. a. JRuby – ta wersja jest w całości napisana w języku Java, a Ruby działa na wirtualnej maszynie języka Java (JVM).
    4. 4. Stos Django: Python / Django / Apache / MySQL
    5. 5. Bitnami DevPack: PHP / Django / Ruby on Rails / Java / MySQL, PostgreSQL / Apache Tomcat
    6. 6. Apache CloudStack
    7. 7. BHCS / BCHS (OpenBSD, C, httpd, SQLite)
    8. 8. GLASS (GemStone, Linux, Apache, Smalltalk, Seaside)
    9. 9. WIMP (Windows / IIS / MySQL lub MS Access / PHP lub Perl lub Python)
    10. 10. NMP (Nginx / MySQL / PHP)
    11. 11. MAMP (macOS lub Windows / Apache / MySQL / PHP lub Perl lub Python).

 

W środowisku programistycznym cały czas pojawiają się kolejne kompilacje i mieszkanki komponentów. Jak wybrać najodpowiedniejszy do Twojego projektu? Kilka wskazówek celem podsumowania:

      • Po raz kolejny przypomnimy: najważniejsze są fundamenty i stosowanie spójnego i znormalizowanego stosu oprogramowania.
      • Jeśli masz możliwości finansowe i dobre zaplecze programistów, warto stworzyć solidny backend za pomocą zestawu narzędzi, który ułatwi i skróci czas dalszego programowania i kompilowania kodu.
      • W roku 2021 stosy są dosłownie “rozpieszczane” opcjami. Korzystaj z tego, nie warto decydować się na podejście uniwersalne przy wyborze stosu, jeśli możesz znaleźć software stack, który doprowadzi Twój projekt do wspaniałych rezultatów.

aplikacje

Full-stack developer

oprogramowanie

software stack

Czytaj również